mirror of
https://github.com/frappe/erpnext.git
synced 2026-05-26 16:34:46 +00:00
Merge pull request #30024 from frappe/mergify/bp/version-13-hotfix/pr-29977
fix: Total taxes and charges in payment entry for multi-currency payments (backport #29977)
This commit is contained in:
@@ -196,8 +196,14 @@ frappe.ui.form.on('Payment Entry', {
|
|||||||
frm.doc.paid_from_account_currency != frm.doc.paid_to_account_currency));
|
frm.doc.paid_from_account_currency != frm.doc.paid_to_account_currency));
|
||||||
|
|
||||||
frm.toggle_display("base_paid_amount", frm.doc.paid_from_account_currency != company_currency);
|
frm.toggle_display("base_paid_amount", frm.doc.paid_from_account_currency != company_currency);
|
||||||
frm.toggle_display("base_total_taxes_and_charges", frm.doc.total_taxes_and_charges &&
|
|
||||||
(frm.doc.paid_from_account_currency != company_currency));
|
if (frm.doc.payment_type == "Pay") {
|
||||||
|
frm.toggle_display("base_total_taxes_and_charges", frm.doc.total_taxes_and_charges &&
|
||||||
|
(frm.doc.paid_to_account_currency != company_currency));
|
||||||
|
} else {
|
||||||
|
frm.toggle_display("base_total_taxes_and_charges", frm.doc.total_taxes_and_charges &&
|
||||||
|
(frm.doc.paid_from_account_currency != company_currency));
|
||||||
|
}
|
||||||
|
|
||||||
frm.toggle_display("base_received_amount", (
|
frm.toggle_display("base_received_amount", (
|
||||||
frm.doc.paid_to_account_currency != company_currency
|
frm.doc.paid_to_account_currency != company_currency
|
||||||
@@ -232,7 +238,8 @@ frappe.ui.form.on('Payment Entry', {
|
|||||||
var company_currency = frm.doc.company? frappe.get_doc(":Company", frm.doc.company).default_currency: "";
|
var company_currency = frm.doc.company? frappe.get_doc(":Company", frm.doc.company).default_currency: "";
|
||||||
|
|
||||||
frm.set_currency_labels(["base_paid_amount", "base_received_amount", "base_total_allocated_amount",
|
frm.set_currency_labels(["base_paid_amount", "base_received_amount", "base_total_allocated_amount",
|
||||||
"difference_amount", "base_paid_amount_after_tax", "base_received_amount_after_tax"], company_currency);
|
"difference_amount", "base_paid_amount_after_tax", "base_received_amount_after_tax",
|
||||||
|
"base_total_taxes_and_charges"], company_currency);
|
||||||
|
|
||||||
frm.set_currency_labels(["paid_amount"], frm.doc.paid_from_account_currency);
|
frm.set_currency_labels(["paid_amount"], frm.doc.paid_from_account_currency);
|
||||||
frm.set_currency_labels(["received_amount"], frm.doc.paid_to_account_currency);
|
frm.set_currency_labels(["received_amount"], frm.doc.paid_to_account_currency);
|
||||||
|
|||||||
@@ -66,7 +66,9 @@
|
|||||||
"tax_withholding_category",
|
"tax_withholding_category",
|
||||||
"section_break_56",
|
"section_break_56",
|
||||||
"taxes",
|
"taxes",
|
||||||
|
"section_break_60",
|
||||||
"base_total_taxes_and_charges",
|
"base_total_taxes_and_charges",
|
||||||
|
"column_break_61",
|
||||||
"total_taxes_and_charges",
|
"total_taxes_and_charges",
|
||||||
"deductions_or_loss_section",
|
"deductions_or_loss_section",
|
||||||
"deductions",
|
"deductions",
|
||||||
@@ -715,12 +717,21 @@
|
|||||||
"fieldtype": "Data",
|
"fieldtype": "Data",
|
||||||
"hidden": 1,
|
"hidden": 1,
|
||||||
"label": "Paid To Account Type"
|
"label": "Paid To Account Type"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"fieldname": "column_break_61",
|
||||||
|
"fieldtype": "Column Break"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"fieldname": "section_break_60",
|
||||||
|
"fieldtype": "Section Break",
|
||||||
|
"hide_border": 1
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"index_web_pages_for_search": 1,
|
"index_web_pages_for_search": 1,
|
||||||
"is_submittable": 1,
|
"is_submittable": 1,
|
||||||
"links": [],
|
"links": [],
|
||||||
"modified": "2021-11-24 18:58:24.919764",
|
"modified": "2022-02-23 20:08:39.559814",
|
||||||
"modified_by": "Administrator",
|
"modified_by": "Administrator",
|
||||||
"module": "Accounts",
|
"module": "Accounts",
|
||||||
"name": "Payment Entry",
|
"name": "Payment Entry",
|
||||||
@@ -763,6 +774,7 @@
|
|||||||
"show_name_in_global_search": 1,
|
"show_name_in_global_search": 1,
|
||||||
"sort_field": "modified",
|
"sort_field": "modified",
|
||||||
"sort_order": "DESC",
|
"sort_order": "DESC",
|
||||||
|
"states": [],
|
||||||
"title_field": "title",
|
"title_field": "title",
|
||||||
"track_changes": 1
|
"track_changes": 1
|
||||||
}
|
}
|
||||||
@@ -946,8 +946,12 @@ class PaymentEntry(AccountsController):
|
|||||||
|
|
||||||
tax.base_total = tax.total * self.source_exchange_rate
|
tax.base_total = tax.total * self.source_exchange_rate
|
||||||
|
|
||||||
self.total_taxes_and_charges += current_tax_amount
|
if self.payment_type == 'Pay':
|
||||||
self.base_total_taxes_and_charges += current_tax_amount * self.source_exchange_rate
|
self.base_total_taxes_and_charges += flt(current_tax_amount / self.source_exchange_rate)
|
||||||
|
self.total_taxes_and_charges += flt(current_tax_amount / self.target_exchange_rate)
|
||||||
|
else:
|
||||||
|
self.base_total_taxes_and_charges += flt(current_tax_amount / self.target_exchange_rate)
|
||||||
|
self.total_taxes_and_charges += flt(current_tax_amount / self.source_exchange_rate)
|
||||||
|
|
||||||
if self.get('taxes'):
|
if self.get('taxes'):
|
||||||
self.paid_amount_after_tax = self.get('taxes')[-1].base_total
|
self.paid_amount_after_tax = self.get('taxes')[-1].base_total
|
||||||
|
|||||||
@@ -633,6 +633,45 @@ class TestPaymentEntry(unittest.TestCase):
|
|||||||
self.assertEqual(flt(expected_party_balance), party_balance)
|
self.assertEqual(flt(expected_party_balance), party_balance)
|
||||||
self.assertEqual(flt(expected_party_account_balance), party_account_balance)
|
self.assertEqual(flt(expected_party_account_balance), party_account_balance)
|
||||||
|
|
||||||
|
def test_multi_currency_payment_entry_with_taxes(self):
|
||||||
|
payment_entry = create_payment_entry(party='_Test Supplier USD', paid_to = '_Test Payable USD - _TC',
|
||||||
|
save=True)
|
||||||
|
payment_entry.append('taxes', {
|
||||||
|
'account_head': '_Test Account Service Tax - _TC',
|
||||||
|
'charge_type': 'Actual',
|
||||||
|
'tax_amount': 10,
|
||||||
|
'add_deduct_tax': 'Add',
|
||||||
|
'description': 'Test'
|
||||||
|
})
|
||||||
|
|
||||||
|
payment_entry.save()
|
||||||
|
self.assertEqual(payment_entry.base_total_taxes_and_charges, 10)
|
||||||
|
self.assertEqual(flt(payment_entry.total_taxes_and_charges, 2), flt(10 / payment_entry.target_exchange_rate, 2))
|
||||||
|
|
||||||
|
def create_payment_entry(**args):
|
||||||
|
payment_entry = frappe.new_doc('Payment Entry')
|
||||||
|
payment_entry.company = args.get('company') or '_Test Company'
|
||||||
|
payment_entry.payment_type = args.get('payment_type') or 'Pay'
|
||||||
|
payment_entry.party_type = args.get('party_type') or 'Supplier'
|
||||||
|
payment_entry.party = args.get('party') or '_Test Supplier'
|
||||||
|
payment_entry.paid_from = args.get('paid_from') or '_Test Bank - _TC'
|
||||||
|
payment_entry.paid_to = args.get('paid_to') or 'Creditors - _TC'
|
||||||
|
payment_entry.paid_amount = args.get('paid_amount') or 1000
|
||||||
|
|
||||||
|
payment_entry.setup_party_account_field()
|
||||||
|
payment_entry.set_missing_values()
|
||||||
|
payment_entry.set_exchange_rate()
|
||||||
|
payment_entry.received_amount = payment_entry.paid_amount / payment_entry.target_exchange_rate
|
||||||
|
payment_entry.reference_no = 'Test001'
|
||||||
|
payment_entry.reference_date = nowdate()
|
||||||
|
|
||||||
|
if args.get('save'):
|
||||||
|
payment_entry.save()
|
||||||
|
if args.get('submit'):
|
||||||
|
payment_entry.submit()
|
||||||
|
|
||||||
|
return payment_entry
|
||||||
|
|
||||||
def create_payment_terms_template():
|
def create_payment_terms_template():
|
||||||
|
|
||||||
create_payment_term('Basic Amount Receivable')
|
create_payment_term('Basic Amount Receivable')
|
||||||
|
|||||||
Reference in New Issue
Block a user