details:   /erp/devel/pi/rev/1f414265d30b
changeset: 11986:1f414265d30b
user:      Mikel Irurita <mikel.irurita <at> openbravo.com>
date:      Thu May 05 12:21:12 2011 +0200
summary:   Merge changeset 818:1dfc14a06c86 of 2.50 APRM

details:   /erp/devel/pi/rev/f9e523287348
changeset: 11987:f9e523287348
user:      Mikel Irurita <mikel.irurita <at> openbravo.com>
date:      Thu May 05 12:24:58 2011 +0200
summary:   [APRM] Merge changeset 820:065c35c42ada of 2.50 APRM

details:   /erp/devel/pi/rev/894723d0b1ed
changeset: 11988:894723d0b1ed
user:      Mikel Irurita <mikel.irurita <at> openbravo.com>
date:      Thu May 05 12:29:20 2011 +0200
summary:   [APRM] Merge changeset 821:601d55e4b571 of 2.50 APRM

details:   /erp/devel/pi/rev/601c54bfb8b2
changeset: 11989:601c54bfb8b2
user:      Mikel Irurita <mikel.irurita <at> openbravo.com>
date:      Thu May 05 12:31:03 2011 +0200
summary:   [APRM] Merge changeset 822:5e041777706a of 2.50 APRM

diffstat:

 
modules/org.openbravo.advpaymentmngt/build/classes/org/openbravo/advpaymentmngt/modulescript/UpdateCustomerBalance.class
                    |    0 
 
modules/org.openbravo.advpaymentmngt/build/classes/org/openbravo/advpaymentmngt/modulescript/UpdateCustomerBalanceData.class
                |    0 
 
modules/org.openbravo.advpaymentmngt/src-db/database/model/functions/APRM_GEN_PAYMENTSCHEDULE_INV.xml
                                       |   21 +-
 
modules/org.openbravo.advpaymentmngt/src-db/database/sourcedata/AD_PREFERENCE.xml
                                                           |   11 +
 
modules/org.openbravo.advpaymentmngt/src-util/modulescript/src/org/openbravo/advpaymentmngt/modulescript/UpdateCustomerBalance.java
         |   51 ++
 
modules/org.openbravo.advpaymentmngt/src-util/modulescript/src/org/openbravo/advpaymentmngt/modulescript/UpdateCustomerBalance_data.xsql
    |   69 ++
 
modules/org.openbravo.advpaymentmngt/src-util/modulescript/src/src/org/openbravo/advpaymentmngt/modulescript/UpdateCustomerBalanceData.java
 |  250 ++++++++++
 
modules/org.openbravo.advpaymentmngt/src/org/openbravo/advpaymentmngt/process/FIN_ExecutePayment.java
                                       |    4 +-
 
modules/org.openbravo.advpaymentmngt/src/org/openbravo/advpaymentmngt/process/FIN_PaymentProcess.java
                                       |  113 +++-
 9 files changed, 487 insertions(+), 32 deletions(-)

diffs (truncated from 688 to 300 lines):

diff -r f2a90f673328 -r 601c54bfb8b2 
modules/org.openbravo.advpaymentmngt/build/classes/org/openbravo/advpaymentmngt/modulescript/UpdateCustomerBalance.class
Binary file 
modules/org.openbravo.advpaymentmngt/build/classes/org/openbravo/advpaymentmngt/modulescript/UpdateCustomerBalance.class
 has changed
diff -r f2a90f673328 -r 601c54bfb8b2 
modules/org.openbravo.advpaymentmngt/build/classes/org/openbravo/advpaymentmngt/modulescript/UpdateCustomerBalanceData.class
Binary file 
modules/org.openbravo.advpaymentmngt/build/classes/org/openbravo/advpaymentmngt/modulescript/UpdateCustomerBalanceData.class
 has changed
diff -r f2a90f673328 -r 601c54bfb8b2 
modules/org.openbravo.advpaymentmngt/src-db/database/model/functions/APRM_GEN_PAYMENTSCHEDULE_INV.xml
--- 
a/modules/org.openbravo.advpaymentmngt/src-db/database/model/functions/APRM_GEN_PAYMENTSCHEDULE_INV.xml
     Thu May 05 11:28:22 2011 +0200
+++ 
b/modules/org.openbravo.advpaymentmngt/src-db/database/model/functions/APRM_GEN_PAYMENTSCHEDULE_INV.xml
     Thu May 05 12:31:03 2011 +0200
