details:   https://code.openbravo.com/erp/devel/pi/rev/f95e6cf72b42
changeset: 17979:f95e6cf72b42
user:      Javier Etxarri <javier.echarri <at> openbravo.com>
date:      Wed Sep 19 13:02:06 2012 +0200
summary:   Fixes issue 21656: The reamortization of an asset cannot be 
calculated

diffstat:

 src-db/database/model/functions/A_ASSET_POST.xml |  56 ++++++++++++-----------
 1 files changed, 30 insertions(+), 26 deletions(-)

diffs (113 lines):

diff -r 571b10dd474d -r f95e6cf72b42 
src-db/database/model/functions/A_ASSET_POST.xml
--- a/src-db/database/model/functions/A_ASSET_POST.xml  Tue Sep 18 18:35:14 
2012 +0200
+++ b/src-db/database/model/functions/A_ASSET_POST.xml  Wed Sep 19 13:02:06 
2012 +0200
@@ -166,6 +166,7 @@
       INTO v_Currency_Pre
       FROM C_CURRENCY
       WHERE C_CURRENCY_ID = v_C_CURRENCY_ID;
+            
       IF(v_AMORTIZATIONTYPE='LI') THEN
         IF(v_ASSETSCHEDULE='YE' OR v_AMORTIZATIONCALCTYPE='PE') THEN
           if ((v_USELIFEYEARS=v_DepreciatedLines) or 
(v_USELIFEYEARS=v_DepreciatedLines-1)) then
@@ -183,17 +184,6 @@
             end if;
           END IF; --FINISH_PROCESS
           IF(NOT FINISH_PROCESS) THEN
-            if v_AMORTIZATIONCALCTYPE='PE' then
-              v_PercentageGeneral:=v_AMORTIZATIONPERCENTAGE;
-              v_UseLifeYears:=ceil(100/v_PercentageGeneral) ;
-            else
-              --  v_PercentageGeneral := 100 / v_USELIFEYEARS;
-              
v_PercentageGeneral:=((v_AMORTIZATIONVALUEAMT-v_DEPRECIATEDPREVIOUSAMT) 
*100/(v_AMORTIZATIONVALUEAMT-v_DEPRECIATEDPREVIOUSAMT)) /(v_USELIFEYEARS) ;
-              SELECT to_number(TO_DATE(ADD_MONTHS(v_AMORTIZATIONSTARTDATE, 
12*v_USELIFEYEARS)) - v_AMORTIZATIONSTARTDATE)
-              INTO v_TOTAL_DAYS
-              FROM DUAL;
-            end if;
-            
v_AMORTIZATIONVALUEAMT:=v_AMORTIZATIONVALUEAMT-v_DEPRECIATEDPREVIOUSAMT;
             v_Count:=coalesce(v_depreciatedLines, 0) +1;
             v_BEGINING_DATE:=v_AMORTIZATIONSTARTDATE;
             v_FIRST_DAY_DATE:=TO_DATE('01-01-' || 
TO_CHAR(v_AMORTIZATIONSTARTDATE, 'YYYY'), 'DD-MM-YYYY') ;
@@ -202,6 +192,19 @@
               v_BEGINING_DATE:=TO_DATE('31-12-' || 
to_char(TO_number(to_char(v_BEGINING_DATE, 'yyyy')) +v_Count-1), 'DD-MM-YYYY') ;
               v_USELIFEYEARS:=v_USELIFEYEARS+1;
             end if;
+            if v_AMORTIZATIONCALCTYPE='PE' then
+              v_PercentageGeneral:=v_AMORTIZATIONPERCENTAGE;
+              v_UseLifeYears:=ceil(100/v_PercentageGeneral) ;
+            else
+              --  v_PercentageGeneral := 100 / v_USELIFEYEARS;
+              
v_PercentageGeneral:=((v_AMORTIZATIONVALUEAMT-v_DEPRECIATEDPREVIOUSAMT-v_depreciatedPlan)
 *100/v_AMORTIZATIONVALUEAMT) /(v_USELIFEYEARS-v_DepreciatedLines) ;
