Skip to content

Commit

Permalink
refactor: more generic filters in Accounts Receivable report (backport
Browse files Browse the repository at this point in the history
…#37131) (#37137)

* refactor: replace 'customer' filter with 'party_type' and 'party'

(cherry picked from commit ac650d2)

* chore: remove stale code

(cherry picked from commit 083c82c)

* refactor(test): AR output filtered on USD customers

(cherry picked from commit 08d91ab)

---------

Co-authored-by: ruthra kumar <ruthra@erpnext.com>
  • Loading branch information
mergify[bot] and ruthra-kumar committed Sep 19, 2023
1 parent 366325c commit dfe5f63
Show file tree
Hide file tree
Showing 4 changed files with 76 additions and 50 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ def setUp(self):
def tearDown(self):
frappe.db.rollback()

def test_accounts_receivable_with_supplier(self):
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
Expand Down
59 changes: 20 additions & 39 deletions erpnext/accounts/report/accounts_receivable/accounts_receivable.js
Original file line number Diff line number Diff line change
Expand Up @@ -38,32 +38,31 @@ frappe.query_reports["Accounts Receivable"] = {
}
},
{
"fieldname": "customer",
"label": __("Customer"),
"fieldname": "party_type",
"label": __("Party Type"),
"fieldtype": "Link",
"options": "Customer",
"options": "Party Type",
"Default": "Customer",
get_query: () => {
return {
filters: {
'account_type': 'Receivable'
}
};
},
on_change: () => {
var customer = frappe.query_report.get_filter_value('customer');
var company = frappe.query_report.get_filter_value('company');
if (customer) {
frappe.db.get_value('Customer', customer, ["customer_name", "payment_terms"], function(value) {
frappe.query_report.set_filter_value('customer_name', value["customer_name"]);
frappe.query_report.set_filter_value('payment_terms', value["payment_terms"]);
});
frappe.query_report.set_filter_value('party', "");
let party_type = frappe.query_report.get_filter_value('party_type');
frappe.query_report.toggle_filter_display('customer_group', frappe.query_report.get_filter_value('party_type') !== "Customer");

frappe.db.get_value('Customer Credit Limit', {'parent': customer, 'company': company},
["credit_limit"], function(value) {
if (value) {
frappe.query_report.set_filter_value('credit_limit', value["credit_limit"]);
}
}, "Customer");
} else {
frappe.query_report.set_filter_value('customer_name', "");
frappe.query_report.set_filter_value('credit_limit', "");
frappe.query_report.set_filter_value('payment_terms', "");
}
}
},
{
"fieldname":"party",
"label": __("Party"),
"fieldtype": "Dynamic Link",
"options": "party_type",
},
{
"fieldname": "party_account",
"label": __("Receivable Account"),
Expand Down Expand Up @@ -174,24 +173,6 @@ frappe.query_reports["Accounts Receivable"] = {
"fieldname": "show_remarks",
"label": __("Show Remarks"),
"fieldtype": "Check",
},
{
"fieldname": "customer_name",
"label": __("Customer Name"),
"fieldtype": "Data",
"hidden": 1
},
{
"fieldname": "payment_terms",
"label": __("Payment Tems"),
"fieldtype": "Data",
"hidden": 1
},
{
"fieldname": "credit_limit",
"label": __("Credit Limit"),
"fieldtype": "Currency",
"hidden": 1
}
],

Expand Down
28 changes: 18 additions & 10 deletions erpnext/accounts/report/accounts_receivable/accounts_receivable.py
Original file line number Diff line number Diff line change
Expand Up @@ -769,15 +769,12 @@ def prepare_conditions(self):
self.or_filters = []

for party_type in self.party_type:
party_type_field = scrub(party_type)
self.or_filters.append(self.ple.party_type == party_type)
self.add_common_filters()

self.add_common_filters(party_type_field=party_type_field)

if party_type_field == "customer":
if self.account_type == "Receivable":
self.add_customer_filters()

elif party_type_field == "supplier":
elif self.account_type == "Payable":
self.add_supplier_filters()

if self.filters.cost_center:
Expand All @@ -793,16 +790,13 @@ def get_cost_center_conditions(self):
]
self.qb_selection_filter.append(self.ple.cost_center.isin(cost_center_list))

def add_common_filters(self, party_type_field):
def add_common_filters(self):
if self.filters.company:
self.qb_selection_filter.append(self.ple.company == self.filters.company)

if self.filters.finance_book:
self.qb_selection_filter.append(self.ple.finance_book == self.filters.finance_book)

if self.filters.get(party_type_field):
self.qb_selection_filter.append(self.ple.party == self.filters.get(party_type_field))

if self.filters.get("party_type"):
self.qb_selection_filter.append(self.filters.party_type == self.ple.party_type)

Expand Down Expand Up @@ -969,6 +963,20 @@ def get_columns(self):
fieldtype="Link",
options="Contact",
)
if self.filters.party_type == "Customer":
self.add_column(
_("Customer Name"),
fieldname="customer_name",
fieldtype="Link",
options="Customer",
)
elif self.filters.party_type == "Supplier":
self.add_column(
_("Supplier Name"),
fieldname="supplier_name",
fieldtype="Link",
options="Supplier",
)

self.add_column(label=_("Cost Center"), fieldname="cost_center", fieldtype="Data")
self.add_column(label=_("Voucher Type"), fieldname="voucher_type", fieldtype="Data")
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -568,3 +568,40 @@ def test_party_account_filter(self):
row.account_currency,
],
)

def test_usd_customer_filter(self):
filters = {
"company": self.company,
"party_type": "Customer",
"party": self.customer,
"report_date": today(),
"range1": 30,
"range2": 60,
"range3": 90,
"range4": 120,
}

si = self.create_sales_invoice(no_payment_schedule=True, do_not_submit=True)
si.currency = "USD"
si.conversion_rate = 80
si.debit_to = self.debtors_usd
si.save().submit()
name = si.name

# check invoice grand total and invoiced column's value for 3 payment terms
report = execute(filters)

expected = {
"voucher_type": si.doctype,
"voucher_no": si.name,
"party_account": self.debtors_usd,
"customer_name": self.customer,
"invoiced": 100.0,
"outstanding": 100.0,
"account_currency": "USD",
}
self.assertEqual(len(report[1]), 1)
report_output = report[1][0]
for field in expected:
with self.subTest(field=field):
self.assertEqual(report_output.get(field), expected.get(field))

0 comments on commit dfe5f63

Please sign in to comment.