refactor(test): make sure party has USD account
1. Don't reset 'party_account_currency' of SO/PO upon Payment Entry cancellation. This happens when there are no payments against a SO/PO
This commit is contained in:
@@ -762,11 +762,94 @@ class TestPurchaseOrder(FrappeTestCase):
|
||||
pe_doc = frappe.get_doc("Payment Entry", pe.name)
|
||||
pe_doc.cancel()
|
||||
|
||||
def create_account(self, account_name, company, currency, parent):
|
||||
if not frappe.db.get_value(
|
||||
"Account", filters={"account_name": account_name, "company": company}
|
||||
):
|
||||
account = frappe.get_doc(
|
||||
{
|
||||
"doctype": "Account",
|
||||
"account_name": account_name,
|
||||
"parent_account": parent,
|
||||
"company": company,
|
||||
"account_currency": currency,
|
||||
"is_group": 0,
|
||||
"account_type": "Payable",
|
||||
}
|
||||
).insert()
|
||||
else:
|
||||
account = frappe.db.get_value(
|
||||
"Account",
|
||||
filters={"account_name": account_name, "company": company},
|
||||
fieldname="name",
|
||||
pluck=True,
|
||||
)
|
||||
|
||||
return account
|
||||
|
||||
def test_advance_payment_with_separate_party_account_enabled(self):
|
||||
"""
|
||||
Test "Advance Paid" on Purchase Order, when "Book Advance Payments in Separate Party Account" is enabled and
|
||||
the payment entry linked to the Order is allocated to Purchase Invoice.
|
||||
"""
|
||||
supplier = "_Test Supplier"
|
||||
company = "_Test Company"
|
||||
|
||||
# Setup default 'Advance Paid' account
|
||||
account = self.create_account(
|
||||
"Advance Paid", company, "INR", "Application of Funds (Assets) - _TC"
|
||||
)
|
||||
company_doc = frappe.get_doc("Company", company)
|
||||
company_doc.book_advance_payments_in_separate_party_account = True
|
||||
company_doc.default_advance_paid_account = account.name
|
||||
company_doc.save()
|
||||
|
||||
po_doc = create_purchase_order(supplier=supplier)
|
||||
|
||||
from erpnext.accounts.doctype.payment_entry.test_payment_entry import get_payment_entry
|
||||
|
||||
pe = get_payment_entry("Purchase Order", po_doc.name)
|
||||
pe.save().submit()
|
||||
|
||||
po_doc.reload()
|
||||
self.assertEqual(po_doc.advance_paid, 5000)
|
||||
|
||||
from erpnext.buying.doctype.purchase_order.purchase_order import make_purchase_invoice
|
||||
|
||||
pi = make_purchase_invoice(po_doc.name)
|
||||
pi.append(
|
||||
"advances",
|
||||
{
|
||||
"reference_type": pe.doctype,
|
||||
"reference_name": pe.name,
|
||||
"reference_row": pe.references[0].name,
|
||||
"advance_amount": 5000,
|
||||
"allocated_amount": 5000,
|
||||
},
|
||||
)
|
||||
pi.save().submit()
|
||||
pe.reload()
|
||||
po_doc.reload()
|
||||
self.assertEqual(po_doc.advance_paid, 0)
|
||||
|
||||
company_doc.book_advance_payments_in_separate_party_account = False
|
||||
company_doc.save()
|
||||
|
||||
@change_settings("Accounts Settings", {"unlink_advance_payment_on_cancelation_of_order": 1})
|
||||
def test_advance_paid_upon_payment_entry_cancellation(self):
|
||||
from erpnext.accounts.doctype.payment_entry.test_payment_entry import get_payment_entry
|
||||
|
||||
po_doc = create_purchase_order(supplier="_Test Supplier USD", currency="USD", do_not_submit=1)
|
||||
supplier = "_Test Supplier USD"
|
||||
company = "_Test Company"
|
||||
|
||||
# Setup default USD payable account for Supplier
|
||||
account = self.create_account("Creditors USD", company, "USD", "Accounts Payable - _TC")
|
||||
supplier_doc = frappe.get_doc("Supplier", supplier)
|
||||
if not [x for x in supplier_doc.accounts if x.company == company]:
|
||||
supplier_doc.append("accounts", {"company": company, "account": account.name})
|
||||
supplier_doc.save()
|
||||
|
||||
po_doc = create_purchase_order(supplier=supplier, currency="USD", do_not_submit=1)
|
||||
po_doc.conversion_rate = 80
|
||||
po_doc.submit()
|
||||
|
||||
|
||||
@@ -1880,7 +1880,10 @@ class AccountsController(TransactionBase):
|
||||
advance_paid, precision=self.precision("advance_paid"), currency=advance.account_currency
|
||||
)
|
||||
|
||||
frappe.db.set_value(self.doctype, self.name, "party_account_currency", advance.account_currency)
|
||||
if advance.account_currency:
|
||||
frappe.db.set_value(
|
||||
self.doctype, self.name, "party_account_currency", advance.account_currency
|
||||
)
|
||||
|
||||
if advance.account_currency == self.currency:
|
||||
order_total = self.get("rounded_total") or self.grand_total
|
||||
|
||||
Reference in New Issue
Block a user