details:   https://code.openbravo.com/erp/devel/main/rev/fc4fc420b639
changeset: 15246:fc4fc420b639
user:      Jon AlegrĂ­a <jon.alegria <at> openbravo.com>
date:      Mon Jan 30 11:51:35 2012 +0100
summary:   Fixes issue 0019433: Net Unit Price wrong calculated with discount

details:   https://code.openbravo.com/erp/devel/main/rev/72658d6ae07c
changeset: 15247:72658d6ae07c
user:      Asier Lostalé <asier.lostale <at> openbravo.com>
date:      Mon Jan 30 14:58:35 2012 +0000
summary:   documentation

details:   https://code.openbravo.com/erp/devel/main/rev/4ad8836205f2
changeset: 15248:4ad8836205f2
user:      Javier Etxarri <javier.echarri <at> openbravo.com>
date:      Mon Jan 30 16:47:20 2012 +0100
summary:   Fixes issue 19580: Initial Org setup fails with dal permission check 
error.
Now, in execution time, the process has access to all propierties of entities 
ADImage and ADTree

details:   https://code.openbravo.com/erp/devel/main/rev/a052b9bb86e5
changeset: 15249:a052b9bb86e5
user:      Javier Etxarri <javier.echarri <at> openbravo.com>
date:      Mon Jan 30 18:13:28 2012 +0100
summary:   issue 17395, issue 19463: Read Only Logic for columns is applied 
incorrectly.
Now the read only logic is applied correctly for fields without column related 
(OBClientClassField)

details:   https://code.openbravo.com/erp/devel/main/rev/10c7ee51d207
changeset: 15250:10c7ee51d207
user:      Javier Etxarri <javier.echarri <at> openbravo.com>
date:      Mon Jan 30 18:44:09 2012 +0100
summary:   issue 19283: You can not lock an user.
Updated the COpyright end year

details:   https://code.openbravo.com/erp/devel/main/rev/5a50007648a7
changeset: 15251:5a50007648a7
user:      RM packaging bot <staff.rm <at> openbravo.com>
date:      Mon Jan 30 23:45:58 2012 +0100
summary:   CI: merge back from main

details:   https://code.openbravo.com/erp/devel/main/rev/aebe5fda8932
changeset: 15252:aebe5fda8932
user:      Eduardo Argal Guibert <eduardo.argal <at> openbravo.com>
date:      Fri Dec 23 14:01:30 2011 +0100
summary:   Fixes issue 18818, Fixes issue 19363

details:   https://code.openbravo.com/erp/devel/main/rev/a5f8504156ea
changeset: 15253:a5f8504156ea
user:      Eduardo Argal Guibert <eduardo.argal <at> openbravo.com>
date:      Fri Dec 23 14:01:30 2011 +0100
summary:   Fixes issue 18818, Fixes issue 19363

details:   https://code.openbravo.com/erp/devel/main/rev/a295858d3232
changeset: 15254:a295858d3232
user:      Eduardo Argal Guibert <eduardo.argal <at> openbravo.com>
date:      Mon Jan 30 19:11:21 2012 +0100
summary:   Fixes issue 17231: Instead of showing the invoice once, it is 
showing as many times as orders gathers

details:   https://code.openbravo.com/erp/devel/main/rev/9c4928b3f1e5
changeset: 15255:9c4928b3f1e5
user:      Eduardo Argal Guibert <eduardo.argal <at> openbravo.com>
date:      Mon Jan 30 19:27:50 2012 +0100
summary:   merge

details:   https://code.openbravo.com/erp/devel/main/rev/4115718d84a0
changeset: 15256:4115718d84a0
user:      Eduardo Argal Guibert <eduardo.argal <at> openbravo.com>
date:      Tue Jan 31 10:54:16 2012 +0100
summary:   merge

details:   https://code.openbravo.com/erp/devel/main/rev/9fdad21b4f9f
changeset: 15257:9fdad21b4f9f
user:      Eduardo Argal Guibert <eduardo.argal <at> openbravo.com>
date:      Tue Jan 31 11:23:19 2012 +0100
summary:   [Code Review] for issue 19549

details:   https://code.openbravo.com/erp/devel/main/rev/015ef57d21c1
changeset: 15258:015ef57d21c1
user:      Eduardo Argal Guibert <eduardo.argal <at> openbravo.com>
date:      Tue Jan 31 11:50:37 2012 +0100
summary:   [Code review] Modify license

details:   https://code.openbravo.com/erp/devel/main/rev/44cab4b1fcef
changeset: 15259:44cab4b1fcef
user:      Eduardo Argal Guibert <eduardo.argal <at> openbravo.com>
date:      Tue Jan 31 13:16:00 2012 +0100
summary:   Fixes bug 19550: Shipment /receipt posting not handling properly 
products with 0 cost

