details:   /erp/devel/pi/rev/da5c2f332b5e
changeset: 7102:da5c2f332b5e
user:      David Alsasua <david.alsasua <at> openbravo.com>
date:      Wed Apr 21 13:43:26 2010 +0200
summary:   Fixes issue 12839: It is not possible to cance a remittance

diffstat:

 src-db/database/model/functions/C_REMITTANCE_POST.xml |  90 ++++++++++++++++++-
 src-db/database/sourcedata/AD_MESSAGE.xml             |  11 ++
 2 files changed, 97 insertions(+), 4 deletions(-)

diffs (188 lines):

diff -r 0d1ece383cd8 -r da5c2f332b5e 
src-db/database/model/functions/C_REMITTANCE_POST.xml
--- a/src-db/database/model/functions/C_REMITTANCE_POST.xml     Wed Apr 21 
13:23:06 2010 +0200
+++ b/src-db/database/model/functions/C_REMITTANCE_POST.xml     Wed Apr 21 
13:43:26 2010 +0200
@@ -19,7 +19,7 @@
 * under the License.
 * The Original Code is Openbravo ERP.
 * The Initial Developer of the Original Code is Openbravo SLU
-* All portions are Copyright (C) 2001-2009 Openbravo SLU
+* All portions are Copyright (C) 2001-2010 Openbravo SLU
 * All Rights Reserved.
 * Contributor(s):  ______________________________________.
 ************************************************************************/
@@ -32,7 +32,7 @@
   v_AD_Client_ID VARCHAR2(32) ;
   v_AD_Org_ID VARCHAR2(32) ;
   v_Processed VARCHAR(60) ;
-  v_Posted VARCHAR(60) ;
+  v_Posted CHAR(1) ;
   v_Processing CHAR(1);
   v_Currency VARCHAR2(32);
   v_Date DATE;
@@ -60,6 +60,7 @@
   TYPE RECORD IS REF CURSOR;
     Cur_Parameter RECORD;
     Cur_RemittanceLines RECORD;
+    Cur_Settlements RECORD;
     --  Parameter
     --  Parameter Variables
     v_Aux NUMBER;
@@ -68,8 +69,11 @@
     v_DueDate DATE;
     v_Status_to VARCHAR(60) ;
     v_Consolidate VARCHAR(60) ;
+    v_SettlementID_W varchar2(32) :='' ;
+    v_Withholding BOOLEAN := FALSE;
     v_SettlementID varchar2(32) ;
     v_DocumentNo VARCHAR(40);
+    v_DocumentNo_W VARCHAR(40);
     v_DPMId varchar2(32);
     v_DPId varchar2(32);
     v_DPMLineId varchar2(32);
@@ -179,6 +183,26 @@
         WHERE r.C_Remittance_ID=v_Record_ID
           AND C_SETTLEMENT_ID IS NOT NULL;
         IF v_Aux=1 THEN
+          -- If any payment with no amount, but withholding amount is present 
in the settlement, means a new settlement was
+          --created when processing the remittance, and needs to be 
unprocessed.
+          FOR Cur_Settlements IN
+            (
+              SELECT DISTINCT C_SETTLEMENT_CANCEL_ID
+              FROM C_DEBT_PAYMENT DP
+              WHERE DP.C_SETTLEMENT_GENERATE_ID = v_vSettlementId
+                AND DP.AMOUNT='0'
+                AND DP.WITHHOLDINGAMOUNT IS NOT NULL
+                AND DP.WITHHOLDINGAMOUNT <> '0'
+            )
+          LOOP
+            SELECT POSTED, DOCUMENTNO INTO v_Posted, v_documentno_Settlement 
FROM C_SETTLEMENT WHERE C_SETTLEMENT_ID=Cur_Settlements.C_SETTLEMENT_CANCEL_ID;
+            IF (v_Posted='Y') THEN
+              RAISE_APPLICATION_ERROR(-20000, 
'@WITHHOLDING_SETTLEMENT_POSTED@' || v_documentno_Settlement || '.');
+            END IF;
+            C_SETTLEMENT_POST(NULL, Cur_Settlements.C_SETTLEMENT_CANCEL_ID) ;
+            UPDATE C_DEBT_PAYMENT SET C_SETTLEMENT_CANCEL_ID=NULL WHERE 
C_SETTLEMENT_CANCEL_ID = Cur_Settlements.C_SETTLEMENT_CANCEL_ID;
+            DELETE FROM C_SETTLEMENT WHERE 
C_Settlement_ID=Cur_Settlements.C_SETTLEMENT_CANCEL_ID;
+          END LOOP;
           C_SETTLEMENT_POST(NULL, v_vSettlementId) ;
           UPDATE C_REMITTANCELINE
             SET C_DEBT_PAYMENT_CANCELLED=NULL
