Update order reference in return entries and repost reserved / ordered qty
diff --git a/erpnext/patches.txt b/erpnext/patches.txt
index 21656c6..ea10054 100644
--- a/erpnext/patches.txt
+++ b/erpnext/patches.txt
@@ -193,3 +193,4 @@
erpnext.patches.v5_7.item_template_attributes
erpnext.patches.v4_2.repost_reserved_qty #2015-08-20
erpnext.patches.v5_4.update_purchase_cost_against_project
+erpnext.patches.v5_7.update_order_reference_in_return_entries
\ No newline at end of file
diff --git a/erpnext/patches/v5_7/update_order_reference_in_return_entries.py b/erpnext/patches/v5_7/update_order_reference_in_return_entries.py
new file mode 100644
index 0000000..c957242
--- /dev/null
+++ b/erpnext/patches/v5_7/update_order_reference_in_return_entries.py
@@ -0,0 +1,76 @@
+# Copyright (c) 2013, Web Notes Technologies Pvt. Ltd. and Contributors
+# License: GNU General Public License v3. See license.txt
+
+from __future__ import unicode_literals
+import frappe
+
+def execute():
+ # sales return
+ return_entries = list(frappe.db.sql("""
+ select dn.name as name, dn_item.name as row_id, dn.return_against,
+ dn_item.item_code, "Delivery Note" as doctype
+ from `tabDelivery Note Item` dn_item, `tabDelivery Note` dn
+ where dn_item.parent=dn.name and dn.is_return=1 and dn.docstatus < 2
+ """, as_dict=1))
+
+ return_entries += list(frappe.db.sql("""
+ select si.name as name, si_item.name as row_id, si.return_against,
+ si_item.item_code, "Sales Invoice" as doctype
+ from `tabSales Invoice Item` si_item, `tabSales Invoice` si
+ where si_item.parent=si.name and si.is_return=1 and si.update_stock=1 and si.docstatus < 2
+ """, as_dict=1))
+
+ for d in return_entries:
+ ref_field = "against_sales_order" if d.doctype == "Delivery Note" else "sales_order"
+ order_details = frappe.db.sql("""
+ select {0} as sales_order, so_detail
+ from `tab{1} Item` item
+ where
+ parent=%s and item_code=%s
+ and ifnull(so_detail, '') !=''
+ order by
+ (select transaction_date from `tabSales Order` where name=item.{3}) DESC
+ """.format(ref_field, d.doctype, ref_field, ref_field), (d.return_against, d.item_code), as_dict=1)
+
+ if order_details:
+ frappe.db.sql("""
+ update `tab{0} Item`
+ set {1}=%s, so_detail=%s
+ where name=%s
+ """.format(d.doctype, ref_field),
+ (order_details[0].sales_order, order_details[0].so_detail, d.row_id))
+
+ doc = frappe.get_doc(d.doctype, d.name)
+ doc.update_reserved_qty()
+
+
+ #--------------------------
+ # purchase return
+ return_entries = frappe.db.sql("""
+ select pr.name as name, pr_item.name as row_id, pr.return_against, pr_item.item_code
+ from `tabPurchase Receipt Item` pr_item, `tabPurchase Receipt` pr
+ where pr_item.parent=pr.name and pr.is_return=1 and pr.docstatus < 2
+ """, as_dict=1)
+
+ for d in return_entries:
+ order_details = frappe.db.sql("""
+ select prevdoc_docname as purchase_order, prevdoc_detail_docname as po_detail
+ from `tabPurchase Receipt Item` item
+ where
+ parent=%s and item_code=%s
+ and ifnull(prevdoc_detail_docname, '') !=''
+ and ifnull(prevdoc_doctype, '') = 'Purchase Order' and ifnull(prevdoc_detail_docname, '') != ''
+ order by
+ (select transaction_date from `tabPurchase Order` where name=item.prevdoc_detail_docname) DESC
+ """, (d.return_against, d.item_code), as_dict=1)
+
+ if order_details:
+ frappe.db.sql("""
+ update `tabPurchase Receipt Item`
+ set prevdoc_doctype='Purchase Order', prevdoc_docname=%s, prevdoc_detail_docname=%s
+ where name=%s
+ """, (order_details[0].purchase_order, order_details[0].po_detail, d.row_id))
+
+ pr = frappe.get_doc("Purchase Receipt", d.name)
+ pr.update_ordered_qty()
+
\ No newline at end of file
diff --git a/erpnext/selling/doctype/sales_order/sales_order.py b/erpnext/selling/doctype/sales_order/sales_order.py
index 2e57a11..4f9d54d 100644
--- a/erpnext/selling/doctype/sales_order/sales_order.py
+++ b/erpnext/selling/doctype/sales_order/sales_order.py
@@ -214,15 +214,15 @@
def stop_sales_order(self):
self.check_modified_date()
- self.update_reserved_qty()
frappe.db.set(self, 'status', 'Stopped')
+ self.update_reserved_qty()
frappe.msgprint(_("{0} {1} status is Stopped").format(self.doctype, self.name))
self.notify_modified()
def unstop_sales_order(self):
self.check_modified_date()
- self.update_reserved_qty()
frappe.db.set(self, 'status', 'Submitted')
+ self.update_reserved_qty()
frappe.msgprint(_("{0} {1} status is Unstopped").format(self.doctype, self.name))
def update_reserved_qty(self, so_item_rows=None):