DBA Data[Home] [Help]

TRIGGER: APPS.MTL_SYSTEM_ITEMS_T1

Source

Description
MTL_SYSTEM_ITEMS_T1
BEFORE UPDATE OF COSTING_ENABLED_FLAG
       ON MTL_SYSTEM_ITEMS_B
FOR EACH ROW
Type
BEFORE EACH ROW
Event
UPDATE
Column
When
Referencing
REFERENCING NEW AS NEW OLD AS OLD
Body
DECLARE
   l_cost_type_id number;
   l_cost_org_id number;
   l_shrinkage_rate number;
   l_def_matl_cost_code_id number;
   l_return_code number;
   l_return_err  varchar2(80);
   l_sql_stmt_num number;
   l_avg_costing_option  varchar2(10);
BEGIN
   l_sql_stmt_num := 10;

   SELECT primary_cost_method
         ,cost_organization_id
         ,default_material_cost_id
   INTO   l_cost_type_id
         ,l_cost_org_id
         ,l_def_matl_cost_code_id
   FROM   mtl_parameters
   WHERE  organization_id = :new.organization_id;

   SELECT DECODE(DECODE(:new.planning_make_buy_code,
                        1,:new.planning_make_buy_code,
                        2,:new.planning_make_buy_code,
                        2),1,nvl(:new.shrinkage_rate,0),0)
   INTO l_shrinkage_rate
   FROM dual;

   IF (:new.organization_id = l_cost_org_id) THEN
      IF (:new.costing_enabled_flag = 'Y'  AND  :old.costing_enabled_flag = 'N') THEN
         l_sql_stmt_num := 20;
		   INSERT INTO cst_item_costs
		      (inventory_item_id,
		       organization_id,
                       cost_type_id,
                       last_update_date,
                       last_updated_by,
                       creation_date,
                       created_by,
                       defaulted_flag,
                       shrinkage_rate,
                       lot_size,
                       based_on_rollup_flag,
                       inventory_asset_flag,
		       item_cost)
		   VALUES
                          (:new.inventory_item_id,
			   :new.organization_id,
			   l_cost_type_id,
			   sysdate,
			   :new.last_updated_by,
			   sysdate,
			   :new.created_by,
			   2,
         	           l_shrinkage_rate,
			   NVL(:new.std_lot_size,1),
			   DECODE(:new.planning_make_buy_code,
                                  1,:new.planning_make_buy_code,
                                  2,:new.planning_make_buy_code,
                                  2),
			   DECODE(:new.inventory_asset_flag,
				  'Y', 1,
				   2),
			   0);
      END IF;

      IF (:new.costing_enabled_flag = 'N' AND :old.costing_enabled_flag = 'Y') THEN
	      :new.inventory_asset_flag := 'N';
         l_sql_stmt_num := 40;

         IF l_cost_type_id = 2 THEN
            FND_PROFILE.GET('CST_AVG_COSTING_OPTION', l_avg_costing_option);
            IF l_avg_costing_option = '2' THEN
               DELETE cst_layer_cost_details
               WHERE layer_id IN
                          (SELECT layer_id
                           FROM cst_quantity_layers
                           WHERE inventory_item_id = :new.inventory_item_id
                           AND   organization_id   = :new.organization_id);

               l_sql_stmt_num := 50;

               DELETE cst_quantity_layers
               WHERE inventory_item_id = :new.inventory_item_id
               AND   organization_id = :new.organization_id;

            END IF;

         END IF;

         DELETE cst_item_cost_details
         WHERE inventory_item_id = :new.inventory_item_id
         AND   organization_id = :new.organization_id
	      AND cost_type_id IN (SELECT cost_type_id FROM cst_cost_types);

         l_sql_stmt_num := 60;

         DELETE cst_item_costs
	      WHERE inventory_item_id = :new.inventory_item_id
	      AND   organization_id = :new.organization_id;

      END IF;
   END IF;
EXCEPTION
   WHEN OTHERS THEN
      l_return_err := 'MTL_SYSTEM_ITEMS_T1:' || 'S'|| l_sql_stmt_num || ':' ||substrb(sqlerrm,1,55);
      raise_application_error(-20000,l_return_err);
END;