Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat: in_party_currency option for AR/AP reports (backport #37746) #38800

Merged
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
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 @@ -256,8 +258,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 @@ -318,7 +322,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 @@ -449,7 +453,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 @@ -581,6 +581,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