From 2f51c6900bebede7924c0c152ad829fd1b0810a2 Mon Sep 17 00:00:00 2001 From: Nabin Hait Date: Fri, 5 Jan 2018 18:20:05 +0530 Subject: [PATCH] Fixes and cleanups of reserve qty for subcontracting --- .../update_reserved_qty_for_purchase_order.py | 48 +++++++++++++++++++ 1 file changed, 48 insertions(+) create mode 100644 erpnext/patches/v10_0/update_reserved_qty_for_purchase_order.py diff --git a/erpnext/patches/v10_0/update_reserved_qty_for_purchase_order.py b/erpnext/patches/v10_0/update_reserved_qty_for_purchase_order.py new file mode 100644 index 0000000000..f0de4236cb --- /dev/null +++ b/erpnext/patches/v10_0/update_reserved_qty_for_purchase_order.py @@ -0,0 +1,48 @@ +import frappe +from frappe import _ +from erpnext.stock.utils import get_bin + +def execute(): + po_item = list(frappe.db.sql((""" + select distinct po.name as poname, poitem.rm_item_code as rm_item_code, po.company + from `tabPurchase Order` po, `tabPurchase Order Item Supplied` poitem + where po.name = poitem.parent + and po.is_subcontracted = "Yes" + and po.docstatus = 1"""), as_dict=1)) + if not po_item: + return + + company_warehouse = frappe._dict(frappe.db.sql("""select company, min(name) from `tabWarehouse` + where is_group = 0 group by company""")) + + items = list(set([d.rm_item_code for d in po_item])) + item_wh = frappe._dict(frappe.db.sql("""select item_code, default_warehouse + from `tabItem` where name in ({0})""".format(", ".join(["%s"] * len(items))), items)) + + # Update reserved warehouse + for item in po_item: + reserve_warehouse = get_warehouse(item.rm_item_code, item.company, company_warehouse, item_wh) + update_res_warehouse = frappe.db.sql("""update `tabPurchase Order Item Supplied` + set reserve_warehouse = %s + where parent = %s and rm_item_code = %s + """, (reserve_warehouse, item["poname"], item["rm_item_code"])) + + # Update bin + item_wh_bin = frappe.db.sql((""" + select distinct poitemsup.rm_item_code as rm_item_code, + poitemsup.reserve_warehouse as reserve_warehouse + from `tabPurchase Order` po, `tabPurchase Order Item Supplied` poitemsup + where po.name = poitemsup.parent + and po.is_subcontracted = "Yes" + and po.docstatus = 1"""), as_dict=1) + for d in item_wh_bin: + stock_bin = get_bin(d["rm_item_code"], d["reserve_warehouse"]) + stock_bin.update_reserved_qty_for_sub_contracting() + +def get_warehouse(item_code, company, company_warehouse, item_wh): + reserve_warehouse = item_wh.get(item_code) + if frappe.db.get_value("Warehouse", reserve_warehouse, "company") != company: + reserve_warehouse = None + if not reserve_warehouse: + reserve_warehouse = company_warehouse.get(company) + return reserve_warehouse \ No newline at end of file