diff --git a/models/baseModels/Invoice/Invoice.ts b/models/baseModels/Invoice/Invoice.ts index e8ea56804..1d7919883 100644 --- a/models/baseModels/Invoice/Invoice.ts +++ b/models/baseModels/Invoice/Invoice.ts @@ -1047,19 +1047,15 @@ export abstract class Invoice extends Transactional { if (sinvreturnedDoc.outstandingAmount?.isZero()) { return this.grandTotal?.abs(); } else { - const totalPaid = sinvreturnedDoc.grandTotal - ?.abs() - .sub(sinvreturnedDoc.outstandingAmount as Money); + const totalPaid = sinvreturnedDoc + .grandTotal!.abs() + .sub(sinvreturnedDoc.outstandingAmount!); - if (!sinvreturnedDoc.isReturn) { - return totalPaid?.abs(); - } - - if (!this.grandTotal?.isNegative()) { - this.grandTotal = this.grandTotal?.neg(); - } + const outstandingAmount = this.grandTotal!.abs(); - return this.grandTotal?.add(totalPaid as Money).abs(); + return outstandingAmount.lte(totalPaid) + ? outstandingAmount + : totalPaid; } } @@ -1290,18 +1286,21 @@ export abstract class Invoice extends Transactional { paymentType = PaymentTypeEnum.Receive; } } + const paymentAmount = this.isReturn + ? outstandingAmount + : outstandingAmount?.abs(); const data = { party: this.party, date: new Date().toISOString(), paymentType, - amount: this.outstandingAmount?.abs(), + amount: paymentAmount, [accountField]: this.account, for: [ { referenceType: this.schemaName, referenceName: this.name, - amount: this.outstandingAmount, + amount: this.isReturn ? this.grandTotal : outstandingAmount, }, ], }; @@ -1313,7 +1312,6 @@ export abstract class Invoice extends Transactional { return this.fyo.doc.getNewDoc(ModelNameEnum.Payment, data) as Payment; } - async getStockTransfer(isAuto = false): Promise { if (!this.isSubmitted) { return null;