details:   https://code.openbravo.com/erp/devel/main/rev/933a9b7b9d89
changeset: 15260:933a9b7b9d89
user:      RM packaging bot <staff.rm <at> openbravo.com>
date:      Wed Feb 01 08:45:07 2012 +0100
summary:   CI: update AD_MODULE to version 15259

diffstat:

 modules/org.openbravo.advpaymentmngt/src-db/database/sourcedata/AD_MODULE.xml  
                              |    2 +-
 
modules/org.openbravo.advpaymentmngt/src-db/database/sourcedata/AD_MODULE_DEPENDENCY.xml
                     |    4 +-
 
modules/org.openbravo.advpaymentmngt/src/org/openbravo/advpaymentmngt/ad_actionbutton/AddOrderOrInvoice.java
 |  160 +++++++++-
 
modules/org.openbravo.advpaymentmngt/src/org/openbravo/advpaymentmngt/ad_actionbutton/AddPaymentGrid.srpt
    |    4 +-
 
modules/org.openbravo.advpaymentmngt/src/org/openbravo/advpaymentmngt/ad_actionbutton/AddPaymentGrid.xml
     |    6 +-
 
modules/org.openbravo.advpaymentmngt/src/org/openbravo/advpaymentmngt/process/FIN_AddPayment.java
            |   32 +-
 modules/org.openbravo.base.weld/src-db/database/sourcedata/AD_MODULE.xml       
                              |    2 +-
 
modules/org.openbravo.base.weld/src-db/database/sourcedata/AD_MODULE_DEPENDENCY.xml
                          |    2 +-
 
modules/org.openbravo.client.application/src-db/database/sourcedata/AD_MODULE.xml
                            |    2 +-
 
modules/org.openbravo.client.application/src-db/database/sourcedata/AD_MODULE_DEPENDENCY.xml
                 |    8 +-
 
modules/org.openbravo.client.application/src/org/openbravo/client/application/window/OBViewFieldHandler.java
 |    4 +-
 
modules/org.openbravo.client.htmlwidget/src-db/database/sourcedata/AD_MODULE.xml
                             |    2 +-
 
modules/org.openbravo.client.htmlwidget/src-db/database/sourcedata/AD_MODULE_DEPENDENCY.xml
                  |    2 +-
 modules/org.openbravo.client.kernel/src-db/database/sourcedata/AD_MODULE.xml   
                              |    2 +-
 
modules/org.openbravo.client.kernel/src-db/database/sourcedata/AD_MODULE_DEPENDENCY.xml
                      |    6 +-
 modules/org.openbravo.client.myob/src-db/database/sourcedata/AD_MODULE.xml     
                              |    2 +-
 
modules/org.openbravo.client.myob/src-db/database/sourcedata/AD_MODULE_DEPENDENCY.xml
                        |    4 +-
 modules/org.openbravo.client.myob/src-db/database/sourcedata/AD_WINDOW.xml     
                              |    2 +-
 
modules/org.openbravo.client.querylist/src-db/database/sourcedata/AD_MODULE.xml 
                             |    2 +-
 
modules/org.openbravo.client.querylist/src-db/database/sourcedata/AD_MODULE_DEPENDENCY.xml
                   |    2 +-
 modules/org.openbravo.client.widgets/src-db/database/sourcedata/AD_MODULE.xml  
                              |    2 +-
 
modules/org.openbravo.client.widgets/src-db/database/sourcedata/AD_MODULE_DEPENDENCY.xml
                     |    2 +-
 
modules/org.openbravo.financial.paymentreport/src-db/database/sourcedata/AD_MODULE.xml
                       |    2 +-
 
modules/org.openbravo.financial.paymentreport/src-db/database/sourcedata/AD_MODULE_DEPENDENCY.xml
            |    2 +-
 
modules/org.openbravo.reports.ordersawaitingdelivery/src-db/database/sourcedata/AD_MODULE.xml
                |    2 +-
 
modules/org.openbravo.reports.ordersawaitingdelivery/src-db/database/sourcedata/AD_MODULE_DEPENDENCY.xml
     |    2 +-
 
modules/org.openbravo.service.datasource/src-db/database/sourcedata/AD_MODULE.xml
                            |    2 +-
 
modules/org.openbravo.service.datasource/src-db/database/sourcedata/AD_MODULE_DEPENDENCY.xml
                 |   10 +-
 
modules/org.openbravo.service.integration.google/src-db/database/sourcedata/AD_MODULE.xml
                    |    2 +-
 
