diff --git a/erpnext/patches.txt b/erpnext/patches.txt index 21656c6d659..ea10054d525 100644 --- a/erpnext/patches.txt +++ b/erpnext/patches.txt @@ -193,3 +193,4 @@ execute:frappe.db.sql("update `tabProduction Order` pro set description = (selec 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 00000000000..c957242260b --- /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 2e57a115355..4f9d54dfbf2 100644 --- a/erpnext/selling/doctype/sales_order/sales_order.py +++ b/erpnext/selling/doctype/sales_order/sales_order.py @@ -214,15 +214,15 @@ class SalesOrder(SellingController): 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):