DBA Data[Home] [Help]

TRIGGER: APPS.BOMTBOMX

Source

Description
BOMTBOMX

/* $Header: BOMTBOMX.sql 120.3 2006/07/26 11:46:32 arudresh noship $ */

AFTER INSERT OR UPDATE OR DELETE ON BOM_STRUCTURES_B
FOR EACH ROW
Type
AFTER EACH ROW
Event
INSERT OR UPDATE OR DELETE
Column
When
((OLD.ALTERNATE_BOM_DESIGNATOR IS NULL) OR
       (NEW.ALTERNATE_BOM_DESIGNATOR IS NULL))
Referencing
REFERENCING NEW AS NEW OLD AS OLD
Body
DECLARE
    error_msg VARCHAR2(80);
    error_cd  NUMBER;

    is_product_family NUMBER;

BEGIN

IF UPDATING THEN

  UPDATE  BOM_EXPLOSIONS BE
  SET BE.REXPLODE_FLAG = 1,
      BE.comp_common_bill_Seq_id = :NEW.common_bill_Sequence_id,
      BE.comp_source_bill_Seq_id = :NEW.source_bill_Sequence_id,
      BE.common_bill_Sequence_id = Decode(plan_level, 0, :NEW.common_bill_Sequence_id, :OLD.common_bill_Sequence_id)
  WHERE BE.COMPONENT_ITEM_ID = :NEW.ASSEMBLY_ITEM_ID
  AND BE.ORGANIZATION_ID = :NEW.ORGANIZATION_ID ;
/*     OR  BE.ORGANIZATION_ID = :NEW.COMMON_ORGANIZATION_ID); */

END IF;

IF INSERTING THEN
        UPDATE BOM_EXPLOSIONS BE
        set REXPLODE_FLAG = 1,
            comp_common_bill_seq_id = :NEW.COMMON_BILL_SEQUENCE_ID,
            comp_bill_seq_id = :NEW.BILL_SEQUENCE_ID,
            comp_source_bill_Seq_id = :NEW.SOURCE_BILL_SEQUENCE_ID
        WHERE   BE.COMPONENT_ITEM_ID = :NEW.ASSEMBLY_ITEM_ID
        AND     BE.ORGANIZATION_ID = :NEW.ORGANIZATION_ID
        AND BE.comp_common_bill_seq_id is null;
/* The last update ststement is written for fixing bug 1553040 */
END IF;

/* If the Record from Bom_Bill_of_Materials is being deleted and the
   assembly item is a Product Family item, then the correspondinf
   record in mtl_system_items needs to be updated with product_family_item_id
   as NULL and also all corresponding component records in msi also need
   to be updated. While updating of Member's if any of the components is a
   Model item, then all its configuration items must also be updated.
*/

IF DELETING THEN

  UPDATE	BOM_EXPLOSIONS_ALL BE
  SET 	REXPLODE_FLAG = 1
  WHERE	BE.BILL_SEQUENCE_ID IN (SELECT BILL_SEQUENCE_ID
                                FROM BOM_EXPLOSIONS_ALL
                                WHERE COMP_COMMON_BILL_SEQ_ID = :old.bill_sequence_id)
  AND BE.BILL_SEQUENCE_ID = BE.comp_common_bill_seq_id;

  -- Verify that the Assembly being deleted is a Product Family
  SELECT bom_item_type
    INTO is_product_family
    FROM mtl_system_items
   WHERE inventory_item_id = :old.assembly_item_id
     AND organization_id   = :old.organization_id;

     IF is_product_family = 5 THEN

  -- Update the Assemly Item itself
  Product_Family_Pkg.Update_Pf_Item_Id(x_inventory_item_id  => :old.assembly_item_id,
               x_organization_id    => :old.organization_id,
               x_pf_item_id   => NULL,
               x_trans_type   => 'REMOVE',
               x_error_msg    => error_msg,
               x_error_code   => error_cd
              );
  UPDATE mtl_system_items
           SET product_family_item_id = NULL
         WHERE product_family_item_id = :old.assembly_item_id
     AND organization_id = :old.organization_id;
      END IF;

      UPDATE eng_revised_items
   SET bill_sequence_id = NULL
       WHERE bill_sequence_id = :old.bill_sequence_id
         AND organization_id = :old.organization_id
   AND implementation_date is null ;

   -- Update the BOM_EXPLOSIONS TABLE
         UPDATE  BOM_EXPLOSIONS BE
     SET REXPLODE_FLAG = 1
     WHERE BE.COMPONENT_ITEM_ID = :OLD.ASSEMBLY_ITEM_ID
     AND BE.ORGANIZATION_ID = :OLD.ORGANIZATION_ID ;


END IF;

EXCEPTION
    when others then
  error_msg := 'BOMTBOMX ' || substrb(SQLERRM, 1, 60);
  raise_application_error(-20500, error_msg);
END;