Showing posts with label BOM. Show all posts
Showing posts with label BOM. Show all posts

Monday, 25 January 2016

Difference between Discrete and Process manufacturing?


Process
Discrete
Use formulations or recipes.
Use Bills of Materials (BOMs).
A process manufacturer blends in a batch.
A discrete manufacturer assembles along a routing.
Variable Ingredients, by and Co- products
Standard parts, Components
Attribute driven
Part Number driven
UOM are Material Specific
UOM are Each & Piece
Need Lot, Grades, Potency, Shelf- life
Need Serial Numbers, ECN’s
Mixes, Blends, Transforms
Builds, Assembles, Fabricates
Makes “STUFF”
Make “THINGS”

Explain Discrete, Flow and Process manufacturing?



Discrete manufacturing: is distinguished by the production of distinct items that use bills of material and routings to determine costs and lead times.

Flow manufacturing: is also called Lean Manufacturing or JIT(Just-In-Time) and uses the principles of demand flow manufacturing to produce product is required, for customer orders, quickly and to meet the demand exactly on-time.
Usually, in order to use Flow a company needs to have production facilities that subscribe to the principals of Lean Manufacturing. It is necessary to design production facilities so that production lines, resources, machines, and labor are making only what is needed for immediate customer orders.

API to Create Routing in oracle apps (BOM_RTG_PUB.PROCESS_RTG)

 CREATE TABLE APPS.GEPS_MAINTENANCE_ROUTES
(
  ORGANIZATION_CODE             VARCHAR2(3 BYTE),
  ASSEMBLY_ITEM_NAME            VARCHAR2(40 BYTE),
  REVISION                      VARCHAR2(40 BYTE),
  ROUTING_DATE                  VARCHAR2(100 BYTE),
  OPERATION_SEQUENCE_NUMBER     VARCHAR2(500 BYTE),
  OPERATION_CODE                VARCHAR2(500 BYTE),
  REFERENCED                    VARCHAR2(40 BYTE),
  DEPARTMENT_CODE               VARCHAR2(10 BYTE),
  RESOURCE_SEQUENCE_NUMBER      NUMBER,
  RESOURCE_CODE                 VARCHAR2(10 BYTE),
  BASIS_TYPE                    VARCHAR2(10 BYTE),
  USAGE_RATE_OR_AMOUNT          NUMBER,
  USAGE_RATE_OR_AMOUNT_INVERSE  NUMBER,
  ASSIGNED_UNITS                NUMBER,
  LONG_DESCRIPTION              VARCHAR2(4000 BYTE),
  OPERATION_DESCRIPTION         VARCHAR2(4000 BYTE),
  PROCESS_FLAG                  VARCHAR2(10 BYTE),
  ERROR_MESSAGE                 VARCHAR2(4000 BYTE),
  ERROR_MESSAGE_TYPE            VARCHAR2(100 BYTE),
  TRANSACTION_TYPE              VARCHAR2(20 BYTE),
  TRANS_FLAG                    VARCHAR2(100 BYTE)
)




CREATE OR REPLACE PROCEDURE APPS.GEPS_MAINTENANCE_ROUTES_PRC
(errbuf OUT VARCHAR2,
RETCODE OUT NUMBER)
AS
P_HEADER_REC Bom_Rtg_Pub.Rtg_Header_Rec_Type := Bom_Rtg_Pub.G_MISS_RTG_HEADER_REC;
P_OPERATION_REC Bom_Rtg_Pub.Operation_Tbl_Type := Bom_Rtg_Pub.G_MISS_OPERATION_TBL;
P_RESOURCE_REC Bom_Rtg_Pub.Op_Resource_Tbl_Type := Bom_Rtg_Pub.G_MISS_OP_RESOURCE_TBL;
p_RETURN_STATUS VARCHAR2 (240);
p_MSG_COUNT NUMBER:=0;
l_ret_text VARCHAR2 (4000);
p_Message_List Error_Handler.Error_Tbl_Type;
i NUMBER;
j NUMBER;
x_rtg_header_rec Bom_Rtg_Pub.Rtg_Header_Rec_Type;
x_rtg_revision_tbl Bom_Rtg_Pub.Rtg_Revision_Tbl_Type;
x_operation_tbl Bom_Rtg_Pub.Operation_Tbl_Type;
x_op_resource_tbl Bom_Rtg_Pub.Op_Resource_Tbl_Type;
x_sub_resource_tbl Bom_Rtg_Pub.Sub_Resource_Tbl_Type;
x_op_network_tbl Bom_Rtg_Pub.Op_Network_Tbl_Type;
l_hdritem_cnt                number;

CURSOR C1_ENG IS
SELECT DISTINCT t.assembly_item_name,
t.organization_code
--t.transaction_type
FROM APPS.GEPS_MAINTENANCE_ROUTES t
WHERE PROCESS_FLAG = 'P';