modules/org.openbravo.service.integration.google/src-db/database/sourcedata/AD_MODULE_DEPENDENCY.xml
         |    4 +-
 
modules/org.openbravo.service.integration.openid/src-db/database/sourcedata/AD_MODULE.xml
                    |    2 +-
 
modules/org.openbravo.service.integration.openid/src-db/database/sourcedata/AD_MODULE_DEPENDENCY.xml
         |    2 +-
 modules/org.openbravo.service.json/src-db/database/sourcedata/AD_MODULE.xml    
                              |    2 +-
 
modules/org.openbravo.service.json/src-db/database/sourcedata/AD_MODULE_DEPENDENCY.xml
                       |    2 +-
 
modules/org.openbravo.userinterface.selector/src-db/database/sourcedata/AD_MODULE.xml
                        |    2 +-
 
modules/org.openbravo.userinterface.selector/src-db/database/sourcedata/AD_MODULE_DEPENDENCY.xml
             |   12 +-
 
modules/org.openbravo.userinterface.skin.250to300Comp/src-db/database/sourcedata/AD_MODULE.xml
               |    2 +-
 
modules/org.openbravo.userinterface.skin.250to300Comp/src-db/database/sourcedata/AD_MODULE_DEPENDENCY.xml
    |    2 +-
 
modules/org.openbravo.userinterface.smartclient/src-db/database/sourcedata/AD_MODULE.xml
                     |    2 +-
 
modules/org.openbravo.userinterface.smartclient/src-db/database/sourcedata/AD_MODULE_DEPENDENCY.xml
          |    6 +-
 modules/org.openbravo.v3.datasets/src-db/database/sourcedata/AD_MODULE.xml     
                              |    2 +-
 
modules/org.openbravo.v3.datasets/src-db/database/sourcedata/AD_MODULE_DEPENDENCY.xml
                        |    6 +-
 modules/org.openbravo.v3.framework/src-db/database/sourcedata/AD_MODULE.xml    
                              |    2 +-
 
modules/org.openbravo.v3.framework/src-db/database/sourcedata/AD_MODULE_DEPENDENCY.xml
                       |   24 +-
 modules/org.openbravo.v3/src-db/database/sourcedata/AD_MODULE.xml              
                              |    2 +-
 modules/org.openbravo.v3/src-db/database/sourcedata/AD_MODULE_DEPENDENCY.xml   
                              |   18 +-
 src-db/database/sourcedata/AD_MODULE.xml                                       
                              |    4 +-
 src-db/database/sourcedata/AD_TAB.xml                                          
                              |    4 +-
 src-db/database/sourcedata/AD_WINDOW.xml                                       
                              |    2 +-
 src/org/openbravo/authentication/basic/DefaultAuthenticationManager.java       
                              |    2 +-
 src/org/openbravo/erpCommon/ad_callouts/SL_Order_Amt.java                      
                              |   30 +-
 src/org/openbravo/erpCommon/ad_forms/DocInOut.java                             
                              |   65 ++--
 src/org/openbravo/erpCommon/ad_reports/ReportNotPosted_data.xsql               
                              |    2 +-
 src/org/openbravo/erpCommon/businessUtility/InitialOrgSetup.java               
                              |    6 +
 54 files changed, 331 insertions(+), 152 deletions(-)

diffs (truncated from 1502 to 300 lines):

diff -r 578ff14a16ee -r 933a9b7b9d89 
modules/org.openbravo.advpaymentmngt/src-db/database/sourcedata/AD_MODULE.xml
--- 
a/modules/org.openbravo.advpaymentmngt/src-db/database/sourcedata/AD_MODULE.xml 
    Mon Jan 30 07:43:43 2012 +0000
+++ 
b/modules/org.openbravo.advpaymentmngt/src-db/database/sourcedata/AD_MODULE.xml 
    Wed Feb 01 08:45:07 2012 +0100
