# HG changeset patch
# User Mikel Irurita <mikel.irurita@openbravo.com>
# Date 1363105172 -3600
# Node ID e67be3395871b48cefffb70c3357437d7658793e
# Parent  0a2de0f9f22fbb99c0ef03f2af10ae60fd37376c
Fixes issue 23288: Payment proposal: ability to generate single payment for all the purchase orders/invoices

diff --git a/modules/org.openbravo.advpaymentmngt/src-db/database/sourcedata/AD_REF_LIST.xml b/modules/org.openbravo.advpaymentmngt/src-db/database/sourcedata/AD_REF_LIST.xml
--- a/modules/org.openbravo.advpaymentmngt/src-db/database/sourcedata/AD_REF_LIST.xml
+++ b/modules/org.openbravo.advpaymentmngt/src-db/database/sourcedata/AD_REF_LIST.xml
@@ -25,6 +25,18 @@
 <!--2C29C3C687FC403A802A15DEAF9E0D26-->  <SEQNO><![CDATA[10]]></SEQNO>
 <!--2C29C3C687FC403A802A15DEAF9E0D26--></AD_REF_LIST>
 
+<!--3F087596A0A14DE5BAECAD211AB393BA--><AD_REF_LIST>
+<!--3F087596A0A14DE5BAECAD211AB393BA-->  <AD_REF_LIST_ID><![CDATA[3F087596A0A14DE5BAECAD211AB393BA]]></AD_REF_LIST_ID>
+<!--3F087596A0A14DE5BAECAD211AB393BA-->  <AD_CLIENT_ID><![CDATA[0]]></AD_CLIENT_ID>
+<!--3F087596A0A14DE5BAECAD211AB393BA-->  <AD_ORG_ID><![CDATA[0]]></AD_ORG_ID>
+<!--3F087596A0A14DE5BAECAD211AB393BA-->  <ISACTIVE><![CDATA[Y]]></ISACTIVE>
+<!--3F087596A0A14DE5BAECAD211AB393BA-->  <VALUE><![CDATA[GONEP]]></VALUE>
+<!--3F087596A0A14DE5BAECAD211AB393BA-->  <NAME><![CDATA[Group all orders/invoices into one payment]]></NAME>
+<!--3F087596A0A14DE5BAECAD211AB393BA-->  <AD_REFERENCE_ID><![CDATA[79FDE7805FC84C2BB251EE57E96C0AEE]]></AD_REFERENCE_ID>
+<!--3F087596A0A14DE5BAECAD211AB393BA-->  <AD_MODULE_ID><![CDATA[A918E3331C404B889D69AA9BFAFB23AC]]></AD_MODULE_ID>
+<!--3F087596A0A14DE5BAECAD211AB393BA-->  <SEQNO><![CDATA[40]]></SEQNO>
+<!--3F087596A0A14DE5BAECAD211AB393BA--></AD_REF_LIST>
+
 <!--432DB5DD63B449ACB9DEFF26D21B219F--><AD_REF_LIST>
 <!--432DB5DD63B449ACB9DEFF26D21B219F-->  <AD_REF_LIST_ID><![CDATA[432DB5DD63B449ACB9DEFF26D21B219F]]></AD_REF_LIST_ID>
 <!--432DB5DD63B449ACB9DEFF26D21B219F-->  <AD_CLIENT_ID><![CDATA[0]]></AD_CLIENT_ID>
@@ -34,6 +46,7 @@
 <!--432DB5DD63B449ACB9DEFF26D21B219F-->  <NAME><![CDATA[Generate Payments]]></NAME>
 <!--432DB5DD63B449ACB9DEFF26D21B219F-->  <AD_REFERENCE_ID><![CDATA[79FDE7805FC84C2BB251EE57E96C0AEE]]></AD_REFERENCE_ID>
 <!--432DB5DD63B449ACB9DEFF26D21B219F-->  <AD_MODULE_ID><![CDATA[A918E3331C404B889D69AA9BFAFB23AC]]></AD_MODULE_ID>
