From f1b6f67a98c4877e7052e4cd13ff0112d3758237 Mon Sep 17 00:00:00 2001 From: Rushabh Mehta Date: Thu, 3 Oct 2013 12:22:52 +0530 Subject: [PATCH] [Delivery Note] Moved prevdoc to Sales Order and Sales Invoice so links will work webnotes/erpnext#868 --- .../doctype/sales_invoice/sales_invoice.py | 3 +- .../p01_update_delivery_note_prevdocs.py | 12 +++++ patches/patch_list.py | 1 + selling/doctype/sales_common/sales_common.py | 29 ++++++----- selling/doctype/sales_order/sales_order.py | 3 +- .../doctype/sales_order/test_sales_order.py | 3 +- stock/doctype/delivery_note/delivery_note.js | 10 ++-- stock/doctype/delivery_note/delivery_note.py | 49 ++++++++++--------- .../delivery_note_item/delivery_note_item.txt | 47 ++++++++---------- stock/doctype/stock_entry/stock_entry.py | 3 +- 10 files changed, 85 insertions(+), 75 deletions(-) create mode 100644 patches/october_2013/p01_update_delivery_note_prevdocs.py diff --git a/accounts/doctype/sales_invoice/sales_invoice.py b/accounts/doctype/sales_invoice/sales_invoice.py index 2eb9ae84cb0..1dca77b3fba 100644 --- a/accounts/doctype/sales_invoice/sales_invoice.py +++ b/accounts/doctype/sales_invoice/sales_invoice.py @@ -965,8 +965,7 @@ def make_delivery_note(source_name, target_doclist=None): "doctype": "Delivery Note Item", "field_map": { "name": "prevdoc_detail_docname", - "parent": "prevdoc_docname", - "parenttype": "prevdoc_doctype", + "parent": "against_sales_invoice", "serial_no": "serial_no" }, "postprocess": update_item diff --git a/patches/october_2013/p01_update_delivery_note_prevdocs.py b/patches/october_2013/p01_update_delivery_note_prevdocs.py new file mode 100644 index 00000000000..b1a16c28beb --- /dev/null +++ b/patches/october_2013/p01_update_delivery_note_prevdocs.py @@ -0,0 +1,12 @@ +# Copyright (c) 2013, Web Notes Technologies Pvt. Ltd. +# License: GNU General Public License v3. See license.txt + +from __future__ import unicode_literals +import webnotes + +def execute(): + webnotes.conn.sql("""update `tabDelivery Note Item` set against_sales_order=prevdoc_docname + where prevdoc_doctype='Sales Order' """) + + webnotes.conn.sql("""update `tabDelivery Note Item` set against_sales_invoice=prevdoc_docname + where prevdoc_doctype='Sales Invoice' """) \ No newline at end of file diff --git a/patches/patch_list.py b/patches/patch_list.py index f228acf97e7..e19afdaf5ca 100644 --- a/patches/patch_list.py +++ b/patches/patch_list.py @@ -220,4 +220,5 @@ patch_list = [ "patches.september_2013.p04_unsubmit_serial_nos", "patches.september_2013.p05_fix_customer_in_pos", "patches.october_2013.fix_is_cancelled_in_sle", + "patches.october_2013.p01_update_delivery_note_prevdocs", ] \ No newline at end of file diff --git a/selling/doctype/sales_common/sales_common.py b/selling/doctype/sales_common/sales_common.py index 8271c828740..df7f1511493 100644 --- a/selling/doctype/sales_common/sales_common.py +++ b/selling/doctype/sales_common/sales_common.py @@ -123,12 +123,12 @@ class DocType(TransactionBase): if flt(d.qty) > flt(d.delivered_qty): reserved_qty_for_main_item = flt(d.qty) - flt(d.delivered_qty) - if obj.doc.doctype == "Delivery Note" and d.prevdoc_doctype == 'Sales Order': + if obj.doc.doctype == "Delivery Note" and d.against_sales_order: # if SO qty is 10 and there is tolerance of 20%, then it will allow DN of 12. # But in this case reserved qty should only be reduced by 10 and not 12 already_delivered_qty = self.get_already_delivered_qty(obj.doc.name, - d.prevdoc_docname, d.prevdoc_detail_docname) + d.against_sales_order, d.prevdoc_detail_docname) so_qty, reserved_warehouse = self.get_so_qty_and_warehouse(d.prevdoc_detail_docname) if already_delivered_qty + d.qty > so_qty: @@ -168,7 +168,7 @@ class DocType(TransactionBase): def get_already_delivered_qty(self, dn, so, so_detail): qty = webnotes.conn.sql("""select sum(qty) from `tabDelivery Note Item` where prevdoc_detail_docname = %s and docstatus = 1 - and prevdoc_doctype = 'Sales Order' and prevdoc_docname = %s + and against_sales_order = %s and parent != %s""", (so_detail, so, dn)) return qty and flt(qty[0][0]) or 0.0 @@ -218,7 +218,6 @@ class DocType(TransactionBase): pi.qty = flt(qty) pi.actual_qty = bin and flt(bin['actual_qty']) or 0 pi.projected_qty = bin and flt(bin['projected_qty']) or 0 - pi.prevdoc_doctype = line.prevdoc_doctype if not pi.warehouse: pi.warehouse = warehouse if not pi.batch_no: @@ -283,8 +282,8 @@ class DocType(TransactionBase): def check_stop_sales_order(self,obj): for d in getlist(obj.doclist,obj.fname): ref_doc_name = '' - if d.fields.has_key('prevdoc_docname') and d.prevdoc_docname and d.prevdoc_doctype == 'Sales Order': - ref_doc_name = d.prevdoc_docname + if d.fields.has_key('against_sales_order') and d.against_sales_order: + ref_doc_name = d.against_sales_order elif d.fields.has_key('sales_order') and d.sales_order and not d.delivery_note: ref_doc_name = d.sales_order if ref_doc_name: @@ -321,14 +320,22 @@ class DocType(TransactionBase): def get_prevdoc_date(self, obj): for d in getlist(obj.doclist, obj.fname): - if d.prevdoc_doctype and d.prevdoc_docname: - if d.prevdoc_doctype in ["Sales Invoice", "Delivery Note"]: + date_field = None + + pdoctype, pname = d.prevdoc_doctype, d.prevdoc_docname + + if d.against_sales_invoice: + pdoctype, pname = "Sales Invoice", d.against_sales_invoice + elif d.against_sales_order: + pdoctype, pname = "Sales Order", d.against_sales_order + + if pdoctype and pname: + if pdoctype in ["Sales Invoice", "Delivery Note"]: date_field = "posting_date" else: date_field = "transaction_date" - - d.prevdoc_date = webnotes.conn.get_value(d.prevdoc_doctype, - d.prevdoc_docname, date_field) + + d.prevdoc_date = webnotes.conn.get_value(pdoctype, pname, date_field) def get_batch_no(doctype, txt, searchfield, start, page_len, filters): from controllers.queries import get_match_cond diff --git a/selling/doctype/sales_order/sales_order.py b/selling/doctype/sales_order/sales_order.py index 40567429cc6..8fc728fccdc 100644 --- a/selling/doctype/sales_order/sales_order.py +++ b/selling/doctype/sales_order/sales_order.py @@ -341,8 +341,7 @@ def make_delivery_note(source_name, target_doclist=None): "field_map": { "export_rate": "export_rate", "name": "prevdoc_detail_docname", - "parent": "prevdoc_docname", - "parenttype": "prevdoc_doctype", + "parent": "against_sales_order", "reserved_warehouse": "warehouse" }, "postprocess": update_item, diff --git a/selling/doctype/sales_order/test_sales_order.py b/selling/doctype/sales_order/test_sales_order.py index 7b72271bec9..8bd759a77da 100644 --- a/selling/doctype/sales_order/test_sales_order.py +++ b/selling/doctype/sales_order/test_sales_order.py @@ -74,8 +74,7 @@ class TestSalesOrder(unittest.TestCase): from stock.doctype.delivery_note.test_delivery_note import test_records as dn_test_records dn = webnotes.bean(webnotes.copy_doclist(dn_test_records[0])) dn.doclist[1].item_code = so.doclist[1].item_code - dn.doclist[1].prevdoc_doctype = "Sales Order" - dn.doclist[1].prevdoc_docname = so.doc.name + dn.doclist[1].against_sales_order = so.doc.name dn.doclist[1].prevdoc_detail_docname = so.doclist[1].name if delivered_qty: dn.doclist[1].qty = delivered_qty diff --git a/stock/doctype/delivery_note/delivery_note.js b/stock/doctype/delivery_note/delivery_note.js index 84e65dabddf..edfd6ff7db2 100644 --- a/stock/doctype/delivery_note/delivery_note.js +++ b/stock/doctype/delivery_note/delivery_note.js @@ -22,7 +22,7 @@ erpnext.stock.DeliveryNoteController = erpnext.selling.SellingController.extend( var from_sales_invoice = false; from_sales_invoice = cur_frm.get_doclist({parentfield: "delivery_note_details"}) .some(function(item) { - return item.prevdoc_doctype==="Sales Invoice" ? true : false; + return item.against_sales_invoice ? true : false; }); if(!from_sales_invoice) @@ -181,12 +181,12 @@ cur_frm.pformat.sales_order_no= function(doc, cdt, cdn){ if(cl.length){ prevdoc_list = new Array(); for(var i=0;i