CURSOR C1_OPR (p_ASSEMBLY_ITEM VARCHAR2, p_org_code VARCHAR2) IS
SELECT DISTINCT t.assembly_item_name,
t.organization_code,
t.operation_sequence_number,
t.operation_code,
t.referenced,
t.department_code,
t.transaction_type,
LTRIM (RTRIM (T.LONG_DESCRIPTION)) LONG_DESCRIPTION,
LTRIM (RTRIM (t.OPERATION_DESCRIPTION)) OPERATION_DESCRIPTION
FROM  APPS.GEPS_MAINTENANCE_ROUTES t
WHERE t.assembly_item_name = p_ASSEMBLY_ITEM
AND t.organization_code = p_org_code
and t.operation_sequence_number is not null
AND PROCESS_FLAG = 'P'
ORDER BY t.operation_sequence_number;

CURSOR C1_RES (p_ASSEMBLY_ITEM VARCHAR2, p_org_code VARCHAR2, p_seq_number NUMBER) IS
SELECT DISTINCT t.assembly_item_name,
t.organization_code,
t.operation_sequence_number,
t.operation_code,
t.referenced,
t.department_code,
t.resource_sequence_number,
t.resource_code,
t.basis_type,
t.usage_rate_or_amount,
t.usage_rate_or_amount_inverse,
t.ASSIGNED_UNITS,
t.transaction_type
FROM  APPS.GEPS_MAINTENANCE_ROUTES t
WHERE t.assembly_item_name = p_ASSEMBLY_ITEM
AND t.organization_code = p_org_code
AND t.operation_sequence_number = p_seq_number
and t.resource_sequence_number is not null
AND PROCESS_FLAG in( 'S')
ORDER BY t.resource_sequence_number;

l_operation_sequence_id number;

BEGIN

   FND_FILE.PUT_LINE (FND_FILE.LOG,'Starting of GEPS_MAINTENANCE_ROUTES_PRC Procedure');
   --FND_GLOBAL.apps_initialize (1001255, 50326, 700, 0);
   FND_FILE.PUT_LINE (FND_FILE.LOG, 'Initializing Apps');
   FND_GLOBAL.Apps_Initialize (FND_GLOBAL.USER_ID,
                               FND_GLOBAL.RESP_ID,
                               FND_GLOBAL.RESP_APPL_ID);

FND_FILE.PUT_LINE (FND_FILE.LOG, 'P_MSG_COUNT' ||P_MSG_COUNT);


--FND_GLOBAL.APPS_INITIALIZE (1117, 23118, 426); --user_id, resp_id, resp_appl_id
 FOR  C_REC IN C1_ENG
 LOOP
      FND_FILE.PUT_LINE (FND_FILE.LOG, 'loop start');
      FND_FILE.PUT_LINE (FND_FILE.LOG, ' C_REC.ASSEMBLY_ITEM_NAME:' ||  C_REC.ASSEMBLY_ITEM_NAME);
      FND_FILE.PUT_LINE (FND_FILE.LOG, 'C_REC.ORGANIZATION_CODE:' ||C_REC.ORGANIZATION_CODE);
--FND_FILE.PUT_LINE (FND_FILE.OUTPUT, C_REC.ASSEMBLY_ITEM_NAME);
--DBMS_OUTPUT.PUT_LINE (C_REC.ASSEMBLY_ITEM_NAME);

/*BEGIN
SELECT   count(msi.segment1)
INTO l_hdritem_cnt
  FROM   BOM_OPERATIONAL_ROUTINGS bor,
         mtl_system_items_b msi,
         org_organization_definitions ood
 WHERE       msi.inventory_item_id = bor.ASSEMBLY_ITEM_ID
         AND msi.ORGANIZATION_ID = bor.ORGANIZATION_ID
         AND msi.organization_id = ood.organization_id
         AND bor.organization_id = ood.organization_id
         AND ood.organization_code = C_REC.ORGANIZATION_CODE
         AND msi.segment1 =  C_REC.ASSEMBLY_ITEM_NAME;
EXCEPTION
         WHEN OTHERS
         THEN
            l_hdritem_cnt := 0;
END;

FND_FILE.PUT_LINE (FND_FILE.LOG, 'l_hdritem_cnt:' || l_hdritem_cnt);

P_HEADER_REC := Bom_Rtg_Pub.G_MISS_RTG_HEADER_REC;*/


--P_HEADER_REC.Transaction_Type: = 'CREATE'; -
P_HEADER_REC.Return_Status := NULL;
i := 0;
--j := 0;
--P_OPERATION_REC.DELETE;
--P_RESOURCE_REC.DELETE;

 FOR C_REC2 IN C1_OPR (C_REC.ASSEMBLY_ITEM_NAME, C_REC.ORGANIZATION_CODE)
 LOOP

 FND_FILE.PUT_LINE (FND_FILE.LOG, 'C1_OPR Loop Start .....' );

x_rtg_header_rec := Bom_Rtg_Pub.G_MISS_RTG_HEADER_REC;
x_rtg_revision_tbl.delete;
x_operation_tbl.delete;
x_op_resource_tbl.delete;
x_sub_resource_tbl.delete;
x_op_network_tbl.delete;
p_message_list.delete;
P_OPERATION_REC.DELETE;
i := 1;

--P_OPERATION_REC (i) .OPERATION_SEQUENCE_NUMBER :=null;

