Skip to content

Commit

Permalink
Merge pull request #38800 from pps190/backport/version-14-hotfix/37746
Browse files Browse the repository at this point in the history
feat: in_party_currency option for AR/AP reports (backport #37746)
  • Loading branch information
ruthra-kumar authored Dec 20, 2023
2 parents 22b442d + 7eee573 commit 1e9b4e2
Show file tree
Hide file tree
Showing 5 changed files with 26 additions and 11 deletions.
7 changes: 6 additions & 1 deletion erpnext/accounts/report/accounts_payable/accounts_payable.js
Original file line number Diff line number Diff line change
Expand Up @@ -149,11 +149,16 @@ frappe.query_reports["Accounts Payable"] = {
"label": __("Revaluation Journals"),
"fieldtype": "Check",
},
{
"fieldname": "in_party_currency",
"label": __("In Party Currency"),
"fieldtype": "Check",
},
{
"fieldname": "ignore_accounts",
"label": __("Group by Voucher"),
"fieldtype": "Check",
}
},

],

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -40,6 +40,7 @@ def test_accounts_payable_for_foreign_currency_supplier(self):
"range2": 60,
"range3": 90,
"range4": 120,
"in_party_currency": 1,
}

data = execute(filters)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -181,13 +181,17 @@ frappe.query_reports["Accounts Receivable"] = {
"label": __("Revaluation Journals"),
"fieldtype": "Check",
},
{
"fieldname": "in_party_currency",
"label": __("In Party Currency"),
"fieldtype": "Check",
},
{
"fieldname": "ignore_accounts",
"label": __("Group by Voucher"),
"fieldtype": "Check",
}


],

"formatter": function(value, row, column, data, default_formatter) {
Expand Down
22 changes: 13 additions & 9 deletions erpnext/accounts/report/accounts_receivable/accounts_receivable.py
100755 → 100644
Original file line number Diff line number Diff line change
Expand Up @@ -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):
Expand Down Expand Up @@ -84,6 +84,9 @@ def set_defaults(self):
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()
Expand Down Expand Up @@ -145,7 +148,7 @@ def init_voucher_balance(self):
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):
Expand Down Expand Up @@ -224,8 +227,7 @@ def update_voucher_balance(self, ple):
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
Expand Down Expand Up @@ -260,8 +262,10 @@ def update_voucher_balance(self, ple):
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)
Expand Down Expand Up @@ -322,7 +326,7 @@ def build_data(self):
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)
Expand Down Expand Up @@ -453,7 +457,7 @@ def set_party_details(self, row):
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
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -616,6 +616,7 @@ def test_usd_customer_filter(self):
"range2": 60,
"range3": 90,
"range4": 120,
"in_party_currency": 1,
}

si = self.create_sales_invoice(no_payment_schedule=True, do_not_submit=True)
Expand Down

0 comments on commit 1e9b4e2

Please sign in to comment.