@@ -359,6 +383,8 @@
             dp.STATUS,
             dp.C_BPartner_id,
             dp.description,
+            dp.withholdingamount,
+            dp.c_withholding_id,
             rl.C_REMITTANCELINE_ID
           FROM C_REMITTANCELINE rl,
             C_DEBT_PAYMENT dp
@@ -375,7 +401,8 @@
               ISRECEIPT, C_CURRENCY_ID, PAYMENTRULE, ISPAID,
               AMOUNT, DATEPLANNED, ISMANUAL, STATUS,
               C_SETTLEMENT_GENERATE_ID, isValid, c_BPartner_ID, 
Generate_Processed,
-              Description, C_BANKACCOUNT_ID, status_initial
+              Description, C_BANKACCOUNT_ID, status_initial,
+              withholdingamount, c_withholding_id
             )
             VALUES
             (
@@ -384,9 +411,37 @@
               Cur_RemittanceLines.ISRECEIPT, 
Cur_RemittanceLines.C_CURRENCY_ID, Cur_RemittanceLines.PAYMENTRULE, 
Cur_RemittanceLines.ISPAID,
               -Cur_RemittanceLines.AMOUNT, Cur_RemittanceLines.DATEPLANNED, 
'N', Cur_RemittanceLines.STATUS,
               v_SettlementID, 'Y', v_BankPartner, 'Y',
-               '*RT* '||Cur_RemittanceLines.description, v_BankAccountID, 
Cur_RemittanceLines.STATUS
+              '*RT* '||Cur_RemittanceLines.description, v_BankAccountID, 
Cur_RemittanceLines.STATUS,
+              -Cur_RemittanceLines.withholdingamount, 
Cur_RemittanceLines.c_withholding_id
             )
             ;
+          -- If the payment has a withholding associated, then a new payment 
is created with no amount, but withholding amount. The BP of these
+          --payments will be the one in the original payment, and not the bank.
+          IF (Cur_RemittanceLines.withholdingamount IS NOT NULL AND NOT 
Cur_RemittanceLines.withholdingamount = '0') THEN
+            v_Withholding := TRUE;
+            INSERT
+            INTO C_DEBT_PAYMENT
+              (
+                C_DEBT_PAYMENT_ID, AD_CLIENT_ID, AD_ORG_ID, ISACTIVE,
+                CREATED, CREATEDBY, UPDATED, UPDATEDBY,
+                ISRECEIPT, C_CURRENCY_ID, PAYMENTRULE, ISPAID,
+                AMOUNT, DATEPLANNED, ISMANUAL, STATUS,
+                C_SETTLEMENT_GENERATE_ID, isValid, c_BPartner_ID, 
Generate_Processed,
+                Description, C_BANKACCOUNT_ID, status_initial,
+                withholdingamount, c_withholding_id
+              )
+              VALUES
+              (
+                get_uuid(), Cur_RemittanceLines.ad_Client_Id, 
Cur_RemittanceLines.AD_Org_Id, 'Y',
+                now(), v_AD_User_ID, now(), v_AD_User_ID,
+                Cur_RemittanceLines.ISRECEIPT, 
Cur_RemittanceLines.C_CURRENCY_ID, Cur_RemittanceLines.PAYMENTRULE, 'N',
+                '0', Cur_RemittanceLines.DATEPLANNED, 'N', 
Cur_RemittanceLines.STATUS,
+                v_SettlementID, 'Y', Cur_RemittanceLines.C_BPartner_id, 'Y',
+                '*RT*W* '||Cur_RemittanceLines.description, v_BankAccountID, 
Cur_RemittanceLines.STATUS,
+                Cur_RemittanceLines.withholdingamount, 
Cur_RemittanceLines.c_withholding_id
+              )
+              ;
+          END IF;
           UPDATE C_REMITTANCELINE
             SET C_DEBT_PAYMENT_CANCELLED=v_DPID
           WHERE C_RemittanceLine_ID=Cur_RemittanceLines.c_RemittanceLine_id;
@@ -429,6 +484,7 @@
           --Calculate the total amount
           --v_GeneratedAmt := v_GeneratedAmt + i.Amount;
         END LOOP;
+
         SELECT COALESCE(SUM(C_Currency_Round(  C_Currency_Convert(Amount, 
C_Currency_ID, v_Currency, v_dateTrx, NULL, v_aD_Client_Id, v_AD_Org_Id), 
v_Currency, NULL)), 0)
         INTO v_GeneratedAmt
         FROM C_Debt_Payment_V
@@ -466,6 +522,32 @@
           ;
         --Post Settlement
         C_SETTLEMENT_POST(NULL, v_SettlementID) ;
