details: https://code.openbravo.com/erp/devel/pi/rev/a2ce02e621d9 changeset: 24102:a2ce02e621d9 user: Víctor Martínez Romanos <victor.martinez <at> openbravo.com> date: Tue Jul 22 10:21:40 2014 +0200 summary: Fixed bug 27140: Useless usage of hex_to_int()
details: https://code.openbravo.com/erp/devel/pi/rev/796652fcb518 changeset: 24103:796652fcb518 user: Víctor Martínez Romanos <victor.martinez <at> openbravo.com> date: Tue Jul 22 10:22:19 2014 +0200 summary: Fixed bug 27141: Minor performance fix in C_ORDERLINETAX_TRG details: https://code.openbravo.com/erp/devel/pi/rev/085ea1fce739 changeset: 24104:085ea1fce739 user: Víctor Martínez Romanos <victor.martinez <at> openbravo.com> date: Tue Jul 22 10:23:09 2014 +0200 summary: Fixed bug 27023 Fixed bug 27024: Performance improvements on C_ORDERLINE_TRG2 diffstat: src-db/database/model/functions/C_ORDER_POST1.xml | 8 +- src-db/database/model/triggers/C_ORDERLINETAX_TRG.xml | 4 +- src-db/database/model/triggers/C_ORDERLINE_TRG2.xml | 93 +++++++++--------- 3 files changed, 52 insertions(+), 53 deletions(-) diffs (188 lines): diff -r e624a8506d55 -r 085ea1fce739 src-db/database/model/functions/C_ORDER_POST1.xml --- a/src-db/database/model/functions/C_ORDER_POST1.xml Tue Jul 22 17:55:48 2014 +0530 +++ b/src-db/database/model/functions/C_ORDER_POST1.xml Tue Jul 22 10:23:09 2014 +0200 @@ -1348,8 +1348,8 @@ */ BEGIN v_ResultStr:='OrderCompleteCheck'; - SELECT SUM(QtyOrdered*hex_to_int(C_OrderLine_ID)) -SUM(QtyDelivered*hex_to_int(C_OrderLine_ID)), - SUM(QtyOrdered*hex_to_int(C_OrderLine_ID)) -SUM(QtyInvoiced*hex_to_int(C_OrderLine_ID)) + SELECT SUM(QtyOrdered) -SUM(QtyDelivered), + SUM(QtyOrdered) -SUM(QtyInvoiced) INTO ToDeliver, ToInvoice FROM C_ORDERLINE @@ -1498,8 +1498,8 @@ /** * Final Completeness check */ - SELECT SUM(QtyOrdered*hex_to_int(C_OrderLine_ID)) -SUM(QtyDelivered*hex_to_int(C_OrderLine_ID)), - SUM(QtyOrdered*hex_to_int(C_OrderLine_ID)) -SUM(QtyInvoiced*hex_to_int(C_OrderLine_ID)) + SELECT SUM(QtyOrdered) -SUM(QtyDelivered), + SUM(QtyOrdered) -SUM(QtyInvoiced) INTO ToDeliver, ToInvoice FROM C_ORDERLINE diff -r e624a8506d55 -r 085ea1fce739 src-db/database/model/triggers/C_ORDERLINETAX_TRG.xml --- a/src-db/database/model/triggers/C_ORDERLINETAX_TRG.xml Tue Jul 22 17:55:48 2014 +0530 +++ b/src-db/database/model/triggers/C_ORDERLINETAX_TRG.xml Tue Jul 22 10:23:09 2014 +0200 @@ -17,7 +17,7 @@ * parts created by ComPiere are Copyright (C) ComPiere, Inc.; * All Rights Reserved. * Contributor(s): Openbravo SLU - * Contributions are Copyright (C) 2010-2013 Openbravo, S.L.U. + * Contributions are Copyright (C) 2010-2014 Openbravo, S.L.U. * * Specifically, this derivative work is based upon the following Compiere * file and version. @@ -70,7 +70,7 @@ END IF; IF (INSERTING OR UPDATING) THEN - SELECT COUNT(C_TAX_ID) INTO v_Count + SELECT COUNT(1) INTO v_Count FROM C_ORDERTAX WHERE C_ORDER_ID = :NEW.C_Order_ID AND C_TAX_ID = :NEW.C_TAX_ID; diff -r e624a8506d55 -r 085ea1fce739 src-db/database/model/triggers/C_ORDERLINE_TRG2.xml --- a/src-db/database/model/triggers/C_ORDERLINE_TRG2.xml Tue Jul 22 17:55:48 2014 +0530 +++ b/src-db/database/model/triggers/C_ORDERLINE_TRG2.xml Tue Jul 22 10:23:09 2014 +0200 @@ -19,25 +19,12 @@ * 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-2012 Openbravo SLU + * All portions are Copyright (C) 2001-2014 Openbravo SLU * All Rights Reserved. * Contributor(s): ______________________________________. ************************************************************************/ - TYPE RECORD IS REF CURSOR; - Cur_Offer RECORD; - - v_OrderLine_Offer_ID VARCHAR2(32); - v_lineno NUMBER:=0; - v_Price NUMBER; - v_PriceNew NUMBER; - v_Amt NUMBER; - v_BPartner_ID VARCHAR2(32); - v_Order_ID VARCHAR2(32); - v_Insert BOOLEAN :=FALSE; v_istaxincluded CHAR(1) ; - v_Precision NUMBER; - v_PriceList_ID VARCHAR2(32); v_Processed C_ORDER.PROCESSED%TYPE; v_ID VARCHAR2(32); v_oldLine NUMBER; @@ -49,8 +36,9 @@ v_grandtotal NUMBER:=0; v_taxAmt NUMBER; v_Prec C_CURRENCY.STDPRECISION%TYPE; - v_BaseAmount C_TAX.BASEAMOUNT%TYPE; v_AttrSetValueType M_Product.AttrSetValueType%TYPE; + v_oldLineAlternate NUMBER; + v_create CHAR(1):='Y'; BEGIN @@ -73,49 +61,61 @@ JOIN c_currency ON c_order.c_currency_id = c_currency.c_currency_id JOIN m_pricelist ON c_order.m_pricelist_id = m_pricelist.m_pricelist_id WHERE C_Order_ID=v_ID; - v_oldLine:=0; - v_newLineNetAmt:=0; - IF (v_istaxincluded = 'Y') THEN - IF (DELETING) THEN - v_oldgrossamt := :old.line_gross_amount; - ELSIF (UPDATING) THEN - v_oldgrossamt := :old.line_gross_amount; - v_newgrossamt := :new.line_gross_amount; - ELSE - v_newgrossamt := :new.line_gross_amount; - END IF; - END IF; + IF(v_Processed='N') THEN + v_oldLine:=0; + v_newLineNetAmt:=0; + IF (v_istaxincluded = 'Y') THEN + IF (DELETING) THEN + v_oldgrossamt := :old.line_gross_amount; + ELSIF (UPDATING) THEN + v_oldgrossamt := :old.line_gross_amount; + v_newgrossamt := :new.line_gross_amount; + ELSE + v_newgrossamt := :new.line_gross_amount; + END IF; + END IF; + -- Calculate taxes IF(UPDATING OR DELETING) THEN v_oldLine:= COALESCE(:old.LineNetAmt,0) + COALESCE(:old.FreightAmt,0) + COALESCE(:old.ChargeAmt,0); END IF; IF (INSERTING OR UPDATING) THEN - DELETE FROM C_ORDERLINETAX WHERE C_ORDERLINE_ID = :new.C_OrderLine_ID; v_newLineNetAmt := COALESCE(:new.LineNetAmt,0) + COALESCE(:new.FreightAmt,0) + COALESCE(:new.ChargeAmt,0); v_newLineAlternate := COALESCE(:new.TaxBaseAmt,0) + COALESCE(:new.FreightAmt,0) + COALESCE(:new.ChargeAmt,0); - SELECT BaseAmount INTO v_BaseAmount - FROM C_TAX - WHERE C_TAX_ID = :new.C_Tax_ID; - C_ORDERLINETAX_INSERT(:new.AD_Org_ID, :new.C_Order_ID, :new.C_OrderLine_ID, :new.UpdatedBy, :new.C_Tax_ID, :new.C_Tax_ID, v_newLineNetAmt, v_newLineAlternate, v_Prec); - IF (v_istaxincluded = 'Y') THEN - C_ORDERLINETAX_ROUNDING(:new.C_OrderLine_ID, :new.line_gross_amount, v_newLineNetAmt); + + IF (UPDATING) THEN + v_oldLineAlternate := COALESCE(:old.TaxBaseAmt,0) + COALESCE(:old.FreightAmt,0) + COALESCE(:old.ChargeAmt,0); + IF (:new.AD_Org_ID <> :old.AD_Org_ID OR :new.C_Tax_ID <> :old.C_Tax_ID OR + v_newLineNetAmt <> v_oldLine OR v_newLineAlternate <> v_oldLineAlternate OR + :new.line_gross_amount <> :old.line_gross_amount) THEN + DELETE FROM C_ORDERLINETAX WHERE C_ORDERLINE_ID = :new.C_OrderLine_ID; + v_create := 'Y'; + ELSE + v_create := 'N'; + END IF; END IF; - -- Get Total Tax Amt - SELECT SUM(TaxAmt) INTO v_taxAmt - FROM C_OrderTax - WHERE C_Order_ID=:new.C_Order_ID; - -- DBMS_OUTPUT.PUT_LINE('TaxAmt = ' || v_taxAmt); - -- Update Header - UPDATE C_Order - SET TotalLines = TotalLines - v_oldLine + v_newLineNetAmt, - GrandTotal = CASE v_istaxincluded + + IF (v_create = 'Y') THEN + C_ORDERLINETAX_INSERT(:new.AD_Org_ID, :new.C_Order_ID, :new.C_OrderLine_ID, :new.UpdatedBy, :new.C_Tax_ID, :new.C_Tax_ID, v_newLineNetAmt, v_newLineAlternate, v_Prec); + IF (v_istaxincluded = 'Y') THEN + C_ORDERLINETAX_ROUNDING(:new.C_OrderLine_ID, :new.line_gross_amount, v_newLineNetAmt); + END IF; + -- Get Total Tax Amt + SELECT SUM(TaxAmt) INTO v_taxAmt + FROM C_OrderTax + WHERE C_Order_ID=:new.C_Order_ID; + -- DBMS_OUTPUT.PUT_LINE('TaxAmt = ' || v_taxAmt); + -- Update Header + UPDATE C_Order + SET TotalLines = TotalLines - v_oldLine + v_newLineNetAmt, + GrandTotal = CASE v_istaxincluded WHEN 'Y' THEN grandtotal - v_oldgrossamt + v_newgrossamt ELSE TotalLines - v_oldLine + v_newLineNetAmt + COALESCE(v_taxAmt, 0) - END - -- Updated = SysDate -- Don't update as otherwise it does not save changes - WHERE C_Order_ID = :new.C_Order_ID; + END + WHERE C_Order_ID = :new.C_Order_ID; + END IF; ELSE -- DELETING SELECT SUM(TaxAmt) INTO v_taxAmt FROM C_OrderTax @@ -128,7 +128,6 @@ WHEN 'Y' THEN grandtotal - v_oldgrossamt ELSE TotalLines - v_oldLine + v_newLineNetAmt + COALESCE(v_taxAmt, 0) END - -- Updated = SysDate -- Don't update as otherwise it does not save changes WHERE C_Order_ID=:old.C_Order_ID; END IF; IF (v_istaxincluded = 'Y') THEN ------------------------------------------------------------------------------ Want fast and easy access to all the code in your enterprise? Index and search up to 200,000 lines of code with a free copy of Black Duck Code Sight - the same software that powers the world's largest code search on Ohloh, the Black Duck Open Hub! Try it now. http://p.sf.net/sfu/bds _______________________________________________ Openbravo-commits mailing list Openbravo-commits@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/openbravo-commits