@@ -65,6 +65,7 @@
 v_Line FIN_FINACC_TRANSACTION.LINE%TYPE;
 v_count NUMBER;
 v_PaymentPriority VARCHAR(32);
+v_creditmultiplier NUMBER := 1;
 
 
 TYPE RECORD IS REF CURSOR;
@@ -107,6 +108,10 @@
       v_project_id, v_campaign_id, v_activity_id, v_user1, v_user2
   FROM c_invoice
   WHERE c_invoice_id=p_record_id;
+  
+  IF (v_IsSOTrx = 'N') THEN
+    v_creditmultiplier := -1;
+  END IF;
 
   -- complete invoice
   IF (p_docaction = 'CO') THEN
@@ -172,7 +177,7 @@
              fin_payment_scheduledetail_id,
              fin_payment_scheduledetail.fin_payment_schedule_order,
              fin_payment_scheduledetail.fin_payment_detail_id,
-             CASE WHEN fin_payment.status IS NULL OR fin_payment.status IN 
('RPAP', 'RPAE') THEN 'N' ELSE 'Y' END AS paid
+             CASE WHEN fin_payment.status IN ('PPM', 'RPR', 'PWNC', 'RDNC', 
'RPPC') THEN 'Y' ELSE 'N' END AS paid
       FROM c_invoiceline, c_orderline, fin_payment_schedule,
         fin_payment_scheduledetail LEFT JOIN fin_payment_detail ON 
fin_payment_scheduledetail.fin_payment_detail_id = 
fin_payment_detail.fin_payment_detail_id
                                    LEFT JOIN fin_payment ON 
fin_payment_detail.fin_payment_id = fin_payment.fin_payment_id
@@ -453,7 +458,7 @@
 
       -- Updating SO_CREDITUSED when Invoices are being processed
       UPDATE C_BPARTNER
-      SET SO_CREDITUSED = COALESCE(SO_CREDITUSED,0) + V_OutstandingAmount
+      SET SO_CREDITUSED = COALESCE(SO_CREDITUSED,0) + 
(COALESCE(V_OutstandingAmount, 0) * v_creditmultiplier)
       WHERE C_BPARTNER_ID = v_BPartner_ID;
 
       -- Automatic creation of payment and financial transaction
@@ -466,7 +471,7 @@
             SELECT ps.fin_paymentmethod_id, ps.duedate, ps.c_currency_id, 
ps.ad_org_id, ps.fin_payment_schedule_id,
               sum(psd.amount) as outstandingamt
             FROM fin_payment_schedule ps
-              INNER JOIN fin_payment_scheduledetail psd ON 
ps.fin_payment_schedule_id = psd.fin_payment_schedule_order
+              INNER JOIN fin_payment_scheduledetail psd ON 
ps.fin_payment_schedule_id = psd.fin_payment_schedule_invoice
                                                            AND 
psd.fin_payment_detail_id is null
             WHERE ps.c_invoice_id = p_record_id
               AND ps.isactive = 'Y'
@@ -583,7 +588,7 @@
                   AND TOTALPAID = GRANDTOTAL;
                 -- Updating SO_CREDITUSED when PAYMENT OCCUR and is not set in 
RPAE status
                 UPDATE C_BPARTNER
-                SET SO_CREDITUSED = COALESCE(SO_CREDITUSED,0) - 
COALESCE(cur_paymentschedule.OUTSTANDINGAMT, 0)
+                SET SO_CREDITUSED = COALESCE(SO_CREDITUSED,0) - 
(COALESCE(cur_paymentschedule.OUTSTANDINGAMT, 0) * v_creditmultiplier)
                 WHERE C_BPARTNER_ID = v_BPartner_ID;
               END IF;
 
@@ -621,6 +626,7 @@
     DECLARE
       v_count NUMBER;
       v_documentno VARCHAR2(40);
+      v_PaymentPlanExpectedTotal NUMBER := 0;
     BEGIN
       SELECT count(*), max(p.documentno)
         INTO v_count, v_documentno
@@ -647,11 +653,12 @@
       v_delete_paymentplan := TRUE;
 
       -- Revert the bp used credit amount
-      SELECT SUM(fin_payment_schedule.paidamt) INTO v_PaidAmount
+      SELECT COALESCE(SUM(fin_payment_schedule.paidamt), 0), 
COALESCE(SUM(fin_payment_schedule.amount), 0)
+      INTO v_PaidAmount, v_PaymentPlanExpectedTotal
       FROM FIN_PAYMENT_SCHEDULE