@@ -6,7 +6,7 @@
 <!--A918E3331C404B889D69AA9BFAFB23AC-->  <AD_ORG_ID><![CDATA[0]]></AD_ORG_ID>
 <!--A918E3331C404B889D69AA9BFAFB23AC-->  <ISACTIVE><![CDATA[Y]]></ISACTIVE>
 <!--A918E3331C404B889D69AA9BFAFB23AC-->  <NAME><![CDATA[Advanced Payables and 
Receivables Mngmt]]></NAME>
-<!--A918E3331C404B889D69AA9BFAFB23AC-->  
<VERSION><![CDATA[3.0.15241]]></VERSION>
+<!--A918E3331C404B889D69AA9BFAFB23AC-->  
<VERSION><![CDATA[3.0.15259]]></VERSION>
 <!--A918E3331C404B889D69AA9BFAFB23AC-->  <DESCRIPTION><![CDATA[Managing your 
finances with an ERP does not have to be difficult. Enjoy a radically improved 
user experience that combines the power of an enterprise grade financial 
application with the simplicity and ease of a web 2.0 personal accounting 
service.]]></DESCRIPTION>
 <!--A918E3331C404B889D69AA9BFAFB23AC-->  <HELP><![CDATA[Advanced Payables and 
Receivables Management simplifies and automates the business processes around 
the management of financial accounts, from the receipt and issue of payment, to 
the reconciliation of those events with bank statements.
 If you would like to help shape this module you are welcome to take part in 
the forum discussions or register feature requests or issues in the 
corresponding (Forum and Bug Tracking) sections in the Advanced Payables and 
Receivable project in the OB Forge.]]></HELP>
diff -r 578ff14a16ee -r 933a9b7b9d89 
modules/org.openbravo.advpaymentmngt/src-db/database/sourcedata/AD_MODULE_DEPENDENCY.xml
--- 
a/modules/org.openbravo.advpaymentmngt/src-db/database/sourcedata/AD_MODULE_DEPENDENCY.xml
  Mon Jan 30 07:43:43 2012 +0000
+++ 
b/modules/org.openbravo.advpaymentmngt/src-db/database/sourcedata/AD_MODULE_DEPENDENCY.xml
  Wed Feb 01 08:45:07 2012 +0100
@@ -7,7 +7,7 @@
 <!--89326AE95DAD449D85DFAB2C5B1C6683-->  <ISACTIVE><![CDATA[Y]]></ISACTIVE>
 <!--89326AE95DAD449D85DFAB2C5B1C6683-->  
<AD_MODULE_ID><![CDATA[A918E3331C404B889D69AA9BFAFB23AC]]></AD_MODULE_ID>
 <!--89326AE95DAD449D85DFAB2C5B1C6683-->  
<AD_DEPENDENT_MODULE_ID><![CDATA[5EB4F15C80684ACA904756BDC12ADBE5]]></AD_DEPENDENT_MODULE_ID>
-<!--89326AE95DAD449D85DFAB2C5B1C6683-->  
<STARTVERSION><![CDATA[2.1.15241]]></STARTVERSION>
+<!--89326AE95DAD449D85DFAB2C5B1C6683-->  
<STARTVERSION><![CDATA[2.1.15259]]></STARTVERSION>
 <!--89326AE95DAD449D85DFAB2C5B1C6683-->  <ISINCLUDED><![CDATA[N]]></ISINCLUDED>
 <!--89326AE95DAD449D85DFAB2C5B1C6683-->  <DEPENDANT_MODULE_NAME><![CDATA[User 
Interface Selector]]></DEPENDANT_MODULE_NAME>
 <!--89326AE95DAD449D85DFAB2C5B1C6683-->  
<DEPENDENCY_ENFORCEMENT><![CDATA[MAJOR]]></DEPENDENCY_ENFORCEMENT>
@@ -21,7 +21,7 @@
 <!--B97FC854C6DD41E692161585645A900F-->  <ISACTIVE><![CDATA[Y]]></ISACTIVE>
 <!--B97FC854C6DD41E692161585645A900F-->  
<AD_MODULE_ID><![CDATA[A918E3331C404B889D69AA9BFAFB23AC]]></AD_MODULE_ID>
 <!--B97FC854C6DD41E692161585645A900F-->  
<AD_DEPENDENT_MODULE_ID><![CDATA[0]]></AD_DEPENDENT_MODULE_ID>
-<!--B97FC854C6DD41E692161585645A900F-->  
<STARTVERSION><![CDATA[3.0.15241]]></STARTVERSION>
+<!--B97FC854C6DD41E692161585645A900F-->  
<STARTVERSION><![CDATA[3.0.15259]]></STARTVERSION>
 <!--B97FC854C6DD41E692161585645A900F-->  <ISINCLUDED><![CDATA[N]]></ISINCLUDED>
 <!--B97FC854C6DD41E692161585645A900F-->  
<DEPENDANT_MODULE_NAME><![CDATA[core]]></DEPENDANT_MODULE_NAME>
 <!--B97FC854C6DD41E692161585645A900F-->  
<DEPENDENCY_ENFORCEMENT><![CDATA[MAJOR]]></DEPENDENCY_ENFORCEMENT>
diff -r 578ff14a16ee -r 933a9b7b9d89 
modules/org.openbravo.advpaymentmngt/src/org/openbravo/advpaymentmngt/ad_actionbutton/AddOrderOrInvoice.java
--- 
a/modules/org.openbravo.advpaymentmngt/src/org/openbravo/advpaymentmngt/ad_actionbutton/AddOrderOrInvoice.java
      Mon Jan 30 07:43:43 2012 +0000