+              UPDATE A_ASSET SET percentagegeneral = v_PercentageGeneral WHERE 
A_ASSET_ID=v_Record_ID;
+              SELECT to_number(TO_DATE(ADD_MONTHS(v_AMORTIZATIONSTARTDATE, 
12*v_USELIFEYEARS)) - v_AMORTIZATIONSTARTDATE)
+              INTO v_TOTAL_DAYS
+              FROM DUAL;
+            end if;
+            
v_AMORTIZATIONVALUEAMT:=v_AMORTIZATIONVALUEAMT-v_DEPRECIATEDPREVIOUSAMT;
+            
             v_AUXAMT:=0;
             v_PERCENTAGE:=0;
             v_TotalAmt:=coalesce(v_DepreciatedPlan, 0) ;
@@ -248,17 +251,17 @@
               INTO v_LINE
               FROM A_AMORTIZATIONLINE
               WHERE A_AMORTIZATION_ID=v_NEW_AMORTIZATION;
-              IF((((v_AMORTIZATIONVALUEAMT) 
*v_PERCENTAGE/100)>(v_AMORTIZATIONVALUEAMT 
-v_TotalAmt))OR(v_Inserted+1>=v_USELIFEYEARS)) THEN
+              IF((((v_AMORTIZATIONVALUEAMT+v_DEPRECIATEDPREVIOUSAMT) 
*v_PERCENTAGE/100)>(v_AMORTIZATIONVALUEAMT 
-v_TotalAmt))OR(v_Inserted+1>=v_USELIFEYEARS)) THEN
                 SELECT COALESCE(SUM(AMORTIZATIONAMT),0), 
COALESCE(SUM(AMORTIZATION_PERCENTAGE),0)
                 INTO v_AMOUNT, v_PERCENTAGE
                 FROM A_AMORTIZATIONLINE
                 WHERE A_ASSET_ID=v_Record_ID;
                 v_AMOUNT:=v_AMORTIZATIONVALUEAMT - v_AMOUNT;
-                v_PERCENTAGE:=v_AMOUNT*100/(v_AMORTIZATIONVALUEAMT) ;
+                
v_PERCENTAGE:=v_AMOUNT*100/(v_AMORTIZATIONVALUEAMT+v_DEPRECIATEDPREVIOUSAMT) ;
                 finish:=true;
               ELSE
-                v_AMOUNT:=(v_AMORTIZATIONVALUEAMT) *v_PERCENTAGE/100;
-              END IF;
+                v_AMOUNT:=(v_AMORTIZATIONVALUEAMT+ v_DEPRECIATEDPREVIOUSAMT) 
*v_PERCENTAGE/100;
+              END IF;  
               if v_percentage>0 then
                 Ad_Sequence_Next('A_Amortizationline', '1000000', 
v_AMORTIZATIONLINE) ;
                 INSERT
@@ -301,6 +304,15 @@
           END IF; --FINISH_PROCESS
           IF(NOT FINISH_PROCESS) THEN
             
v_AMORTIZATIONVALUEAMT:=v_AMORTIZATIONVALUEAMT-v_DEPRECIATEDPREVIOUSAMT;
+            v_Count:=coalesce(v_depreciatedLines, 0) +1;
+            v_BEGINING_DATE:=v_AMORTIZATIONSTARTDATE;
+            v_FIRST_DAY_DATE:=TO_DATE('01-'|| TO_CHAR(v_AMORTIZATIONSTARTDATE, 
'MM') || '-' || TO_CHAR(v_AMORTIZATIONSTARTDATE, 'YYYY'), 'DD-MM-YYYY') ;
+            v_LAST_DAY_DATE:=TO_DATE('31-12-'|| 
TO_CHAR(v_AMORTIZATIONSTARTDATE, 'YYYY'), 'DD-MM-YYYY') ;
+            if v_Count>1 then
+              v_BEGINING_DATE:=TO_DATE(ADD_MONTHS(LAST_DAY(TO_DATE('01-' || 
TO_CHAR(v_BEGINING_DATE, 'MM') || '-' || TO_CHAR(v_BEGINING_DATE, 'yyyy'), 
'DD-MM-YYYY')), v_DepreciatedLines)) ;
+              v_USELIFEMonths:=v_USELIFEMonths+1;
+            end if;
+            
             if v_AMORTIZATIONCALCTYPE='PE' then
               v_PercentageGeneral:=v_AMORTIZATIONPERCENTAGE/12;
               v_UseLifeMonths:=trunc(100/v_AMORTIZATIONPERCENTAGE*12) ;