-      WHERE FIN_PAYMENT_SCHEDULE.C_INVOICE_ID = p_record_id;
+      WHERE FIN_PAYMENT_SCHEDULE.C_INVOICE_ID = p_record_id ;
       UPDATE C_BPARTNER
-         SET SO_CREDITUSED = COALESCE(SO_CREDITUSED,0) - V_GrandTotal + 
v_PaidAmount
+         SET SO_CREDITUSED = COALESCE(SO_CREDITUSED,0) - 
((v_PaymentPlanExpectedTotal - v_PaidAmount) * v_creditmultiplier)
       WHERE C_BPARTNER_ID = v_BPartner_ID;
     END;
 
diff -r f2a90f673328 -r 601c54bfb8b2 
modules/org.openbravo.advpaymentmngt/src-db/database/sourcedata/AD_PREFERENCE.xml
--- 
a/modules/org.openbravo.advpaymentmngt/src-db/database/sourcedata/AD_PREFERENCE.xml
 Thu May 05 11:28:22 2011 +0200
+++ 
b/modules/org.openbravo.advpaymentmngt/src-db/database/sourcedata/AD_PREFERENCE.xml
 Thu May 05 12:31:03 2011 +0200
@@ -22,6 +22,17 @@
 <!--3DBC63716B7C4FF6846CA092EA058BE8-->  
<AD_MODULE_ID><![CDATA[A918E3331C404B889D69AA9BFAFB23AC]]></AD_MODULE_ID>
 <!--3DBC63716B7C4FF6846CA092EA058BE8--></AD_PREFERENCE>
 
+<!--43ECD009731844E38DEA2EA80D790D6F--><AD_PREFERENCE>
+<!--43ECD009731844E38DEA2EA80D790D6F-->  
<AD_PREFERENCE_ID><![CDATA[43ECD009731844E38DEA2EA80D790D6F]]></AD_PREFERENCE_ID>
+<!--43ECD009731844E38DEA2EA80D790D6F-->  
<AD_CLIENT_ID><![CDATA[0]]></AD_CLIENT_ID>
+<!--43ECD009731844E38DEA2EA80D790D6F-->  <AD_ORG_ID><![CDATA[0]]></AD_ORG_ID>
+<!--43ECD009731844E38DEA2EA80D790D6F-->  <ISACTIVE><![CDATA[Y]]></ISACTIVE>
+<!--43ECD009731844E38DEA2EA80D790D6F-->  
<ATTRIBUTE><![CDATA[IsCustomerBalanceRestored]]></ATTRIBUTE>
+<!--43ECD009731844E38DEA2EA80D790D6F-->  <VALUE><![CDATA[Y]]></VALUE>
+<!--43ECD009731844E38DEA2EA80D790D6F-->  
<ISPROPERTYLIST><![CDATA[N]]></ISPROPERTYLIST>
+<!--43ECD009731844E38DEA2EA80D790D6F-->  
<AD_MODULE_ID><![CDATA[A918E3331C404B889D69AA9BFAFB23AC]]></AD_MODULE_ID>
+<!--43ECD009731844E38DEA2EA80D790D6F--></AD_PREFERENCE>
+
 <!--4AF17D34610443D7B69447C68D1B0420--><AD_PREFERENCE>
 <!--4AF17D34610443D7B69447C68D1B0420-->  
<AD_PREFERENCE_ID><![CDATA[4AF17D34610443D7B69447C68D1B0420]]></AD_PREFERENCE_ID>
 <!--4AF17D34610443D7B69447C68D1B0420-->  
<AD_CLIENT_ID><![CDATA[0]]></AD_CLIENT_ID>
diff -r f2a90f673328 -r 601c54bfb8b2 
modules/org.openbravo.advpaymentmngt/src-util/modulescript/src/org/openbravo/advpaymentmngt/modulescript/UpdateCustomerBalance.java
--- /dev/null   Thu Jan 01 00:00:00 1970 +0000
+++ 
b/modules/org.openbravo.advpaymentmngt/src-util/modulescript/src/org/openbravo/advpaymentmngt/modulescript/UpdateCustomerBalance.java
       Thu May 05 12:31:03 2011 +0200
