fix: overallocation on Payment with PO/SO
diff --git a/erpnext/accounts/utils.py b/erpnext/accounts/utils.py
index f2691fb..1c7052f 100644
--- a/erpnext/accounts/utils.py
+++ b/erpnext/accounts/utils.py
@@ -645,7 +645,7 @@
"outstanding_amount": d.outstanding_amount,
"allocated_amount": d.allocated_amount,
"exchange_rate": d.exchange_rate if d.exchange_gain_loss else payment_entry.get_exchange_rate(),
- "exchange_gain_loss": d.exchange_gain_loss, # only populated from invoice in case of advance allocation
+ "exchange_gain_loss": d.exchange_gain_loss,
"account": d.account,
}
@@ -658,22 +658,21 @@
existing_row.reference_doctype, existing_row.reference_name
).set_total_advance_paid()
- original_row = existing_row.as_dict().copy()
- existing_row.update(reference_details)
+ if d.allocated_amount <= existing_row.allocated_amount:
+ existing_row.allocated_amount -= d.allocated_amount
- if d.allocated_amount < original_row.allocated_amount:
new_row = payment_entry.append("references")
new_row.docstatus = 1
for field in list(reference_details):
- new_row.set(field, original_row[field])
+ new_row.set(field, reference_details[field])
- new_row.allocated_amount = original_row.allocated_amount - d.allocated_amount
else:
new_row = payment_entry.append("references")
new_row.docstatus = 1
new_row.update(reference_details)
payment_entry.flags.ignore_validate_update_after_submit = True
+ payment_entry.clear_unallocated_reference_document_rows()
payment_entry.setup_party_account_field()
payment_entry.set_missing_values()
if not skip_ref_details_update_for_pe: