details:   /erp/devel/pi/rev/716689278cd4
changeset: 11728:716689278cd4
user:      Mikel Irurita <mikel.irurita <at> openbravo.com>
date:      Wed Apr 27 13:14:49 2011 +0200
summary:   [APRM] Include amount validation when updating the payment plan.
Rollback statement has been moved to the last position in when catching the 
exception

diffstat:

 modules/org.openbravo.advpaymentmngt/src-db/database/sourcedata/AD_MESSAGE.xml 
                       |  11 +++
 
modules/org.openbravo.advpaymentmngt/src/org/openbravo/advpaymentmngt/process/FIN_AddPayment.java
     |  30 +++++++---
 
modules/org.openbravo.advpaymentmngt/src/org/openbravo/advpaymentmngt/process/FIN_PaymentProcess.java
 |   2 +-
 3 files changed, 33 insertions(+), 10 deletions(-)

diffs (79 lines):

diff -r ea278bfac87d -r 716689278cd4 
modules/org.openbravo.advpaymentmngt/src-db/database/sourcedata/AD_MESSAGE.xml
--- 
a/modules/org.openbravo.advpaymentmngt/src-db/database/sourcedata/AD_MESSAGE.xml
    Wed Apr 27 13:00:21 2011 +0200
+++ 
b/modules/org.openbravo.advpaymentmngt/src-db/database/sourcedata/AD_MESSAGE.xml
    Wed Apr 27 13:14:49 2011 +0200
@@ -660,4 +660,15 @@
 <!--FF8080812F5805CF012F5843BD3A005B-->  
<AD_MODULE_ID><![CDATA[A918E3331C404B889D69AA9BFAFB23AC]]></AD_MODULE_ID>
 <!--FF8080812F5805CF012F5843BD3A005B--></AD_MESSAGE>
 
+<!--FF8080812F967128012F969D366A0046--><AD_MESSAGE>
+<!--FF8080812F967128012F969D366A0046-->  
<AD_MESSAGE_ID><![CDATA[FF8080812F967128012F969D366A0046]]></AD_MESSAGE_ID>
+<!--FF8080812F967128012F969D366A0046-->  
<AD_CLIENT_ID><![CDATA[0]]></AD_CLIENT_ID>
+<!--FF8080812F967128012F969D366A0046-->  <AD_ORG_ID><![CDATA[0]]></AD_ORG_ID>
+<!--FF8080812F967128012F969D366A0046-->  <ISACTIVE><![CDATA[Y]]></ISACTIVE>
+<!--FF8080812F967128012F969D366A0046-->  
<VALUE><![CDATA[APRM_AmountOutOfRange]]></VALUE>
+<!--FF8080812F967128012F969D366A0046-->  <MSGTEXT><![CDATA[Amount out of 
range: %s cannot be used as outstanding amount is %s]]></MSGTEXT>
+<!--FF8080812F967128012F969D366A0046-->  <MSGTYPE><![CDATA[E]]></MSGTYPE>
+<!--FF8080812F967128012F969D366A0046-->  
<AD_MODULE_ID><![CDATA[A918E3331C404B889D69AA9BFAFB23AC]]></AD_MODULE_ID>
+<!--FF8080812F967128012F969D366A0046--></AD_MESSAGE>
+
 </data>
diff -r ea278bfac87d -r 716689278cd4 
modules/org.openbravo.advpaymentmngt/src/org/openbravo/advpaymentmngt/process/FIN_AddPayment.java
--- 
a/modules/org.openbravo.advpaymentmngt/src/org/openbravo/advpaymentmngt/process/FIN_AddPayment.java
 Wed Apr 27 13:00:21 2011 +0200
+++ 
b/modules/org.openbravo.advpaymentmngt/src/org/openbravo/advpaymentmngt/process/FIN_AddPayment.java
 Wed Apr 27 13:14:49 2011 +0200
@@ -589,17 +589,29 @@
    */
   public static void updatePaymentScheduleAmounts(FIN_PaymentSchedule 
paymentSchedule,
       BigDecimal amount, BigDecimal writeOffAmount) {
-    paymentSchedule.setPaidAmount(paymentSchedule.getPaidAmount().add(amount));
-    
paymentSchedule.setOutstandingAmount(paymentSchedule.getOutstandingAmount().subtract(amount));
+    BigDecimal totalPaid = amount;
+    BigDecimal outstanding = paymentSchedule.getOutstandingAmount();
     if (writeOffAmount != null && writeOffAmount.compareTo(BigDecimal.ZERO) != 
0) {
-      
paymentSchedule.setPaidAmount(paymentSchedule.getPaidAmount().add(writeOffAmount));
-      
paymentSchedule.setOutstandingAmount(paymentSchedule.getOutstandingAmount().subtract(
-          writeOffAmount));
+      totalPaid = amount.add(writeOffAmount);
     }
-    OBDal.getInstance().save(paymentSchedule);
-    if (paymentSchedule.getInvoice() != null) {
-      updateInvoicePaymentMonitor(paymentSchedule.getInvoice(), 
paymentSchedule.getDueDate(),
-          amount, 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)) {
+      
paymentSchedule.setPaidAmount(paymentSchedule.getPaidAmount().add(amount));
+      
paymentSchedule.setOutstandingAmount(paymentSchedule.getOutstandingAmount().subtract(amount));
+      if (writeOffAmount != null && writeOffAmount.compareTo(BigDecimal.ZERO) 
!= 0) {
+        
paymentSchedule.setPaidAmount(paymentSchedule.getPaidAmount().add(writeOffAmount));
+        
paymentSchedule.setOutstandingAmount(paymentSchedule.getOutstandingAmount().subtract(
+            writeOffAmount));
+      }
+      OBDal.getInstance().save(paymentSchedule);
+      if (paymentSchedule.getInvoice() != null) {
+        updateInvoicePaymentMonitor(paymentSchedule.getInvoice(), 
paymentSchedule.getDueDate(),
+            amount, writeOffAmount);
+      }
+    } else {
+      throw new 
OBException(String.format(FIN_Utility.messageBD("APRM_AmountOutOfRange"), 
totalPaid
+          .toString(), paymentSchedule.getOutstandingAmount().toString()));
     }
   }
 
diff -r ea278bfac87d -r 716689278cd4 
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
     Wed Apr 27 13:00:21 2011 +0200
+++ 
b/modules/org.openbravo.advpaymentmngt/src/org/openbravo/advpaymentmngt/process/FIN_PaymentProcess.java
     Wed Apr 27 13:14:49 2011 +0200
@@ -344,13 +344,13 @@
 
       bundle.setResult(msg);
     } catch (final Exception e) {
-      OBDal.getInstance().rollbackAndClose();
       e.printStackTrace(System.err);
       msg.setType("Error");
       msg.setTitle(Utility.messageBD(bundle.getConnection(), "Error", 
bundle.getContext()
           .getLanguage()));
       msg.setMessage(FIN_Utility.getExceptionMessage(e));
       bundle.setResult(msg);
+      OBDal.getInstance().rollbackAndClose();
     }
   }
 

------------------------------------------------------------------------------
WhatsUp Gold - Download Free Network Management Software
The most intuitive, comprehensive, and cost-effective network 
management toolset available today.  Delivers lowest initial 
acquisition cost and overall TCO of any competing solution.
http://p.sf.net/sfu/whatsupgold-sd
_______________________________________________
Openbravo-commits mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/openbravo-commits

Reply via email to