From 5f101e763565f4146a44103ba94f56f670d69111 Mon Sep 17 00:00:00 2001 From: Karm Soni Date: Wed, 9 Apr 2025 19:19:47 +0530 Subject: [PATCH 01/10] feat: add dispatch address fields to purchase doctypes (cherry picked from commit 54b5205221fe5447b01938abda5fc25b90892994) # Conflicts: # erpnext/accounts/doctype/purchase_invoice/purchase_invoice.json # erpnext/buying/doctype/purchase_order/purchase_order.json --- .../purchase_invoice/purchase_invoice.json | 31 ++++++++++++++- .../purchase_invoice/purchase_invoice.py | 2 + .../purchase_order/purchase_order.json | 39 ++++++++++++++++++- .../doctype/purchase_order/purchase_order.py | 2 + .../purchase_receipt/purchase_receipt.json | 22 ++++++++++- .../purchase_receipt/purchase_receipt.py | 2 + 6 files changed, 93 insertions(+), 5 deletions(-) diff --git a/erpnext/accounts/doctype/purchase_invoice/purchase_invoice.json b/erpnext/accounts/doctype/purchase_invoice/purchase_invoice.json index 0584b6026a7..b7e110e6a69 100644 --- a/erpnext/accounts/doctype/purchase_invoice/purchase_invoice.json +++ b/erpnext/accounts/doctype/purchase_invoice/purchase_invoice.json @@ -144,8 +144,10 @@ "contact_email", "company_shipping_address_section", "shipping_address", - "column_break_126", "shipping_address_display", + "column_break_126", + "dispatch_address", + "dispatch_address_display", "company_billing_address_section", "billing_address", "column_break_130", @@ -1627,13 +1629,37 @@ "fieldname": "update_outstanding_for_self", "fieldtype": "Check", "label": "Update Outstanding for Self" +<<<<<<< HEAD +======= + }, + { + "fieldname": "sender", + "fieldtype": "Data", + "label": "Sender", + "options": "Email" + }, + { + "fieldname": "dispatch_address_display", + "fieldtype": "Text Editor", + "label": "Dispatch Address", + "print_hide": 1, + "read_only": 1 + }, + { + "fieldname": "dispatch_address", + "fieldtype": "Link", + "label": "Select Dispatch Address ", + "options": "Address", + "print_hide": 1 +>>>>>>> 54b5205221 (feat: add dispatch address fields to purchase doctypes) } ], + "grid_page_length": 50, "icon": "fa fa-file-text", "idx": 204, "is_submittable": 1, "links": [], - "modified": "2025-01-14 11:39:04.564610", + "modified": "2025-04-09 16:49:22.175081", "modified_by": "Administrator", "module": "Accounts", "name": "Purchase Invoice", @@ -1688,6 +1714,7 @@ "write": 1 } ], + "row_format": "Dynamic", "search_fields": "posting_date, supplier, bill_no, base_grand_total, outstanding_amount", "show_name_in_global_search": 1, "sort_field": "modified", diff --git a/erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py b/erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py index 98d1850bd8f..805e76ad64c 100644 --- a/erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py +++ b/erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py @@ -117,6 +117,8 @@ class PurchaseInvoice(BuyingController): currency: DF.Link | None disable_rounded_total: DF.Check discount_amount: DF.Currency + dispatch_address: DF.Link | None + dispatch_address_display: DF.TextEditor | None due_date: DF.Date | None from_date: DF.Date | None grand_total: DF.Currency diff --git a/erpnext/buying/doctype/purchase_order/purchase_order.json b/erpnext/buying/doctype/purchase_order/purchase_order.json index 8f4b035361a..3eda1789140 100644 --- a/erpnext/buying/doctype/purchase_order/purchase_order.json +++ b/erpnext/buying/doctype/purchase_order/purchase_order.json @@ -110,8 +110,10 @@ "contact_email", "shipping_address_section", "shipping_address", - "column_break_99", "shipping_address_display", + "column_break_99", + "dispatch_address", + "dispatch_address_display", "company_billing_address_section", "billing_address", "column_break_103", @@ -1269,13 +1271,47 @@ "fieldtype": "Tab Break", "label": "Connections", "show_dashboard": 1 +<<<<<<< HEAD +======= + }, + { + "fieldname": "advance_payment_status", + "fieldtype": "Select", + "hidden": 1, + "in_standard_filter": 1, + "label": "Advance Payment Status", + "no_copy": 1, + "oldfieldname": "status", + "oldfieldtype": "Select", + "options": "Not Initiated\nInitiated\nPartially Paid\nFully Paid", + "print_hide": 1 + }, + { + "fieldname": "dispatch_address", + "fieldtype": "Link", + "label": "Dispatch Address", + "options": "Address", + "print_hide": 1 + }, + { + "fieldname": "dispatch_address_display", + "fieldtype": "Text Editor", + "label": "Dispatch Address Details", + "print_hide": 1, + "read_only": 1 +>>>>>>> 54b5205221 (feat: add dispatch address fields to purchase doctypes) } ], + "grid_page_length": 50, "icon": "fa fa-file-text", "idx": 105, "is_submittable": 1, "links": [], +<<<<<<< HEAD "modified": "2024-03-20 16:03:31.611808", +======= + "modified": "2025-04-09 16:54:08.836106", +>>>>>>> 54b5205221 (feat: add dispatch address fields to purchase doctypes) "modified_by": "Administrator", "module": "Buying", "name": "Purchase Order", @@ -1322,6 +1358,7 @@ "write": 1 } ], + "row_format": "Dynamic", "search_fields": "status, transaction_date, supplier, grand_total", "show_name_in_global_search": 1, "sort_field": "modified", diff --git a/erpnext/buying/doctype/purchase_order/purchase_order.py b/erpnext/buying/doctype/purchase_order/purchase_order.py index ee8ba35222f..a18d9fce186 100644 --- a/erpnext/buying/doctype/purchase_order/purchase_order.py +++ b/erpnext/buying/doctype/purchase_order/purchase_order.py @@ -92,6 +92,8 @@ class PurchaseOrder(BuyingController): customer_name: DF.Data | None disable_rounded_total: DF.Check discount_amount: DF.Currency + dispatch_address: DF.Link | None + dispatch_address_display: DF.TextEditor | None from_date: DF.Date | None grand_total: DF.Currency group_same_items: DF.Check diff --git a/erpnext/stock/doctype/purchase_receipt/purchase_receipt.json b/erpnext/stock/doctype/purchase_receipt/purchase_receipt.json index 643f9e7a82f..8fce3be270e 100755 --- a/erpnext/stock/doctype/purchase_receipt/purchase_receipt.json +++ b/erpnext/stock/doctype/purchase_receipt/purchase_receipt.json @@ -113,8 +113,10 @@ "contact_email", "section_break_98", "shipping_address", - "column_break_100", "shipping_address_display", + "column_break_100", + "dispatch_address", + "dispatch_address_display", "billing_address_section", "billing_address", "column_break_104", @@ -1267,13 +1269,28 @@ "no_copy": 1, "print_hide": 1, "read_only": 1 + }, + { + "fieldname": "dispatch_address", + "fieldtype": "Link", + "label": "Dispatch Address Template", + "options": "Address", + "print_hide": 1 + }, + { + "fieldname": "dispatch_address_display", + "fieldtype": "Text Editor", + "label": "Dispatch Address", + "print_hide": 1, + "read_only": 1 } ], + "grid_page_length": 50, "icon": "fa fa-truck", "idx": 261, "is_submittable": 1, "links": [], - "modified": "2024-11-13 16:55:14.129055", + "modified": "2025-04-09 16:52:19.323878", "modified_by": "Administrator", "module": "Stock", "name": "Purchase Receipt", @@ -1334,6 +1351,7 @@ "write": 1 } ], + "row_format": "Dynamic", "search_fields": "status, posting_date, supplier", "show_name_in_global_search": 1, "sort_field": "modified", diff --git a/erpnext/stock/doctype/purchase_receipt/purchase_receipt.py b/erpnext/stock/doctype/purchase_receipt/purchase_receipt.py index 48e161980db..b7cf97589af 100644 --- a/erpnext/stock/doctype/purchase_receipt/purchase_receipt.py +++ b/erpnext/stock/doctype/purchase_receipt/purchase_receipt.py @@ -69,6 +69,8 @@ class PurchaseReceipt(BuyingController): currency: DF.Link disable_rounded_total: DF.Check discount_amount: DF.Currency + dispatch_address: DF.Link | None + dispatch_address_display: DF.TextEditor | None grand_total: DF.Currency group_same_items: DF.Check ignore_pricing_rule: DF.Check From 1fe1563daba678875c95ca26e193d94bd1c2039a Mon Sep 17 00:00:00 2001 From: Karm Soni Date: Mon, 14 Apr 2025 16:41:31 +0530 Subject: [PATCH 02/10] feat: add dispatch address support in party details and controllers (cherry picked from commit 53d0b7be232a8af935dfbbee545cd86e9d5a290a) --- erpnext/accounts/party.py | 38 ++++++++++++++++++++++++ erpnext/controllers/buying_controller.py | 2 ++ erpnext/public/js/controllers/buying.js | 12 ++++++++ erpnext/public/js/utils/party.js | 4 +++ 4 files changed, 56 insertions(+) diff --git a/erpnext/accounts/party.py b/erpnext/accounts/party.py index 5ca50b8d7c6..ca63abeb282 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 c2a36ac36d0..267b0ed5dd5 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, @@ -238,6 +239,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")) { From 290f0b94e56cbe92c684fa50b19f69fdef2a8f95 Mon Sep 17 00:00:00 2001 From: Karm Soni Date: Mon, 14 Apr 2025 18:06:44 +0530 Subject: [PATCH 03/10] fix: enhance dispatch address query logic and add supplier address query (cherry picked from commit 9a859e54b62d914a574b6e0005c8daebc1f21a86) --- erpnext/public/js/controllers/buying.js | 12 +++++------- erpnext/public/js/queries.js | 17 +++++++++++++++++ 2 files changed, 22 insertions(+), 7 deletions(-) diff --git a/erpnext/public/js/controllers/buying.js b/erpnext/public/js/controllers/buying.js index e0ed9f2b91e..a39a4ddf13a 100644 --- a/erpnext/public/js/controllers/buying.js +++ b/erpnext/public/js/controllers/buying.js @@ -57,13 +57,11 @@ erpnext.buying = { 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) + if(this.frm.doc.is_return){ + return erpnext.queries.company_address_query(this.frm.doc); + } + + return erpnext.queries.supplier_address_query(this.frm.doc); }); } } diff --git a/erpnext/public/js/queries.js b/erpnext/public/js/queries.js index 63651ec8759..cfc602acf00 100644 --- a/erpnext/public/js/queries.js +++ b/erpnext/public/js/queries.js @@ -112,6 +112,23 @@ $.extend(erpnext.queries, { }; }, + supplier_address_query: function (doc) { + if (!doc.supplier) { + cur_frm.scroll_to_field("supplier"); + frappe.show_alert({ + message: __("Please set {0} first.", [ + __(frappe.meta.get_label(doc.doctype, "supplier", doc.name)), + ]), + indicator: "orange", + }); + } + + return { + query: "frappe.contacts.doctype.address.address.address_query", + filters: { link_doctype: "Supplier", link_name: doc.supplier }, + }; + }, + dispatch_address_query: function (doc) { var filters = { link_doctype: "Company", link_name: doc.company || "" }; var is_drop_ship = doc.items.some((item) => item.delivered_by_supplier); From 5c300b893b49131f2d3fda27823619925fddea78 Mon Sep 17 00:00:00 2001 From: Karm Soni Date: Mon, 14 Apr 2025 18:48:32 +0530 Subject: [PATCH 04/10] fix: remove use of cur_frm (cherry picked from commit c4bd3123fb8e6822d267469ffe652e13381d2741) --- erpnext/public/js/controllers/buying.js | 2 +- erpnext/public/js/queries.js | 10 +++++----- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/erpnext/public/js/controllers/buying.js b/erpnext/public/js/controllers/buying.js index a39a4ddf13a..630c6609c7b 100644 --- a/erpnext/public/js/controllers/buying.js +++ b/erpnext/public/js/controllers/buying.js @@ -61,7 +61,7 @@ erpnext.buying = { return erpnext.queries.company_address_query(this.frm.doc); } - return erpnext.queries.supplier_address_query(this.frm.doc); + return erpnext.queries.supplier_address_query(this.frm); }); } } diff --git a/erpnext/public/js/queries.js b/erpnext/public/js/queries.js index cfc602acf00..801a78dad6a 100644 --- a/erpnext/public/js/queries.js +++ b/erpnext/public/js/queries.js @@ -112,12 +112,12 @@ $.extend(erpnext.queries, { }; }, - supplier_address_query: function (doc) { - if (!doc.supplier) { - cur_frm.scroll_to_field("supplier"); + supplier_address_query: function (frm) { + if (!frm.doc.supplier) { + frm.scroll_to_field("supplier"); frappe.show_alert({ message: __("Please set {0} first.", [ - __(frappe.meta.get_label(doc.doctype, "supplier", doc.name)), + __(frappe.meta.get_label(frm.doc.doctype, "supplier", frm.doc.name)), ]), indicator: "orange", }); @@ -125,7 +125,7 @@ $.extend(erpnext.queries, { return { query: "frappe.contacts.doctype.address.address.address_query", - filters: { link_doctype: "Supplier", link_name: doc.supplier }, + filters: { link_doctype: "Supplier", link_name: frm.doc.supplier }, }; }, From 93ea2f93b686a5501f112e8b2fa5832982ff58f2 Mon Sep 17 00:00:00 2001 From: Karm Soni Date: Thu, 17 Apr 2025 16:32:59 +0530 Subject: [PATCH 05/10] feat: add display dispatch address when dispatch address is selected (cherry picked from commit d12998e524469f2e49c9660a3043dca0188352f0) --- erpnext/public/js/controllers/buying.js | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/erpnext/public/js/controllers/buying.js b/erpnext/public/js/controllers/buying.js index 630c6609c7b..c14a0d0cdc2 100644 --- a/erpnext/public/js/controllers/buying.js +++ b/erpnext/public/js/controllers/buying.js @@ -305,6 +305,12 @@ erpnext.buying = { "shipping_address_display", true); } + dispatch_address(){ + var me = this; + erpnext.utils.get_address_display(this.frm, "dispatch_address", + "dispatch_address_display", true); + } + billing_address() { erpnext.utils.get_address_display(this.frm, "billing_address", "billing_address_display", true); From ac3b2ba0032eb40e61bb7cdc3eee398bb6563874 Mon Sep 17 00:00:00 2001 From: Karm Soni Date: Fri, 18 Apr 2025 13:24:47 +0530 Subject: [PATCH 06/10] fix: correct query for dispatch_address; remove unnecessary code; increase reusability; (cherry picked from commit 999ffe86a7ef3ca3227290817d5ee6d57ffb8819) --- erpnext/accounts/party.py | 69 ++++++++++--------------- erpnext/public/js/controllers/buying.js | 6 +-- erpnext/public/js/queries.js | 17 ------ 3 files changed, 27 insertions(+), 65 deletions(-) diff --git a/erpnext/accounts/party.py b/erpnext/accounts/party.py index ca63abeb282..ab00097e426 100644 --- a/erpnext/accounts/party.py +++ b/erpnext/accounts/party.py @@ -202,43 +202,44 @@ def set_address_details( billing_address_field = ( "customer_address" if party_type in ["Lead", "Prospect"] else party_type.lower() + "_address" ) + party_details[billing_address_field] = party_address or get_default_address(party_type, party.name) if doctype: party_details.update( get_fetch_values(doctype, billing_address_field, party_details[billing_address_field]) ) + # address display party_details.address_display = render_address( party_details[billing_address_field], check_permissions=not ignore_permissions ) - # shipping address + + # Initialize shipping address fields based on party type if party_type in ["Customer", "Lead"]: - party_details.shipping_address_name = shipping_address or get_party_shipping_address( - party_type, party.name - ) - party_details.shipping_address = render_address( - party_details["shipping_address_name"], check_permissions=not ignore_permissions - ) - if doctype: - party_details.update( - get_fetch_values(doctype, "shipping_address_name", party_details.shipping_address_name) + party_shipping_address_field = "shipping_address_name" + party_shipping_address_display_field = "shipping_address" + is_party_type_supplier = False + + else: # Default to Supplier + party_shipping_address_field = "dispatch_address" + party_shipping_address_display_field = "dispatch_address_display" + is_party_type_supplier = True + + party_details[party_shipping_address_field] = ( + dispatch_address if is_party_type_supplier else shipping_address + ) or get_party_shipping_address(party_type, party.name) + + party_details[party_shipping_address_display_field] = render_address( + party_details[party_shipping_address_field], check_permissions=not ignore_permissions + ) + + if doctype: + party_details.update( + get_fetch_values( + doctype, party_shipping_address_field, party_details[party_shipping_address_field] ) - - # 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: @@ -276,27 +277,9 @@ 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, + party_details.get(party_shipping_address_field), ) party_details["tax_category"] = get_address_tax_category( diff --git a/erpnext/public/js/controllers/buying.js b/erpnext/public/js/controllers/buying.js index c14a0d0cdc2..2b854d649d8 100644 --- a/erpnext/public/js/controllers/buying.js +++ b/erpnext/public/js/controllers/buying.js @@ -57,11 +57,7 @@ erpnext.buying = { if(this.frm.get_field('dispatch_address')) { this.frm.set_query("dispatch_address", () => { - if(this.frm.doc.is_return){ - return erpnext.queries.company_address_query(this.frm.doc); - } - - return erpnext.queries.supplier_address_query(this.frm); + return erpnext.queries.address_query(this.frm.doc); }); } } diff --git a/erpnext/public/js/queries.js b/erpnext/public/js/queries.js index 801a78dad6a..63651ec8759 100644 --- a/erpnext/public/js/queries.js +++ b/erpnext/public/js/queries.js @@ -112,23 +112,6 @@ $.extend(erpnext.queries, { }; }, - supplier_address_query: function (frm) { - if (!frm.doc.supplier) { - frm.scroll_to_field("supplier"); - frappe.show_alert({ - message: __("Please set {0} first.", [ - __(frappe.meta.get_label(frm.doc.doctype, "supplier", frm.doc.name)), - ]), - indicator: "orange", - }); - } - - return { - query: "frappe.contacts.doctype.address.address.address_query", - filters: { link_doctype: "Supplier", link_name: frm.doc.supplier }, - }; - }, - dispatch_address_query: function (doc) { var filters = { link_doctype: "Company", link_name: doc.company || "" }; var is_drop_ship = doc.items.some((item) => item.delivered_by_supplier); From 62261a276f2ff0fcacf5aae3e4878c543b70c5f6 Mon Sep 17 00:00:00 2001 From: Smit Vora Date: Mon, 21 Apr 2025 13:44:20 +0530 Subject: [PATCH 07/10] refactor: address field position (cherry picked from commit 8ccd7a3e61e72a711d9cbdaa5e89dddaa6a42e05) # Conflicts: # erpnext/public/scss/erpnext.scss --- .../doctype/purchase_invoice/purchase_invoice.json | 8 ++++---- .../doctype/purchase_order/purchase_order.json | 6 +++--- erpnext/public/scss/erpnext.scss | 13 +++++++++++++ .../doctype/purchase_receipt/purchase_receipt.json | 8 ++++---- 4 files changed, 24 insertions(+), 11 deletions(-) diff --git a/erpnext/accounts/doctype/purchase_invoice/purchase_invoice.json b/erpnext/accounts/doctype/purchase_invoice/purchase_invoice.json index b7e110e6a69..b4b4e403646 100644 --- a/erpnext/accounts/doctype/purchase_invoice/purchase_invoice.json +++ b/erpnext/accounts/doctype/purchase_invoice/purchase_invoice.json @@ -143,11 +143,11 @@ "contact_mobile", "contact_email", "company_shipping_address_section", - "shipping_address", - "shipping_address_display", - "column_break_126", "dispatch_address", "dispatch_address_display", + "column_break_126", + "shipping_address", + "shipping_address_display", "company_billing_address_section", "billing_address", "column_break_130", @@ -1548,7 +1548,7 @@ { "fieldname": "company_shipping_address_section", "fieldtype": "Section Break", - "label": "Company Shipping Address" + "label": "Shipping Address" }, { "fieldname": "column_break_126", diff --git a/erpnext/buying/doctype/purchase_order/purchase_order.json b/erpnext/buying/doctype/purchase_order/purchase_order.json index 3eda1789140..fad9f976c8a 100644 --- a/erpnext/buying/doctype/purchase_order/purchase_order.json +++ b/erpnext/buying/doctype/purchase_order/purchase_order.json @@ -109,11 +109,11 @@ "contact_mobile", "contact_email", "shipping_address_section", - "shipping_address", - "shipping_address_display", - "column_break_99", "dispatch_address", "dispatch_address_display", + "column_break_99", + "shipping_address", + "shipping_address_display", "company_billing_address_section", "billing_address", "column_break_103", diff --git a/erpnext/public/scss/erpnext.scss b/erpnext/public/scss/erpnext.scss index 29a2696470f..eab615db7e5 100644 --- a/erpnext/public/scss/erpnext.scss +++ b/erpnext/public/scss/erpnext.scss @@ -590,6 +590,19 @@ body[data-route="pos"] { justify-content: center; } +<<<<<<< HEAD .frappe-control[data-fieldname="other_charges_calculation"] .ql-editor { +======= +.frappe-control[data-fieldname="other_charges_calculation"] .ql-editor, +.frappe-control[data-fieldname="address_display"] .ql-editor, +.frappe-control[data-fieldname="shipping_address_display"] .ql-editor, +.frappe-control[data-fieldname="shipping_address"] .ql-editor, +.frappe-control[data-fieldname="dispatch_address_display"] .ql-editor, +.frappe-control[data-fieldname="dispatch_address"] .ql-editor, +.frappe-control[data-fieldname="source_address_display"] .ql-editor, +.frappe-control[data-fieldname="target_address_display"] .ql-editor, +.frappe-control[data-fieldname="billing_address_display"] .ql-editor, +.frappe-control[data-fieldname="company_address_display"] .ql-editor { +>>>>>>> 8ccd7a3e61 (refactor: address field position) white-space: normal; } diff --git a/erpnext/stock/doctype/purchase_receipt/purchase_receipt.json b/erpnext/stock/doctype/purchase_receipt/purchase_receipt.json index 8fce3be270e..c3933780203 100755 --- a/erpnext/stock/doctype/purchase_receipt/purchase_receipt.json +++ b/erpnext/stock/doctype/purchase_receipt/purchase_receipt.json @@ -112,11 +112,11 @@ "contact_mobile", "contact_email", "section_break_98", - "shipping_address", - "shipping_address_display", - "column_break_100", "dispatch_address", "dispatch_address_display", + "column_break_100", + "shipping_address", + "shipping_address_display", "billing_address_section", "billing_address", "column_break_104", @@ -1200,7 +1200,7 @@ { "fieldname": "section_break_98", "fieldtype": "Section Break", - "label": "Company Shipping Address" + "label": "Shipping Address" }, { "fieldname": "billing_address_section", From 7baa8f50fb70fa75d655c1b2cf610dcb90288b3b Mon Sep 17 00:00:00 2001 From: Smit Vora Date: Mon, 21 Apr 2025 13:46:59 +0530 Subject: [PATCH 08/10] refactor: set address details for transactions (cherry picked from commit fb3b7d8c34a08af742bc83a71847a13d5f61dbcf) --- erpnext/accounts/party.py | 54 +++++++++++++++++++-------------------- 1 file changed, 26 insertions(+), 28 deletions(-) diff --git a/erpnext/accounts/party.py b/erpnext/accounts/party.py index ab00097e426..d6df45d2dfc 100644 --- a/erpnext/accounts/party.py +++ b/erpnext/accounts/party.py @@ -199,47 +199,47 @@ def set_address_details( *, ignore_permissions=False, ): - billing_address_field = ( + # party_billing + party_billing_field = ( "customer_address" if party_type in ["Lead", "Prospect"] else party_type.lower() + "_address" ) - party_details[billing_address_field] = party_address or get_default_address(party_type, party.name) + party_details[party_billing_field] = party_address or get_default_address(party_type, party.name) if doctype: party_details.update( - get_fetch_values(doctype, billing_address_field, party_details[billing_address_field]) + get_fetch_values(doctype, party_billing_field, party_details[party_billing_field]) ) - # address display party_details.address_display = render_address( - party_details[billing_address_field], check_permissions=not ignore_permissions + party_details[party_billing_field], check_permissions=not ignore_permissions ) - # Initialize shipping address fields based on party type + # party_shipping if party_type in ["Customer", "Lead"]: - party_shipping_address_field = "shipping_address_name" - party_shipping_address_display_field = "shipping_address" - is_party_type_supplier = False + party_shipping_field = "shipping_address_name" + party_shipping_display = "shipping_address" + default_shipping = shipping_address - else: # Default to Supplier - party_shipping_address_field = "dispatch_address" - party_shipping_address_display_field = "dispatch_address_display" - is_party_type_supplier = True + else: + # Supplier + party_shipping_field = "dispatch_address" + party_shipping_display = "dispatch_address_display" + default_shipping = dispatch_address - party_details[party_shipping_address_field] = ( - dispatch_address if is_party_type_supplier else shipping_address - ) or get_party_shipping_address(party_type, party.name) + party_details[party_shipping_field] = default_shipping or get_party_shipping_address( + party_type, party.name + ) - party_details[party_shipping_address_display_field] = render_address( - party_details[party_shipping_address_field], check_permissions=not ignore_permissions + party_details[party_shipping_display] = render_address( + party_details[party_shipping_field], check_permissions=not ignore_permissions ) if doctype: party_details.update( - get_fetch_values( - doctype, party_shipping_address_field, party_details[party_shipping_address_field] - ) + get_fetch_values(doctype, party_shipping_field, party_details[party_shipping_field]) ) + # company_address if company_address: party_details.company_address = company_address else: @@ -277,22 +277,20 @@ def set_address_details( **get_fetch_values(doctype, "shipping_address", party_details.billing_address), ) - party_address, shipping_address = ( - party_details.get(billing_address_field), - party_details.get(party_shipping_address_field), + party_billing, party_shipping = ( + party_details.get(party_billing_field), + party_details.get(party_shipping_field), ) party_details["tax_category"] = get_address_tax_category( - party.get("tax_category"), - party_address, - shipping_address if party_type != "Supplier" else party_address, + party.get("tax_category"), party_billing, party_shipping ) if doctype in TRANSACTION_TYPES: with temporary_flag("company", company): get_regional_address_details(party_details, doctype, company) - return party_address, shipping_address + return party_billing, party_shipping @erpnext.allow_regional From d8c0e7156e4664d9f7a871e8c1eebda227626ea3 Mon Sep 17 00:00:00 2001 From: Smit Vora Date: Mon, 21 Apr 2025 13:49:14 +0530 Subject: [PATCH 09/10] fix: map dispatch address correctly for inter company transactions (cherry picked from commit ceaba4220bb61eef7f35d54072c8c79049288806) --- erpnext/accounts/doctype/sales_invoice/sales_invoice.py | 5 ++++- erpnext/stock/doctype/delivery_note/delivery_note.py | 5 ++++- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/erpnext/accounts/doctype/sales_invoice/sales_invoice.py b/erpnext/accounts/doctype/sales_invoice/sales_invoice.py index 7761dc832de..ed3003b2511 100644 --- a/erpnext/accounts/doctype/sales_invoice/sales_invoice.py +++ b/erpnext/accounts/doctype/sales_invoice/sales_invoice.py @@ -2298,7 +2298,10 @@ def make_inter_company_transaction(doctype, source_name, target_doc=None): # Invert Addresses update_address(target_doc, "supplier_address", "address_display", source_doc.company_address) update_address( - target_doc, "shipping_address", "shipping_address_display", source_doc.customer_address + target_doc, "dispatch_address", "dispatch_address_display", source_doc.dispatch_address_name + ) + update_address( + target_doc, "shipping_address", "shipping_address_display", source_doc.shipping_address_name ) update_address( target_doc, "billing_address", "billing_address_display", source_doc.customer_address diff --git a/erpnext/stock/doctype/delivery_note/delivery_note.py b/erpnext/stock/doctype/delivery_note/delivery_note.py index ba04abce8f3..689027d55bc 100644 --- a/erpnext/stock/doctype/delivery_note/delivery_note.py +++ b/erpnext/stock/doctype/delivery_note/delivery_note.py @@ -1163,7 +1163,10 @@ def make_inter_company_transaction(doctype, source_name, target_doc=None): # Invert the address on target doc creation update_address(target_doc, "supplier_address", "address_display", source_doc.company_address) update_address( - target_doc, "shipping_address", "shipping_address_display", source_doc.customer_address + target_doc, "dispatch_address", "dispatch_address_display", source_doc.dispatch_address_name + ) + update_address( + target_doc, "shipping_address", "shipping_address_display", source_doc.shipping_address_name ) update_address( target_doc, "billing_address", "billing_address_display", source_doc.customer_address From feb4038c0655b2e441251311691a1972fd4853e8 Mon Sep 17 00:00:00 2001 From: ruthra kumar Date: Mon, 28 Apr 2025 11:36:24 +0530 Subject: [PATCH 10/10] chore: resolve conflicts --- .../purchase_invoice/purchase_invoice.json | 9 --------- .../purchase_order/purchase_order.json | 19 ------------------- erpnext/public/scss/erpnext.scss | 13 ------------- 3 files changed, 41 deletions(-) diff --git a/erpnext/accounts/doctype/purchase_invoice/purchase_invoice.json b/erpnext/accounts/doctype/purchase_invoice/purchase_invoice.json index b4b4e403646..dfdcea5357a 100644 --- a/erpnext/accounts/doctype/purchase_invoice/purchase_invoice.json +++ b/erpnext/accounts/doctype/purchase_invoice/purchase_invoice.json @@ -1629,14 +1629,6 @@ "fieldname": "update_outstanding_for_self", "fieldtype": "Check", "label": "Update Outstanding for Self" -<<<<<<< HEAD -======= - }, - { - "fieldname": "sender", - "fieldtype": "Data", - "label": "Sender", - "options": "Email" }, { "fieldname": "dispatch_address_display", @@ -1651,7 +1643,6 @@ "label": "Select Dispatch Address ", "options": "Address", "print_hide": 1 ->>>>>>> 54b5205221 (feat: add dispatch address fields to purchase doctypes) } ], "grid_page_length": 50, diff --git a/erpnext/buying/doctype/purchase_order/purchase_order.json b/erpnext/buying/doctype/purchase_order/purchase_order.json index fad9f976c8a..7c9362ebaf9 100644 --- a/erpnext/buying/doctype/purchase_order/purchase_order.json +++ b/erpnext/buying/doctype/purchase_order/purchase_order.json @@ -1271,20 +1271,6 @@ "fieldtype": "Tab Break", "label": "Connections", "show_dashboard": 1 -<<<<<<< HEAD -======= - }, - { - "fieldname": "advance_payment_status", - "fieldtype": "Select", - "hidden": 1, - "in_standard_filter": 1, - "label": "Advance Payment Status", - "no_copy": 1, - "oldfieldname": "status", - "oldfieldtype": "Select", - "options": "Not Initiated\nInitiated\nPartially Paid\nFully Paid", - "print_hide": 1 }, { "fieldname": "dispatch_address", @@ -1299,7 +1285,6 @@ "label": "Dispatch Address Details", "print_hide": 1, "read_only": 1 ->>>>>>> 54b5205221 (feat: add dispatch address fields to purchase doctypes) } ], "grid_page_length": 50, @@ -1307,11 +1292,7 @@ "idx": 105, "is_submittable": 1, "links": [], -<<<<<<< HEAD - "modified": "2024-03-20 16:03:31.611808", -======= "modified": "2025-04-09 16:54:08.836106", ->>>>>>> 54b5205221 (feat: add dispatch address fields to purchase doctypes) "modified_by": "Administrator", "module": "Buying", "name": "Purchase Order", diff --git a/erpnext/public/scss/erpnext.scss b/erpnext/public/scss/erpnext.scss index eab615db7e5..29a2696470f 100644 --- a/erpnext/public/scss/erpnext.scss +++ b/erpnext/public/scss/erpnext.scss @@ -590,19 +590,6 @@ body[data-route="pos"] { justify-content: center; } -<<<<<<< HEAD .frappe-control[data-fieldname="other_charges_calculation"] .ql-editor { -======= -.frappe-control[data-fieldname="other_charges_calculation"] .ql-editor, -.frappe-control[data-fieldname="address_display"] .ql-editor, -.frappe-control[data-fieldname="shipping_address_display"] .ql-editor, -.frappe-control[data-fieldname="shipping_address"] .ql-editor, -.frappe-control[data-fieldname="dispatch_address_display"] .ql-editor, -.frappe-control[data-fieldname="dispatch_address"] .ql-editor, -.frappe-control[data-fieldname="source_address_display"] .ql-editor, -.frappe-control[data-fieldname="target_address_display"] .ql-editor, -.frappe-control[data-fieldname="billing_address_display"] .ql-editor, -.frappe-control[data-fieldname="company_address_display"] .ql-editor { ->>>>>>> 8ccd7a3e61 (refactor: address field position) white-space: normal; }