details: https://code.openbravo.com/erp/devel/pi/rev/49fefc70a4c7 changeset: 35708:49fefc70a4c7 user: Nono Carballo <nonofce <at> gmail.com> date: Thu Apr 25 11:44:14 2019 +0200 summary: Fixes issue 40545: Update payment schedule detail with line amount
When paying completely an Invoice with negative lines, some lines could remain with zero payment schedule details after payment is processed. In this fix, the payment schedule detail for each line is updated with the line amount. diffstat: modules/org.openbravo.advpaymentmngt/src/org/openbravo/advpaymentmngt/actionHandler/AddPaymentActionHandler.java | 29 ++++++++- 1 files changed, 25 insertions(+), 4 deletions(-) diffs (67 lines): diff -r cbb150e17b8b -r 49fefc70a4c7 modules/org.openbravo.advpaymentmngt/src/org/openbravo/advpaymentmngt/actionHandler/AddPaymentActionHandler.java --- a/modules/org.openbravo.advpaymentmngt/src/org/openbravo/advpaymentmngt/actionHandler/AddPaymentActionHandler.java Fri Apr 26 10:23:56 2019 +0200 +++ b/modules/org.openbravo.advpaymentmngt/src/org/openbravo/advpaymentmngt/actionHandler/AddPaymentActionHandler.java Thu Apr 25 11:44:14 2019 +0200 @@ -11,7 +11,7 @@ * under the License. * The Original Code is Openbravo ERP. * The Initial Developer of the Original Code is Openbravo SLU - * All portions are Copyright (C) 2014-2016 Openbravo SLU + * All portions are Copyright (C) 2014-2019 Openbravo SLU * All Rights Reserved. * Contributor(s): ______________________________________. ************************************************************************ @@ -26,6 +26,7 @@ import java.util.HashMap; import java.util.List; import java.util.Map; +import java.util.stream.Collectors; import javax.servlet.ServletException; @@ -323,6 +324,7 @@ List<FIN_PaymentScheduleDetail> psds = getOrderedPaymentScheduleDetails(psdIds); BigDecimal outstandingAmount = BigDecimal.ZERO; BigDecimal remainingAmount = paidAmount; + boolean isFullPaydAndHasNegativeLines = fullPaydAndHasNegativeLines(psds, paidAmount); for (FIN_PaymentScheduleDetail psd : psds) { BigDecimal assignAmount = BigDecimal.ZERO; @@ -344,16 +346,35 @@ || (remainingAmount.signum() < 0 && remainingAmount.compareTo(outstandingAmount) <= 0)) { assignAmount = outstandingAmount; - remainingAmount = remainingAmount.subtract(outstandingAmount); + if (!isFullPaydAndHasNegativeLines) { + remainingAmount = remainingAmount.subtract(outstandingAmount); + } } else { - assignAmount = remainingAmount; - remainingAmount = BigDecimal.ZERO; + if (isFullPaydAndHasNegativeLines) { + assignAmount = outstandingAmount; + } else { + assignAmount = remainingAmount; + remainingAmount = BigDecimal.ZERO; + } } FIN_AddPayment.updatePaymentDetail(psd, payment, assignAmount, isWriteOff); } } } + private boolean fullPaydAndHasNegativeLines(List<FIN_PaymentScheduleDetail> psds, + BigDecimal paidAmount) { + BigDecimal sumOfAmounts = psds.stream() + .map(FIN_PaymentScheduleDetail::getAmount) + .reduce(BigDecimal::add) + .get(); + + List<FIN_PaymentScheduleDetail> negativePsd = psds.stream() + .filter(t -> t.getAmount().signum() < 0) + .collect(Collectors.toList()); + return sumOfAmounts.compareTo(paidAmount) == 0 && !negativePsd.isEmpty(); + } + private void addCredit(FIN_Payment payment, JSONObject jsonparams, BigDecimal differenceAmount, String strDifferenceAction) throws JSONException { // Credit to Use Grid _______________________________________________ Openbravo-commits mailing list Openbravo-commits@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/openbravo-commits