Sep 10, 2012

Code for Item Replenishment Interface.


CREATE OR REPLACE PACKAGE A07_REPLENISHMENT_INT AUTHID CURRENT_USER AS
/******************************************************************************
   NAME:       A07_REPLENISH_INTERFACE
   PURPOSE:    Item Replenishment Interface.

   PARAMETERS:
   INPUT:
   OUTPUT:
   RETURNED VALUE:
   CALLED BY:
   CALLS:
   EXAMPLE USE:     NUMBER := A07_REPLENISH_INTERFACE.MyFuncName(Number);
                    A07_REPLENISH_INTERFACE.MyProcName(Number, Varchar2);
   ASSUMPTIONS:+
   LIMITATIONS:
   ALGORITHM:
   NOTES:

******************************************************************************/
-- All the Global Variables to be used in this package

      g_create_dt       date   := sysdate;
      g_create_by       number := 10005218;
      g_update_dt       date   := sysdate;
      g_update_by       number := 10005218;

      v_sqlcode         number;
      v_sqlerrm         varchar2(255);

-- All Global Variables specific to the package

-- All the Functions used in this package

   Function CHK_ORG_EXISTS (org_id mtl_parameters.organization_id%type) return boolean;
   Function CHK_ITEM_EXISTS (item_id mtl_system_items_b.inventory_item_id%type,
                                     v_org_id mtl_system_items_b.organization_id%type) return boolean;
   Function CHK_ITEM_SUBINV (v_item_id number, v_subinv varchar2, v_org_id number) return boolean;
   Function GET_ITEM_PLAN (v_org_id number, v_item_id number, v_subinv varchar2) return number;
   Function GET_ITEM_UOM (v_org_id number, v_item_id number) return varchar2;

-- All the Procedures used in this package

   Procedure Validate_Organization;
   Procedure Validate_Item;
   Procedure Validate_Item_SubInv;
   Procedure Validate_Plan_Method;
   Procedure Validate_Uom;
   Procedure Validate ;
   Procedure Populate_Interface;
--   Procedure Run (errcode out number, errbuf out varchar2);

END A07_REPLENISHMENT_INT;
/
CREATE OR REPLACE PACKAGE BODY A07_REPLENISHMENT_INT AS


Function CHK_ORG_EXISTS (org_id mtl_parameters.organization_id%type) return boolean
Is
   cnt number;
Begin

      Select count(*) into cnt
      From hr_all_organization_units
      where organization_id = org_id;

      if cnt <> 0
      then
         return true;
      Else
         return false;
      End if;

End;


Function CHK_ITEM_EXISTS (item_id mtl_system_items_b.inventory_item_id%type,
                                     v_org_id mtl_system_items_b.organization_id%type) return boolean
Is
    cnt     number;
Begin

      Select count(*) into cnt
      From mtl_system_items_b
      Where inventory_item_id = item_id
      And   organization_id = v_org_id;

      if cnt <> 0
      then
         return true;
      else
         return false;
      end if;

End;

Function CHK_ITEM_SUBINV (v_item_id number, v_subinv varchar2, v_org_id number) return boolean
Is
      cnt number;
Begin

      Select count(*) into cnt
      From mtl_item_sub_inventories
      Where inventory_item_id = v_item_id
      and  secondary_inventory = v_subinv
      and organization_id = v_org_id;

      if cnt <> 0
      then
         return true;
      else
         return false;
      end if;
End;

Function GET_ITEM_PLAN (v_org_id number, v_item_id number, v_subinv varchar2) return number
Is
      ipm number;
Begin

      Select inventory_planning_code into ipm
      From mtl_item_sub_inventories
      Where inventory_item_id = v_item_id
      And   organization_id = v_org_id
      And   secondary_inventory = v_subinv;

      Return ipm;

Exception
      When NO_DATA_FOUND then
             return -2;
      When OTHERS then
             return -1;
End;

Function GET_ITEM_UOM (v_org_id number, v_item_id number) return varchar2
is
      uom varchar2(3);
Begin
      Select primary_uom_code into uom
      From mtl_system_items_b
      Where organization_id = v_org_id
      And inventory_item_id = v_item_id;

      Return uom;
Exception
      When NO_DATA_FOUND then
             return NULL;
      When OTHERS then
             return NULL;
End;

