diff --git a/erpnext/change_log/v6/v6.16.3.md b/erpnext/change_log/v6/v6.16.3.md index ee0279b342..7fe1ad5504 100644 --- a/erpnext/change_log/v6/v6.16.3.md +++ b/erpnext/change_log/v6/v6.16.3.md @@ -1,4 +1,5 @@ - Track billed status of a Delivery Note (DN) or Purchase Receipt (PR) + - Added new status **To Bill** and **Completed** in Delivery Note and Purchase Receipt - The system looks for Invoices directly created from Delivery Note / Purchase Receipt *(Workflow: Order -> DN/PR -> Invoice)* and allocates these amounts directly to the DN/PR - Next, it looks for Invoices not created from Delivery Note / Purchase Receipt, but from an Order *(Workflow: Order -> Invoice, Order -> DN/PR)* and the DN/PR is selected based on FIFO for allocating the billed amount - In Stock Entry, re-calculate Additional Costs and Amount on changing Quantity or Rate diff --git a/erpnext/patches/v6_16/update_billing_status_in_dn_and_pr.py b/erpnext/patches/v6_16/update_billing_status_in_dn_and_pr.py index 30ddf22398..b660d39d53 100644 --- a/erpnext/patches/v6_16/update_billing_status_in_dn_and_pr.py +++ b/erpnext/patches/v6_16/update_billing_status_in_dn_and_pr.py @@ -10,24 +10,33 @@ def execute(): frappe.reload_doctype(dt + " Item") # Update billed_amt in DN and PR which are not against any order - for d in frappe.db.sql("""select name from `tabDelivery Note Item` + for d in frappe.db.sql("""select name from `tabDelivery Note Item` item where (so_detail is null or so_detail = '') and docstatus=1""", as_dict=1): - billed_amt = frappe.db.sql("""select sum(amount) from `tabSales Invoice Item` - where dn_detail=%s and docstatus=1""", d.name) - billed_amt = billed_amt and billed_amt[0][0] or 0 - frappe.db.set_value("Delivery Note Item", d.name, "billed_amt", billed_amt, update_modified=False) + + billed_amt = frappe.db.sql("""select sum(amount) from `tabSales Invoice Item` + where dn_detail=%s and docstatus=1""", d.name) + billed_amt = billed_amt and billed_amt[0][0] or 0 + frappe.db.set_value("Delivery Note Item", d.name, "billed_amt", billed_amt, update_modified=False) + + frappe.db.commit() # Update billed_amt in DN and PR which are not against any order - for d in frappe.db.sql("""select name from `tabPurchase Receipt Item` + for d in frappe.db.sql("""select name from `tabPurchase Receipt Item` item where (prevdoc_detail_docname is null or prevdoc_detail_docname = '') and docstatus=1""", as_dict=1): - billed_amt = frappe.db.sql("""select sum(amount) from `tabPurchase Invoice Item` - where pr_detail=%s and docstatus=1""", d.name) - billed_amt = billed_amt and billed_amt[0][0] or 0 - frappe.db.set_value("Purchase Receipt Item", d.name, "billed_amt", billed_amt, update_modified=False) - # Update billed amt which are against order or invoice - # Update billing status for all - for d in frappe.db.sql("select name from `tab{0}` where docstatus=1".format(dt), as_dict=1): - doc = frappe.get_doc(dt, d.name) - doc.update_billing_status(update_modified=False) - doc.set_status(update=True, update_modified=False) + billed_amt = frappe.db.sql("""select sum(amount) from `tabPurchase Invoice Item` + where pr_detail=%s and docstatus=1""", d.name) + billed_amt = billed_amt and billed_amt[0][0] or 0 + frappe.db.set_value("Purchase Receipt Item", d.name, "billed_amt", billed_amt, update_modified=False) + + frappe.db.commit() + + for dt in ("Delivery Note", "Purchase Receipt"): + # Update billed amt which are against order or invoice + # Update billing status for all + for d in frappe.db.sql("select name from `tab{0}` where docstatus=1".format(dt), as_dict=1): + doc = frappe.get_doc(dt, d.name) + doc.update_billing_status(update_modified=False) + doc.set_status(update=True, update_modified=False) + + frappe.db.commit() diff --git a/erpnext/stock/doctype/delivery_note/delivery_note.js b/erpnext/stock/doctype/delivery_note/delivery_note.js index 2f0550efc0..c5a3bab06e 100644 --- a/erpnext/stock/doctype/delivery_note/delivery_note.js +++ b/erpnext/stock/doctype/delivery_note/delivery_note.js @@ -47,7 +47,7 @@ erpnext.stock.DeliveryNoteController = erpnext.selling.SellingController.extend( this.show_general_ledger(); } if (this.frm.has_perm("submit") && (doc.status !== "Closed") - && this.frm.doc.__onload && this.frm.doc.__onload.has_return_entry) { + && this.frm.doc.__onload && !this.frm.doc.__onload.has_return_entry) { cur_frm.add_custom_button(__("Close"), this.close_delivery_note) } } diff --git a/erpnext/stock/doctype/purchase_receipt/purchase_receipt.js b/erpnext/stock/doctype/purchase_receipt/purchase_receipt.js index 9a24eed30f..eec1a6d8b5 100644 --- a/erpnext/stock/doctype/purchase_receipt/purchase_receipt.js +++ b/erpnext/stock/doctype/purchase_receipt/purchase_receipt.js @@ -61,7 +61,7 @@ erpnext.stock.PurchaseReceiptController = erpnext.buying.BuyingController.extend this.make_purchase_invoice).addClass("btn-primary"); } if (this.frm.has_perm("submit") && - this.frm.doc.__onload && this.frm.doc.__onload.has_return_entry) { + this.frm.doc.__onload && !this.frm.doc.__onload.has_return_entry) { cur_frm.add_custom_button(__("Close"), this.close_purchase_receipt) } }