Skip to content

Commit

Permalink
fix: broken overallocation validation in payment entry
Browse files Browse the repository at this point in the history
In a multi term payment schedule, overallocation logic broke. Fixing
it using individual term outstanding amount in references. this should
work for the simple, one term payment schedule as well

(cherry picked from commit f8d4b19)
  • Loading branch information
ruthra-kumar authored and mergify[bot] committed Jul 19, 2023
1 parent 0805a8e commit e1d31aa
Showing 1 changed file with 18 additions and 2 deletions.
20 changes: 18 additions & 2 deletions erpnext/accounts/doctype/payment_entry/payment_entry.py
Original file line number Diff line number Diff line change
Expand Up @@ -182,10 +182,12 @@ def validate_allocated_amount_with_latest_data(self):
latest_lookup = {}
for d in latest_references:
d = frappe._dict(d)
latest_lookup.update({(d.voucher_type, d.voucher_no): d})
latest_lookup.setdefault((d.voucher_type, d.voucher_no), frappe._dict())[d.payment_term] = d

for d in self.get("references"):
latest = latest_lookup.get((d.reference_doctype, d.reference_name))
latest = (latest_lookup.get((d.reference_doctype, d.reference_name)) or frappe._dict()).get(
d.payment_term
)

# The reference has already been fully paid
if not latest:
Expand All @@ -208,6 +210,18 @@ def validate_allocated_amount_with_latest_data(self):
if (flt(d.allocated_amount)) > 0 and flt(d.allocated_amount) > flt(latest.outstanding_amount):
frappe.throw(fail_message.format(d.idx))

if d.payment_term and (
(flt(d.allocated_amount)) > 0
and flt(d.allocated_amount) > flt(latest.payment_term_outstanding)
):
frappe.throw(
_(
"Row #{0}: Allocated amount:{1} is greater than outstanding amount:{2} for Payment Term {3}"
).format(
d.idx, d.allocated_amount, latest.payment_term_outstanding, d.payment_term
)
)

# Check for negative outstanding invoices as well
if flt(d.allocated_amount) < 0 and flt(d.allocated_amount) < flt(latest.outstanding_amount):
frappe.throw(fail_message.format(d.idx))
Expand Down Expand Up @@ -1466,6 +1480,7 @@ def split_invoices_based_on_payment_terms(outstanding_invoices):
"posting_date": d.posting_date,
"invoice_amount": flt(d.invoice_amount),
"outstanding_amount": flt(d.outstanding_amount),
"payment_term_outstanding": flt(payment_term.outstanding),
"payment_amount": payment_term.payment_amount,
"payment_term": payment_term.payment_term,
}
Expand Down Expand Up @@ -2240,6 +2255,7 @@ def get_reference_as_per_payment_terms(
"due_date": doc.get("due_date"),
"total_amount": grand_total,
"outstanding_amount": outstanding_amount,
"payment_term_outstanding": payment_term_outstanding,
"payment_term": payment_term.payment_term,
"allocated_amount": payment_term_outstanding,
}
Expand Down

0 comments on commit e1d31aa

Please sign in to comment.