BEGIN
SELECT   count(msi.segment1)
INTO l_hdritem_cnt
  FROM   BOM_OPERATIONAL_ROUTINGS bor,
         mtl_system_items_b msi,
         org_organization_definitions ood
 WHERE       msi.inventory_item_id = bor.ASSEMBLY_ITEM_ID
         AND msi.ORGANIZATION_ID = bor.ORGANIZATION_ID
         AND msi.organization_id = ood.organization_id
         AND bor.organization_id = ood.organization_id
         AND ood.organization_code = C_REC.ORGANIZATION_CODE
         AND msi.segment1 =  C_REC.ASSEMBLY_ITEM_NAME;
EXCEPTION
         WHEN OTHERS
         THEN
            l_hdritem_cnt := 0;
END;

FND_FILE.PUT_LINE (FND_FILE.LOG, 'C1_OPR Loop l_hdritem_cnt:' || l_hdritem_cnt);

P_HEADER_REC := Bom_Rtg_Pub.G_MISS_RTG_HEADER_REC;

IF l_hdritem_cnt < 1 then
P_HEADER_REC.ASSEMBLY_ITEM_NAME := C_REC.ASSEMBLY_ITEM_NAME;
P_HEADER_REC.ORGANIZATION_CODE := C_REC.ORGANIZATION_CODE;
P_HEADER_REC.Eng_Routing_Flag := 2; -- 2 for manufacturing 1- for Engineering
--P_HEADER_REC.alternate_routing_code := 1;
--P_HEADER_REC.cfm_routing_flag :=1;
P_HEADER_REC.transaction_type := 'CREATE';

ELSE
P_HEADER_REC.ASSEMBLY_ITEM_NAME := NULL;
P_HEADER_REC.ORGANIZATION_CODE :=NULL;
P_HEADER_REC.Eng_Routing_Flag := NULL; -- 2 for manufacturing 1- for Engineering
P_HEADER_REC.transaction_type := NULL;

END IF;

     FND_FILE.PUT_LINE (FND_FILE.LOG, ' P_HEADER_REC.Eng_Routing_Flag:' ||P_HEADER_REC.Eng_Routing_Flag);
     FND_FILE.PUT_LINE (FND_FILE.LOG, ' i:' ||i);
     FND_FILE.PUT_LINE (FND_FILE.LOG, ' C_REC2.OPERATION_SEQUENCE_NUMBER:' ||C_REC2.OPERATION_SEQUENCE_NUMBER);
     FND_FILE.PUT_LINE (FND_FILE.LOG, 'C_REC2.OPERATION_CODE:' ||C_REC2.OPERATION_CODE);
     FND_FILE.PUT_LINE (FND_FILE.LOG, 'C_REC2.REFERENCED:' ||C_REC2.REFERENCED);
     FND_FILE.PUT_LINE (FND_FILE.LOG, 'C_REC2.DEPARTMENT_CODE:' ||C_REC2.DEPARTMENT_CODE);
     FND_FILE.PUT_LINE (FND_FILE.LOG, 'C_REC2.LONG_DESCRIPTION:' ||C_REC2.LONG_DESCRIPTION);
     FND_FILE.PUT_LINE (FND_FILE.LOG, 'C_REC2.OPERATION_DESCRIPTION:' ||C_REC2.OPERATION_DESCRIPTION);