Procedure Validate_Organization
As
      Cursor c_org is Select distinct organization_id from A07_replenish_interface;
      v_org  c_org%rowtype;

Begin
      Open c_org;
      Loop
             Fetch c_org into v_org;
             Exit when c_org%NOTFOUND;

             Begin
                  If chk_org_exists(v_org.organization_id)
                  then
                     null;
                  Else
                     Update A07_replenish_interface
                     Set error_flag = -1,
                          error_description = 'Organization does not exist'
                     Where organization_id = v_org.organization_id;

                End If;
             Exception
                        When OTHERS then
                               v_sqlcode := sqlcode;
                               v_sqlerrm := sqlerrm;

                               Rollback;

                               update A07_replenish_interface
                               Set error_flag = v_sqlcode,
                                     error_description = v_sqlerrm
                               where organization_id = v_org.organization_id;

             End;

      End Loop;

      Close c_org;
      Commit;

      fnd_file.put_line(FND_FILE.OUTPUT,'Validate Organization completed successfully');

Exception
      When OTHERS then
             v_sqlcode := sqlcode;
             v_sqlerrm := sqlerrm;

             Rollback;
             fnd_file.put_line(FND_FILE.LOG,'In the process : Validate Organization');
             fnd_file.put_line(FND_FILE.LOG,'Error Code is ' || v_sqlcode);
             fnd_file.put_line(FND_FILE.LOG,'Error Mesg is ' || v_sqlerrm);

End Validate_Organization;

Procedure Validate_Item
As
      Cursor c_item is Select inventory_item_id, organization_id from A07_replenish_interface
                               Where error_flag is null;
      v_item c_item%rowtype;

Begin
    Open c_item;
      Loop
             Fetch c_item into v_item;
             Exit when c_item%NOTFOUND;

             Begin

                  If chk_item_exists(v_item.inventory_item_id, v_item.organization_id)
                then
                     null;
                  else
                     Update A07_replenish_interface
                     Set error_flag = -2,
                           error_description = 'Item does not exist'
                     Where organization_id = v_item.organization_id
                     And   inventory_item_id = v_item.inventory_item_id;

                  End If;
             Exception
                        When OTHERS then
                               v_sqlcode := sqlcode;
                               v_sqlerrm := sqlerrm;

                               Rollback;

                               update A07_replenish_interface
                               Set error_flag = v_sqlcode,
                                     error_description = v_sqlerrm
                               Where organization_id = v_item.organization_id
                               And   inventory_item_id = v_item.inventory_item_id;

             End;

      End Loop;
      Close c_item;

      Commit;

      fnd_file.put_line(FND_FILE.OUTPUT,'Validate Item completed successfully');

Exception
      When OTHERS then
             v_sqlcode := sqlcode;
             v_sqlerrm := sqlerrm;

             Rollback;
             fnd_file.put_line(FND_FILE.LOG,'In the process : Validate Item');
             fnd_file.put_line(FND_FILE.LOG,'Error Code is ' || v_sqlcode);
             fnd_file.put_line(FND_FILE.LOG,'Error Mesg is ' || v_sqlerrm);

End Validate_Item;



Procedure Validate_Item_SubInv
As
      Cursor c_item is Select inventory_item_id, subinventory_code,organization_id
                               from A07_replenish_interface
                               Where error_flag is null;
      v_item c_item%rowtype;

Begin
    Open c_item;
      Loop
             Fetch c_item into v_item;
             Exit when c_item%NOTFOUND;
             Begin
                  If chk_item_subinv(v_item.inventory_item_id,v_item.subinventory_code,v_item.organization_id)
                then
                     null;
                  else
                     Update A07_replenish_interface
                     Set error_flag = -2,
                           error_description = 'Item does not exist in suninventory'
                     Where organization_id = v_item.organization_id
                     And   inventory_item_id = v_item.inventory_item_id
                     And   subinventory_code = v_item.subinventory_code;

                  End If;
             Exception
                        When OTHERS then
                               v_sqlcode := sqlcode;
                               v_sqlerrm := sqlerrm;

                               Rollback;

                               update A07_replenish_interface
                               Set error_flag = v_sqlcode,
                                     error_description = v_sqlerrm
                               Where organization_id = v_item.organization_id
                               And   inventory_item_id = v_item.inventory_item_id
                             And   subinventory_code = v_item.subinventory_code;

             End;

      End Loop;
      Close c_item;

      Commit;

      fnd_file.put_line(FND_FILE.OUTPUT,'Validate Item completed successfully');

