diff --git a/erpnext/patches.txt b/erpnext/patches.txt index 30e8e038f7..b578ac2cca 100644 --- a/erpnext/patches.txt +++ b/erpnext/patches.txt @@ -349,4 +349,5 @@ erpnext.patches.v7_0.set_base_amount_in_invoice_payment_table erpnext.patches.v7_1.update_invoice_status erpnext.patches.v7_0.po_status_issue_for_pr_return erpnext.patches.v7_1.update_missing_salary_component_type -erpnext.patches.v7_0.update_autoname_field \ No newline at end of file +erpnext.patches.v7_0.update_autoname_field +erpnext.patches.v7_0.update_status_of_po_so \ No newline at end of file diff --git a/erpnext/patches/v7_0/update_status_of_po_so.py b/erpnext/patches/v7_0/update_status_of_po_so.py new file mode 100644 index 0000000000..0e2dd74a23 --- /dev/null +++ b/erpnext/patches/v7_0/update_status_of_po_so.py @@ -0,0 +1,62 @@ +# 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 +from frappe.utils import cint, flt + +def execute(): + update_po_per_received_per_billed() + update_so_per_delivered_per_billed() + update_status() + +def update_po_per_received_per_billed(): + frappe.db.sql(""" + update + `tabPurchase Order` + set + `tabPurchase Order`.per_received = round((select sum(if(qty > ifnull(received_qty, 0), + ifnull(received_qty, 0), qty)) / sum(qty) *100 from `tabPurchase Order Item` + where parent = `tabPurchase Order`.name), 2), + `tabPurchase Order`.per_billed = round((select sum( if(amount > ifnull(billed_amt, 0), + ifnull(billed_amt, 0), amount)) / sum(amount) *100 from `tabPurchase Order Item` + where parent = `tabPurchase Order`.name), 2)""") + +def update_so_per_delivered_per_billed(): + frappe.db.sql(""" + update + `tabSales Order` + set + `tabSales Order`.per_delivered = round((select sum( if(qty > ifnull(delivered_qty, 0), + ifnull(delivered_qty, 0), qty)) / sum(qty) *100 from `tabSales Order Item` + where parent = `tabSales Order`.name), 2), + `tabSales Order`.per_billed = round((select sum( if(amount > ifnull(billed_amt, 0), + ifnull(billed_amt, 0), amount)) / sum(amount) *100 from `tabSales Order Item` + where parent = `tabSales Order`.name), 2)""") + +def update_status(): + frappe.db.sql(""" + update + `tabSales Order` + set status = (Case when status = 'Closed' then 'Closed' + When per_delivered < 100 and per_billed < 100 and docstatus = 1 then 'To Deliver and Bill' + when per_delivered = 100 and per_billed < 100 and docstatus = 1 then 'To Bill' + when per_delivered < 100 and per_billed = 100 and docstatus = 1 then 'To Deliver' + when per_delivered = 100 and per_billed = 100 and docstatus = 1 then 'Completed' + when order_type = 'Maintenance' and per_billed = 100 and docstatus = 1 then 'Completed' + when docstatus = 2 then 'Cancelled' + else 'Draft' + End)""") + + frappe.db.sql(""" + update + `tabPurchase Order` + set status = (Case when status = 'Closed' then 'Closed' + when status = 'Delivered' then 'Delivered' + When per_received < 100 and per_billed < 100 and docstatus = 1 then 'To Receive and Bill' + when per_received = 100 and per_billed < 100 and docstatus = 1 then 'To Bill' + when per_received < 100 and per_billed = 100 and docstatus = 1 then 'To Receive' + when per_received = 100 and per_billed = 100 and docstatus = 1 then 'Completed' + when docstatus = 2 then 'Cancelled' + else 'Draft' + End)""") \ No newline at end of file