details:   /erp/devel/pi/rev/72af0b46291b
changeset: 12204:72af0b46291b
user:      Mikel Irurita <mikel.irurita <at> openbravo.com>
date:      Tue May 17 17:56:05 2011 +0200
summary:   Fixes amount validation when processing the payment.
Take negative amounts comparation as special case.
Validate amounts only when the payment plan is going to be updated.
Take amount from paymentScheduleDetail instead of paymentDetail

diffstat:

 
modules/org.openbravo.advpaymentmngt/src/org/openbravo/advpaymentmngt/process/FIN_PaymentProcess.java
 |  28 ++++++---
 1 files changed, 19 insertions(+), 9 deletions(-)

diffs (68 lines):

diff -r 806f41767485 -r 72af0b46291b 
modules/org.openbravo.advpaymentmngt/src/org/openbravo/advpaymentmngt/process/FIN_PaymentProcess.java
--- 
a/modules/org.openbravo.advpaymentmngt/src/org/openbravo/advpaymentmngt/process/FIN_PaymentProcess.java
     Tue May 17 17:42:24 2011 +0200
+++ 
b/modules/org.openbravo.advpaymentmngt/src/org/openbravo/advpaymentmngt/process/FIN_PaymentProcess.java
     Tue May 17 17:56:05 2011 +0200
@@ -115,14 +115,10 @@
               if (paymentScheduleDetail.getInvoicePaymentSchedule() != null) {
                 
invoiceDocNos.add(paymentScheduleDetail.getInvoicePaymentSchedule().getInvoice()
                     .getDocumentNo());
-                
validateAmount(paymentScheduleDetail.getInvoicePaymentSchedule(), paymentDetail
-                    .getAmount(), paymentDetail.getWriteoffAmount());
               }
               if (paymentScheduleDetail.getOrderPaymentSchedule() != null) {
                 
orderDocNos.add(paymentScheduleDetail.getOrderPaymentSchedule().getOrder()
                     .getDocumentNo());
-                
validateAmount(paymentScheduleDetail.getOrderPaymentSchedule(), paymentDetail
-                    .getAmount(), paymentDetail.getWriteoffAmount());
               }
               if (paymentScheduleDetail.getInvoicePaymentSchedule() == null
                   && paymentScheduleDetail.getOrderPaymentSchedule() == null
@@ -241,8 +237,15 @@
               }
             }
             for (FIN_PaymentDetail paymentDetail : 
payment.getFINPaymentDetailList()) {
-              for (FIN_PaymentScheduleDetail paymentScheduleDetail : 
paymentDetail
-                  .getFINPaymentScheduleDetailList()) {
+              // Get payment schedule detail list ordered by amount asc.
+              // First negative if they exist and then positives
+              OBCriteria<FIN_PaymentScheduleDetail> obcPSD = 
OBDal.getInstance().createCriteria(
+                  FIN_PaymentScheduleDetail.class);
+              
obcPSD.add(Restrictions.eq(FIN_PaymentScheduleDetail.PROPERTY_PAYMENTDETAILS,
+                  paymentDetail));
+              obcPSD.addOrderBy(FIN_PaymentScheduleDetail.PROPERTY_AMOUNT, 
true);
+
+              for (FIN_PaymentScheduleDetail paymentScheduleDetail : 
obcPSD.list()) {
                 BigDecimal amount = paymentScheduleDetail.getAmount().add(
                     paymentScheduleDetail.getWriteoffAmount());
                 if (paymentScheduleDetail.getInvoicePaymentSchedule() != null) 
{
@@ -255,11 +258,15 @@
                   } else {
                     increaseCustomerCredit(businessPartner, amount);
                   }
+                  
validateAmount(paymentScheduleDetail.getInvoicePaymentSchedule(),
+                      paymentScheduleDetail.getAmount(), 
paymentScheduleDetail.getWriteoffAmount());
                   
FIN_AddPayment.updatePaymentScheduleAmounts(paymentScheduleDetail
                       .getInvoicePaymentSchedule(), 
paymentScheduleDetail.getAmount(),
                       paymentScheduleDetail.getWriteoffAmount());
                 }
                 if (paymentScheduleDetail.getOrderPaymentSchedule() != null) {
+                  
validateAmount(paymentScheduleDetail.getOrderPaymentSchedule(),
+                      paymentScheduleDetail.getAmount(), 
paymentScheduleDetail.getWriteoffAmount());
                   
FIN_AddPayment.updatePaymentScheduleAmounts(paymentScheduleDetail
                       .getOrderPaymentSchedule(), 
paymentScheduleDetail.getAmount(),
                       paymentScheduleDetail.getWriteoffAmount());
@@ -538,9 +545,12 @@
     if (writeOffAmount != null && writeOffAmount.compareTo(BigDecimal.ZERO) != 
0) {
       totalPaid = amount.add(writeOffAmount);
     }
-    // (totalPaid > 0 && totalPaid <= outstanding) || (totalPaid < 0 && 
totalPaid >= outstanding)
-    if ((totalPaid.compareTo(BigDecimal.ZERO) == 1 && 
totalPaid.compareTo(outstanding) <= 0)
-        || (totalPaid.compareTo(BigDecimal.ZERO) == -1 && 
totalPaid.compareTo(outstanding) >= 0)) {
+    // ((totalPaid > 0 || outstanding > 0) && totalPaid <= outstanding)
+    // || (totalPaid < 0 && outstanding < 0 && totalPaid >= outstanding)
+    if (((totalPaid.compareTo(BigDecimal.ZERO) == 1 || 
outstanding.compareTo(BigDecimal.ZERO) == 1) && totalPaid
+        .compareTo(outstanding) <= 0)
+        || (totalPaid.compareTo(BigDecimal.ZERO) == -1
+            && outstanding.compareTo(BigDecimal.ZERO) == -1 && 
totalPaid.compareTo(outstanding) >= 0)) {
       return true;
     } else {
       throw new 
OBException(String.format(FIN_Utility.messageBD("APRM_AmountOutOfRange"), 
totalPaid

------------------------------------------------------------------------------
Achieve unprecedented app performance and reliability
What every C/C++ and Fortran developer should know.
Learn how Intel has extended the reach of its next-generation tools
to help boost performance applications - inlcuding clusters.
http://p.sf.net/sfu/intel-dev2devmay
_______________________________________________
Openbravo-commits mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/openbravo-commits

Reply via email to