+        -- If any of the payments in the remittance has got withholding, then 
some new payments will have been created. Now those payments are included in a
+        --cancelation settlement, that is afterwards processed.
+        IF (v_Withholding) THEN
+          Ad_Sequence_Next('C_Settlement', v_AD_Org_Id, v_SettlementID_W) ;
+          Ad_Sequence_Doctype(v_SettlementDocType_ID, v_SettlementID_W, 'Y', 
v_DocumentNo_W) ;
+          INSERT
+          INTO C_SETTLEMENT
+            (
+              C_SETTLEMENT_ID, AD_CLIENT_ID, AD_ORG_ID, ISACTIVE,
+              CREATED, CREATEDBY, UPDATED, UPDATEDBY,
+              DOCUMENTNO, DATETRX, DATEACCT, SETTLEMENTTYPE,
+              C_DOCTYPE_ID, C_Currency_ID, ISGENERATED
+            )
+            VALUES
+            (
+              v_SettlementID_W, v_AD_Client_Id, v_AD_Org_Id, 'Y',
+              now(), v_AD_User_ID, now(), v_AD_User_ID,
+              '*RT*W*'||v_DocumentNo_W, v_dateTrx, v_dateTrx, 'C',
+              v_SettlementDocType_ID, v_Currency, 'Y'
+            )
+            ;
+          UPDATE C_DEBT_PAYMENT
+          SET C_SETTLEMENT_CANCEL_ID = v_SettlementID_W, ISPAID='Y'
+          WHERE AMOUNT='0' AND WITHHOLDINGAMOUNT <> '0' AND 
C_SETTLEMENT_GENERATE_ID = v_SettlementID;
+          C_SETTLEMENT_POST(NULL, v_SettlementID_W);
+        END IF;
         UPDATE C_REMITTANCE
           SET C_Settlement_ID=v_SettlementID,
           C_DP_Management_ID=v_DPMId,
diff -r 0d1ece383cd8 -r da5c2f332b5e src-db/database/sourcedata/AD_MESSAGE.xml
--- a/src-db/database/sourcedata/AD_MESSAGE.xml Wed Apr 21 13:23:06 2010 +0200
+++ b/src-db/database/sourcedata/AD_MESSAGE.xml Wed Apr 21 13:43:26 2010 +0200
@@ -31206,6 +31206,17 @@
 <!--701624AA793449FC8315266E2FC58E10-->  
<AD_MODULE_ID><![CDATA[0]]></AD_MODULE_ID>
 <!--701624AA793449FC8315266E2FC58E10--></AD_MESSAGE>
 
+<!--7070AA169E2643C6BBD5F4267A404038--><AD_MESSAGE>
+<!--7070AA169E2643C6BBD5F4267A404038-->  
<AD_MESSAGE_ID><![CDATA[7070AA169E2643C6BBD5F4267A404038]]></AD_MESSAGE_ID>
+<!--7070AA169E2643C6BBD5F4267A404038-->  
<AD_CLIENT_ID><![CDATA[0]]></AD_CLIENT_ID>
+<!--7070AA169E2643C6BBD5F4267A404038-->  <AD_ORG_ID><![CDATA[0]]></AD_ORG_ID>
+<!--7070AA169E2643C6BBD5F4267A404038-->  <ISACTIVE><![CDATA[Y]]></ISACTIVE>
+<!--7070AA169E2643C6BBD5F4267A404038-->  
<VALUE><![CDATA[WITHHOLDING_SETTLEMENT_POSTED]]></VALUE>
+<!--7070AA169E2643C6BBD5F4267A404038-->  <MSGTEXT><![CDATA[Settlement with 
withholding amounts of the payments in this remittance is posted. Please unpost 
settlement ]]></MSGTEXT>
+<!--7070AA169E2643C6BBD5F4267A404038-->  <MSGTYPE><![CDATA[I]]></MSGTYPE>
+<!--7070AA169E2643C6BBD5F4267A404038-->  
<AD_MODULE_ID><![CDATA[0]]></AD_MODULE_ID>
+<!--7070AA169E2643C6BBD5F4267A404038--></AD_MESSAGE>
+
 <!--716A7D748A979ED8E040007F01015931--><AD_MESSAGE>
 <!--716A7D748A979ED8E040007F01015931-->  
<AD_MESSAGE_ID><![CDATA[716A7D748A979ED8E040007F01015931]]></AD_MESSAGE_ID>
 <!--716A7D748A979ED8E040007F01015931-->  
<AD_CLIENT_ID><![CDATA[0]]></AD_CLIENT_ID>

------------------------------------------------------------------------------
_______________________________________________
Openbravo-commits mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/openbravo-commits

Reply via email to