P_OPERATION_REC (i) .ASSEMBLY_ITEM_NAME := C_REC2.ASSEMBLY_ITEM_NAME;
P_OPERATION_REC (i) .ORGANIZATION_CODE := C_REC2.ORGANIZATION_CODE;
-- FND_FILE.PUT_LINE (FND_FILE.LOG, ' P_OPERATION_REC (i) .OPERATION_SEQUENCE_NUMBER11:' ||P_OPERATION_REC (i) .OPERATION_SEQUENCE_NUMBER);
P_OPERATION_REC (i) .OPERATION_SEQUENCE_NUMBER := C_REC2.OPERATION_SEQUENCE_NUMBER;
-- FND_FILE.PUT_LINE (FND_FILE.LOG, ' P_OPERATION_REC (i) .OPERATION_SEQUENCE_NUMBER22:' ||P_OPERATION_REC (i) .OPERATION_SEQUENCE_NUMBER);
P_OPERATION_REC (i) .STANDARD_OPERATION_CODE := C_REC2.OPERATION_CODE;
if (C_REC2.REFERENCED ='Yes' or C_REC2.REFERENCED ='YES') then
P_OPERATION_REC (i) .REFERENCE_FLAG := 1;
else
P_OPERATION_REC (i) .REFERENCE_FLAG := 2;
end if;
P_OPERATION_REC (i) .DEPARTMENT_CODE := C_REC2.DEPARTMENT_CODE;
P_OPERATION_REC (i) .LONG_DESCRIPTION := C_REC2.LONG_DESCRIPTION; --Ana Tabloda long description diye alan bir aç
P_OPERATION_REC (i) .OPERATION_DESCRIPTION := C_REC2.OPERATION_DESCRIPTION;
P_OPERATION_REC (i) .Operation_Type := 1;

      IF C_REC2.TRANSACTION_TYPE LIKE '%CREATE%'
      THEN
        P_OPERATION_REC (i).transaction_type := 'CREATE';
    P_OPERATION_REC (i) .Start_Effective_Date := SYSDATE;
    P_OPERATION_REC (i) .Disable_Date := null;

    /*IF i <= 1 then
    P_OPERATION_REC (i).transaction_type := 'CREATE';
    else
    P_OPERATION_REC (i).transaction_type := 'UPDATE';
    end if;*/
         FND_FILE.PUT_LINE (            FND_FILE.LOG, 'sss1.1-C_REC2. ' ||P_OPERATION_REC (i).transaction_type);
      ELSE
         P_OPERATION_REC (i).transaction_type := 'UPDATE';
     BEGIN
         SELECT  bos.EFFECTIVITY_DATE
         INTO P_OPERATION_REC (i) .Start_Effective_Date
          FROM   BOM_OPERATIONAL_ROUTINGS_V bor,
             mtl_system_items_b msi,
             BOM_OPERATION_SEQUENCES_V bos,
              org_organization_definitions ood
         WHERE       msi.inventory_item_id = bor.ASSEMBLY_ITEM_ID
             AND msi.ORGANIZATION_ID = bor.ORGANIZATION_ID
             AND msi.ORGANIZATION_ID = ood.ORGANIZATION_ID
             AND bor.ORGANIZATION_ID = ood.ORGANIZATION_ID
             AND bor.ROUTING_SEQUENCE_ID = bos.ROUTING_SEQUENCE_ID
             AND ood.ORGANIZATION_CODE = C_REC2.ORGANIZATION_CODE
             and msi.segment1 = C_REC2.ASSEMBLY_ITEM_NAME
             and bos.OPERATION_SEQ_NUM =C_REC2.OPERATION_SEQUENCE_NUMBER;
        P_OPERATION_REC (i) .Disable_Date := null;
     EXCEPTION WHEN OTHERS THEN
            P_OPERATION_REC (i) .Start_Effective_Date := SYSDATE;
            P_OPERATION_REC (i) .Disable_Date := null;
     END;

      --   FND_FILE.PUT_LINE (FND_FILE.LOG, 'sss1.1-C_REC2. ' || P_OPERATION_REC (i).transaction_type );
      END IF;
     BEGIN
         SELECT  bos.EFFECTIVITY_DATE
         INTO P_OPERATION_REC (i) .Start_Effective_Date
          FROM   BOM_OPERATIONAL_ROUTINGS_V bor,
             mtl_system_items_b msi,
             BOM_OPERATION_SEQUENCES_V bos,
              org_organization_definitions ood
         WHERE       msi.inventory_item_id = bor.ASSEMBLY_ITEM_ID
             AND msi.ORGANIZATION_ID = bor.ORGANIZATION_ID
             AND msi.ORGANIZATION_ID = ood.ORGANIZATION_ID
             AND bor.ORGANIZATION_ID = ood.ORGANIZATION_ID
             AND bor.ROUTING_SEQUENCE_ID = bos.ROUTING_SEQUENCE_ID
             AND ood.ORGANIZATION_CODE = C_REC2.ORGANIZATION_CODE
             and msi.segment1 = C_REC2.ASSEMBLY_ITEM_NAME
             and bos.OPERATION_SEQ_NUM =C_REC2.OPERATION_SEQUENCE_NUMBER;
        P_OPERATION_REC (i) .Disable_Date := null;
     EXCEPTION WHEN OTHERS THEN
            P_OPERATION_REC (i) .Start_Effective_Date := SYSDATE;
            P_OPERATION_REC (i) .Disable_Date := null;
     END;

        -- FND_FILE.PUT_LINE (FND_FILE.LOG, 'sss1.1-C_REC2. ' || P_OPERATION_REC (i).transaction_type );

--x_rtg_header_rec := Bom_Rtg_Pub.G_MISS_RTG_HEADER_REC;


P_RETURN_STATUS :=null;
P_MSG_COUNT :=0;
l_ret_text :=null;

--FND_FILE.PUT_LINE (FND_FILE.LOG, 'P_RETURN_STATUS00' ||P_RETURN_STATUS);
--FND_FILE.PUT_LINE (FND_FILE.LOG, 'P_MSG_COUNT00' ||P_MSG_COUNT);
--FND_FILE.PUT_LINE (FND_FILE.LOG, 'l_ret_text00' ||l_ret_text);

begin
APPS.BOM_RTG_PUB.PROCESS_RTG (p_init_msg_list  => FALSE,
p_rtg_header_rec  => P_HEADER_REC,
p_operation_tbl => P_OPERATION_REC,
--p_op_resource_tbl => P_RESOURCE_REC,
x_rtg_header_rec => x_rtg_header_rec,
x_rtg_revision_tbl => x_rtg_revision_tbl,
x_operation_tbl => x_operation_tbl,
x_op_resource_tbl => x_op_resource_tbl,
x_sub_resource_tbl => x_sub_resource_tbl,
x_op_network_tbl => x_op_network_tbl,
x_return_status => P_RETURN_STATUS,
X_MSG_COUNT => P_MSG_COUNT);
exception when others then
FND_FILE.PUT_LINE (FND_FILE.LOG, 'OPERATION exception' ||sqlerrm);
FND_FILE.PUT_LINE (FND_FILE.LOG, 'OPERATION P_RETURN_STATUSEXP' ||P_RETURN_STATUS);
FND_FILE.PUT_LINE (FND_FILE.LOG, 'OPERATION P_MSG_COUNTEXP' ||P_MSG_COUNT);
FND_FILE.PUT_LINE (FND_FILE.LOG, 'OPERATION l_ret_textEXP' ||l_ret_text);
end;


