diff --git a/erpnext/accounts/party.py b/erpnext/accounts/party.py index 4bbb2c110d7..167efee5128 100644 --- a/erpnext/accounts/party.py +++ b/erpnext/accounts/party.py @@ -71,6 +71,7 @@ def get_party_details( party_address=None, company_address=None, shipping_address=None, + dispatch_address=None, pos_profile=None, ): if not party: @@ -92,6 +93,7 @@ def get_party_details( party_address, company_address, shipping_address, + dispatch_address, pos_profile, ) @@ -111,6 +113,7 @@ def _get_party_details( party_address=None, company_address=None, shipping_address=None, + dispatch_address=None, pos_profile=None, ): party_details = frappe._dict( @@ -134,6 +137,7 @@ def _get_party_details( party_address, company_address, shipping_address, + dispatch_address, ignore_permissions=ignore_permissions, ) set_contact_details(party_details, party, party_type) @@ -191,6 +195,7 @@ def set_address_details( party_address=None, company_address=None, shipping_address=None, + dispatch_address=None, *, ignore_permissions=False, ): @@ -219,6 +224,21 @@ def set_address_details( get_fetch_values(doctype, "shipping_address_name", party_details.shipping_address_name) ) + # dispatch address + elif party_type == "Supplier": + party_details.dispatch_address = dispatch_address or get_party_shipping_address( + party_type, party.name + ) + + party_details.dispatch_address_display = render_address( + party_details["dispatch_address"], check_permissions=not ignore_permissions + ) + + if doctype: + party_details.update( + get_fetch_values(doctype, "dispatch_address", party_details.dispatch_address) + ) + if company_address: party_details.company_address = company_address else: @@ -256,6 +276,24 @@ def set_address_details( **get_fetch_values(doctype, "shipping_address", party_details.billing_address), ) + if doctype != "Supplier Quotation": + if dispatch_address: + party_details.update( + dispatch_address=dispatch_address, + dispatch_address_display=render_address( + dispatch_address, check_permissions=not ignore_permissions + ), + **get_fetch_values(doctype, "dispatch_address", dispatch_address), + ) + + # dispatch address - if not already set + if not party_details.dispatch_address: + party_details.update( + dispatch_address=party_details.supplier_address, + dispatch_address_display=party_details.address_display, + **get_fetch_values(doctype, "dispatch_address", party_details.supplier_address), + ) + party_address, shipping_address = ( party_details.get(billing_address_field), party_details.shipping_address_name, diff --git a/erpnext/controllers/buying_controller.py b/erpnext/controllers/buying_controller.py index 7f4723d6a24..6d75d8ff07c 100644 --- a/erpnext/controllers/buying_controller.py +++ b/erpnext/controllers/buying_controller.py @@ -141,6 +141,7 @@ class BuyingController(SubcontractingController): company=self.company, party_address=self.get("supplier_address"), shipping_address=self.get("shipping_address"), + dispatch_address=self.get("dispatch_address"), company_address=self.get("billing_address"), fetch_payment_terms_template=not self.get("ignore_default_payment_terms_template"), ignore_permissions=self.flags.ignore_permissions, @@ -242,6 +243,7 @@ class BuyingController(SubcontractingController): address_dict = { "supplier_address": "address_display", "shipping_address": "shipping_address_display", + "dispatch_address": "dispatch_address_display", "billing_address": "billing_address_display", } diff --git a/erpnext/public/js/controllers/buying.js b/erpnext/public/js/controllers/buying.js index cbc59867e46..e0ed9f2b91e 100644 --- a/erpnext/public/js/controllers/buying.js +++ b/erpnext/public/js/controllers/buying.js @@ -54,6 +54,18 @@ erpnext.buying = { return erpnext.queries.company_address_query(this.frm.doc) }); } + + if(this.frm.get_field('dispatch_address')) { + this.frm.set_query("dispatch_address", () => { + if(this.frm.doc.supplier) { + return { + query: 'frappe.contacts.doctype.address.address.address_query', + filters: { link_doctype: 'Supplier', link_name: this.frm.doc.supplier } + }; + } else + return erpnext.queries.dispatch_address_query(this.frm.doc) + }); + } } setup_queries(doc, cdt, cdn) { diff --git a/erpnext/public/js/utils/party.js b/erpnext/public/js/utils/party.js index a85423b8340..958defa32c7 100644 --- a/erpnext/public/js/utils/party.js +++ b/erpnext/public/js/utils/party.js @@ -71,6 +71,10 @@ erpnext.utils.get_party_details = function (frm, method, args, callback) { if (!args.shipping_address && frm.doc.shipping_address) { args.shipping_address = frm.doc.shipping_address; } + + if (!args.dispatch_address && frm.doc.dispatch_address) { + args.dispatch_address = frm.doc.dispatch_address; + } } if (frappe.meta.get_docfield(frm.doc.doctype, "taxes")) {