Skip to content

Commit

Permalink
feat: in_party_currency option for AR/AP reports
Browse files Browse the repository at this point in the history
  • Loading branch information
casesolved-co-uk authored and dj12djdjs committed Dec 18, 2023
1 parent 02ceee6 commit a65bc77
Show file tree
Hide file tree
Showing 3 changed files with 23 additions and 12 deletions.
6 changes: 5 additions & 1 deletion erpnext/accounts/report/accounts_payable/accounts_payable.js
Original file line number Diff line number Diff line change
Expand Up @@ -153,8 +153,12 @@ frappe.query_reports["Accounts Payable"] = {
"fieldname": "ignore_accounts",
"label": __("Group by Voucher"),
"fieldtype": "Check",
},
{
"fieldname": "in_party_currency",
"label": __("In Party Currency"),
"fieldtype": "Check",
}

],

"formatter": function(value, row, column, data, default_formatter) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -185,9 +185,12 @@ frappe.query_reports["Accounts Receivable"] = {
"fieldname": "ignore_accounts",
"label": __("Group by Voucher"),
"fieldtype": "Check",
},
{
"fieldname": "in_party_currency",
"label": __("In Party Currency"),
"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 @@ -82,6 +82,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 @@ -143,7 +146,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 @@ -222,8 +225,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 @@ -254,8 +256,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 @@ -316,7 +320,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 @@ -447,7 +451,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

0 comments on commit a65bc77

Please sign in to comment.