--FND_FILE.PUT_LINE (FND_FILE.LOG, 'P_RETURN_STATUS' ||P_RETURN_STATUS);
--FND_FILE.PUT_LINE (FND_FILE.LOG, 'P_MSG_COUNT' ||P_MSG_COUNT);
--FND_FILE.PUT_LINE (FND_FILE.LOG, 'l_ret_text' ||l_ret_text);

IF P_RETURN_STATUS <> 'S' THEN
error_handler.Get_Message_List (p_message_list);
l_ret_text := null;

FOR i IN 1 .. p_message_list.COUNT LOOP

IF i = 1 THEN
--if l_ret_text is null then
FND_FILE.PUT_LINE (FND_FILE.LOG, 'p_Message_List (i) .message_text,' ||p_Message_List (i) .message_text);

l_ret_text := substr(p_Message_List (i) .message_text,1,250);

ELSE
FND_FILE.PUT_LINE (FND_FILE.LOG, 'p_Message_List (i) .message_textelse' ||p_Message_List (i) .message_text);

l_ret_text := l_ret_text || '~'|| substr(p_Message_List (i) .message_text,1,250);
END IF;

END LOOP;

ROLLBACK;


FND_FILE.PUT_LINE (FND_FILE.LOG, 'ERROR!!!!' ||c_rec.assembly_item_name||'-'|| c_rec.organization_code||'-'||l_ret_text);


UPDATE APPS.GEPS_MAINTENANCE_ROUTES xxinn
SET XXINN.ERROR_MESSAGE = l_ret_text,
PROCESS_FLAG ='E'
WHERE XXINN.ASSEMBLY_ITEM_NAME = c_rec.assembly_item_name
AND XXINN.ORGANIZATION_CODE = c_rec.organization_code
AND xxinn.operation_sequence_number = C_REC2.OPERATION_SEQUENCE_NUMBER;

commit;

ELSE


FND_FILE.PUT_LINE (FND_FILE.LOG, 'The process is successful ..' ||c_rec.assembly_item_name||'-'|| c_rec.organization_code);

UPDATE APPS.GEPS_MAINTENANCE_ROUTES xxinn
SET PROCESS_FLAG ='S'
WHERE XXINN.ASSEMBLY_ITEM_NAME = c_rec.assembly_item_name
AND XXINN.ORGANIZATION_CODE = c_rec.organization_code
AND xxinn.operation_sequence_number = C_REC2.OPERATION_SEQUENCE_NUMBER;
commit;

END IF;

--dbms_lock.sleep(60);

begin
select bos.operation_sequence_id
into l_operation_sequence_id from
BOM_OPERATIONAL_ROUTINGS_V bor,
BOM_OPERATION_SEQUENCES_V bos,
org_organization_definitions ood,
mtl_system_items_b msi
where   msi.inventory_item_id = bor.ASSEMBLY_ITEM_ID
and bor.ROUTING_SEQUENCE_ID = bos.ROUTING_SEQUENCE_ID
AND msi.ORGANIZATION_ID = bor.ORGANIZATION_ID
         AND msi.ORGANIZATION_ID = ood.ORGANIZATION_ID
         AND bor.ORGANIZATION_ID = ood.ORGANIZATION_ID
         and msi.segment1 =C_REC.ASSEMBLY_ITEM_NAME
         and ood.ORGANIZATION_code =C_REC.ORGANIZATION_CODE
     and bos.OPERATION_SEQ_NUM =C_REC2.OPERATION_SEQUENCE_NUMBER;
end;

FND_FILE.PUT_LINE (FND_FILE.LOG, 'l_operation_sequence_id.' || l_operation_sequence_id );
j := 0;

-- FND_FILE.PUT_LINE (FND_FILE.LOG, 'before C1_RES Loop Start .....'||C_REC.ASSEMBLY_ITEM_NAME||'-'||C_REC.ORGANIZATION_CODE||'-'|| C_REC2.OPERATION_SEQUENCE_NUMBER);
 FOR C_rec3 IN C1_RES (C_REC.ASSEMBLY_ITEM_NAME,
C_REC.ORGANIZATION_CODE,
C_REC2.OPERATION_SEQUENCE_NUMBER) LOOP

FND_FILE.PUT_LINE (FND_FILE.LOG, 'C1_RES Loop Start .....' );


/*x_rtg_header_rec := Bom_Rtg_Pub.G_MISS_RTG_HEADER_REC;
x_rtg_revision_tbl.delete;
x_operation_tbl.delete;
x_op_resource_tbl.delete;
x_sub_resource_tbl.delete;
x_op_network_tbl.delete;
p_message_list.delete;
P_OPERATION_REC.DELETE;*/
P_RESOURCE_REC.DELETE;

--j := j + 1;
j:=1;


