From 0aab1167a444940bfc406d12fbbd822a4741aad7 Mon Sep 17 00:00:00 2001 From: Gadha2311 Date: Mon, 12 Jan 2026 12:18:02 +0530 Subject: [PATCH] fix: correct round-off account source allocation --- models/baseModels/Payment/Payment.ts | 14 ++++++---- .../baseModels/SalesInvoice/SalesInvoice.ts | 28 +++++++++++++++---- 2 files changed, 31 insertions(+), 11 deletions(-) diff --git a/models/baseModels/Payment/Payment.ts b/models/baseModels/Payment/Payment.ts index 6e7992fb..b790c941 100644 --- a/models/baseModels/Payment/Payment.ts +++ b/models/baseModels/Payment/Payment.ts @@ -461,7 +461,10 @@ export class Payment extends Transactional { ); const previousOutstandingAmount = referenceDoc.outstandingAmount as Money; - const outstandingAmount = previousOutstandingAmount.sub(row.amount!); + const isReturnInvoice = (referenceDoc as Invoice).isReturn; + const outstandingAmount = isReturnInvoice + ? previousOutstandingAmount.add(row.amount!) + : previousOutstandingAmount.sub(row.amount!); await referenceDoc.setAndSync({ outstandingAmount }); } } @@ -505,11 +508,10 @@ export class Payment extends Transactional { ref.referenceType!, ref.referenceName ); - - const outstandingAmount = (refDoc.outstandingAmount as Money).add( - ref.amount! - ); - + const isReturnInvoice = (refDoc as Invoice).isReturn; + const outstandingAmount = isReturnInvoice + ? (refDoc.outstandingAmount as Money).sub(ref.amount!) + : (refDoc.outstandingAmount as Money).add(ref.amount!); await refDoc.setAndSync({ outstandingAmount }); } } diff --git a/models/baseModels/SalesInvoice/SalesInvoice.ts b/models/baseModels/SalesInvoice/SalesInvoice.ts index a2ae5e7e..090b6a04 100644 --- a/models/baseModels/SalesInvoice/SalesInvoice.ts +++ b/models/baseModels/SalesInvoice/SalesInvoice.ts @@ -43,12 +43,12 @@ export class SalesInvoice extends Invoice { this.loyaltyProgram )) as LoyaltyProgram; - let totalAmount; + let loyaltyAmount; if (this.isReturn) { - totalAmount = this.fyo.pesa(await getReturnLoyaltyPoints(this)); + loyaltyAmount = this.fyo.pesa(await getReturnLoyaltyPoints(this)); } else { - totalAmount = await getAddedLPWithGrandTotal( + loyaltyAmount = await getAddedLPWithGrandTotal( this.fyo, this.loyaltyProgram as string, this.loyaltyPoints as number @@ -57,10 +57,28 @@ export class SalesInvoice extends Invoice { await posting.debit( loyaltyProgramDoc.expenseAccount as string, - totalAmount + loyaltyAmount ); - await posting.credit(this.account!, totalAmount); + await posting.credit(this.account!, loyaltyAmount); + + const { debit, credit } = posting._getTotalDebitAndCredit(); + const difference = debit.sub(credit); + const absoluteValue = difference.abs(); + + if (!absoluteValue.eq(0)) { + if (difference.gt(0)) { + await posting.credit( + loyaltyProgramDoc.expenseAccount as string, + absoluteValue + ); + } else { + await posting.debit( + loyaltyProgramDoc.expenseAccount as string, + absoluteValue + ); + } + } } if (this.taxes) {