feat: in_party_currency option for AR/AP reports
diff --git a/erpnext/accounts/report/accounts_payable/accounts_payable.js b/erpnext/accounts/report/accounts_payable/accounts_payable.js
index 9c73cbb..8fa81cd 100644
--- a/erpnext/accounts/report/accounts_payable/accounts_payable.js
+++ b/erpnext/accounts/report/accounts_payable/accounts_payable.js
@@ -143,6 +143,11 @@
"fieldname": "show_future_payments",
"label": __("Show Future Payments"),
"fieldtype": "Check",
+ },
+ {
+ "fieldname": "in_party_currency",
+ "label": __("In Party Currency"),
+ "fieldtype": "Check",
}
],
diff --git a/erpnext/accounts/report/accounts_receivable/accounts_receivable.js b/erpnext/accounts/report/accounts_receivable/accounts_receivable.js
index 1073be0..c49b67a 100644
--- a/erpnext/accounts/report/accounts_receivable/accounts_receivable.js
+++ b/erpnext/accounts/report/accounts_receivable/accounts_receivable.js
@@ -172,6 +172,11 @@
"fieldname": "show_remarks",
"label": __("Show Remarks"),
"fieldtype": "Check",
+ },
+ {
+ "fieldname": "in_party_currency",
+ "label": __("In Party Currency"),
+ "fieldtype": "Check",
}
],
diff --git a/erpnext/accounts/report/accounts_receivable/accounts_receivable.py b/erpnext/accounts/report/accounts_receivable/accounts_receivable.py
old mode 100755
new mode 100644
index b9c7a0b..e8cf915
--- a/erpnext/accounts/report/accounts_receivable/accounts_receivable.py
+++ b/erpnext/accounts/report/accounts_receivable/accounts_receivable.py
@@ -28,8 +28,8 @@
# 6. Configurable Ageing Groups (0-30, 30-60 etc) can be set via filters
# 7. For overpayment against an invoice with payment terms, there will be an additional row
# 8. Invoice details like Sales Persons, Delivery Notes are also fetched comma separated
-# 9. Report amounts are in "Party Currency" if party is selected, or company currency for multi-party
-# 10. This reports is based on all GL Entries that are made against account_type "Receivable" or "Payable"
+# 9. Report amounts are in party currency if in_party_currency is selected, otherwise company currency
+# 10. This report is based on Payment Ledger Entries
def execute(filters=None):
@@ -84,6 +84,9 @@
self.total_row_map = {}
self.skip_total_row = 1
+ if self.filters.get("in_party_currency"):
+ self.skip_total_row = 1
+
def get_data(self):
self.get_ple_entries()
self.get_sales_invoices_or_customers_based_on_sales_person()
@@ -140,7 +143,7 @@
if self.filters.get("group_by_party"):
self.init_subtotal_row(ple.party)
- if self.filters.get("group_by_party"):
+ if self.filters.get("group_by_party") and not self.filters.get("in_party_currency"):
self.init_subtotal_row("Total")
def get_invoices(self, ple):
@@ -210,8 +213,7 @@
if not row:
return
- # amount in "Party Currency", if its supplied. If not, amount in company currency
- if self.filters.get("party_type") and self.filters.get("party"):
+ if self.filters.get("in_party_currency"):
amount = ple.amount_in_account_currency
else:
amount = ple.amount
@@ -242,8 +244,10 @@
def update_sub_total_row(self, row, party):
total_row = self.total_row_map.get(party)
- for field in self.get_currency_fields():
- total_row[field] += row.get(field, 0.0)
+ if total_row:
+ for field in self.get_currency_fields():
+ total_row[field] += row.get(field, 0.0)
+ total_row["currency"] = row.get("currency", "")
def append_subtotal_row(self, party):
sub_total_row = self.total_row_map.get(party)
@@ -295,7 +299,7 @@
if self.filters.get("group_by_party"):
self.append_subtotal_row(self.previous_party)
if self.data:
- self.data.append(self.total_row_map.get("Total"))
+ self.data.append(self.total_row_map.get("Total", {}))
def append_row(self, row):
self.allocate_future_payments(row)
@@ -426,7 +430,7 @@
party_details = self.get_party_details(row.party) or {}
row.update(party_details)
- if self.filters.get("party_type") and self.filters.get("party"):
+ if self.filters.get("in_party_currency"):
row.currency = row.account_currency
else:
row.currency = self.company_currency