BEGIN
SELECT   count(msi.segment1)
INTO l_hdritem_cnt
  FROM   BOM_OPERATIONAL_ROUTINGS bor,
         mtl_system_items_b msi,
         org_organization_definitions ood
 WHERE       msi.inventory_item_id = bor.ASSEMBLY_ITEM_ID
         AND msi.ORGANIZATION_ID = bor.ORGANIZATION_ID
         AND msi.organization_id = ood.organization_id
         AND bor.organization_id = ood.organization_id
         AND ood.organization_code = C_REC.ORGANIZATION_CODE
         AND msi.segment1 =  C_REC.ASSEMBLY_ITEM_NAME;
EXCEPTION
         WHEN OTHERS
         THEN
            l_hdritem_cnt := 0;
END;

FND_FILE.PUT_LINE (FND_FILE.LOG, 'C1_RES Loop l_hdritem_cnt:' || l_hdritem_cnt);

P_HEADER_REC := Bom_Rtg_Pub.G_MISS_RTG_HEADER_REC;

IF l_hdritem_cnt < 1 then
P_HEADER_REC.ASSEMBLY_ITEM_NAME := C_REC.ASSEMBLY_ITEM_NAME;
P_HEADER_REC.ORGANIZATION_CODE := C_REC.ORGANIZATION_CODE;
P_HEADER_REC.Eng_Routing_Flag := 2; -- 2 for manufacturing 1- for Engineering
--P_HEADER_REC.alternate_routing_code := 1;
--P_HEADER_REC.cfm_routing_flag :=1;
P_HEADER_REC.transaction_type := 'CREATE';

ELSE
P_HEADER_REC.ASSEMBLY_ITEM_NAME := NULL;
P_HEADER_REC.ORGANIZATION_CODE :=NULL;
P_HEADER_REC.Eng_Routing_Flag := NULL; -- 2 for manufacturing 1- for Engineering
P_HEADER_REC.transaction_type := NULL;

END IF;

     FND_FILE.PUT_LINE (FND_FILE.LOG, ' j:' ||j);
      FND_FILE.PUT_LINE (FND_FILE.LOG, ' P_HEADER_REC.Eng_Routing_Flag:' ||P_HEADER_REC.Eng_Routing_Flag);
           FND_FILE.PUT_LINE (FND_FILE.LOG, 'C_REC3.OPERATION_SEQUENCE_NUMBER:' ||C_REC3.OPERATION_SEQUENCE_NUMBER);
     FND_FILE.PUT_LINE (FND_FILE.LOG, 'C_REC3.RESOURCE_SEQUENCE_NUMBER:' ||C_REC3.RESOURCE_SEQUENCE_NUMBER);
     FND_FILE.PUT_LINE (FND_FILE.LOG, 'C_REC3.RESOURCE_CODE:' ||C_REC3.RESOURCE_CODE);
     FND_FILE.PUT_LINE (FND_FILE.LOG, ' C_REC3.BASIS_TYPE:' || C_REC3.BASIS_TYPE);
     FND_FILE.PUT_LINE (FND_FILE.LOG, 'C_REC3.USAGE_RATE_OR_AMOUNT:' ||C_REC3.USAGE_RATE_OR_AMOUNT);
     FND_FILE.PUT_LINE (FND_FILE.LOG, 'C_REC3.USAGE_RATE_OR_AMOUNT_INVERSE:' ||C_REC3.USAGE_RATE_OR_AMOUNT_INVERSE);

P_RESOURCE_REC (j) .ASSEMBLY_ITEM_NAME := C_REC3.ASSEMBLY_ITEM_NAME;
P_RESOURCE_REC (j) .ORGANIZATION_CODE := C_REC3.ORGANIZATION_CODE;
P_RESOURCE_REC (j) .OPERATION_SEQUENCE_NUMBER := C_REC3.OPERATION_SEQUENCE_NUMBER;
P_RESOURCE_REC (j) .RESOURCE_SEQUENCE_NUMBER := C_REC3.RESOURCE_SEQUENCE_NUMBER;
P_RESOURCE_REC (j) .RESOURCE_CODE := C_REC3.RESOURCE_CODE;
           FND_FILE.PUT_LINE (FND_FILE.LOG, 'P_RESOURCE_REC (j) .OPERATION_SEQUENCE_NUMBER:' ||P_RESOURCE_REC (j) .OPERATION_SEQUENCE_NUMBER);
          FND_FILE.PUT_LINE (FND_FILE.LOG, 'P_RESOURCE_REC (j) .RESOURCE_SEQUENCE_NUMBER:' ||P_RESOURCE_REC (j) .RESOURCE_SEQUENCE_NUMBER);
