details:   https://code.openbravo.com/erp/devel/pi/rev/292bdf82cd53
changeset: 17974:292bdf82cd53
user:      David Miguelez <david.miguelez <at> openbravo.com>
date:      Thu Sep 13 19:27:19 2012 +0200
summary:   Fixes issue 21589: Checks what columns are updated before doing
other operations.

diffstat:

 src-db/database/model/triggers/M_TRANSACTION_TRG.xml |  90 ++++++++++++++-----
 1 files changed, 66 insertions(+), 24 deletions(-)

diffs (123 lines):

diff -r 861d5861059e -r 292bdf82cd53 
src-db/database/model/triggers/M_TRANSACTION_TRG.xml
--- a/src-db/database/model/triggers/M_TRANSACTION_TRG.xml      Tue Sep 18 
15:22:53 2012 +0200
+++ b/src-db/database/model/triggers/M_TRANSACTION_TRG.xml      Thu Sep 13 
19:27:19 2012 +0200
@@ -30,6 +30,7 @@
   v_IsOneAtSetValReq M_Attributeset.Isoneattrsetvalrequired%TYPE;
   v_PRODUCTION_ID VARCHAR2(32);
   v_LINE NUMBER;
+  v_DateNull DATE := TO_DATE('01-01-1900', 'DD-MM-YYYY');
     
 BEGIN
     
@@ -43,19 +44,66 @@
     FROM M_PRODUCT P LEFT JOIN M_ATTRIBUTESET A
     ON A.M_ATTRIBUTESET_ID = P.M_ATTRIBUTESET_ID
     WHERE P.M_PRODUCT_ID=:NEW.M_PRODUCT_ID;
-    IF(COALESCE(v_UOM_ID, '0') <> COALESCE(:NEW.C_UOM_ID, '0')) THEN
-      RAISE_APPLICATION_ERROR(-20000, '@20111@') ;
+    
+               IF UPDATING THEN
+                 IF (COALESCE(:old.m_transaction_id, '0') <> 
COALESCE(:new.m_transaction_id, '0'))
+       OR(COALESCE(:old.movementtype, '.') <> COALESCE(:new.movementtype, '.'))
+       OR(COALESCE(:old.m_locator_id, '0') <> COALESCE(:new.m_locator_id, '0'))
+       OR(COALESCE(:old.m_product_id, '0') <> COALESCE(:new.m_product_id, '0'))
+       OR(COALESCE(:old.movementdate, v_DateNull) <> 
COALESCE(:new.movementdate, v_DateNull))
+           OR(COALESCE(:old.movementqty, '0') <> COALESCE(:new.movementqty, 
'0'))
+           OR(COALESCE(:old.m_inventoryline_id, '0') <> 
COALESCE(:new.m_inventoryline_id, '0'))
+       OR(COALESCE(:old.m_movementline_id, '0') <> 
COALESCE(:new.m_movementline_id, '0'))
+       OR(COALESCE(:old.m_inoutline_id, '0') <> COALESCE(:new.m_inoutline_id, 
'0'))
+       OR(COALESCE(:old.m_productionline_id, '0') <> 
COALESCE(:new.m_productionline_id, '0'))
+       OR(COALESCE(:old.c_projectissue_id, '0') <> 
COALESCE(:new.c_projectissue_id, '0'))
+       OR(COALESCE(:old.m_attributesetinstance_id, '0') <> 
COALESCE(:new.m_attributesetinstance_id, '0'))
+       OR(COALESCE(:old.m_product_uom_id, '0') <> 
COALESCE(:new.m_product_uom_id, '0'))
+       OR(COALESCE(:old.quantityorder, '0') <> COALESCE(:new.quantityorder, 
'0'))
+       OR(COALESCE(:old.c_uom_id, '0') <> COALESCE(:new.c_uom_id, '0'))
+       OR(COALESCE(:old.m_internal_consumptionline_id ,'0') <> 
COALESCE(:new.m_internal_consumptionline_id ,'0')) THEN
+
+       IF(COALESCE(v_UOM_ID, '0') <> COALESCE(:NEW.C_UOM_ID, '0')) THEN
+               RAISE_APPLICATION_ERROR(-20000, '@20111@') ;
+       END IF;
+       IF(v_attributeset_id IS NOT NULL AND (v_AttrSetValueType IS NULL OR 
v_AttrSetValueType <> 'F') AND v_IsOneAtSetValReq = 'Y' AND 
COALESCE(:NEW.M_ATTRIBUTESETINSTANCE_ID, '0') = '0') THEN
+               RAISE_APPLICATION_ERROR(-20000, '@20112@' || ' - ' || v_Name) ;
+       END IF;
+       --Does not allow to change the attribute set value
+       -- for products which attribute set value type is Fixed
+       IF (:NEW.M_PRODUCT_ID IS NOT NULL AND 
COALESCE(:new.M_AttributeSetInstance_ID,'0')!='0') THEN
+               SELECT ATTRSETVALUETYPE 
+               INTO v_AttrSetValueType
+               FROM M_PRODUCT 
+               WHERE M_PRODUCT_ID=:NEW.M_PRODUCT_ID;
+               IF (v_AttrSetValueType='F') THEN
+               RAISE_APPLICATION_ERROR(-20000, '@AttrSetValueFixed@');
+               END IF;
+       END IF;
+      END IF;
     END IF;
