Fix status updater (#13033)
* fix the status updater for multiple sources
* patch for updating the status
* patch for updating the sales order item
* Update update_status_for_multiple_source_in_po.py
diff --git a/erpnext/buying/doctype/purchase_order/purchase_order.py b/erpnext/buying/doctype/purchase_order/purchase_order.py
index e879f40..9e890f6 100644
--- a/erpnext/buying/doctype/purchase_order/purchase_order.py
+++ b/erpnext/buying/doctype/purchase_order/purchase_order.py
@@ -30,8 +30,7 @@
'target_parent_field': 'per_ordered',
'target_ref_field': 'stock_qty',
'source_field': 'stock_qty',
- 'percent_join_field': 'material_request',
- 'overflow_type': 'order'
+ 'percent_join_field': 'material_request'
}]
def onload(self):
@@ -232,12 +231,16 @@
pass
def update_status_updater(self):
- self.status_updater[0].update({
- "target_parent_dt": "Sales Order",
- "target_dt": "Sales Order Item",
+ self.status_updater.append({
+ 'source_dt': 'Purchase Order Item',
+ 'target_dt': 'Sales Order Item',
'target_field': 'ordered_qty',
- "join_field": "sales_order_item",
- "target_parent_field": ''
+ 'target_parent_dt': 'Sales Order',
+ 'target_parent_field': '',
+ 'join_field': 'sales_order_item',
+ 'source_dt': 'Purchase Order Item',
+ 'target_ref_field': 'stock_qty',
+ 'source_field': 'stock_qty'
})
def update_delivered_qty_in_sales_order(self):
diff --git a/erpnext/controllers/status_updater.py b/erpnext/controllers/status_updater.py
index 2f54fc0..b46c752 100644
--- a/erpnext/controllers/status_updater.py
+++ b/erpnext/controllers/status_updater.py
@@ -250,7 +250,7 @@
if args['detail_id']:
if not args.get("extra_cond"): args["extra_cond"] = ""
-
+
frappe.db.sql("""update `tab%(target_dt)s`
set %(target_field)s = (
(select ifnull(sum(%(source_field)s), 0)
@@ -275,7 +275,7 @@
"""Update percent field in parent transaction"""
self._update_modified(args, update_modified)
-
+
if args.get('target_parent_field'):
frappe.db.sql("""update `tab%(target_parent_dt)s`
set %(target_parent_field)s = round(
diff --git a/erpnext/patches.txt b/erpnext/patches.txt
index a963b53..dd707da 100644
--- a/erpnext/patches.txt
+++ b/erpnext/patches.txt
@@ -490,6 +490,7 @@
erpnext.patches.v10_0.update_sales_order_link_to_purchase_order
erpnext.patches.v10_0.added_extra_gst_custom_field_in_gstr2 #2018-02-13
erpnext.patches.v10_0.set_b2c_limit
+erpnext.patches.v10_0.update_status_for_multiple_source_in_po
erpnext.patches.v10_0.set_auto_created_serial_no_in_stock_entry
erpnext.patches.v10_0.update_territory_and_customer_group
erpnext.patches.v10_0.update_warehouse_address_details
\ No newline at end of file
diff --git a/erpnext/patches/v10_0/update_status_for_multiple_source_in_po.py b/erpnext/patches/v10_0/update_status_for_multiple_source_in_po.py
new file mode 100644
index 0000000..1de9d97
--- /dev/null
+++ b/erpnext/patches/v10_0/update_status_for_multiple_source_in_po.py
@@ -0,0 +1,38 @@
+# Copyright (c) 2017, Frappe and Contributors
+# License: GNU General Public License v3. See license.txt
+
+from __future__ import unicode_literals
+import frappe
+
+def execute():
+
+
+ # update the sales order item in the material request
+ frappe.reload_doc('stock', 'doctype', 'material_request_item')
+ frappe.db.sql('''update `tabMaterial Request Item` mri set sales_order_item = (select name from
+ `tabSales Order Item` soi where soi.parent=mri.sales_order and soi.item_code=mri.item_code) where docstatus = 1 and
+ ifnull(mri.sales_order, "")!=""
+ ''')
+
+ # update the sales order item in the purchase order
+ frappe.db.sql('''update `tabPurchase Order Item` poi set sales_order_item = (select name from
+ `tabSales Order Item` soi where soi.parent=poi.sales_order and soi.item_code=poi.item_code) where docstatus = 1 and
+ ifnull(poi.sales_order, "")!=""
+ ''')
+
+ # Update the status in material request and sales order
+ po_list = frappe.db.sql('''
+ select parent from `tabPurchase Order Item` where ifnull(material_request, "")!="" and
+ ifnull(sales_order, "")!="" and docstatus=1
+ ''',as_dict=1)
+
+ for po in list(set([d.get("parent") for d in po_list if d.get("parent")])):
+ try:
+ po_doc = frappe.get_doc("Purchase Order", po)
+
+ # update the so in the status updater
+ po_doc.update_status_updater()
+ po_doc.update_qty(update_modified=False)
+
+ except Exception:
+ pass
diff --git a/erpnext/selling/doctype/sales_order/sales_order.py b/erpnext/selling/doctype/sales_order/sales_order.py
index f1b56d9..2f41307 100644
--- a/erpnext/selling/doctype/sales_order/sales_order.py
+++ b/erpnext/selling/doctype/sales_order/sales_order.py
@@ -435,6 +435,7 @@
"Sales Order Item": {
"doctype": "Material Request Item",
"field_map": {
+ "name": "sales_order_item",
"parent": "sales_order",
"stock_uom": "uom",
"stock_qty": "qty"
diff --git a/erpnext/stock/doctype/material_request/material_request.py b/erpnext/stock/doctype/material_request/material_request.py
index defce62..8f0a25d 100644
--- a/erpnext/stock/doctype/material_request/material_request.py
+++ b/erpnext/stock/doctype/material_request/material_request.py
@@ -241,7 +241,8 @@
["parent", "material_request"],
["uom", "stock_uom"],
["uom", "uom"],
- ["sales_order", "sales_order"]
+ ["sales_order", "sales_order"],
+ ["sales_order_item", "sales_order_item"]
],
"postprocess": update_item,
"condition": lambda doc: doc.ordered_qty < doc.stock_qty
diff --git a/erpnext/stock/doctype/material_request_item/material_request_item.json b/erpnext/stock/doctype/material_request_item/material_request_item.json
index ef2e7fc..4ec5ed86 100644
--- a/erpnext/stock/doctype/material_request_item/material_request_item.json
+++ b/erpnext/stock/doctype/material_request_item/material_request_item.json
@@ -676,6 +676,36 @@
"bold": 0,
"collapsible": 0,
"columns": 0,
+ "fieldname": "sales_order_item",
+ "fieldtype": "Data",
+ "hidden": 1,
+ "ignore_user_permissions": 0,
+ "ignore_xss_filter": 0,
+ "in_filter": 0,
+ "in_global_search": 0,
+ "in_list_view": 0,
+ "in_standard_filter": 0,
+ "label": "Sales Order Item",
+ "length": 0,
+ "no_copy": 1,
+ "permlevel": 0,
+ "precision": "",
+ "print_hide": 1,
+ "print_hide_if_no_value": 0,
+ "read_only": 1,
+ "remember_last_selected_value": 0,
+ "report_hide": 0,
+ "reqd": 0,
+ "search_index": 1,
+ "set_only_once": 0,
+ "unique": 0
+ },
+ {
+ "allow_bulk_edit": 0,
+ "allow_on_submit": 0,
+ "bold": 0,
+ "collapsible": 0,
+ "columns": 0,
"fieldname": "project",
"fieldtype": "Link",
"hidden": 0,
@@ -898,8 +928,8 @@
"issingle": 0,
"istable": 1,
"max_attachments": 0,
- "modified": "2017-12-15 16:29:18.902085",
- "modified_by": "nabinhait@gmail.com",
+ "modified": "2018-02-12 05:51:39.954530",
+ "modified_by": "Administrator",
"module": "Stock",
"name": "Material Request Item",
"owner": "Administrator",