if  (C_REC3.BASIS_TYPE ='Lot' or C_REC3.BASIS_TYPE ='LOT') then
P_RESOURCE_REC (j) .BASIS_TYPE := 2;
else
P_RESOURCE_REC (j) .BASIS_TYPE := 1;
end if;
FND_FILE.PUT_LINE (FND_FILE.LOG, 'P_RESOURCE_REC (j) .BASIS_TYPE :' ||P_RESOURCE_REC (j) .BASIS_TYPE );
P_RESOURCE_REC (j) .USAGE_RATE_OR_AMOUNT := C_REC3.USAGE_RATE_OR_AMOUNT;
P_RESOURCE_REC (j) .USAGE_RATE_OR_AMOUNT_INVERSE := C_REC3.USAGE_RATE_OR_AMOUNT_INVERSE;
P_RESOURCE_REC (j) .Operation_Type  := 1;
--P_RESOURCE_REC (j) .Op_Start_Effective_Date := SYSDATE;
--P_RESOURCE_REC (j) .Transaction_Type: = 'CREATE';
      /*IF C_REC3.TRANSACTION_TYPE LIKE '%CREATE%'
      THEN
         P_RESOURCE_REC (j) .Transaction_Type := 'CREATE'; -- l_rec.TRANSACTION_TYPE;--'CREATE';
         FND_FILE.PUT_LINE (            FND_FILE.LOG, 'sss1.1- ' ||P_RESOURCE_REC (j) .Transaction_Type);
      ELSE
         P_RESOURCE_REC (j) .Transaction_Type := 'UPDATE';
         FND_FILE.PUT_LINE (FND_FILE.LOG, 'sss1.2- ' || P_RESOURCE_REC (j) .Transaction_Type );
      END IF;*/

    IF C_REC2.TRANSACTION_TYPE LIKE '%CREATE%' THEN
        P_RESOURCE_REC (j) .Op_Start_Effective_Date := SYSDATE;
        IF P_OPERATION_REC (i) .STANDARD_OPERATION_CODE is not null and P_OPERATION_REC (i) .DEPARTMENT_CODE is null then
        --P_OPERATION_REC (i).transaction_type := 'UPDATE';
        P_RESOURCE_REC (j) .Transaction_Type := 'UPDATE';
        /*IF j <= 1 then
        P_OPERATION_REC (i).transaction_type := 'CREATE';
        P_RESOURCE_REC (j) .Transaction_Type := 'UPDATE';
        else
        P_OPERATION_REC (i).transaction_type := 'UPDATE';
        P_RESOURCE_REC (j) .Transaction_Type := 'UPDATE';
        end if;*/
        ELSIF P_OPERATION_REC (i) .STANDARD_OPERATION_CODE is null and P_OPERATION_REC (i) .DEPARTMENT_CODE is not null then
        --P_OPERATION_REC (i).transaction_type := 'UPDATE';
        P_RESOURCE_REC (j) .Transaction_Type := 'CREATE';
        /*IF j <= 1 then
        P_OPERATION_REC (i).transaction_type := 'CREATE';
        P_RESOURCE_REC (j) .Transaction_Type := 'CREATE';
        else
        P_OPERATION_REC (i).transaction_type := 'UPDATE';
        P_RESOURCE_REC (j) .Transaction_Type := 'CREATE';
        end if;*/
        end if;
    ELSE
        BEGIN
            SELECT   bos.EFFECTIVITY_DATE
            INTO P_RESOURCE_REC (j) .Op_Start_Effective_Date
              FROM   BOM_OPERATIONAL_ROUTINGS_V bor,
                 mtl_system_items_b msi,
                 BOM_OPERATION_SEQUENCES_V bos,
                 BOM_OPERATION_RESOURCES_V borv,
                 org_organization_definitions ood
             WHERE       msi.inventory_item_id = bor.ASSEMBLY_ITEM_ID
                 AND msi.ORGANIZATION_ID = bor.ORGANIZATION_ID
                 AND msi.ORGANIZATION_ID = ood.ORGANIZATION_ID
                 AND bor.ORGANIZATION_ID = ood.ORGANIZATION_ID
                 AND bor.ROUTING_SEQUENCE_ID = bos.ROUTING_SEQUENCE_ID
                 AND bos.operation_sequence_id = borv.operation_sequence_id
                 AND ood.ORGANIZATION_CODE = C_REC3.ORGANIZATION_CODE
                 and msi.segment1 = C_REC3.ASSEMBLY_ITEM_NAME
                 and bos.OPERATION_SEQ_NUM =C_REC2.OPERATION_SEQUENCE_NUMBER
                 and borv.RESOURCE_SEQ_NUM =C_REC3.RESOURCE_SEQUENCE_NUMBER;

         EXCEPTION WHEN OTHERS THEN
            P_RESOURCE_REC (j) .Op_Start_Effective_Date := SYSDATE;
        END;
        --P_RESOURCE_REC (j) .Transaction_Type := 'CREATE';
        P_RESOURCE_REC (j) .Transaction_Type := 'UPDATE';
    END IF;

 --FND_FILE.PUT_LINE (FND_FILE.LOG, 'sss1.1- ' || P_OPERATION_REC (i).transaction_type );
 FND_FILE.PUT_LINE (FND_FILE.LOG, 'sss1.2- ' ||P_RESOURCE_REC (j) .Transaction_Type );

P_RESOURCE_REC (j) .Schedule_Flag := 1;
P_RESOURCE_REC (J) .ASSIGNED_UNITS := C_REC3.ASSIGNED_UNITS;




/*x_rtg_header_rec := Bom_Rtg_Pub.G_MISS_RTG_HEADER_REC;
x_rtg_revision_tbl.delete;
x_operation_tbl.delete;
x_op_resource_tbl.delete;
x_sub_resource_tbl.delete;
x_op_network_tbl.delete;*/

