From 2f957f27b0578620f2916eaa7f8696d28ba98b72 Mon Sep 17 00:00:00 2001 From: Anand Doshi Date: Fri, 8 Apr 2016 17:36:10 +0530 Subject: [PATCH] [fix] apply Tax Rule for lead --- erpnext/accounts/party.py | 6 +- erpnext/controllers/selling_controller.py | 5 +- erpnext/crm/doctype/lead/lead.py | 10 ++- erpnext/public/js/utils/party.js | 72 ++++++++++++------- .../selling/doctype/quotation/quotation.js | 14 ++-- 5 files changed, 73 insertions(+), 34 deletions(-) diff --git a/erpnext/accounts/party.py b/erpnext/accounts/party.py index 0c8d999a98..2101a25230 100644 --- a/erpnext/accounts/party.py +++ b/erpnext/accounts/party.py @@ -299,8 +299,12 @@ def set_taxes(party, party_type, posting_date, company, customer_group=None, sup else: args.update(get_party_details(party, party_type)) - if party_type=="Customer": + if party_type in ("Customer", "Lead"): args.update({"tax_type": "Sales"}) + + if party_type=='Lead': + args['customer'] = None + del args['lead'] else: args.update({"tax_type": "Purchase"}) diff --git a/erpnext/controllers/selling_controller.py b/erpnext/controllers/selling_controller.py index b8b2c31385..d12486d304 100644 --- a/erpnext/controllers/selling_controller.py +++ b/erpnext/controllers/selling_controller.py @@ -51,7 +51,10 @@ class SellingController(StockController): elif getattr(self, "lead", None): from erpnext.crm.doctype.lead.lead import get_lead_details - self.update_if_missing(get_lead_details(self.lead)) + self.update_if_missing(get_lead_details( + self.lead, + posting_date=self.get('transaction_date') or self.get('posting_date'), + company=self.company)) def set_price_list_and_item_details(self): self.set_price_list_currency("Selling") diff --git a/erpnext/crm/doctype/lead/lead.py b/erpnext/crm/doctype/lead/lead.py index ea06f53c3e..a743e56e91 100644 --- a/erpnext/crm/doctype/lead/lead.py +++ b/erpnext/crm/doctype/lead/lead.py @@ -10,6 +10,7 @@ from frappe.model.mapper import get_mapped_doc from erpnext.controllers.selling_controller import SellingController from erpnext.utilities.address_and_contact import load_address_and_contact +from erpnext.accounts.party import set_taxes sender_field = "email_id" @@ -58,7 +59,7 @@ class Lead(SellingController): def check_email_id_is_unique(self): if self.email_id: # validate email is unique - duplicate_leads = frappe.db.sql_list("""select name from tabLead + duplicate_leads = frappe.db.sql_list("""select name from tabLead where email_id=%s and name!=%s""", (self.email_id, self.name)) if duplicate_leads: @@ -138,7 +139,7 @@ def make_quotation(source_name, target_doc=None): return target_doc @frappe.whitelist() -def get_lead_details(lead): +def get_lead_details(lead, posting_date=None, company=None): if not lead: return {} from erpnext.accounts.party import set_address_details @@ -158,4 +159,9 @@ def get_lead_details(lead): set_address_details(out, lead, "Lead") + taxes_and_charges = set_taxes(None, 'Lead', posting_date, company, + billing_address=out.get('customer_address'), shipping_address=out.get('shipping_address_name')) + if taxes_and_charges: + out['taxes_and_charges'] = taxes_and_charges + return out diff --git a/erpnext/public/js/utils/party.js b/erpnext/public/js/utils/party.js index 1896f88884..e57fbffa1d 100644 --- a/erpnext/public/js/utils/party.js +++ b/erpnext/public/js/utils/party.js @@ -69,37 +69,59 @@ erpnext.utils.get_address_display = function(frm, address_field, display_field, if(r.message) { frm.set_value(display_field, r.message) } - - if(frappe.meta.get_docfield(frm.doc.doctype, "taxes") && !is_your_company_address) { - if(!erpnext.utils.validate_mandatory(frm, "Customer/Supplier", - frm.doc.customer || frm.doc.supplier, address_field)) return; - if(!erpnext.utils.validate_mandatory(frm, "Posting/Transaction Date", - frm.doc.posting_date || frm.doc.transaction_date, address_field)) return; - } else return; - - frappe.call({ - method: "erpnext.accounts.party.set_taxes", - args: { - "party": frm.doc.customer || frm.doc.supplier, - "party_type": (frm.doc.customer ? "Customer" : "Supplier"), - "posting_date": frm.doc.posting_date || frm.doc.transaction_date, - "company": frm.doc.company, - "billing_address": ((frm.doc.customer) ? (frm.doc.customer_address) : (frm.doc.supplier_address)), - "shipping_address": frm.doc.shipping_address_name - }, - callback: function(r) { - if(r.message){ - frm.set_value("taxes_and_charges", r.message) - } - } - }); + erpnext.utils.set_taxes(frm, address_field, display_field, is_your_company_address); } }) } else { frm.set_value(display_field, null); } - + +}; + +erpnext.utils.set_taxes = function(frm, address_field, display_field, is_your_company_address) { + if(frappe.meta.get_docfield(frm.doc.doctype, "taxes") && !is_your_company_address) { + if(!erpnext.utils.validate_mandatory(frm, "Lead/Customer/Supplier", + frm.doc.customer || frm.doc.supplier || frm.doc.lead, address_field)) { + return; + } + + if(!erpnext.utils.validate_mandatory(frm, "Posting/Transaction Date", + frm.doc.posting_date || frm.doc.transaction_date, address_field)) { + return; + } + } else { + return; + } + + var party_type, party; + if (frm.doc.lead) { + party_type = 'Lead'; + party = frm.doc.lead; + } else if (frm.doc.customer) { + party_type = 'Customer'; + party = frm.doc.customer; + } else if (frm.doc.supplier) { + party_type = 'Supplier'; + party = frm.doc.supplier; + } + + frappe.call({ + method: "erpnext.accounts.party.set_taxes", + args: { + "party": party, + "party_type": party_type, + "posting_date": frm.doc.posting_date || frm.doc.transaction_date, + "company": frm.doc.company, + "billing_address": ((frm.doc.customer || frm.doc.lead) ? (frm.doc.customer_address) : (frm.doc.supplier_address)), + "shipping_address": frm.doc.shipping_address_name + }, + callback: function(r) { + if(r.message){ + frm.set_value("taxes_and_charges", r.message) + } + } + }); } erpnext.utils.get_contact_details = function(frm) { diff --git a/erpnext/selling/doctype/quotation/quotation.js b/erpnext/selling/doctype/quotation/quotation.js index 3e90b97dd3..649faaf3b9 100644 --- a/erpnext/selling/doctype/quotation/quotation.js +++ b/erpnext/selling/doctype/quotation/quotation.js @@ -25,7 +25,7 @@ erpnext.selling.QuotationController = erpnext.selling.SellingController.extend({ cur_frm.add_custom_button(__('Lost'), cur_frm.cscript['Declare Order Lost'], __("Status")); } - + cur_frm.page.set_inner_btn_group_as_primary(__("Make")); } @@ -47,7 +47,7 @@ erpnext.selling.QuotationController = erpnext.selling.SellingController.extend({ } this.toggle_reqd_lead_customer(); - + }, quotation_to: function() { @@ -96,7 +96,11 @@ erpnext.selling.QuotationController = erpnext.selling.SellingController.extend({ var me = this; frappe.call({ method: "erpnext.crm.doctype.lead.lead.get_lead_details", - args: { "lead": this.frm.doc.lead }, + args: { + 'lead': this.frm.doc.lead, + 'posting_date': this.frm.doc.transaction_date, + 'company': this.frm.doc.company, + }, callback: function(r) { if(r.message) { me.frm.updating_party_details = true; @@ -166,6 +170,6 @@ frappe.ui.form.on("Quotation Item", "items_on_form_rendered", function(frm, cdt, frappe.ui.form.on("Quotation Item", "stock_balance", function(frm, cdt, cdn) { var d = frappe.model.get_doc(cdt, cdn); - frappe.route_options = {"item_code": d.item_code}; + frappe.route_options = {"item_code": d.item_code}; frappe.set_route("query-report", "Stock Balance"); -}) \ No newline at end of file +})