@@ -0,0 +1,51 @@
+/* 
+ *************************************************************************
+ * The contents of this file are subject to the Openbravo  Public  License
+ * Version  1.0  (the  "License"),  being   the  Mozilla   Public  License
+ * Version 1.1  with a permitted attribution clause; you may not  use this
+ * file except in compliance with the License. You  may  obtain  a copy of
+ * the License at http://www.openbravo.com/legal/license.html
+ * Software distributed under the License  is  distributed  on  an "AS IS"
+ * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the
+ * License for the specific  language  governing  rights  and  limitations
+ * under the License.
+ * The Original Code is Openbravo ERP.
+ * The Initial Developer of the Original Code is Openbravo SLU
+ * All portions are Copyright (C) 2011 Openbravo SLU
+ * All Rights Reserved.
+ * Contributor(s):  ______________________________________.
+ *************************************************************************
+ */
+package org.openbravo.advpaymentmngt.modulescript;
+
+import org.openbravo.database.ConnectionProvider;
+import org.openbravo.modulescript.ModuleScript;
+
+public class UpdateCustomerBalance extends ModuleScript {
+  
+  /**
+   * This modulescript regenerates the customer balance for all the business 
partners.
+   * It takes in account the outstanding sales/purchase invoices and the credit
+   * generated in payment in/out.
+   */
+  @Override
+  public void execute() {
+    try {
+      ConnectionProvider cp = getConnectionProvider();
+      // Check if the modulescript has been executed before.
+      // If the preference does not exist in the database yet the modulescript 
must be executed.
+      boolean isCustomerBalanceFixed = 
UpdateCustomerBalanceData.isCustomerBalanceFixed(cp);
+      if (!isCustomerBalanceFixed) {
+        // Reset the customer balance to 0
+        UpdateCustomerBalanceData.resetCustomerCredit(cp);
+        // Obtain the correct customer balance
+        UpdateCustomerBalanceData[] data = 
UpdateCustomerBalanceData.calculateCustomerCredit(cp);
+        for (UpdateCustomerBalanceData ucb : data) {
+          UpdateCustomerBalanceData.updateCustomerCredit(cp, 
ucb.customercredit, ucb.cBpartnerId);
+        }
+      }
+    } catch (Exception e) {
+      handleError(e);
+    }
+  }
+}
diff -r f2a90f673328 -r 601c54bfb8b2 
modules/org.openbravo.advpaymentmngt/src-util/modulescript/src/org/openbravo/advpaymentmngt/modulescript/UpdateCustomerBalance_data.xsql
--- /dev/null   Thu Jan 01 00:00:00 1970 +0000
+++ 
b/modules/org.openbravo.advpaymentmngt/src-util/modulescript/src/org/openbravo/advpaymentmngt/modulescript/UpdateCustomerBalance_data.xsql
  Thu May 05 12:31:03 2011 +0200
