mirror of
https://github.com/frappe/erpnext.git
synced 2026-02-13 17:53:49 +00:00
* fix(accounts-receivable): ensure report data with party account currency (cherry picked from commit752ea7ee7d) * test(accounts-receivable): add test case to validate report data with party account currency (cherry picked from commit3e4846ea3d) --------- Co-authored-by: Bhavan23 <bhavan@aerele.in>
This commit is contained in:
@@ -664,7 +664,16 @@ class ReceivablePayableReport:
|
|||||||
invoiced = d.base_payment_amount
|
invoiced = d.base_payment_amount
|
||||||
paid_amount = d.base_paid_amount
|
paid_amount = d.base_paid_amount
|
||||||
|
|
||||||
if company_currency == d.party_account_currency or self.filters.get("in_party_currency"):
|
in_party_currency = self.filters.get("in_party_currency")
|
||||||
|
# company, billing, and party account currencies are the same
|
||||||
|
if company_currency == d.currency and company_currency == d.party_account_currency:
|
||||||
|
in_party_currency = False
|
||||||
|
|
||||||
|
# When filtered by party currency and the billing currency not matches the party account currency
|
||||||
|
if in_party_currency and d.currency != d.party_account_currency:
|
||||||
|
in_party_currency = False
|
||||||
|
|
||||||
|
if in_party_currency:
|
||||||
invoiced = d.payment_amount
|
invoiced = d.payment_amount
|
||||||
paid_amount = d.paid_amount
|
paid_amount = d.paid_amount
|
||||||
|
|
||||||
|
|||||||
@@ -199,6 +199,81 @@ class TestAccountsReceivable(AccountsTestMixin, FrappeTestCase):
|
|||||||
row = report[1]
|
row = report[1]
|
||||||
self.assertTrue(len(row) == 0)
|
self.assertTrue(len(row) == 0)
|
||||||
|
|
||||||
|
@change_settings(
|
||||||
|
"Accounts Settings",
|
||||||
|
{"allow_multi_currency_invoices_against_single_party_account": 1},
|
||||||
|
)
|
||||||
|
def test_allow_multi_currency_invoices_against_single_party_account(self):
|
||||||
|
filters = {
|
||||||
|
"company": self.company,
|
||||||
|
"based_on_payment_terms": 1,
|
||||||
|
"report_date": today(),
|
||||||
|
"range": "30, 60, 90, 120",
|
||||||
|
"show_remarks": True,
|
||||||
|
"in_party_currency": 1,
|
||||||
|
}
|
||||||
|
|
||||||
|
# CASE 1: Company currency and party account currency are the same
|
||||||
|
si = self.create_sales_invoice(qty=1, no_payment_schedule=True, do_not_submit=True)
|
||||||
|
si.currency = "USD"
|
||||||
|
si.conversion_rate = 80
|
||||||
|
si.save().submit()
|
||||||
|
|
||||||
|
filters.update(
|
||||||
|
{
|
||||||
|
"party_type": "Customer",
|
||||||
|
"party": [self.customer],
|
||||||
|
}
|
||||||
|
)
|
||||||
|
report = execute(filters)
|
||||||
|
row = report[1][0]
|
||||||
|
|
||||||
|
expected_data = [8000, 8000, "No Remarks"] # Data in company currency
|
||||||
|
|
||||||
|
self.assertEqual(expected_data, [row.invoice_grand_total, row.invoiced, row.remarks])
|
||||||
|
|
||||||
|
# CASE 2: Transaction currency and party account currency are the same
|
||||||
|
self.create_customer(
|
||||||
|
"USD Customer", currency="USD", default_account=self.debtors_usd, company=self.company
|
||||||
|
)
|
||||||
|
si = create_sales_invoice(
|
||||||
|
item=self.item,
|
||||||
|
company=self.company,
|
||||||
|
customer=self.customer,
|
||||||
|
debit_to=self.debtors_usd,
|
||||||
|
posting_date=today(),
|
||||||
|
parent_cost_center=self.cost_center,
|
||||||
|
cost_center=self.cost_center,
|
||||||
|
rate=100,
|
||||||
|
currency="USD",
|
||||||
|
conversion_rate=80,
|
||||||
|
price_list_rate=100,
|
||||||
|
do_not_save=1,
|
||||||
|
)
|
||||||
|
si.save().submit()
|
||||||
|
|
||||||
|
filters.update(
|
||||||
|
{
|
||||||
|
"party_type": "Customer",
|
||||||
|
"party": [self.customer],
|
||||||
|
}
|
||||||
|
)
|
||||||
|
report = execute(filters)
|
||||||
|
row = report[1][0]
|
||||||
|
|
||||||
|
expected_data = [100, 100, "No Remarks"] # Data in Part Account Currency
|
||||||
|
|
||||||
|
self.assertEqual(expected_data, [row.invoice_grand_total, row.invoiced, row.remarks])
|
||||||
|
|
||||||
|
# View in Company currency
|
||||||
|
filters.pop("in_party_currency")
|
||||||
|
report = execute(filters)
|
||||||
|
row = report[1][0]
|
||||||
|
|
||||||
|
expected_data = [8000, 8000, "No Remarks"] # Data in Company Currency
|
||||||
|
|
||||||
|
self.assertEqual(expected_data, [row.invoice_grand_total, row.invoiced, row.remarks])
|
||||||
|
|
||||||
def test_accounts_receivable_with_partial_payment(self):
|
def test_accounts_receivable_with_partial_payment(self):
|
||||||
filters = {
|
filters = {
|
||||||
"company": self.company,
|
"company": self.company,
|
||||||
|
|||||||
@@ -5,7 +5,9 @@ from erpnext.stock.doctype.item.test_item import create_item
|
|||||||
|
|
||||||
|
|
||||||
class AccountsTestMixin:
|
class AccountsTestMixin:
|
||||||
def create_customer(self, customer_name="_Test Customer", currency=None):
|
def create_customer(
|
||||||
|
self, customer_name="_Test Customer", currency=None, default_account=None, company=None
|
||||||
|
):
|
||||||
if not frappe.db.exists("Customer", customer_name):
|
if not frappe.db.exists("Customer", customer_name):
|
||||||
customer = frappe.new_doc("Customer")
|
customer = frappe.new_doc("Customer")
|
||||||
customer.customer_name = customer_name
|
customer.customer_name = customer_name
|
||||||
@@ -13,9 +15,28 @@ class AccountsTestMixin:
|
|||||||
|
|
||||||
if currency:
|
if currency:
|
||||||
customer.default_currency = currency
|
customer.default_currency = currency
|
||||||
|
if company and default_account:
|
||||||
|
customer.append(
|
||||||
|
"accounts",
|
||||||
|
{
|
||||||
|
"company": company,
|
||||||
|
"account": default_account,
|
||||||
|
},
|
||||||
|
)
|
||||||
customer.save()
|
customer.save()
|
||||||
self.customer = customer.name
|
self.customer = customer.name
|
||||||
else:
|
else:
|
||||||
|
if company and default_account:
|
||||||
|
customer = frappe.get_doc("Customer", customer_name)
|
||||||
|
customer.accounts = []
|
||||||
|
customer.append(
|
||||||
|
"accounts",
|
||||||
|
{
|
||||||
|
"company": company,
|
||||||
|
"account": default_account,
|
||||||
|
},
|
||||||
|
)
|
||||||
|
customer.save()
|
||||||
self.customer = customer_name
|
self.customer = customer_name
|
||||||
|
|
||||||
def create_supplier(self, supplier_name="_Test Supplier", currency=None):
|
def create_supplier(self, supplier_name="_Test Supplier", currency=None):
|
||||||
|
|||||||
Reference in New Issue
Block a user