+++ 
b/modules/org.openbravo.advpaymentmngt/src/org/openbravo/advpaymentmngt/ad_actionbutton/AddOrderOrInvoice.java
      Wed Feb 01 08:45:07 2012 +0100
@@ -23,7 +23,10 @@
 import java.math.BigDecimal;
 import java.util.ArrayList;
 import java.util.HashMap;
+import java.util.LinkedHashSet;
 import java.util.List;
+import java.util.Set;
+import java.util.StringTokenizer;
 
 import javax.servlet.ServletException;
 import javax.servlet.http.HttpServletRequest;
@@ -89,8 +92,7 @@
       String strDueDateFrom = vars.getStringParameter("inpDueDateFrom", "");
       String strDueDateTo = vars.getStringParameter("inpDueDateTo", "");
       String strDocumentType = vars.getStringParameter("inpDocumentType", "");
-      String strSelectedPaymentDetails = 
vars.getInStringParameter("inpScheduledPaymentDetailId",
-          IsIDFilter.instance);
+      String strSelectedPaymentDetails = 
vars.getInStringParameter("inpScheduledPaymentDetailId");
       boolean isReceipt = 
vars.getRequiredStringParameter("isReceipt").equals("Y");
       Boolean showAlternativePM = 
"Y".equals(vars.getStringParameter("inpAlternativePaymentMethod",
           filterYesNo));
@@ -107,8 +109,8 @@
         strAction = vars.getRequiredStringParameter("inpActionDocument");
       }
       String strPaymentId = vars.getRequiredStringParameter("inpfinPaymentId");
-      String strSelectedScheduledPaymentDetailIds = vars.getInParameter(
-          "inpScheduledPaymentDetailId", "", IsIDFilter.instance);
+      String strSelectedScheduledPaymentDetailIds = vars.getInStringParameter(
+          "inpScheduledPaymentDetailId", "");
       String strAddedGLItems = vars.getStringParameter("inpGLItems");
       JSONArray addedGLITemsArray = null;
       try {
@@ -142,8 +144,8 @@
 
         List<FIN_PaymentScheduleDetail> selectedPaymentDetails = 
FIN_Utility.getOBObjectList(
             FIN_PaymentScheduleDetail.class, 
strSelectedScheduledPaymentDetailIds);
-        HashMap<String, BigDecimal> selectedPaymentDetailAmounts = 
FIN_AddPayment
-            .getSelectedPaymentDetailsAndAmount(vars, selectedPaymentDetails);
+        HashMap<String, BigDecimal> selectedPaymentDetailAmounts = 
getSelectedPaymentDetailsAndAmount(
+            vars, strSelectedScheduledPaymentDetailIds);
 
         FIN_Payment payment = dao.getObject(FIN_Payment.class, strPaymentId);
         BigDecimal newPaymentAmount = new BigDecimal(strPaymentAmount);
@@ -412,8 +414,9 @@
             showAlternativePM ? null : payment.getPaymentMethod(), 
selectedScheduledPaymentDetails,
             isReceipt);
 
-    final FieldProvider[] data = 
FIN_AddPayment.getShownScheduledPaymentDetails(vars,
+    FieldProvider[] data = FIN_AddPayment.getShownScheduledPaymentDetails(vars,
         selectedScheduledPaymentDetails, filteredScheduledPaymentDetails, 
false, null);
+    data = groupPerDocumentType(data, strDocumentType);
     xmlDocument.setData("structure", (data == null) ? set() : data);
 
     response.setContentType("text/html; charset=UTF-8");
@@ -436,6 +439,149 @@
     return FieldProviderFactory.getFieldProviderArray(result);
   }
 
