Merge pull request #43095 from aerele/common_party_on_foreign_currency
fix: check multi-currency on jv for common party accounting with foreign currency
This commit is contained in:
@@ -4089,6 +4089,88 @@ class TestSalesInvoice(FrappeTestCase):
|
|||||||
self.assertEqual(len(actual), 4)
|
self.assertEqual(len(actual), 4)
|
||||||
self.assertEqual(expected, actual)
|
self.assertEqual(expected, actual)
|
||||||
|
|
||||||
|
@change_settings("Accounts Settings", {"enable_common_party_accounting": True})
|
||||||
|
def test_common_party_with_foreign_currency_jv(self):
|
||||||
|
from erpnext.accounts.doctype.account.test_account import create_account
|
||||||
|
from erpnext.accounts.doctype.opening_invoice_creation_tool.test_opening_invoice_creation_tool import (
|
||||||
|
make_customer,
|
||||||
|
)
|
||||||
|
from erpnext.accounts.doctype.party_link.party_link import create_party_link
|
||||||
|
from erpnext.buying.doctype.supplier.test_supplier import create_supplier
|
||||||
|
from erpnext.setup.utils import get_exchange_rate
|
||||||
|
|
||||||
|
creditors = create_account(
|
||||||
|
account_name="Creditors USD",
|
||||||
|
parent_account="Accounts Payable - _TC",
|
||||||
|
company="_Test Company",
|
||||||
|
account_currency="USD",
|
||||||
|
account_type="Payable",
|
||||||
|
)
|
||||||
|
debtors = create_account(
|
||||||
|
account_name="Debtors USD",
|
||||||
|
parent_account="Accounts Receivable - _TC",
|
||||||
|
company="_Test Company",
|
||||||
|
account_currency="USD",
|
||||||
|
account_type="Receivable",
|
||||||
|
)
|
||||||
|
|
||||||
|
# create a customer
|
||||||
|
customer = make_customer(customer="_Test Common Party USD")
|
||||||
|
cust_doc = frappe.get_doc("Customer", customer)
|
||||||
|
cust_doc.default_currency = "USD"
|
||||||
|
test_account_details = {
|
||||||
|
"company": "_Test Company",
|
||||||
|
"account": debtors,
|
||||||
|
}
|
||||||
|
cust_doc.append("accounts", test_account_details)
|
||||||
|
cust_doc.save()
|
||||||
|
|
||||||
|
# create a supplier
|
||||||
|
supplier = create_supplier(supplier_name="_Test Common Party USD").name
|
||||||
|
supp_doc = frappe.get_doc("Supplier", supplier)
|
||||||
|
supp_doc.default_currency = "USD"
|
||||||
|
test_account_details = {
|
||||||
|
"company": "_Test Company",
|
||||||
|
"account": creditors,
|
||||||
|
}
|
||||||
|
supp_doc.append("accounts", test_account_details)
|
||||||
|
supp_doc.save()
|
||||||
|
|
||||||
|
# create a party link between customer & supplier
|
||||||
|
create_party_link("Supplier", supplier, customer)
|
||||||
|
|
||||||
|
# create a sales invoice
|
||||||
|
si = create_sales_invoice(
|
||||||
|
customer=customer,
|
||||||
|
currency="USD",
|
||||||
|
conversion_rate=get_exchange_rate("USD", "INR"),
|
||||||
|
debit_to=debtors,
|
||||||
|
do_not_save=1,
|
||||||
|
)
|
||||||
|
si.party_account_currency = "USD"
|
||||||
|
si.save()
|
||||||
|
si.submit()
|
||||||
|
|
||||||
|
# check outstanding of sales invoice
|
||||||
|
si.reload()
|
||||||
|
self.assertEqual(si.status, "Paid")
|
||||||
|
self.assertEqual(flt(si.outstanding_amount), 0.0)
|
||||||
|
|
||||||
|
# check creation of journal entry
|
||||||
|
jv = frappe.get_all(
|
||||||
|
"Journal Entry Account",
|
||||||
|
{
|
||||||
|
"account": si.debit_to,
|
||||||
|
"party_type": "Customer",
|
||||||
|
"party": si.customer,
|
||||||
|
"reference_type": si.doctype,
|
||||||
|
"reference_name": si.name,
|
||||||
|
},
|
||||||
|
pluck="credit_in_account_currency",
|
||||||
|
)
|
||||||
|
self.assertTrue(jv)
|
||||||
|
self.assertEqual(jv[0], si.grand_total)
|
||||||
|
|
||||||
|
|
||||||
def set_advance_flag(company, flag, default_account):
|
def set_advance_flag(company, flag, default_account):
|
||||||
frappe.db.set_value(
|
frappe.db.set_value(
|
||||||
|
|||||||
@@ -2455,6 +2455,8 @@ class AccountsController(TransactionBase):
|
|||||||
|
|
||||||
primary_account = get_party_account(primary_party_type, primary_party, self.company)
|
primary_account = get_party_account(primary_party_type, primary_party, self.company)
|
||||||
secondary_account = get_party_account(secondary_party_type, secondary_party, self.company)
|
secondary_account = get_party_account(secondary_party_type, secondary_party, self.company)
|
||||||
|
primary_account_currency = get_account_currency(primary_account)
|
||||||
|
secondary_account_currency = get_account_currency(secondary_account)
|
||||||
|
|
||||||
jv = frappe.new_doc("Journal Entry")
|
jv = frappe.new_doc("Journal Entry")
|
||||||
jv.voucher_type = "Journal Entry"
|
jv.voucher_type = "Journal Entry"
|
||||||
@@ -2495,6 +2497,10 @@ class AccountsController(TransactionBase):
|
|||||||
advance_entry.credit_in_account_currency = self.outstanding_amount
|
advance_entry.credit_in_account_currency = self.outstanding_amount
|
||||||
reconcilation_entry.debit_in_account_currency = self.outstanding_amount
|
reconcilation_entry.debit_in_account_currency = self.outstanding_amount
|
||||||
|
|
||||||
|
default_currency = erpnext.get_company_currency(self.company)
|
||||||
|
if primary_account_currency != default_currency or secondary_account_currency != default_currency:
|
||||||
|
jv.multi_currency = 1
|
||||||
|
|
||||||
jv.append("accounts", reconcilation_entry)
|
jv.append("accounts", reconcilation_entry)
|
||||||
jv.append("accounts", advance_entry)
|
jv.append("accounts", advance_entry)
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user