-    IF(v_attributeset_id IS NOT NULL AND (v_AttrSetValueType IS NULL OR 
v_AttrSetValueType <> 'F') AND v_IsOneAtSetValReq = 'Y' AND 
COALESCE(:NEW.M_ATTRIBUTESETINSTANCE_ID, '0') = '0') THEN
-      RAISE_APPLICATION_ERROR(-20000, '@20112@' || ' - ' || v_Name) ;
-    END IF;
-    SELECT MAX(MOVEMENTDATE)
-    INTO v_DATEINVENTORY
-    FROM M_INVENTORY I,
-      M_INVENTORYLINE IL
-    WHERE I.M_INVENTORY_ID=IL.M_INVENTORY_ID
-      AND IL.M_INVENTORYLINE_ID=:NEW.M_INVENTORYLINE_ID;
+    
+               IF INSERTING THEN
+                       IF(COALESCE(v_UOM_ID, '0') <> COALESCE(:NEW.C_UOM_ID, 
'0')) THEN
+               RAISE_APPLICATION_ERROR(-20000, '@20111@') ;
+       END IF;
+      IF(v_attributeset_id IS NOT NULL AND (v_AttrSetValueType IS NULL OR 
v_AttrSetValueType <> 'F') AND v_IsOneAtSetValReq = 'Y' AND 
COALESCE(:NEW.M_ATTRIBUTESETINSTANCE_ID, '0') = '0') THEN
+               RAISE_APPLICATION_ERROR(-20000, '@20112@' || ' - ' || v_Name) ;
+       END IF;
+      --Does not allow to change the attribute set value
+      -- for products which attribute set value type is Fixed
+      IF (:NEW.M_PRODUCT_ID IS NOT NULL AND 
COALESCE(:new.M_AttributeSetInstance_ID,'0')!='0') THEN
+               SELECT ATTRSETVALUETYPE 
+               INTO v_AttrSetValueType
+               FROM M_PRODUCT 
+        WHERE M_PRODUCT_ID=:NEW.M_PRODUCT_ID;
+               IF (v_AttrSetValueType='F') THEN
+               RAISE_APPLICATION_ERROR(-20000, '@AttrSetValueFixed@');
+               END IF;
+       END IF;
+               END IF;
   END IF;
+  
   -- Updating inventory
   IF UPDATING OR DELETING THEN
     M_UPDATE_INVENTORY(:OLD.AD_CLIENT_ID, :OLD.AD_ORG_ID, :OLD.UPDATEDBY, 
:OLD.M_PRODUCT_ID, :OLD.M_LOCATOR_ID, :OLD.M_ATTRIBUTESETINSTANCE_ID, 
:OLD.C_UOM_ID, :OLD.M_PRODUCT_UOM_ID, -:OLD.MOVEMENTQTY, -:OLD.QUANTITYORDER, 
NULL, :OLD.MOVEMENTQTY, :OLD.QUANTITYORDER) ;
@@ -71,6 +119,13 @@
     -- END FIXME
   END IF;
   IF INSERTING OR UPDATING THEN
+    SELECT MAX(MOVEMENTDATE)
+      INTO v_DATEINVENTORY
+    FROM M_INVENTORY I,
+      M_INVENTORYLINE IL
+    WHERE I.M_INVENTORY_ID=IL.M_INVENTORY_ID
+      AND IL.M_INVENTORYLINE_ID=:NEW.M_INVENTORYLINE_ID;
+        
     M_UPDATE_INVENTORY(:NEW.AD_CLIENT_ID, :NEW.AD_ORG_ID, :NEW.UPDATEDBY, 
:NEW.M_PRODUCT_ID, :NEW.M_LOCATOR_ID, :NEW.M_ATTRIBUTESETINSTANCE_ID, 
:NEW.C_UOM_ID, :NEW.M_PRODUCT_UOM_ID, :NEW.MOVEMENTQTY, :NEW.QUANTITYORDER, 
v_DATEINVENTORY, -:NEW.MOVEMENTQTY, -:NEW.QUANTITYORDER) ;
     -- FIXME: this shall be removed/reviewed when new warehouse management is 
implemented
     IF (:NEW.M_PRODUCTIONLINE_ID IS NOT NULL) THEN    
@@ -83,19 +138,6 @@
     END IF;
     -- END FIXME
   END IF;
-  IF (INSERTING OR UPDATING) THEN
-   --Does not allow to change the attribute set value
-   -- for products which attribute set value type is Fixed
-   IF (:NEW.M_PRODUCT_ID IS NOT NULL AND 
COALESCE(:new.M_AttributeSetInstance_ID,'0')!='0') THEN
-    SELECT ATTRSETVALUETYPE 
-    INTO v_AttrSetValueType
-    FROM M_PRODUCT 
-    WHERE M_PRODUCT_ID=:NEW.M_PRODUCT_ID;
-    IF (v_AttrSetValueType='F') THEN
-     RAISE_APPLICATION_ERROR(-20000, '@AttrSetValueFixed@');
-    END IF;
-   END IF;
-  END IF;
 END M_TRANSACTION_TRG
 ]]></body>
     </trigger>

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