+  private FieldProvider[] groupPerDocumentType(FieldProvider[] data, String 
strDocumenType) {
+    ArrayList<FieldProvider> gridLines = new ArrayList<FieldProvider>();
+    HashMap<String, Integer> amountsPerGroupingField = new HashMap<String, 
Integer>();
+    String groupingField = "finScheduledPaymentDetailId";
+    if ("I".equals(strDocumenType)) {
+      groupingField = "invoicePaymentScheduleId";
+    } else if ("O".equals(strDocumenType)) {
+      groupingField = "orderPaymentScheduleId";
+    }
+    for (int i = 0; i < data.length; i++) {
+      if (!amountsPerGroupingField.containsKey(data[i].getField(groupingField))
+          || "".equals(data[i].getField(groupingField))) {
+        amountsPerGroupingField.put(data[i].getField(groupingField), 
gridLines.size());
+        FieldProviderFactory.setField(data[i], "rownum", 
String.valueOf(gridLines.size()));
+        gridLines.add(data[i]);
+      } else {
+        Integer listIndex = 
amountsPerGroupingField.get(data[i].getField(groupingField));
+        FieldProvider row = gridLines.get(listIndex);
+        FieldProviderFactory.setField(
+            row,
+            "finScheduledPaymentDetailId",
+            row.getField("finScheduledPaymentDetailId") + ","
+                + data[i].getField("finScheduledPaymentDetailId"));
+        FieldProviderFactory.setField(
+            row,
+            "finSelectedPaymentDetailId",
+            row.getField("finSelectedPaymentDetailId") + ","
+                + data[i].getField("finScheduledPaymentDetailId"));
+        FieldProviderFactory.setField(
+            row,
+            "outstandingAmount",
+            new BigDecimal(row.getField("outstandingAmount")).add(
+                new 
BigDecimal(data[i].getField("outstandingAmount"))).toString());
+        BigDecimal payAmount = BigDecimal.ZERO;
+        if (!"".equals(row.getField("paymentAmount"))) {
+          payAmount = new BigDecimal(row.getField("paymentAmount"));
+        }
+        FieldProviderFactory.setField(
+            row,
+            "paymentAmount",
+            !"".equals(data[i].getField("paymentAmount")) ? payAmount.add(
+                new BigDecimal(data[i].getField("paymentAmount"))).toString() 
: (payAmount
+                .compareTo(BigDecimal.ZERO) == 0 ? "" : payAmount.toString()));
+        if ("O".equals(strDocumenType)) {
+          String strGroupedInvoicesNr = row.getField("invoiceNr");
+          FieldProviderFactory.setField(row, "invoiceNr", 
(strGroupedInvoicesNr.isEmpty() ? ""
+              : strGroupedInvoicesNr + ", ") + data[i].getField("invoiceNr"));
+          String invoiceNumber = row.getField("invoiceNr");
+          String invoiceNumberTrunc = (invoiceNumber.length() > 17) ? 
invoiceNumber
+              .substring(0, 14).concat("...").toString() : invoiceNumber;
+          FieldProviderFactory.setField(row, "invoiceNrTrunc", 
invoiceNumberTrunc);
+        } else if ("I".equals(strDocumenType)) {
+          String strGroupedOrdersNr = row.getField("orderNr");
+          FieldProviderFactory.setField(row, "orderNr", 
(strGroupedOrdersNr.isEmpty() ? ""
+              : strGroupedOrdersNr + ", ") + data[i].getField("orderNr"));
+          String orderNumber = row.getField("orderNr");
+          String orderNumberTrunc = (orderNumber.length() > 17) ? 
orderNumber.substring(0, 14)
+              .concat("...").toString() : orderNumber;
+          FieldProviderFactory.setField(row, "orderNrTrunc", orderNumberTrunc);
+        }
+      }
+    }
+    FieldProvider[] result = new FieldProvider[gridLines.size()];
+    gridLines.toArray(result);
+    return result;
+  }
+
+  /**
+   * Creates a HashMap with the FIN_PaymentScheduleDetail id's and the amount 
gotten from the
+   * Session.
+   * 
+   * The amounts are stored in Session like 
"inpPaymentAmount"+paymentScheduleDetail.Id
+   * 
+   * @param vars
+   *          VariablseSecureApp with the session data.
+   * @param selectedPaymentScheduleDetails
+   *          List of FIN_PaymentScheduleDetails that need to be included in 
the HashMap.
+   * @return A HashMap mapping the FIN_PaymentScheduleDetail's Id with the 
corresponding amount.
+   */
+  private HashMap<String, BigDecimal> 
getSelectedPaymentDetailsAndAmount(VariablesSecureApp vars,
+      String _strSelectedScheduledPaymentDetailIds) throws ServletException {
+    String strSelectedScheduledPaymentDetailIds = 
_strSelectedScheduledPaymentDetailIds;
+    // Remove "(" ")"
+    strSelectedScheduledPaymentDetailIds = 
strSelectedScheduledPaymentDetailIds.replace("(", "");
+    strSelectedScheduledPaymentDetailIds = 
strSelectedScheduledPaymentDetailIds.replace(")", "");
+    HashMap<String, BigDecimal> selectedPaymentScheduleDetailsAmounts = new 
HashMap<String, BigDecimal>();
+    // As selected items may contain records with multiple IDs we as well need 
the records list as
+    // amounts are related to records
+    StringTokenizer records = new 
StringTokenizer(strSelectedScheduledPaymentDetailIds, "'");
+    Set<String> recordSet = new LinkedHashSet<String>();
+    while (records.hasMoreTokens()) {
+      recordSet.add(records.nextToken());
+    }
+    for (String record : recordSet) {
+      if (", ".equals(record)) {
+        continue;
+      }
+      Set<String> psdSet = new LinkedHashSet<String>();
+      StringTokenizer psds = new StringTokenizer(record, ",");
+      while (psds.hasMoreTokens()) {
+        psdSet.add(psds.nextToken());
+      }
+      BigDecimal recordAmount = new BigDecimal(vars.getNumericParameter(
+          "inpPaymentAmount" + record, ""));
+      HashMap<String, BigDecimal> recordsAmounts = 
calculateAmounts(recordAmount, psdSet);
+      selectedPaymentScheduleDetailsAmounts.putAll(recordsAmounts);
+    }
+    return selectedPaymentScheduleDetailsAmounts;
+  }
+
+  /**
+   * This method returns a HashMap with pairs of UUID of payment schedule 
details and amounts
+   * related to those ones.
+   * 
+   * @param recordAmount
+   *          : amount to split among the set
+   * @param psdSet
+   *          : set of payment schedule details where to allocate the amount
+   * @return
+   */
+  private HashMap<String, BigDecimal> calculateAmounts(BigDecimal 
recordAmount, Set<String> psdSet) {
+    BigDecimal remainingAmount = recordAmount;
+    HashMap<String, BigDecimal> recordsAmounts = new HashMap<String, 
BigDecimal>();
+    for (String psdId : psdSet) {
+      FIN_PaymentScheduleDetail paymentScheduleDetail = 
OBDal.getInstance().get(
+          FIN_PaymentScheduleDetail.class, psdId);
+      BigDecimal outstandingAmount = paymentScheduleDetail.getAmount();
+      // Manage negative amounts
+      if ((remainingAmount.compareTo(BigDecimal.ZERO) > 0 && remainingAmount
+          .compareTo(outstandingAmount) >= 0)
+          || ((remainingAmount.compareTo(BigDecimal.ZERO) == -1 && 
outstandingAmount
+              .compareTo(BigDecimal.ZERO) == -1) && 
(remainingAmount.compareTo(outstandingAmount) <= 0))) {
+        recordsAmounts.put(psdId, outstandingAmount);
+        remainingAmount = remainingAmount.subtract(outstandingAmount);
+      } else {
+        recordsAmounts.put(psdId, remainingAmount);
+        remainingAmount = BigDecimal.ZERO;
+      }
+
+    }
+    return recordsAmounts;
+  }
+
   public String getServletInfo() {
     return "Servlet that presents the payment proposal";
     // end of getServletInfo() method
diff -r 578ff14a16ee -r 933a9b7b9d89 
modules/org.openbravo.advpaymentmngt/src/org/openbravo/advpaymentmngt/ad_actionbutton/AddPaymentGrid.srpt
--- 
a/modules/org.openbravo.advpaymentmngt/src/org/openbravo/advpaymentmngt/ad_actionbutton/AddPaymentGrid.srpt
 Mon Jan 30 07:43:43 2012 +0000
+++ 
b/modules/org.openbravo.advpaymentmngt/src/org/openbravo/advpaymentmngt/ad_actionbutton/AddPaymentGrid.srpt
 Wed Feb 01 08:45:07 2012 +0100
@@ -22,8 +22,8 @@
   <input type="hidden" name="inpRecordAmtxx" value="" id="fieldRecordAmt"/>
   <tr id="funcEvenOddRow" class="DataGrid_Body_Row DataGrid_Body_Row_xx" 
bgcolor="#E1E1E1">
     <td class="DataGrid_Body_LineNoCell"> <input type="checkbox" 
name="inpScheduledPaymentDetailId" value="" id="fieldScheduledPaymentDetailId" 
onclick="updateData(this.value, this.checked, true);return true;"/></td>
-    <td class="DataGrid_Body_Cell" id="fieldOrderNr">xx</td>
-    <td class="DataGrid_Body_Cell" id="fieldInvoiceNr">xxINV30004 (2/3)</td>
+    <td class="DataGrid_Body_Cell" title="zz" id="fieldOrderNr">xx</td>
+    <td class="DataGrid_Body_Cell" title="zz" id="fieldInvoiceNr">xxINV30004 
(2/3)</td>
     <td class="DataGrid_Body_Cell" id="businessPartnerName" 
title="">xxBPartner</td>
     <td class="DataGrid_Body_Cell" title="zz" 
id="fieldPaymentMethod">xxCash</td>
     <td class="DataGrid_Body_Cell" id="fieldDueDate">xx12/12/2009</td>
diff -r 578ff14a16ee -r 933a9b7b9d89 
modules/org.openbravo.advpaymentmngt/src/org/openbravo/advpaymentmngt/ad_actionbutton/AddPaymentGrid.xml
--- 
a/modules/org.openbravo.advpaymentmngt/src/org/openbravo/advpaymentmngt/ad_actionbutton/AddPaymentGrid.xml
  Mon Jan 30 07:43:43 2012 +0000
+++ 
b/modules/org.openbravo.advpaymentmngt/src/org/openbravo/advpaymentmngt/ad_actionbutton/AddPaymentGrid.xml
  Wed Feb 01 08:45:07 2012 +0100
@@ -28,8 +28,10 @@
     <FIELD id="fieldRecordId" attribute="name" replace="xx">rownum</FIELD>
     <FIELD id="fieldRecordAmt" attribute="value" 
format="euroEdition">outstandingAmount</FIELD>
     <FIELD id="fieldRecordAmt" attribute="name" 
replace="xx">finScheduledPaymentDetailId</FIELD>
-    <FIELD id="fieldOrderNr">orderNr</FIELD>
-    <FIELD id="fieldInvoiceNr">invoiceNr</FIELD>
+    <FIELD id="fieldOrderNr">orderNrTrunc</FIELD>
+    <FIELD id="fieldOrderNr" attribute="title" replace="zz">orderNr</FIELD>
+    <FIELD id="fieldInvoiceNr">invoiceNrTrunc</FIELD>
+    <FIELD id="fieldInvoiceNr" attribute="title" replace="zz">invoiceNr</FIELD>
     <FIELD id="businessPartnerName" 
attribute="title">businessPartnerName</FIELD>
     <FIELD id="businessPartnerName">businessPartnerNameTrunc</FIELD>
     <FIELD id="fieldPaymentMethod">paymentMethodNameTrunc</FIELD>
diff -r 578ff14a16ee -r 933a9b7b9d89 
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
 Mon Jan 30 07:43:43 2012 +0000
+++ 
b/modules/org.openbravo.advpaymentmngt/src/org/openbravo/advpaymentmngt/process/FIN_AddPayment.java
 Wed Feb 01 08:45:07 2012 +0100
@@ -533,9 +533,7 @@
     shownScheduledPaymentDetails.addAll(filteredScheduledPaymentDetails);
     FIN_PaymentScheduleDetail[] FIN_PaymentScheduleDetails = new 
FIN_PaymentScheduleDetail[0];
     FIN_PaymentScheduleDetails = 
shownScheduledPaymentDetails.toArray(FIN_PaymentScheduleDetails);
-    // FieldProvider[] data = 
FieldProviderFactory.getFieldProviderArray(FIN_PaymentSchedules);
 
-    // FieldProvider[] data = new 
FieldProviderFactory[selectedScheduledPayments.size()];
     FieldProvider[] data = 
FieldProviderFactory.getFieldProviderArray(shownScheduledPaymentDetails);
     String dateFormat = 
OBPropertiesProvider.getInstance().getOpenbravoProperties()
         .getProperty("dateFormat.java");
@@ -552,16 +550,30 @@
                 : "");
         FieldProviderFactory.setField(data[i], "finScheduledPaymentDetailId",
             FIN_PaymentScheduleDetails[i].getId());
