From 605f513ce3536a1c33c1c70e2681b8995a89f4eb Mon Sep 17 00:00:00 2001 From: diptanilsaha Date: Mon, 18 Aug 2025 13:23:23 +0530 Subject: [PATCH] fix: apply grand total to default payment mode in Sales and POS invoices --- erpnext/accounts/doctype/pos_invoice/pos_invoice.js | 11 +++++++++++ erpnext/accounts/doctype/pos_invoice/pos_invoice.py | 1 + .../accounts/doctype/sales_invoice/sales_invoice.js | 10 +++++++++- .../accounts/doctype/sales_invoice/sales_invoice.py | 1 + erpnext/public/js/controllers/taxes_and_totals.js | 7 +++++-- erpnext/selling/page/point_of_sale/pos_payment.js | 1 - 6 files changed, 27 insertions(+), 4 deletions(-) diff --git a/erpnext/accounts/doctype/pos_invoice/pos_invoice.js b/erpnext/accounts/doctype/pos_invoice/pos_invoice.js index 2f170631226..b392e8045b5 100644 --- a/erpnext/accounts/doctype/pos_invoice/pos_invoice.js +++ b/erpnext/accounts/doctype/pos_invoice/pos_invoice.js @@ -55,6 +55,16 @@ erpnext.selling.POSInvoiceController = class POSInvoiceController extends erpnex }); erpnext.accounts.dimensions.setup_dimension_filters(this.frm, this.frm.doctype); + + if (this.frm.doc.pos_profile) { + frappe.db + .get_value("POS Profile", this.frm.doc.pos_profile, "disable_grand_total_to_default_mop") + .then((r) => { + if (!r.exc) { + this.frm.skip_default_payment = r.message.disable_grand_total_to_default_mop; + } + }); + } } onload_post_render(frm) { @@ -113,6 +123,7 @@ erpnext.selling.POSInvoiceController = class POSInvoiceController extends erpnex this.frm.meta.default_print_format = r.message.print_format || ""; this.frm.doc.campaign = r.message.campaign; this.frm.allow_print_before_pay = r.message.allow_print_before_pay; + this.frm.skip_default_payment = r.message.skip_default_payment; } this.frm.script_manager.trigger("update_stock"); this.calculate_taxes_and_totals(); diff --git a/erpnext/accounts/doctype/pos_invoice/pos_invoice.py b/erpnext/accounts/doctype/pos_invoice/pos_invoice.py index 4f5d599b006..87360543efd 100644 --- a/erpnext/accounts/doctype/pos_invoice/pos_invoice.py +++ b/erpnext/accounts/doctype/pos_invoice/pos_invoice.py @@ -681,6 +681,7 @@ class POSInvoice(SalesInvoice): "print_format": print_format, "campaign": profile.get("campaign"), "allow_print_before_pay": profile.get("allow_print_before_pay"), + "skip_default_payment": profile.get("disable_grand_total_to_default_mop"), } @frappe.whitelist() diff --git a/erpnext/accounts/doctype/sales_invoice/sales_invoice.js b/erpnext/accounts/doctype/sales_invoice/sales_invoice.js index 4978f95a132..a19850af8f1 100644 --- a/erpnext/accounts/doctype/sales_invoice/sales_invoice.js +++ b/erpnext/accounts/doctype/sales_invoice/sales_invoice.js @@ -58,6 +58,13 @@ erpnext.accounts.SalesInvoiceController = class SalesInvoiceController extends ( me.frm.script_manager.trigger("is_pos"); me.frm.refresh_fields(); + frappe.db + .get_value("POS Profile", this.frm.doc.pos_profile, "disable_grand_total_to_default_mop") + .then((r) => { + if (!r.exc) { + me.frm.skip_default_payment = r.message.disable_grand_total_to_default_mop; + } + }); } erpnext.queries.setup_warehouse_query(this.frm); } @@ -506,8 +513,9 @@ erpnext.accounts.SalesInvoiceController = class SalesInvoiceController extends ( }, callback: function (r) { if (!r.exc) { - if (r.message && r.message.print_format) { + if (r.message) { me.frm.pos_print_format = r.message.print_format; + me.frm.skip_default_payment = r.message.skip_default_payment; } me.frm.trigger("update_stock"); if (me.frm.doc.taxes_and_charges) { diff --git a/erpnext/accounts/doctype/sales_invoice/sales_invoice.py b/erpnext/accounts/doctype/sales_invoice/sales_invoice.py index 386d28fd804..2de3feb9a35 100644 --- a/erpnext/accounts/doctype/sales_invoice/sales_invoice.py +++ b/erpnext/accounts/doctype/sales_invoice/sales_invoice.py @@ -700,6 +700,7 @@ class SalesInvoice(SellingController): "allow_edit_discount": pos.get("allow_user_to_edit_discount"), "campaign": pos.get("campaign"), "allow_print_before_pay": pos.get("allow_print_before_pay"), + "skip_default_payment": pos.get("disable_grand_total_to_default_mop"), } def update_time_sheet(self, sales_invoice): diff --git a/erpnext/public/js/controllers/taxes_and_totals.js b/erpnext/public/js/controllers/taxes_and_totals.js index be503a45d56..fe0110ce2cb 100644 --- a/erpnext/public/js/controllers/taxes_and_totals.js +++ b/erpnext/public/js/controllers/taxes_and_totals.js @@ -931,8 +931,11 @@ erpnext.taxes_and_totals = class TaxesAndTotals extends erpnext.payments { set_default_payment(total_amount_to_pay, update_paid_amount) { var me = this; var payment_status = true; - if(this.frm.doc.is_pos && (update_paid_amount===undefined || update_paid_amount)) { - + if ( + this.frm.doc.is_pos + && !cint(this.frm.skip_default_payment) + && (update_paid_amount===undefined || update_paid_amount) + ) { $.each(this.frm.doc['payments'] || [], function(index, data) { if(data.default && payment_status && total_amount_to_pay > 0) { let base_amount, amount; diff --git a/erpnext/selling/page/point_of_sale/pos_payment.js b/erpnext/selling/page/point_of_sale/pos_payment.js index 59f293a96b0..92e9ad060df 100644 --- a/erpnext/selling/page/point_of_sale/pos_payment.js +++ b/erpnext/selling/page/point_of_sale/pos_payment.js @@ -342,7 +342,6 @@ erpnext.PointOfSale.Payment = class { } render_payment_section() { - this.remove_grand_total_from_default_mop(); this.render_payment_mode_dom(); this.make_invoice_fields_control(); this.update_totals_section();