@@ -0,0 +1,69 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+ 
************************************************************************************
+ * Copyright (C) 2011 Openbravo S.L.U.
+ * Licensed under the Openbravo Commercial License version 1.0
+ * You may obtain a copy of the License at 
http://www.openbravo.com/legal/obcl.html
+ * or in the legal folder of this module distribution.
+ 
************************************************************************************
+-->
+<SqlClass name="UpdateCustomerBalanceData" 
package="org.openbravo.advpaymentmngt.modulescript">
+  <SqlClassComment></SqlClassComment>
+  <SqlMethod name="select" type="preparedStatement" return="multiple">
+    <SqlMethodComment></SqlMethodComment>
+    <Sql>
+      <![CDATA[
+        SELECT '' as c_bpartner_id, '' as customercredit FROM DUAL
+      ]]>
+    </Sql>
+  </SqlMethod>
+  <SqlMethod name="isCustomerBalanceFixed" type="preparedStatement" 
return="boolean">
+    <SqlMethodComment></SqlMethodComment>
+    <Sql>
+      <![CDATA[
+        SELECT count(*)
+        FROM ad_preference
+        WHERE attribute = 'IsCustomerBalanceRestored'
+      ]]>
+    </Sql>
+  </SqlMethod>
+  <SqlMethod name="resetCustomerCredit" type="preparedStatement" 
return="rowcount">
+    <SqlMethodComment></SqlMethodComment>
+    <Sql>
+      <![CDATA[
+        UPDATE c_bpartner SET so_creditused = 0, updatedby='0', updated=now()
+      ]]>
+    </Sql>
+  </SqlMethod>
+  <SqlMethod name="calculateCustomerCredit" type="preparedStatement" 
return="multiple">
+    <SqlMethodComment></SqlMethodComment>
+    <Sql>
+      <![CDATA[
+        SELECT A.c_bpartner_id, SUM(A.amount) as customercredit
+        FROM (SELECT c_bpartner_id, COALESCE(SUM(ps.amount * (CASE WHEN 
inv.issotrx = 'Y' THEN 1 ELSE -1 END)), 0) as amount
+              FROM fin_payment_schedule ps join c_invoice inv on 
(ps.c_invoice_id = inv.c_invoice_id)
+              WHERE ps.outstandingamt <> 0
+              GROUP BY c_bpartner_id
+              UNION ALL
+              SELECT p.c_bpartner_id, COALESCE(SUM((p.generated_credit - 
p.used_credit) * (CASE WHEN p.isreceipt = 'Y' THEN 1 ELSE -1 END)), 0) as amount
+              FROM FIN_PAYMENT p
+              WHERE p.c_bpartner_id is not null
+                    AND (p.generated_credit - p.used_credit) <> 0
+                    AND p.generated_credit <> 0
+                    AND p.processed = 'Y'
+              GROUP BY p.c_bpartner_id) A
+        GROUP BY A.c_bpartner_id
+      ]]>
+    </Sql>
+  </SqlMethod>
+  <SqlMethod name="updateCustomerCredit" type="preparedStatement" 
return="rowcount">
+    <SqlMethodComment></SqlMethodComment>
+    <Sql>
+      <![CDATA[
+        UPDATE c_bpartner SET so_creditused = ?, updatedby='0', updated=now() 
WHERE c_bpartner_id = ?
+      ]]>
+    </Sql>
+    <Parameter name="cumstomeCredit"/>
+    <Parameter name="businessPartnerId"/>
+  </SqlMethod>
+</SqlClass>
diff -r f2a90f673328 -r 601c54bfb8b2 
modules/org.openbravo.advpaymentmngt/src-util/modulescript/src/src/org/openbravo/advpaymentmngt/modulescript/UpdateCustomerBalanceData.java
--- /dev/null   Thu Jan 01 00:00:00 1970 +0000
+++ 
b/modules/org.openbravo.advpaymentmngt/src-util/modulescript/src/src/org/openbravo/advpaymentmngt/modulescript/UpdateCustomerBalanceData.java
       Thu May 05 12:31:03 2011 +0200
@@ -0,0 +1,250 @@
+//Sqlc generated V1.O00-1
+package org.openbravo.advpaymentmngt.modulescript;
+
+import java.sql.*;
+
+import org.apache.log4j.Logger;
+
+import javax.servlet.ServletException;
+
+import org.openbravo.data.FieldProvider;
+import org.openbravo.database.ConnectionProvider;
+import org.openbravo.data.UtilSql;
+import java.util.*;
+
+class UpdateCustomerBalanceData implements FieldProvider {
+static Logger log4j = Logger.getLogger(UpdateCustomerBalanceData.class);
+  private String InitRecordNumber="0";
+  public String cBpartnerId;
+  public String customercredit;
+
+  public String getInitRecordNumber() {
+    return InitRecordNumber;
+  }
+
+  public String getField(String fieldName) {
+    if (fieldName.equalsIgnoreCase("C_BPARTNER_ID") || 
fieldName.equals("cBpartnerId"))
+      return cBpartnerId;
+    else if (fieldName.equalsIgnoreCase("CUSTOMERCREDIT"))
+      return customercredit;
+   else {
+     log4j.debug("Field does not exist: " + fieldName);
+     return null;
+   }
+ }
+
+  public static UpdateCustomerBalanceData[] select(ConnectionProvider 
connectionProvider)    throws ServletException {
+    return select(connectionProvider, 0, 0);
+  }
+
+  public static UpdateCustomerBalanceData[] select(ConnectionProvider 
connectionProvider, int firstRegister, int numberRegisters)    throws 
ServletException {
+    String strSql = "";
+    strSql = strSql + 
+      "        SELECT '' as c_bpartner_id, '' as customercredit FROM DUAL";
+
+    ResultSet result;
+    Vector<java.lang.Object> vector = new Vector<java.lang.Object>(0);
+    PreparedStatement st = null;
+
+    try {
+    st = connectionProvider.getPreparedStatement(strSql);
+
+      result = st.executeQuery();
+      long countRecord = 0;
+      long countRecordSkip = 1;
+      boolean continueResult = true;
+      while(countRecordSkip < firstRegister && continueResult) {
+        continueResult = result.next();
+        countRecordSkip++;
+      }
+      while(continueResult && result.next()) {
+        countRecord++;

------------------------------------------------------------------------------
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