@@ -308,22 +320,14 @@
               --  v_PercentageGeneral := 100 / v_USELIFEYEARS;
               v_UseLifeYears:=v_UseLifeMonths/12;
               if (v_assetschedule = 'MO') then 
-                v_PercentageGeneral:=(((v_AMORTIZATIONVALUEAMT) 
*100/v_AMORTIZATIONVALUEAMT) /(v_USELIFEYEARS*12));
-              else 
-                v_PercentageGeneral:=(((v_AMORTIZATIONVALUEAMT) 
*100/v_AMORTIZATIONVALUEAMT) /(v_USELIFEYEARS)) /12;
+                
v_PercentageGeneral:=(((v_AMORTIZATIONVALUEAMT-v_depreciatedPlan) 
*100/v_AMORTIZATIONVALUEAMT) /(v_USELIFEMonths-v_DepreciatedLines));
+              else
+                  
v_PercentageGeneral:=(((v_AMORTIZATIONVALUEAMT-v_depreciatedPlan) 
*100/v_AMORTIZATIONVALUEAMT) /(v_USELIFEYEARS-v_DepreciatedLines)) /12;
               end if;
               SELECT to_number(TO_DATE(ADD_MONTHS(v_AMORTIZATIONSTARTDATE, 
12*v_USELIFEYEARS)) - TO_DATE(v_AMORTIZATIONSTARTDATE))
               INTO v_TOTAL_DAYS
               FROM DUAL;
             end if;
-            v_Count:=coalesce(v_depreciatedLines, 0) +1;
-            v_BEGINING_DATE:=v_AMORTIZATIONSTARTDATE;
-            v_FIRST_DAY_DATE:=TO_DATE('01-'|| TO_CHAR(v_AMORTIZATIONSTARTDATE, 
'MM') || '-' || TO_CHAR(v_AMORTIZATIONSTARTDATE, 'YYYY'), 'DD-MM-YYYY') ;
-            v_LAST_DAY_DATE:=TO_DATE('31-12-'|| 
TO_CHAR(v_AMORTIZATIONSTARTDATE, 'YYYY'), 'DD-MM-YYYY') ;
-            if v_Count>1 then
-              v_BEGINING_DATE:=TO_DATE(ADD_MONTHS(LAST_DAY(TO_DATE('01-' || 
TO_CHAR(v_BEGINING_DATE, 'MM') || '-' || TO_CHAR(v_BEGINING_DATE, 'yyyy'), 
'DD-MM-YYYY')), v_DepreciatedLines)) ;
-              v_USELIFEMonths:=v_USELIFEMonths+1;
-            end if;
             v_AUXAMT:=0;
             v_PERCENTAGE:=0;
             v_TotalAmt:=coalesce(v_DepreciatedPlan, 0) ;

------------------------------------------------------------------------------
Live Security Virtual Conference
Exclusive live event will cover all the ways today's security and 
threat landscape has changed and how IT managers can respond. Discussions 
will include endpoint security, mobile security and the latest in malware 
threats. http://www.accelacomm.com/jaw/sfrnl04242012/114/50122263/
_______________________________________________
Openbravo-commits mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/openbravo-commits

Reply via email to