code improvements
diff --git a/erpnext/stock/doctype/stock_entry/stock_entry.py b/erpnext/stock/doctype/stock_entry/stock_entry.py
index 15d9c05..dc66821 100644
--- a/erpnext/stock/doctype/stock_entry/stock_entry.py
+++ b/erpnext/stock/doctype/stock_entry/stock_entry.py
@@ -560,10 +560,18 @@
frappe.throw(_("Manufacturing Quantity is mandatory"))
item_dict = self.get_bom_raw_materials(self.fg_completed_qty)
+ #Get PO Supplied Items Details
+ if self.purchase_order and self.purpose == "Subcontract":
+ #Get PO Supplied Items Details
+ item_wh = frappe._dict(frappe.db.sql("""select rm_item_code, reserve_warehouse
+ from `tabPurchase Order` po, `tabPurchase Order Item Supplied` poitemsup
+ where po.name = poitemsup.parent
+ and po.name = %s""",self.purchase_order))
for item in item_dict.values():
if self.pro_doc and not self.pro_doc.skip_transfer:
item["from_warehouse"] = self.pro_doc.wip_warehouse
-
+ #Get Reserve Warehouse from PO
+ item["from_warehouse"] = item_wh.get(item.item_code)
item["to_warehouse"] = self.to_warehouse if self.purpose=="Subcontract" else ""
self.add_to_stock_entry_detail(item_dict)
@@ -810,17 +818,18 @@
def update_purchase_order_supplied_items(self):
#Get PO Supplied Items Details
- po_doc = frappe.get_doc("Purchase Order",self.purchase_order)
- po_supplied_items = po_doc.get("supplied_items")
+ item_wh = frappe._dict(frappe.db.sql("""select rm_item_code, reserve_warehouse
+ from `tabPurchase Order` po, `tabPurchase Order Item Supplied` poitemsup
+ where po.name = poitemsup.parent
+ and po.name = %s""",self.purchase_order))
#Validate source warehouse is same as reserved warehouse
for item in self.get("items"):
- if item.s_warehouse:
- for d in po_supplied_items:
- if item.item_code == d.rm_item_code and item.s_warehouse != d.reserve_warehouse:
- frappe.throw(_("In case of Sub Contract Stock Entry, Source Warehouse: {0} should match with Reserved Warehouse: {1} on PO").format(item.s_warehouse,d.reserve_warehouse))
+ reserve_warehouse = item_wh.get(item.item_code)
+ if item.s_warehouse != reserve_warehouse:
+ frappe.throw(_("In case of Sub Contract Stock Entry, Source Warehouse: {0} should match with Reserved Warehouse: {1} entered on Purchase Order {2}").format(item.s_warehouse,reserve_warehouse,self.purchase_order))
#Update reserved sub contracted quantity in bin based on Supplied Item Details
- for d in po_supplied_items:
- stock_bin = get_bin(d.rm_item_code, d.reserve_warehouse)
+ for d in self.get("items"):
+ stock_bin = get_bin(d.item_code, d.s_warehouse)
stock_bin.update_reserved_qty_for_sub_contracting()
@frappe.whitelist()