import frappe from frappe.tests import IntegrationTestCase from frappe.utils import today from erpnext.accounts.doctype.purchase_invoice.test_purchase_invoice import make_purchase_invoice from erpnext.accounts.report.accounts_payable.accounts_payable import execute from erpnext.accounts.test.accounts_mixin import AccountsTestMixin class TestAccountsPayable(AccountsTestMixin, IntegrationTestCase): def setUp(self): self.create_company() self.create_customer() self.create_item() self.create_supplier(currency="USD", supplier_name="Test Supplier2") self.create_usd_payable_account() def tearDown(self): frappe.db.rollback() def test_accounts_payable_for_foreign_currency_supplier(self): pi = self.create_purchase_invoice(do_not_submit=True) pi.currency = "USD" pi.conversion_rate = 80 pi.credit_to = self.creditors_usd pi = pi.save().submit() filters = { "company": self.company, "party_type": "Supplier", "party": [self.supplier], "report_date": today(), "range": "30, 60, 90, 120", "in_party_currency": 1, } data = execute(filters) self.assertEqual(data[1][0].get("outstanding"), 300) self.assertEqual(data[1][0].get("currency"), "USD") def test_account_payable_for_debit_note(self): pi = self.create_purchase_invoice(do_not_submit=True) pi.is_return = 1 pi.items[0].qty = -1 pi = pi.save().submit() filters = { "company": self.company, "party_type": "Supplier", "party": [self.supplier], "report_date": today(), "range": "30, 60, 90, 120", } data = execute(filters) self.assertEqual(data[1][0].get("invoiced"), 300) def create_purchase_invoice(self, do_not_submit=False): frappe.set_user("Administrator") pi = make_purchase_invoice( item=self.item, company=self.company, supplier=self.supplier, is_return=False, update_stock=False, posting_date=frappe.utils.datetime.date(2021, 5, 1), do_not_save=1, rate=300, price_list_rate=300, qty=1, ) pi = pi.save() if not do_not_submit: pi = pi.submit() return pi