Exception
      When OTHERS then
             v_sqlcode := sqlcode;
             v_sqlerrm := sqlerrm;

             Rollback;
             fnd_file.put_line(FND_FILE.LOG,'In the process : Validate Item');
             fnd_file.put_line(FND_FILE.LOG,'Error Code is ' || v_sqlcode);
             fnd_file.put_line(FND_FILE.LOG,'Error Mesg is ' || v_sqlerrm);

End Validate_Item_SubInv;


Procedure Validate_Plan_Method
As
      Cursor c_plan is Select organization_id, inventory_item_id, subinventory_code, count_method
                               from A07_replenish_interface
                               Where error_flag is null;
      v_plan c_plan%rowtype;
      ipm number;
Begin
      Open c_plan;
      Loop
             Fetch c_plan into v_plan;
             Exit when c_plan%NOTFOUND;

             ipm := get_item_plan(v_plan.organization_id, v_plan.inventory_item_id,v_plan.subinventory_code);

             Begin

                  If ipm = 1
                then
                        if v_plan.count_method != 2
                        then
                          Update A07_replenish_interface
                          Set error_flag = -3,
                                error_description = 'Planning method and Counting Method mismatch'
                          Where organization_id = v_plan.organization_id
                          And   inventory_item_id = v_plan.inventory_item_id
                          and  subinventory_code = v_plan.subinventory_code;
                        end if;

                  Elsif ipm = 2 then

                        if v_plan.count_method != 3
                        then
                          Update A07_replenish_interface
                          Set error_flag = -3,
                                error_description = 'Planning method and Counting Method mismatch'
                          Where organization_id = v_plan.organization_id
                          And   inventory_item_id = v_plan.inventory_item_id
                          and  subinventory_code = v_plan.subinventory_code;
                        end if;

                  Elsif ipm = 6 then

                        if v_plan.count_method != 1
                        then
                          Update A07_replenish_interface
                          Set error_flag = -3,
                                error_description = 'Planning method and Counting Method mismatch'
                          Where organization_id = v_plan.organization_id
                          And   inventory_item_id = v_plan.inventory_item_id
                          and  subinventory_code = v_plan.subinventory_code;
                        end if;

                  Else
                          null;
                  End If;

             Exception
                        When OTHERS then
                               v_sqlcode := sqlcode;
                               v_sqlerrm := sqlerrm;

                               Rollback;

                               update A07_replenish_interface
                               Set error_flag = v_sqlcode,
                                     error_description = v_sqlerrm
                               Where organization_id = v_plan.organization_id
                             And   inventory_item_id = v_plan.inventory_item_id
                             And   subinventory_code = v_plan.subinventory_code;
             End;
      End Loop;

      Close c_plan;

      Commit;

      fnd_file.put_line(FND_FILE.OUTPUT,'Validate Plan Method completed successfully');

Exception
      When OTHERS then
             v_sqlcode := sqlcode;
             v_sqlerrm := sqlerrm;

             Rollback;
             fnd_file.put_line(FND_FILE.LOG,'In the process : Validate Plan Method');
             fnd_file.put_line(FND_FILE.LOG,'Error Code is ' || v_sqlcode);
             fnd_file.put_line(FND_FILE.LOG,'Error Mesg is ' || v_sqlerrm);

End Validate_Plan_Method;

Procedure Validate_UOM
As
      Cursor c_uom is Select distinct inventory_item_id, organization_id
                               from A07_replenish_interface
                               Where error_flag is null;
      v_plan  c_uom%rowtype;
      uom varchar2(3);