-        if (FIN_PaymentScheduleDetails[i].getOrderPaymentSchedule() != null)
+        if (FIN_PaymentScheduleDetails[i].getOrderPaymentSchedule() != null) {
           FieldProviderFactory.setField(data[i], "orderNr", 
FIN_PaymentScheduleDetails[i]
               .getOrderPaymentSchedule().getOrder().getDocumentNo());
-        else
+          FieldProviderFactory.setField(data[i], "orderNrTrunc", 
FIN_PaymentScheduleDetails[i]
+              .getOrderPaymentSchedule().getOrder().getDocumentNo());
+          FieldProviderFactory.setField(data[i], "orderPaymentScheduleId",
+              FIN_PaymentScheduleDetails[i].getOrderPaymentSchedule().getId());
+        } else {
           FieldProviderFactory.setField(data[i], "orderNr", "");
-        if (FIN_PaymentScheduleDetails[i].getInvoicePaymentSchedule() != null)
+          FieldProviderFactory.setField(data[i], "orderNrTrunc", "");

------------------------------------------------------------------------------
Keep Your Developer Skills Current with LearnDevNow!
The most comprehensive online learning library for Microsoft developers
is just $99.99! Visual Studio, SharePoint, SQL - plus HTML5, CSS3, MVC3,
Metro Style Apps, more. Free future releases when you subscribe now!
http://p.sf.net/sfu/learndevnow-d2d
_______________________________________________
Openbravo-commits mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/openbravo-commits

Reply via email to