Merge pull request #40196 from ruthra-kumar/use_debit_or_credit_to_account_while_fetching_advance
fix: include debit_to or credit_to account while fetching advance on Sales/Purchase Invoice
diff --git a/erpnext/accounts/doctype/sales_invoice/test_sales_invoice.py b/erpnext/accounts/doctype/sales_invoice/test_sales_invoice.py
index c6a8362..c8a35eb 100644
--- a/erpnext/accounts/doctype/sales_invoice/test_sales_invoice.py
+++ b/erpnext/accounts/doctype/sales_invoice/test_sales_invoice.py
@@ -3615,6 +3615,33 @@
check_gl_entries(self, pe.name, expected_gle, nowdate(), voucher_type="Payment Entry")
set_advance_flag(company="_Test Company", flag=0, default_account="")
+ def test_pulling_advance_based_on_debit_to(self):
+ from erpnext.accounts.doctype.payment_entry.test_payment_entry import create_payment_entry
+
+ debtors2 = create_account(
+ parent_account="Accounts Receivable - _TC",
+ account_name="Debtors 2",
+ company="_Test Company",
+ account_type="Receivable",
+ )
+ si = create_sales_invoice(do_not_submit=True)
+ si.debit_to = debtors2
+ si.save()
+
+ pe = create_payment_entry(
+ company=si.company,
+ payment_type="Receive",
+ party_type="Customer",
+ party=si.customer,
+ paid_from=debtors2,
+ paid_to="Cash - _TC",
+ paid_amount=1000,
+ )
+ pe.submit()
+ advances = si.get_advance_entries()
+ self.assertEqual(1, len(advances))
+ self.assertEqual(advances[0].reference_name, pe.name)
+
def set_advance_flag(company, flag, default_account):
frappe.db.set_value(
diff --git a/erpnext/controllers/accounts_controller.py b/erpnext/controllers/accounts_controller.py
index 9896cad..6b6324c 100644
--- a/erpnext/controllers/accounts_controller.py
+++ b/erpnext/controllers/accounts_controller.py
@@ -1135,21 +1135,24 @@
self.append("advances", advance_row)
def get_advance_entries(self, include_unallocated=True):
+ party_account = []
if self.doctype == "Sales Invoice":
party_type = "Customer"
party = self.customer
amount_field = "credit_in_account_currency"
order_field = "sales_order"
order_doctype = "Sales Order"
+ party_account.append(self.debit_to)
else:
party_type = "Supplier"
party = self.supplier
amount_field = "debit_in_account_currency"
order_field = "purchase_order"
order_doctype = "Purchase Order"
+ party_account.append(self.credit_to)
- party_account = get_party_account(
- party_type, party=party, company=self.company, include_advance=True
+ party_account.extend(
+ get_party_account(party_type, party=party, company=self.company, include_advance=True)
)
order_list = list(set(d.get(order_field) for d in self.get("items") if d.get(order_field)))