Merge pull request #37131 from ruthra-kumar/more_generic_customer_filter_in_ar_report
refactor: more generic filters in Accounts Receivable report
This commit is contained in:
commit
2a575d9dc2
@ -24,7 +24,7 @@ class TestAccountsReceivable(AccountsTestMixin, FrappeTestCase):
|
|||||||
def tearDown(self):
|
def tearDown(self):
|
||||||
frappe.db.rollback()
|
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 = self.create_purchase_invoice(do_not_submit=True)
|
||||||
pi.currency = "USD"
|
pi.currency = "USD"
|
||||||
pi.conversion_rate = 80
|
pi.conversion_rate = 80
|
||||||
|
|||||||
@ -38,32 +38,31 @@ frappe.query_reports["Accounts Receivable"] = {
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"fieldname": "customer",
|
"fieldname": "party_type",
|
||||||
"label": __("Customer"),
|
"label": __("Party Type"),
|
||||||
"fieldtype": "Link",
|
"fieldtype": "Link",
|
||||||
"options": "Customer",
|
"options": "Party Type",
|
||||||
|
"Default": "Customer",
|
||||||
|
get_query: () => {
|
||||||
|
return {
|
||||||
|
filters: {
|
||||||
|
'account_type': 'Receivable'
|
||||||
|
}
|
||||||
|
};
|
||||||
|
},
|
||||||
on_change: () => {
|
on_change: () => {
|
||||||
var customer = frappe.query_report.get_filter_value('customer');
|
frappe.query_report.set_filter_value('party', "");
|
||||||
var company = frappe.query_report.get_filter_value('company');
|
let party_type = frappe.query_report.get_filter_value('party_type');
|
||||||
if (customer) {
|
frappe.query_report.toggle_filter_display('customer_group', frappe.query_report.get_filter_value('party_type') !== "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.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",
|
"fieldname": "party_account",
|
||||||
"label": __("Receivable Account"),
|
"label": __("Receivable Account"),
|
||||||
@ -174,24 +173,6 @@ frappe.query_reports["Accounts Receivable"] = {
|
|||||||
"fieldname": "show_remarks",
|
"fieldname": "show_remarks",
|
||||||
"label": __("Show Remarks"),
|
"label": __("Show Remarks"),
|
||||||
"fieldtype": "Check",
|
"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
|
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
|
|
||||||
|
|||||||
@ -769,15 +769,12 @@ class ReceivablePayableReport(object):
|
|||||||
self.or_filters = []
|
self.or_filters = []
|
||||||
|
|
||||||
for party_type in self.party_type:
|
for party_type in self.party_type:
|
||||||
party_type_field = scrub(party_type)
|
self.add_common_filters()
|
||||||
self.or_filters.append(self.ple.party_type == party_type)
|
|
||||||
|
|
||||||
self.add_common_filters(party_type_field=party_type_field)
|
if self.account_type == "Receivable":
|
||||||
|
|
||||||
if party_type_field == "customer":
|
|
||||||
self.add_customer_filters()
|
self.add_customer_filters()
|
||||||
|
|
||||||
elif party_type_field == "supplier":
|
elif self.account_type == "Payable":
|
||||||
self.add_supplier_filters()
|
self.add_supplier_filters()
|
||||||
|
|
||||||
if self.filters.cost_center:
|
if self.filters.cost_center:
|
||||||
@ -793,16 +790,13 @@ class ReceivablePayableReport(object):
|
|||||||
]
|
]
|
||||||
self.qb_selection_filter.append(self.ple.cost_center.isin(cost_center_list))
|
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:
|
if self.filters.company:
|
||||||
self.qb_selection_filter.append(self.ple.company == self.filters.company)
|
self.qb_selection_filter.append(self.ple.company == self.filters.company)
|
||||||
|
|
||||||
if self.filters.finance_book:
|
if self.filters.finance_book:
|
||||||
self.qb_selection_filter.append(self.ple.finance_book == 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"):
|
if self.filters.get("party_type"):
|
||||||
self.qb_selection_filter.append(self.filters.party_type == self.ple.party_type)
|
self.qb_selection_filter.append(self.filters.party_type == self.ple.party_type)
|
||||||
|
|
||||||
@ -969,6 +963,20 @@ class ReceivablePayableReport(object):
|
|||||||
fieldtype="Link",
|
fieldtype="Link",
|
||||||
options="Contact",
|
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=_("Cost Center"), fieldname="cost_center", fieldtype="Data")
|
||||||
self.add_column(label=_("Voucher Type"), fieldname="voucher_type", fieldtype="Data")
|
self.add_column(label=_("Voucher Type"), fieldname="voucher_type", fieldtype="Data")
|
||||||
|
|||||||
@ -568,3 +568,40 @@ class TestAccountsReceivable(AccountsTestMixin, FrappeTestCase):
|
|||||||
row.account_currency,
|
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))
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user