+<!--432DB5DD63B449ACB9DEFF26D21B219F-->  <SEQNO><![CDATA[10]]></SEQNO>
 <!--432DB5DD63B449ACB9DEFF26D21B219F--></AD_REF_LIST>
 
 <!--4A633A692495425FA27BEF840905D29E--><AD_REF_LIST>
@@ -45,6 +58,7 @@
 <!--4A633A692495425FA27BEF840905D29E-->  <NAME><![CDATA[Reactivate]]></NAME>
 <!--4A633A692495425FA27BEF840905D29E-->  <AD_REFERENCE_ID><![CDATA[79FDE7805FC84C2BB251EE57E96C0AEE]]></AD_REFERENCE_ID>
 <!--4A633A692495425FA27BEF840905D29E-->  <AD_MODULE_ID><![CDATA[A918E3331C404B889D69AA9BFAFB23AC]]></AD_MODULE_ID>
+<!--4A633A692495425FA27BEF840905D29E-->  <SEQNO><![CDATA[20]]></SEQNO>
 <!--4A633A692495425FA27BEF840905D29E--></AD_REF_LIST>
 
 <!--4A647396E4CE4E8B90D58E9FE4C12BBA--><AD_REF_LIST>
@@ -210,6 +224,7 @@
 <!--C5D1596D065545B49156C1F9426C9E14-->  <NAME><![CDATA[Group separate payments for the same vendor into one payment]]></NAME>
 <!--C5D1596D065545B49156C1F9426C9E14-->  <AD_REFERENCE_ID><![CDATA[79FDE7805FC84C2BB251EE57E96C0AEE]]></AD_REFERENCE_ID>
 <!--C5D1596D065545B49156C1F9426C9E14-->  <AD_MODULE_ID><![CDATA[A918E3331C404B889D69AA9BFAFB23AC]]></AD_MODULE_ID>
+<!--C5D1596D065545B49156C1F9426C9E14-->  <SEQNO><![CDATA[30]]></SEQNO>
 <!--C5D1596D065545B49156C1F9426C9E14--></AD_REF_LIST>
 
 <!--E047F81FACD0440EACB0EE63EB18A4EE--><AD_REF_LIST>