BEGIN
APPS.BOM_RTG_PUB.PROCESS_RTG (p_init_msg_list => FALSE,
p_rtg_header_rec => P_HEADER_REC,
--p_operation_tbl => P_OPERATION_REC,
p_op_resource_tbl => P_RESOURCE_REC,
x_rtg_header_rec => x_rtg_header_rec,
x_rtg_revision_tbl => x_rtg_revision_tbl,
x_operation_tbl => x_operation_tbl,
x_op_resource_tbl => x_op_resource_tbl,
x_sub_resource_tbl => x_sub_resource_tbl,
x_op_network_tbl => x_op_network_tbl,
x_return_status => P_RETURN_STATUS,
X_MSG_COUNT => P_MSG_COUNT);

exception when others then
FND_FILE.PUT_LINE (FND_FILE.LOG, 'RESOURCEexception' ||sqlerrm);
FND_FILE.PUT_LINE (FND_FILE.LOG, 'RESOURCEP_RETURN_STATUSEXP' ||P_RETURN_STATUS);
FND_FILE.PUT_LINE (FND_FILE.LOG, 'RESOURCEP_MSG_COUNTEXP' ||P_MSG_COUNT);
FND_FILE.PUT_LINE (FND_FILE.LOG, 'RESOURCEl_ret_textEXP' ||l_ret_text);
end;


IF P_RETURN_STATUS <> 'S' THEN
error_handler.Get_Message_List (p_message_list);
l_ret_text := null;

FOR i IN 1 .. p_message_list.COUNT LOOP
IF i = 1 THEN
--if l_ret_text is null then
FND_FILE.PUT_LINE (FND_FILE.LOG, 'p_Message_List (i) .message_text,' ||p_Message_List (i) .message_text);
l_ret_text := substr(p_Message_List (i) .message_text,1,250);

ELSE
FND_FILE.PUT_LINE (FND_FILE.LOG, 'p_Message_List (i) .message_text else,' ||p_Message_List (i) .message_text);
l_ret_text := l_ret_text || '~'|| substr(p_Message_List (i) .message_text,1,250);
END IF;
END LOOP;

ROLLBACK;

--FND_FILE.PUT_LINE (FND_FILE.OUTPUT,
--P_HEADER_REC.ASSEMBLY_ITEM_NAME ||
--' ERROR!!!!!!!' || Chr (10) || 'Error:' || p_Message_List (i) .message_type || '-' || p_Message_List (i) || .message_name
--l_ret_text);

--DBMS_OUTPUT.PUT_LINE (P_HEADER_REC.ASSEMBLY_ITEM_NAME ||' ERROR!!!!!!!' || Chr (10) || 'Error:' || p_Message_List (i) .message_type || '-' || p_Message_List (i) || .message_name
--l_ret_text);

FND_FILE.PUT_LINE (FND_FILE.LOG, 'RESOURCE_ERROR!!!!' ||c_rec.assembly_item_name||'-'|| c_rec.organization_code||'-'||l_ret_text);


UPDATE APPS.GEPS_MAINTENANCE_ROUTES xxinn
SET XXINN.ERROR_MESSAGE = l_ret_text,
PROCESS_FLAG ='E'
WHERE XXINN.ASSEMBLY_ITEM_NAME = c_rec.assembly_item_name
AND XXINN.ORGANIZATION_CODE = c_rec.organization_code
AND xxinn.operation_sequence_number = C_REC2.OPERATION_SEQUENCE_NUMBER
and xxinn.RESOURCE_SEQUENCE_NUMBER = C_rec3.RESOURCE_SEQUENCE_NUMBER;
commit;
ELSE

--FND_FILE.PUT_LINE (FND_FILE.OUTPUT,P_HEADER_REC.ASSEMBLY_ITEM_NAME ||'The process is successful ..');
--DBMS_OUTPUT.PUT_LINE (P_HEADER_REC.ASSEMBLY_ITEM_NAME ||'The process is successful ..');
FND_FILE.PUT_LINE (FND_FILE.LOG, 'RESOURCE_The process is successful ..' ||c_rec.assembly_item_name||'-'|| c_rec.organization_code);

UPDATE APPS.GEPS_MAINTENANCE_ROUTES xxinn
SET --XXINN.ERROR_MESSAGE = null
PROCESS_FLAG ='S'
WHERE XXINN.ASSEMBLY_ITEM_NAME = c_rec.assembly_item_name
AND XXINN.ORGANIZATION_CODE = c_rec.organization_code
AND xxinn.operation_sequence_number = C_REC2.OPERATION_SEQUENCE_NUMBER
and xxinn.RESOURCE_SEQUENCE_NUMBER = C_rec3.RESOURCE_SEQUENCE_NUMBER;
commit;
END IF;

END LOOP; --C1_RES
FND_FILE.PUT_LINE (FND_FILE.LOG, 'C1_RES END LOOP' );
END LOOP; -- C1_OPR
FND_FILE.PUT_LINE (FND_FILE.LOG, 'C1_OPR END LOOP' );
END LOOP; --C1_ENG
FND_FILE.PUT_LINE (FND_FILE.LOG, 'C1_ENG END LOOP' );
EXCEPTION WHEN OTHERS THEN
FND_FILE.PUT_LINE (FND_FILE.LOG, 'Main_Eexception' ||sqlerrm);

END GEPS_MAINTENANCE_ROUTES_PRC;
/