Begin
      Open c_uom;
      Loop
             Fetch c_uom into v_plan;
             Exit when c_uom%NOTFOUND;

             uom := get_item_uom(v_plan.organization_id, v_plan.inventory_item_id);

             Begin

                  If uom is NULL
                then
                          Update A07_replenish_interface
                          Set error_flag = -4,
                                error_description = 'UOM not found'
                          Where organization_id = v_plan.organization_id
                          And   inventory_item_id = v_plan.inventory_item_id;
                  Else
                          Update A07_replenish_interface
                          Set    UOM_CODE = uom
                          Where organization_id = v_plan.organization_id
                          And   inventory_item_id = v_plan.inventory_item_id;

                  End If;

             Exception
                        When OTHERS then
                               v_sqlcode := sqlcode;
                               v_sqlerrm := sqlerrm;

                               Rollback;

                               update A07_replenish_interface
                               Set error_flag = v_sqlcode,
                                     error_description = v_sqlerrm
                               Where organization_id = v_plan.organization_id
                             And   inventory_item_id = v_plan.inventory_item_id;
             End;
      End Loop;

      Close c_uom;

      Commit;

      fnd_file.put_line(FND_FILE.OUTPUT,'Validate Plan Method completed successfully');

Exception
      When OTHERS then
             v_sqlcode := sqlcode;
             v_sqlerrm := sqlerrm;

             Rollback;
             fnd_file.put_line(FND_FILE.LOG,'In the process : Validate Plan Method');
             fnd_file.put_line(FND_FILE.LOG,'Error Code is ' || v_sqlcode);
             fnd_file.put_line(FND_FILE.LOG,'Error Mesg is ' || v_sqlerrm);

End Validate_UOM;

Procedure Validate
As
Begin

   Update A07_replenish_interface
   Set error_flag = NULL, error_description = NULL;


-- Update the organization_ids to the respective organization

   Validate_organization;

-- Check if the items exist for the given organization in MTL_SYSTEM_ITEMS_B

   Validate_item;

-- Check if the organization costing method and the item costing method are same.

   Validate_Plan_Method;

-- Check if the item is existing in the subinventory

   Validate_Item_SubInv;

-- To Check if the item cost already exists in the CST_ITEM_COSTS

   Validate_UOM;


   Update A07_replenish_interface
   Set error_flag = 0, error_description = 'Clean Data'
   Where error_flag is null;

   Commit;

   fnd_file.put_line(FND_FILE.OUTPUT,'Validate Interface completed successfully');

Exception
      When OTHERS then
             v_sqlcode := sqlcode;
             v_sqlerrm := sqlerrm;

             Rollback;
             fnd_file.put_line(FND_FILE.LOG,'In the process : Validate Interface');
             fnd_file.put_line(FND_FILE.LOG,'Error Code is ' || v_sqlcode);
             fnd_file.put_line(FND_FILE.LOG,'Error Mesg is ' || v_sqlerrm);

End Validate;

Procedure Populate_Interface
As

    CURSOR C1 IS    SELECT * FROM A07_REPLENISH_INTERFACE;
      Cursor c_hdr is Select distinct organization_id, subinventory_code, count_date
                              from A07_replenish_interface
                              where error_flag = 0;

      Cursor c_lines (org_id in number,subinv_code in varchar2) is
                           Select inventory_item_id, organization_id
                           from A07_replenish_interface
                              where error_flag = 0;

      h_id           number;
      l_id           number;
      h_name               varchar2(15);
    V_HDR          C_HDR%ROWTYPE;
Begin
      Open c_hdr;
      Loop <<OUTER>>
             Fetch c_hdr into v_hdr;
             Exit when c_hdr%NOTFOUND;

             Select mtl_replenish_headers_s.nextval into h_id from dual;
             h_name     := 'SRT' || h_id ;
    END LOOP;  
        
     
       FOR REC IN C1
             LOOP
             Insert into mtl_replenish_headers_int
             ( REPLENISHMENT_HEADER_ID,REPLENISHMENT_COUNT_NAME,COUNT_DATE, LAST_UPDATE_DATE,CREATION_DATE,
             CREATED_BY ,LAST_UPDATED_BY,ORGANIZATION_ID,SUBINVENTORY_CODE, PROCESS_STATUS,PROCESS_MODE  )
             Values
             (REC.REPLENISHMENT_HEADER_ID,REC.REPLENISHMENT_COUNT_NAME,REC.COUNT_DATE,REC.LAST_UPDATE_DATE,REC.CREATION_DATE,
             REC.CREATED_BY,REC.LAST_UPDATED_BY,REC.ORGANIZATION_ID,REC.SUBINVENTORY_CODE,REC.PROCESS_STATUS,REC.PROCESS_MODE);
             END LOOP;
END;

END A07_REPLENISHMENT_INT;

                                   

No comments:

OraApps Search

Custom Search

Search This Blog