From 90d74d4bfa2a2822b16f61d0bc8eb2324ee0f1ac Mon Sep 17 00:00:00 2001 From: Nabin Hait Date: Mon, 29 Jul 2013 13:27:18 +0530 Subject: [PATCH] [minor] sales invoice to delivery note mapping and prevdoc validation --- .../doctype/sales_invoice/sales_invoice.js | 2 +- .../doctype/sales_invoice/sales_invoice.py | 46 +++++++++++++++++++ patches/patch_list.py | 1 + .../selling_settings/selling_settings.py | 2 +- stock/doctype/delivery_note/delivery_note.py | 29 ++++++------ 5 files changed, 65 insertions(+), 15 deletions(-) diff --git a/accounts/doctype/sales_invoice/sales_invoice.js b/accounts/doctype/sales_invoice/sales_invoice.js index a4bbb2ac34..35ea831124 100644 --- a/accounts/doctype/sales_invoice/sales_invoice.js +++ b/accounts/doctype/sales_invoice/sales_invoice.js @@ -60,7 +60,7 @@ erpnext.accounts.SalesInvoiceController = erpnext.selling.SellingController.exte cur_frm.add_custom_button('Send SMS', cur_frm.cscript.send_sms); - if(doc.is_pos==1 && doc.update_stock!=1) + if(cint(doc.update_stock)!=1) cur_frm.add_custom_button('Make Delivery', cur_frm.cscript['Make Delivery Note']); if(doc.outstanding_amount!=0) diff --git a/accounts/doctype/sales_invoice/sales_invoice.py b/accounts/doctype/sales_invoice/sales_invoice.py index ceab40ac12..d8752478d4 100644 --- a/accounts/doctype/sales_invoice/sales_invoice.py +++ b/accounts/doctype/sales_invoice/sales_invoice.py @@ -983,3 +983,49 @@ def get_income_account(doctype, txt, searchfield, start, page_len, filters): and tabAccount.%(key)s LIKE '%(txt)s' %(mcond)s""" % {'company': filters['company'], 'key': searchfield, 'txt': "%%%s%%" % txt, 'mcond':get_match_cond(doctype, searchfield)}) + + +@webnotes.whitelist() +def make_delivery_note(source_name, target_doclist=None): + from webnotes.model.mapper import get_mapped_doclist + + def set_missing_values(source, target): + bean = webnotes.bean(target) + bean.run_method("onload_post_render") + + def update_item(obj, target, source_parent): + target.amount = (flt(obj.qty) - flt(obj.delivered_qty)) * flt(obj.basic_rate) + target.export_amount = (flt(obj.qty) - flt(obj.delivered_qty)) * flt(obj.export_rate) + target.qty = flt(obj.qty) - flt(obj.delivered_qty) + + doclist = get_mapped_doclist("Sales Invoice", source_name, { + "Sales Invoice": { + "doctype": "Delivery Note", + "validation": { + "docstatus": ["=", 1] + } + }, + "Sales Invoice Item": { + "doctype": "Delivery Note Item", + "field_map": { + "name": "prevdoc_detail_docname", + "parent": "prevdoc_docname", + "parenttype": "prevdoc_doctype", + "serial_no": "serial_no" + }, + "postprocess": update_item + }, + "Sales Taxes and Charges": { + "doctype": "Sales Taxes and Charges", + "add_if_empty": True + }, + "Sales Team": { + "doctype": "Sales Team", + "field_map": { + "incentives": "incentives" + }, + "add_if_empty": True + } + }, target_doclist, set_missing_values) + + return [d.fields for d in doclist] \ No newline at end of file diff --git a/patches/patch_list.py b/patches/patch_list.py index 9b6bb0f2dd..dc9f34d1ce 100644 --- a/patches/patch_list.py +++ b/patches/patch_list.py @@ -262,4 +262,5 @@ patch_list = [ "patches.july_2013.p08_custom_print_format_net_total_export", "patches.july_2013.p09_remove_website_pyc", "patches.july_2013.p10_change_partner_user_to_website_user", + "execute:webnotes.bean('Selling Settings').save()", ] \ No newline at end of file diff --git a/selling/doctype/selling_settings/selling_settings.py b/selling/doctype/selling_settings/selling_settings.py index 47162287ab..febf3754ef 100644 --- a/selling/doctype/selling_settings/selling_settings.py +++ b/selling/doctype/selling_settings/selling_settings.py @@ -8,5 +8,5 @@ class DocType: self.doc, self.doclist = d, dl def validate(self): - for key in ["cust_master_name", "customer_group", "territory", "allow_same_sales_rate"]: + for key in ["cust_master_name", "customer_group", "territory", "maintain_same_sales_rate"]: webnotes.conn.set_default(key, self.doc.fields.get(key, "")) diff --git a/stock/doctype/delivery_note/delivery_note.py b/stock/doctype/delivery_note/delivery_note.py index f7283eb862..3f8a43883f 100644 --- a/stock/doctype/delivery_note/delivery_note.py +++ b/stock/doctype/delivery_note/delivery_note.py @@ -113,21 +113,24 @@ class DocType(SellingController): if not self.doc.installation_status: self.doc.installation_status = 'Not Installed' def validate_with_previous_doc(self): - super(DocType, self).validate_with_previous_doc(self.tname, { - "Sales Order": { - "ref_dn_field": "prevdoc_docname", - "compare_fields": [["customer", "="], ["company", "="], ["project_name", "="], - ["currency", "="]], - }, - }) - if cint(webnotes.defaults.get_global_default('maintain_same_sales_rate')): + prev_doctype = [d.prevdoc_doctype for d in self.doclist.get({ + "parentfield": "delivery_note_details", "prevdoc_doctype": ["!=", ""]})] + if prev_doctype: super(DocType, self).validate_with_previous_doc(self.tname, { - "Sales Order Item": { - "ref_dn_field": "prevdoc_detail_docname", - "compare_fields": [["export_rate", "="]], - "is_child_table": True - } + prev_doctype[0]: { + "ref_dn_field": "prevdoc_docname", + "compare_fields": [["customer", "="], ["company", "="], ["project_name", "="], + ["currency", "="]], + }, }) + if cint(webnotes.defaults.get_global_default('maintain_same_sales_rate')): + super(DocType, self).validate_with_previous_doc(self.tname, { + prev_doctype[0] + " Item": { + "ref_dn_field": "prevdoc_detail_docname", + "compare_fields": [["export_rate", "="]], + "is_child_table": True + } + }) def validate_proj_cust(self):