Skip to content

Commit

Permalink
Merge pull request #35774 from frappe/mergify/bp/version-14/pr-35770
Browse files Browse the repository at this point in the history
fix: Allocated amount validation for other party types (#35741)
  • Loading branch information
deepeshgarg007 authored Jun 19, 2023
2 parents 58e304f + 3bf7115 commit d928a5c
Showing 1 changed file with 18 additions and 9 deletions.
27 changes: 18 additions & 9 deletions erpnext/accounts/doctype/payment_entry/payment_entry.py
Original file line number Diff line number Diff line change
Expand Up @@ -151,6 +151,19 @@ def validate_allocated_amount(self):
if self.payment_type == "Internal Transfer":
return

if self.party_type in ("Customer", "Supplier"):
self.validate_allocated_amount_with_latest_data()
else:
fail_message = _("Row #{0}: Allocated Amount cannot be greater than outstanding amount.")
for d in self.get("references"):
if (flt(d.allocated_amount)) > 0 and flt(d.allocated_amount) > flt(d.outstanding_amount):
frappe.throw(fail_message.format(d.idx))

# Check for negative outstanding invoices as well
if flt(d.allocated_amount) < 0 and flt(d.allocated_amount) < flt(d.outstanding_amount):
frappe.throw(fail_message.format(d.idx))

def validate_allocated_amount_with_latest_data(self):
latest_references = get_outstanding_reference_documents(
{
"posting_date": self.posting_date,
Expand All @@ -168,7 +181,7 @@ def validate_allocated_amount(self):
d = frappe._dict(d)
latest_lookup.update({(d.voucher_type, d.voucher_no): d})

for d in self.get("references").copy():
for d in self.get("references"):
latest = latest_lookup.get((d.reference_doctype, d.reference_name))

# The reference has already been fully paid
Expand All @@ -187,18 +200,14 @@ def validate_allocated_amount(self):
).format(d.reference_doctype, d.reference_name)
)

d.outstanding_amount = latest.outstanding_amount

fail_message = _("Row #{0}: Allocated Amount cannot be greater than outstanding amount.")

if (flt(d.allocated_amount)) > 0:
if flt(d.allocated_amount) > flt(d.outstanding_amount):
frappe.throw(fail_message.format(d.idx))
if (flt(d.allocated_amount)) > 0 and flt(d.allocated_amount) > flt(latest.outstanding_amount):
frappe.throw(fail_message.format(d.idx))

# Check for negative outstanding invoices as well
if flt(d.allocated_amount) < 0:
if flt(d.allocated_amount) < flt(d.outstanding_amount):
frappe.throw(fail_message.format(d.idx))
if flt(d.allocated_amount) < 0 and flt(d.allocated_amount) < flt(latest.outstanding_amount):
frappe.throw(fail_message.format(d.idx))

def delink_advance_entry_references(self):
for reference in self.references:
Expand Down

0 comments on commit d928a5c

Please sign in to comment.