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

Reply via email to