diff --git a/modules/org.openbravo.advpaymentmngt/src/org/openbravo/advpaymentmngt/ad_actionbutton/ProcessPaymentProposal.java b/modules/org.openbravo.advpaymentmngt/src/org/openbravo/advpaymentmngt/ad_actionbutton/ProcessPaymentProposal.java
--- a/modules/org.openbravo.advpaymentmngt/src/org/openbravo/advpaymentmngt/ad_actionbutton/ProcessPaymentProposal.java
+++ b/modules/org.openbravo.advpaymentmngt/src/org/openbravo/advpaymentmngt/ad_actionbutton/ProcessPaymentProposal.java
@@ -65,7 +65,7 @@
       OBContext.setAdminMode();
       try {
 
-        if (strProcessProposalAction.equals("GSP")) {
+        if (strProcessProposalAction.equals("GSP") || strProcessProposalAction.equals("GONEP")) {
           try {
             List<FIN_PaymentPropDetail> ppd = new AdvPaymentMngtDao().getObject(
                 FIN_PaymentProposal.class, strFinPaymentProposalId).getFINPaymentPropDetailList();
@@ -139,6 +139,7 @@
       discard[0] = "displayCheckBox";
       filterActions.put(fpp.getAPRMProcessProposal(), fpp.getAPRMProcessProposal());
     } else {
+      filterActions.put("GONEP", "GONEP");
       filterActions.put("GSP", "GSP");
     }
     XmlDocument xmlDocument = xmlEngine.readXmlTemplate(
diff --git a/modules/org.openbravo.advpaymentmngt/src/org/openbravo/advpaymentmngt/process/FIN_PaymentProposalProcess.java b/modules/org.openbravo.advpaymentmngt/src/org/openbravo/advpaymentmngt/process/FIN_PaymentProposalProcess.java
--- a/modules/org.openbravo.advpaymentmngt/src/org/openbravo/advpaymentmngt/process/FIN_PaymentProposalProcess.java
+++ b/modules/org.openbravo.advpaymentmngt/src/org/openbravo/advpaymentmngt/process/FIN_PaymentProposalProcess.java
@@ -70,7 +70,8 @@
       final FIN_PaymentProposal paymentProposal = dao
           .getObject(FIN_PaymentProposal.class, recordID);
 
-      if (strAction.equals("GSP")) {
+      if (strAction.equals("GSP") || strAction.equals("GONEP")) {
+        boolean groupByVendor = strAction.equals("GSP");
         if (paymentProposal.isProcessed()) {
           OBError msg = new OBError();
           String strMessage = "@DocumentProcessed@" + paymentProposal.getDocumentNo();
@@ -121,7 +122,7 @@
                   .getOrderPaymentSchedule().getOrder().getBusinessPartner().getId();
             }
 
-            if (!strBusinessPartner_old.equals(strBusinessPartner)
+            if (groupByVendor && !strBusinessPartner_old.equals(strBusinessPartner)
                 && !strBusinessPartner_old.equals("-1")) {
 
               // String strPaymentDocumentNo = Utility.getDocumentNo(conProvider, vars,
@@ -177,12 +178,14 @@
           long faPrecision = financialAccountCurrency.getStandardPrecision();
           finAccTxnAmount = finAccTxnAmount.setScale((int) faPrecision, RoundingMode.HALF_UP);
 
+          BusinessPartner businessPartner = groupByVendor ? dao.getObject(BusinessPartner.class,
+              strBusinessPartner) : null;
+
           FIN_Payment payment = FIN_AddPayment.savePayment(null, isReceipt,
               dao.getObject(DocumentType.class, strDocTypeId), strPaymentDocumentNo,
-              dao.getObject(BusinessPartner.class, strBusinessPartner), paymentMethodId,
-              financialAccountId, paymentTotal.toString(), paymentDate, orgId, null,
-              selectedPaymentDetails, selectedPaymentDetailsAmounts, isWriteOff, isRefund,
-              paymentCurrency, exchangeRate, finAccTxnAmount);
+              businessPartner, paymentMethodId, financialAccountId, paymentTotal.toString(),
+              paymentDate, orgId, null, selectedPaymentDetails, selectedPaymentDetailsAmounts,
+              isWriteOff, isRefund, paymentCurrency, exchangeRate, finAccTxnAmount);
           paymentProposal.setStatus(isReceipt ? "RPR" : "PPM");
           // process payment
           message = FIN_AddPayment.processPayment(vars, conProvider, "P", payment);
@@ -192,13 +195,18 @@
             OBDal.getInstance().flush();
           }
           if (message.getType().equals("Error")) {
-            String exceptionMessage = payment.getBusinessPartner().getName();
+            String exceptionMessage = payment.getBusinessPartner() != null ? payment
+                .getBusinessPartner().getName() : payment.getDocumentNo();
             exceptionMessage += ": " + message.getMessage();
             throw new OBException(exceptionMessage);
-          } else if (message.getType().equals("Warning"))
+          } else if (message.getType().equals("Warning")) {
             strMessageType = message.getType();
+          }
           strMessageResult.append("@Payment@ ").append(payment.getDocumentNo());
-          strMessageResult.append(" (").append(payment.getBusinessPartner().getName()).append(")");
+          if (payment.getBusinessPartner() != null) {
+            strMessageResult.append(" (").append(payment.getBusinessPartner().getName())
+                .append(")");
+          }
           if (!"".equals(message.getMessage()))
             strMessageResult.append(": ").append(message.getMessage());
           strMessageResult.append("<br>");
