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 = frappe.get_doc("Payment Entry", pe.name)
|
||||||
pe_doc.cancel()
|
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})
|
@change_settings("Accounts Settings", {"unlink_advance_payment_on_cancelation_of_order": 1})
|
||||||
def test_advance_paid_upon_payment_entry_cancellation(self):
|
def test_advance_paid_upon_payment_entry_cancellation(self):
|
||||||
from erpnext.accounts.doctype.payment_entry.test_payment_entry import get_payment_entry
|
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.conversion_rate = 80
|
||||||
po_doc.submit()
|
po_doc.submit()
|
||||||
|
|
||||||
|
|||||||
@@ -1880,7 +1880,10 @@ class AccountsController(TransactionBase):
|
|||||||
advance_paid, precision=self.precision("advance_paid"), currency=advance.account_currency
|
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:
|
if advance.account_currency == self.currency:
|
||||||
order_total = self.get("rounded_total") or self.grand_total
|
order_total = self.get("rounded_total") or self.grand_total
|
||||||
|
|||||||
Reference in New Issue
Block a user