DBA Data[Home] [Help]

PACKAGE BODY: APPS.EGO_BOM_BULKLOAD_PVT_PKG

Source


1 PACKAGE BODY EGO_BOM_BULKLOAD_PVT_PKG AS
2 /* $Header: BOMBBLPB.pls 115.12 2004/04/30 10:43:22 hgelli noship $ */
3 
4 -- =================================================================
5 -- Global variables used in the package.
6 -- =================================================================
7 
8   G_USER_ID         NUMBER  :=  -1;
9   G_LOGIN_ID        NUMBER  :=  -1;
10   G_PROG_APPID      NUMBER  :=  -1;
11   G_PROG_ID         NUMBER  :=  -1;
12   G_REQUEST_ID      NUMBER  :=  -1;
13   G_DEBUG           NUMBER  :=   1;
14 
15   G_STATUS_SUCCESS    CONSTANT VARCHAR2(1)    := 'S';
16   G_STATUS_ERROR      CONSTANT VARCHAR2(1)    := 'E';
17 
18   --This is the UI language.
19   G_LANGUAGE_CODE          VARCHAR2(3);
20   G_CONCREQ_VALID_FLAG     BOOLEAN := FALSE;
21 
22   G_ERROR_TABLE_NAME      VARCHAR2(99) := 'BOM_BULKLOAD_INTF';
23   G_ERROR_ENTITY_CODE     VARCHAR2(99) := 'EGO_ITEM';
24   G_ERROR_FILE_NAME       VARCHAR2(99);
25   G_BO_IDENTIFIER         VARCHAR2(99) := 'EGO_ITEM';
26 
27 
28 PROCEDURE open_debug_session IS
29 
30   CURSOR c_get_utl_file_dir IS
31      SELECT VALUE
32       FROM V$PARAMETER
33      WHERE NAME = 'utl_file_dir';
34 
35   --local variables
36   l_log_output_dir       VARCHAR2(200);
37   l_log_return_status    VARCHAR2(99);
38   l_errbuff              VARCHAR2(999);
39 BEGIN
40 
41   OPEN c_get_utl_file_dir;
42   FETCH c_get_utl_file_dir INTO l_log_output_dir;
43   --developer_debug('UTL_FILE_DIR : '||l_log_output_dir);
44   IF c_get_utl_file_dir%FOUND THEN
45     ------------------------------------------------------
46     -- Trim to get only the first directory in the list --
47     ------------------------------------------------------
48     IF INSTR(l_log_output_dir,',') <> 0 THEN
49       l_log_output_dir := SUBSTR(l_log_output_dir, 1, INSTR(l_log_output_dir, ',') - 1);
50     END IF;
51 
52     G_ERROR_FILE_NAME := G_ERROR_TABLE_NAME||'_'||TO_CHAR(SYSDATE, 'DDMONYYYY_HH24MISS')||'.err';
53 
54     Error_Handler.Open_Debug_Session(
55       p_debug_filename   => G_ERROR_FILE_NAME
56      ,p_output_dir       => l_log_output_dir
57      ,x_return_status    => l_log_return_status
58      ,x_error_mesg       => l_errbuff
59      );
60 
61     FND_FILE.put_line(FND_FILE.LOG, ' Log file location --> '||l_log_output_dir||'/'||G_ERROR_FILE_NAME ||' created with status '|| l_log_return_status);
62 
63     IF (l_log_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
64        FND_FILE.put_line(FND_FILE.LOG, 'Unable to open error log file. Error => '||l_errbuff);
65     END IF;
66 
67   END IF;--IF c_get_utl_file_dir%FOUND THEN
68 
69 END open_debug_session;
70 
71 FUNCTION Bill_Sequence( p_assembly_item_id IN NUMBER
72            , p_alternate_bom_designator IN VARCHAR2
73            , p_organization_id  IN NUMBER
74       )
75   RETURN NUMBER  IS
76   l_id       NUMBER;
77 BEGIN
78 
79   SELECT Bill_Sequence_Id
80     INTO l_id
81    FROM Bom_Bill_Of_Materials
82   WHERE Assembly_Item_Id = p_assembly_item_id
83     AND NVL(Alternate_Bom_Designator, 'NONE') =
84              DECODE(p_alternate_bom_designator,NULL,'NONE',p_alternate_bom_designator)
85       AND Organization_Id = p_organization_id;
86 
87   RETURN l_id;
88 
89   EXCEPTION
90   WHEN OTHERS THEN
91     RETURN NULL;
92 END Bill_Sequence;
93 
94 /********************************************************************
95 * Function      : Organization
96 * Returns       : NUMBER
97 * Purpose       : Will convert the value of organization_code to
98 *     organization_id using MTL_PARAMETERS.
99 *                 If the conversion fails then the function will return
100 *     a NULL otherwise will return the org_id.
101 *     For an unexpected error function will return a
102 *     missing value.
103 *********************************************************************/
104 FUNCTION ORGANIZATION
105    ( p_organization IN VARCHAR2) RETURN NUMBER
106 IS
107   l_id                          NUMBER;
108 BEGIN
109   SELECT  Organization_Id
110   INTO    l_id
111   FROM    Mtl_Parameters
112   WHERE   Organization_Code = p_organization;
113 
114   RETURN l_id;
115 
116   EXCEPTION
117     WHEN NO_DATA_FOUND THEN
118       RETURN NULL;
119     WHEN OTHERS THEN
120       RETURN FND_API.G_MISS_NUM;
121 END ORGANIZATION;
122 
123 
124 /*******************************************************************
125 * Function  : Component_Item
126 * Parameters IN : Component Item Name
127 *     Organization ID
128 * Parameters OUT: Error Message
129 * Returns : Component_Item_Id
130 * Purpose : Function will convert the component item name to its
131 *     corresponsind ID and return the value.
132 *     If the component is invalid, then a NULL is returned.
133 *********************************************************************/
134 FUNCTION Component_Item( p_organization_id   IN NUMBER
135       , p_component_item_num IN VARCHAR2)
136 RETURN NUMBER
137 IS
138   l_id        NUMBER;
139   ret_code    NUMBER;
140   l_err_text  VARCHAR2(2000);
141 BEGIN
142   ret_code := INVPUOPI.Mtl_Pr_Parse_Flex_Name(
143                 Org_Id => p_organization_id,
144                 Flex_Code => 'MSTK',
145                 Flex_Name => p_component_item_num,
146                 Flex_Id => l_id,
147                 Set_Id => -1,
148                 Err_Text => l_err_text);
149 
150   IF (ret_code <> 0) THEN
151     RETURN NULL;
152   END IF;
153 
154   RETURN l_id;
155 
156 END Component_Item;
157 
158 
159 ------------------------------------------------------------------------------------
160 PROCEDURE Structure_Intf_Proc_Complete
161   (
162     p_resultfmt_usage_id     IN    NUMBER
163   , x_errbuff                OUT   NOCOPY VARCHAR2
164   , x_retcode                OUT   NOCOPY VARCHAR2
165     ) IS
166 
167 BEGIN
168 
169 -- Update process flag in Ego Bulkload interface table
170   UPDATE EGO_BULKLOAD_INTF EBI
171    SET  EBI.PROCESS_STATUS =
172     (
173       SELECT BMI.PROCESS_FLAG
174       FROM   BOM_BILL_OF_MTLS_INTERFACE BMI
175       WHERE  BMI.TRANSACTION_ID = EBI.TRANSACTION_ID
176     )
177   WHERE EXISTS
178     (
179       SELECT 'X'
180       FROM   BOM_BILL_OF_MTLS_INTERFACE BMI
181       WHERE  BMI.TRANSACTION_ID = EBI.TRANSACTION_ID
182     )
183     AND EBI.RESULTFMT_USAGE_ID = p_resultfmt_usage_id;
184 
185 
186   UPDATE EGO_BULKLOAD_INTF EBI
187    SET  EBI.PROCESS_STATUS =
188     (
189       SELECT BICI.PROCESS_FLAG
190       FROM   BOM_INVENTORY_COMPS_INTERFACE BICI
191       WHERE  BICI.TRANSACTION_ID = EBI.TRANSACTION_ID
192     )
193   WHERE EXISTS
194     (
195       SELECT 'X'
196       FROM   BOM_INVENTORY_COMPS_INTERFACE BICI
197       WHERE  BICI.TRANSACTION_ID = EBI.TRANSACTION_ID
198     )
199     AND EBI.RESULTFMT_USAGE_ID = p_resultfmt_usage_id;
200 
201 
202 -- Commiting after the process flag is updated.
203    COMMIT;
204 
205   --Error_Handler.Write_Debug('EBI: Updated the Process_Status to Indicate Succssful/Unsucessful completion.');
206   x_retcode := G_STATUS_SUCCESS;
207 
208 EXCEPTION
209   WHEN OTHERS THEN
210     x_retcode := G_STATUS_ERROR;
211     x_errbuff := SUBSTRB(SQLERRM, 1,240);
212     RAISE;
213 END Structure_Intf_Proc_Complete;
214 
215 PROCEDURE PROCESS_BOM_INTERFACE_LINES
216                (
217                  p_resultfmt_usage_id    IN         NUMBER,
218                  p_user_id               IN         NUMBER,
219                  p_conc_request_id       IN         NUMBER,
220                  p_language_code         IN         VARCHAR2,
221                  x_errbuff               IN OUT NOCOPY VARCHAR2,
222                  x_retcode               IN OUT NOCOPY VARCHAR2
223                 )
224 IS
225 
226 --Type Declarations
227   TYPE VARCHAR_TBL_TYPE IS TABLE OF VARCHAR2(256)
228    INDEX BY BINARY_INTEGER;
229 
230 
231 --BOM RECORDS....
232   l_return_status       VARCHAR2(1);
233   l_msg_count           NUMBER := 0;
234   l_unexp_error         VARCHAR2(1000);
235   tempVar               NUMBER;
236   m                     NUMBER := 0; --counter for revised components
237   l_commonitem          VARCHAR2(81);
238   error_message         VARCHAR2(2000) := '';
239 
240 
241   l_return_code         NUMBER;
242   l_err_text            VARCHAR2(2000);
243   l_err_return_code     INTEGER;
244 
245   --API return parameters
246   l_retcode             VARCHAR2(10);
247   l_errbuff             VARCHAR2(2000);
248 
249 --Dynamic Cursor Parameters
250   l_dyn_sql             VARCHAR2(10000);
251   l_dyn_sql_select      VARCHAR2(10000);
252   l_dyn_sql_insert      VARCHAR2(10000);
253   l_dyn_sql_cursor      VARCHAR2(10000);
254   l_msii_set_process_id NUMBER;
255   l_cursor_select       INTEGER;
256   l_cursor_execute      INTEGER;
257   l_temp                NUMBER(10) := 1;
258 
259 --Column Mapping Tables;
260   l_prod_col_name_tbl   VARCHAR_TBL_TYPE;
261   l_intf_col_name_tbl   VARCHAR_TBL_TYPE;
262   i                     NUMBER := 0;
263   j                     NUMBER := 0;
264   k                     NUMBER := 0;
265 
266 --BOM Interface Table Mappings
267   l_bom_col_name        VARCHAR_TBL_TYPE;
268   l_bom_tbl_name        VARCHAR_TBL_TYPE;
269   l_bom_col_type        VARCHAR_TBL_TYPE;
270 
271 --Column Mappings
272   l_prod_col_name       VARCHAR2(256);
273   l_intf_col_name       VARCHAR2(256);
274   l_parent_column       VARCHAR2(256);
275   l_item_col_name       VARCHAR2(256);
276   l_org_id_column       VARCHAR2(256);
277   l_altbom_column       VARCHAR2(256);
278   l_comp_seq_col_name   VARCHAR2(256);
279 
280 --Txn Types
281 
282   G_TXN_CREATE          VARCHAR2(10) := 'CREATE';
283   G_TXN_ADD             VARCHAR2(10) := 'ADD';
284   G_TXN_UPDATE          VARCHAR2(10) := 'UPDATE';
285   G_TXN_DELETE          VARCHAR2(10) := 'DELETE';
286   G_TXN_SYNC            VARCHAR2(10) := 'SYNC';
287 
288 -- COLUMN NAMES
289   G_ITEM_NAME           VARCHAR2(30) := 'ITEM_NUMBER';
290   G_ORG_CODE            VARCHAR2(30) := 'ORGANIZATION_CODE';
291   G_ALT_BOM             VARCHAR2(30) := 'ALTERNATE_BOM_DESIGNATOR';
292   G_PARENT_NAME         VARCHAR2(30) := 'PARENT_NAME';
293   G_QUANTITY            VARCHAR2(30) := 'QUANTITY';
294   G_COMPONENT_SEQ_ID    VARCHAR2(30) := 'COMPONENT_SEQUENCE_ID';
295 
296 
297 -- Bom Interface column names
298   G_EFFECTIVITY_DATE    VARCHAR2(30) := 'EFFECTIVITY_DATE';
299   G_OPERATION_SEQ_NUM   VARCHAR2(30) := 'OPERATION_SEQ_NUM';
300   G_FROM_END_ITEM_UNIT_NUMBER   VARCHAR2(30) := 'FROM_END_ITEM_UNIT_NUMBER';
301 
302 --Column Values
303   L_ITEM_NAME           VARCHAR2(240) ;
304   L_ORGANIZATION_CODE   VARCHAR2(3) ;
305   L_STRUCTURE_NAME      VARCHAR2(10) ;
306   L_PARENT_NAME         VARCHAR2(240) ;
307   L_QUANTITY            NUMBER := 2;
308   L_TRANSACTION_ID      NUMBER;
309 
310 -- Interface COLUMN NAMES
311   G_INTF_STRUCT_NAME    VARCHAR2(30) := 'C_FIX_COLUMN3';
312   G_INTF_ORG_CODE       VARCHAR2(30) := 'C_INTF_ATTR1';
313   G_INTF_COMP_SEQ_ID    VARCHAR2(30) := 'N_INTF_ATTR1';
314 
315 -- Temparory Variables
316   l_Org_Id              NUMBER;
317   l_Inv_Item_Id         NUMBER;
318   l_Bill_Seq_Id         NUMBER;
319   l_str                 VARCHAR2(1000);
320 
321 -- Constant Values
322   G_DEL_GROUP_NAME    VARCHAR2(10)  := 'B_BLK_INTF';
323   G_DEL_GROUP_DESC    VARCHAR2(240) := 'Delete Group for EGO BOM Bulkload Structures';
324 
325   l_bom_header_columns_tbl   DBMS_SQL.VARCHAR2_TABLE;
326 
327 
328 --DEBUG FLAG
329   l_debug       VARCHAR2(10);
330   --
331   --  Get the Header Data from the Parents.
332   --
333 
334 
335   --
336   -- To get the BOM Attribute columns in the Result Format.
337   --
338 
339   CURSOR C_BOM_ATTRIBUTE_COLUMNS (c_Resultfmt_Usage_Id  IN  NUMBER) IS
340     SELECT
341       erf.Attribute_Code,
342       erf.Intf_Column_Name,
343       bcc.Bom_Intf_Column_Name ,
344       bcc.Bom_Intf_Table_Name,
345       bcc.Operation_Type
346     FROM
347       Ego_Results_Fmt_Usages erf,
348       Bom_Component_Columns bcc
349     WHERE
350       Region_Code = 'BOM_RESULT_DUMMY_REGION'
351     AND
352       Region_Application_Id = 702
353     AND
354       Customization_Application_Id = 431
355     AND
356       Resultfmt_Usage_Id = c_Resultfmt_Usage_Id
357     AND
358       bcc.Attribute_Code = erf.Attribute_Code
359     AND
360       (   bcc.Parent_Entity IS NULL
361       OR  BCC.Attribute_Code = 'ITEM_NUMBER'
362       OR  BCC.Attribute_Code = 'PARENT_NAME')
363     AND
364       erf.Attribute_Code NOT LIKE '%$$%';
365 
366   -- Cursor to create a row with 'Primary' (Null) alternate for structure headers
367   -- This is to automate the creation of primary boms for PLM purpose
368   CURSOR C_BOM_BILL_PRIMARY(C_REQUEST_ID IN NUMBER) IS
369     SELECT
370       ASSEMBLY_ITEM_ID,
371       ORGANIZATION_ID,
372       ASSEMBLY_TYPE,
373       PROCESS_FLAG,
374       ORGANIZATION_CODE,
375       COMMON_ORG_CODE,
376       ITEM_NUMBER,
377       IMPLEMENTATION_DATE
378     FROM
379       BOM_BILL_OF_MTLS_INTERFACE
380     WHERE
381       PROCESS_FLAG = 1
382     AND
383       REQUEST_ID = C_REQUEST_ID;
384 
385 
386 BEGIN
387     l_debug := fnd_profile.value('MRP_DEBUG');
388 
389     IF (NVL(fnd_profile.value('CONC_REQUEST_ID'), 0) <> 0) THEN
390       G_CONCREQ_VALID_FLAG  := TRUE;
391     END IF;
392 
393     IF (G_CONCREQ_VALID_FLAG ) THEN
394       FND_FILE.put_line(FND_FILE.LOG, ' ******** New Log ******** ');
395     END IF;
396 
397    -- the values are chosen from the FND_GLOBALS
398     G_USER_ID    := FND_GLOBAL.user_id         ;
399     G_LOGIN_ID   := FND_GLOBAL.login_id        ;
400     G_PROG_APPID := FND_GLOBAL.prog_appl_id    ;
401     G_PROG_ID    := FND_GLOBAL.conc_program_id ;
402     G_REQUEST_ID := FND_GLOBAL.conc_request_id ;
403     G_LANGUAGE_CODE := p_Language_Code;
404 
405 
406 
407     Error_Handler.initialize();
408     Error_Handler.set_bo_identifier(G_BO_IDENTIFIER);
409     --Log errors into file
410     --Error_Handler.Set_Debug('Y');
411     --Opens Error_Handler debug session
412     --Open_Debug_Session;
413 
414     --After Open_Debug_Session, can log using Error_Handler.Write_Debug()
415     --Replace this with FND_FILE.put_line() if needed.
416     --Error_Handler.Write_Debug('G_USER_ID : '||TO_CHAR(G_USER_ID));
417     --Error_Handler.Write_Debug('G_PROG_ID : '||TO_CHAR(G_PROG_ID));
418     --Error_Handler.Write_Debug('G_REQUEST_ID : '||TO_CHAR(G_REQUEST_ID));
419     --Error_Handler.Write_Debug('P_RESULT_FMT_USAGE_ID : '||TO_CHAR(p_Resultfmt_Usage_Id));
420 
421 
422 --  Delete all the earlier uploads from the same spreadsheet.
423    /*
424     DELETE FROM  EGO_BULKLOAD_INTF
425     WHERE RESULTFMT_USAGE_ID = p_resultfmt_usage_id
426     AND PROCESS_STATUS <> 1;
427 */
428 
429     --Error_Handler.Write_Debug('About to populate the EBI with Trans IDs');
430     --Populate the Transaction IDs for current result fmt usage ID
431      --New Transaction ID. It will be replaced by old Transaction ID Seq.
432      --SET  transaction_id = MSII_TRANSACTION_ID_S.NEXTVAL
433     UPDATE EGO_BULKLOAD_INTF
434      SET  Transaction_Id = MTL_SYSTEM_ITEMS_INTERFACE_S.NEXTVAL
435     WHERE  Resultfmt_Usage_Id = p_Resultfmt_Usage_Id AND PROCESS_STATUS = 1 ;
436 
437     IF l_debug = 'Y' THEN
438       FND_FILE.PUT_LINE( FND_FILE.LOG,'Entering First Loop ');
439     END IF;
440 
441 
442 --  Get the Mapped Columns to a Table
443     i := 1;
444     FOR C_BOM_ATTRIBUTE_COLUMNS_REC IN C_BOM_ATTRIBUTE_COLUMNS
445      (
446        p_resultfmt_usage_id
447       )
448     LOOP
449       l_prod_col_name_tbl(i) := C_BOM_ATTRIBUTE_COLUMNS_REC.ATTRIBUTE_CODE;
450       l_intf_col_name_tbl(i) := C_BOM_ATTRIBUTE_COLUMNS_REC.INTF_COLUMN_NAME;
451       l_bom_col_name(i)      := C_BOM_ATTRIBUTE_COLUMNS_REC.BOM_INTF_COLUMN_NAME;
452       l_bom_tbl_name(i)      := C_BOM_ATTRIBUTE_COLUMNS_REC.BOM_INTF_TABLE_NAME;
453       l_bom_col_type(i)      := C_BOM_ATTRIBUTE_COLUMNS_REC.OPERATION_TYPE;
454 
455       IF (C_BOM_ATTRIBUTE_COLUMNS_REC.ATTRIBUTE_CODE = G_PARENT_NAME) THEN
456         l_parent_column := C_BOM_ATTRIBUTE_COLUMNS_REC.INTF_COLUMN_NAME;
457       END IF;
458       IF (C_BOM_ATTRIBUTE_COLUMNS_REC.ATTRIBUTE_CODE = G_ITEM_NAME) THEN
459         l_item_col_name := C_BOM_ATTRIBUTE_COLUMNS_REC.INTF_COLUMN_NAME;
460       END IF;
461       i := i+1;
462     END LOOP;
463 
464     IF l_debug = 'Y' THEN
465       FND_FILE.PUT_LINE( FND_FILE.LOG,'Exiting First Loop ');
466     END IF;
467 
468 
469 -- Process The Rows for BOM BO Header For Create and Update.
470     l_dyn_sql_insert := '';
471     l_dyn_sql_insert := l_dyn_sql_insert || 'INSERT INTO BOM_BILL_OF_MTLS_INTERFACE (REQUEST_ID, Transaction_Type ';
472     l_dyn_sql_insert := l_dyn_sql_insert || ', Transaction_Id, Process_Flag, Item_Number ';
473     l_dyn_sql_insert := l_dyn_sql_insert || ', Organization_Code, Alternate_Bom_Designator) ';
474 
475     l_dyn_sql_select := '';
476     l_dyn_sql_select := l_dyn_sql_select || ' SELECT REQUEST_ID, Transaction_Type, Transaction_Id, 1, ' || l_item_col_name;
477     l_dyn_sql_select := l_dyn_sql_select || ', ' || G_INTF_ORG_CODE;
478     l_dyn_sql_select := l_dyn_sql_select || ', DECODE(' || G_INTF_STRUCT_NAME || ',Bom_Globals.Retrieve_Message(''BOM'', ''BOM_PRIMARY''),NULL,' || G_INTF_STRUCT_NAME || ')';
479     l_dyn_sql_select := l_dyn_sql_select || ' FROM EGO_BULKLOAD_INTF WHERE RESULTFMT_USAGE_ID = :RESULTFMT_USAGE_ID ';
480     l_dyn_sql_select := l_dyn_sql_select || ' AND  PROCESS_STATUS = 1 AND ' || l_parent_column || ' IS NULL ';
481 
482     l_dyn_sql := l_dyn_sql_insert || ' ' || l_dyn_sql_select;
483 
484     IF l_debug = 'Y' THEN
485       FND_FILE.PUT_LINE( FND_FILE.LOG,'Entering First SQL 1' || l_dyn_sql);
486     END IF;
487 
488 
489     EXECUTE IMMEDIATE l_dyn_sql USING p_resultfmt_usage_id;
490 -- Header Data Ready
491 
492 -- Process Components for UPDATE
493     l_dyn_sql_insert := '';
494     l_dyn_sql_insert := l_dyn_sql_insert || 'INSERT INTO BOM_INVENTORY_COMPS_INTERFACE ( REQUEST_ID, Transaction_Type, Transaction_Id, Process_Flag, ';
495     l_dyn_sql_insert := l_dyn_sql_insert || 'ORGANIZATION_CODE, ALTERNATE_BOM_DESIGNATOR, COMPONENT_SEQUENCE_ID, ';
496     l_dyn_sql_select := '';
497     l_dyn_sql_select := l_dyn_sql_select || 'SELECT REQUEST_ID, TRANSACTION_TYPE, Transaction_Id, 1, ' || G_INTF_ORG_CODE || ', ';
498     l_dyn_sql_select := l_dyn_sql_select || 'DECODE(' || G_INTF_STRUCT_NAME || ',Bom_Globals.Retrieve_Message(''BOM'', ''BOM_PRIMARY''),NULL,' || G_INTF_STRUCT_NAME || '), ';
499     l_dyn_sql_select := l_dyn_sql_select || G_INTF_COMP_SEQ_ID || ', ';
500 
501     FOR i IN 1..l_prod_col_name_tbl.COUNT LOOP
502       IF (l_bom_col_name(i) IS NOT NULL) THEN
503       -- For Effectivity_Date, Operation_Seq_Num, and From_End_Unit_Number changes
504       -- we need to update the New_Effectivity_Date, New_Operation_Seq_Num,
505       -- and New_From_End_Unit_Number
506 
507 
508         IF (l_bom_col_name(i) = G_EFFECTIVITY_DATE) THEN
509           l_dyn_sql_insert := l_dyn_sql_insert || 'NEW_EFFECTIVITY_DATE,';
510           -- If the new effectivity date is same as the effectivity date in the database
511           -- then insert null other wise insert new value into the interface table.
512           l_str := 'DECODE(( SELECT To_Char(Effectivity_Date,''DD-MON-YYYY HH24:MI:SS'') FROM Bom_inventory_Components WHERE Component_Sequence_Id = ' || G_INTF_COMP_SEQ_ID || ')';
513           l_str := l_str || ',' || l_intf_col_name_tbl(i) ||',TO_DATE(NULL, ''DD-MON-YYYY HH24:MI:SS'')';
514           l_str := l_str || ',TO_DATE(' || l_intf_col_name_tbl(i) || ',''DD-MON-YYYY HH24:MI:SS'')),';
515           l_dyn_sql_select := l_dyn_sql_select || l_str;
516         ELSE
517             IF (l_bom_col_name(i) = G_OPERATION_SEQ_NUM) THEN
518               l_dyn_sql_insert := l_dyn_sql_insert || 'NEW_OPERATION_SEQ_NUM,';
519             ELSIF (l_bom_col_name(i) = G_FROM_END_ITEM_UNIT_NUMBER) THEN
520               l_dyn_sql_insert := l_dyn_sql_insert || 'NEW_FROM_END_ITEM_UNIT_NUMBER,';
521             ELSE
522               l_dyn_sql_insert := l_dyn_sql_insert || l_bom_col_name(i) || ',';
523             END IF;
524          -- As date values are coming as character values convert them as dates.
525             IF ((l_bom_col_type(i) IS NOT NULL) AND (l_bom_col_type(i) = 'DATETIME')) THEN
526               l_dyn_sql_select := l_dyn_sql_select || 'TO_DATE(' || l_intf_col_name_tbl(i) || ',''DD-MON-YYYY HH24:MI:SS''),';
527             ELSE
528               l_dyn_sql_select := l_dyn_sql_select || l_intf_col_name_tbl(i) || ',';
529             END IF;
530         END IF;
531 
532       END IF;
533     END LOOP;
534 
535     l_dyn_sql_insert := SUBSTR(l_dyn_sql_insert,0,LENGTH(l_dyn_sql_insert) - 1);
536     l_dyn_sql_select := SUBSTR(l_dyn_sql_select,0,LENGTH(l_dyn_sql_select) - 1);
537     l_dyn_sql_insert := l_dyn_sql_insert || ' ) ';
538     l_dyn_sql_select := l_dyn_sql_select || ' FROM EGO_BULKLOAD_INTF ';
539     l_dyn_sql_select := l_dyn_sql_select || ' WHERE RESULTFMT_USAGE_ID = :RESULTFMT_USAGE_ID ';
540     l_dyn_sql_select := l_dyn_sql_select || ' AND PROCESS_STATUS = 1 AND ' || l_parent_column || ' IS NOT NULL ';
541     l_dyn_sql_select := l_dyn_sql_select || ' AND Transaction_Type = ''' || G_TXN_UPDATE || ''' ';
542 
543     l_dyn_sql := l_dyn_sql_insert || ' ' || l_dyn_sql_select;
544 
545     IF l_debug = 'Y' THEN
546       FND_FILE.PUT_LINE( FND_FILE.LOG,'Entering SQL 2' || l_dyn_sql);
547     END IF;
548 
549     EXECUTE IMMEDIATE l_dyn_sql USING p_resultfmt_usage_id;
550 -- End of Process Components for UPDATE
551       IF l_debug = 'Y' THEN
552         FND_FILE.PUT_LINE( FND_FILE.LOG,'Executed Succesfully 2');
553       END IF;
554 
555 
556 -- Process Components for CREATE/ADD
557   -- Create Structure Header record if that is not available.
558   -- Comment this block if it is not required.
559     l_dyn_sql_cursor := '';
560     l_dyn_sql_cursor := l_dyn_sql_cursor || ' SELECT Distinct Transaction_Id, ' || l_parent_column ;
561     l_dyn_sql_cursor := l_dyn_sql_cursor || ' , ' || G_INTF_ORG_CODE;
562     l_dyn_sql_cursor := l_dyn_sql_cursor || ', DECODE(' || G_INTF_STRUCT_NAME || ', Bom_Globals.Retrieve_Message(''BOM'', ''BOM_PRIMARY''),NULL,' || G_INTF_STRUCT_NAME || ')';
563     l_dyn_sql_cursor := l_dyn_sql_cursor || ' FROM EGO_BULKLOAD_INTF WHERE Process_Status = 1';
564     l_dyn_sql_cursor := l_dyn_sql_cursor || ' AND Resultfmt_Usage_Id = :RESULTFMT_USAGE_ID ';
565     l_dyn_sql_cursor := l_dyn_sql_cursor || ' AND ' || l_parent_column || ' IS NOT NULL ';
566     l_dyn_sql_cursor := l_dyn_sql_cursor || ' AND (Transaction_Type = ''' || G_TXN_CREATE || ''' OR  Transaction_Type = ''' || G_TXN_ADD || ''' ';
567     l_dyn_sql_cursor := l_dyn_sql_cursor || ' OR Transaction_Type = ''' || G_TXN_SYNC || ''' )';
568 
569     IF l_debug = 'Y' THEN
570       FND_FILE.PUT_LINE( FND_FILE.LOG,'Entering SQL 2.1' || l_dyn_sql_cursor);
571     END IF;
572 
573     l_cursor_select := Dbms_Sql.Open_Cursor;
574     Dbms_Sql.Parse(l_cursor_select, l_dyn_sql_cursor, Dbms_Sql.NATIVE);
575     Dbms_Sql.Define_Column(l_cursor_select, 1, L_TRANSACTION_ID);
576     Dbms_Sql.Define_Column(l_cursor_select, 2, L_PARENT_NAME, 5000);
577     Dbms_Sql.Define_Column(l_cursor_select, 3, L_ORGANIZATION_CODE, 5000);
578     Dbms_Sql.Define_Column(l_cursor_select, 4, L_STRUCTURE_NAME, 5000);
579 
580     Dbms_Sql.Bind_Variable(l_cursor_select,':RESULTFMT_USAGE_ID', p_resultfmt_usage_id);
581 
582     IF l_debug = 'Y' THEN
583       FND_FILE.PUT_LINE( FND_FILE.LOG,'Entering SQL 2.2' || p_resultfmt_usage_id);
584     END IF;
585 
586 
587     l_cursor_execute := Dbms_Sql.EXECUTE(l_cursor_select);
588 
589     IF l_debug = 'Y' THEN
590       FND_FILE.PUT_LINE( FND_FILE.LOG,'SUCCESS');
591     END IF;
592     i := 1;
593     LOOP
594       IF (Dbms_Sql.Fetch_Rows(l_cursor_select) > 0) THEN
595         Dbms_Sql.Column_Value(l_cursor_select,1,L_TRANSACTION_ID);
596         Dbms_Sql.Column_Value(l_cursor_select,2,L_PARENT_NAME);
597         Dbms_Sql.Column_Value(l_cursor_select,3,L_ORGANIZATION_CODE);
598         Dbms_Sql.Column_Value(l_cursor_select,4,L_STRUCTURE_NAME);
599 
600         l_Org_Id := ORGANIZATION(L_ORGANIZATION_CODE);
601         l_Inv_Item_Id := Component_Item(l_Org_Id,L_PARENT_NAME);
602         l_Bill_Seq_Id := Bill_Sequence(l_Inv_Item_Id,L_STRUCTURE_NAME,l_Org_Id);
603         IF(l_Bill_Seq_Id IS NULL) THEN
604         INSERT INTO BOM_BILL_OF_MTLS_INTERFACE (
605             REQUEST_ID,
606             TRANSACTION_TYPE,
607             TRANSACTION_ID,
608             PROCESS_FLAG,
609             ITEM_NUMBER,
610             ORGANIZATION_CODE,
611             ALTERNATE_BOM_DESIGNATOR           )
612         VALUES                                 (
613             G_REQUEST_ID,
614             G_TXN_CREATE,
615             L_TRANSACTION_ID,
616             1,
617             L_PARENT_NAME,
618             L_ORGANIZATION_CODE,
619             L_STRUCTURE_NAME                   );
620         END IF;
621         i := i+ 1;
622       ELSE
623         EXIT;
624       END IF;
625     END LOOP;
626 
627     IF l_debug = 'Y' THEN
628       FND_FILE.PUT_LINE( FND_FILE.LOG,'Entering SQL 3' || l_dyn_sql);
629     END IF;
630 
631 
632     Dbms_Sql.Close_Cursor(l_cursor_select);
633   -- End of Creating Structure Header record if that is not available.
634 
635     l_dyn_sql_insert := '';
636     l_dyn_sql_insert := l_dyn_sql_insert || 'INSERT INTO BOM_INVENTORY_COMPS_INTERFACE ( REQUEST_ID, Transaction_Type, Transaction_Id, Process_Flag, ';
637     l_dyn_sql_insert := l_dyn_sql_insert || 'ORGANIZATION_CODE, ALTERNATE_BOM_DESIGNATOR, COMPONENT_SEQUENCE_ID, ';
638     l_dyn_sql_select := '';
639     l_dyn_sql_select := l_dyn_sql_select || 'SELECT REQUEST_ID, ''' || G_TXN_CREATE || ''', Transaction_Id, 1, ' || G_INTF_ORG_CODE || ', ';
640     l_dyn_sql_select := l_dyn_sql_select || 'DECODE(' || G_INTF_STRUCT_NAME || ',Bom_Globals.Retrieve_Message(''BOM'', ''BOM_PRIMARY''),NULL,' || G_INTF_STRUCT_NAME || '), ';
641     l_dyn_sql_select := l_dyn_sql_select || G_INTF_COMP_SEQ_ID || ', ';
642 
643     FOR i IN 1..l_prod_col_name_tbl.COUNT LOOP
644       IF (l_bom_col_name(i) IS NOT NULL) THEN
645         l_dyn_sql_insert := l_dyn_sql_insert || l_bom_col_name(i) || ',';
646 
647      -- As date values are coming as character values convert them as dates.
648         IF ((l_bom_col_type(i) IS NOT NULL) AND (l_bom_col_type(i) = 'DATETIME')) THEN
649           l_dyn_sql_select := l_dyn_sql_select || 'TO_DATE(' || l_intf_col_name_tbl(i) || ',''DD-MON-YYYY HH24:MI:SS''),';
650         ELSE
651           l_dyn_sql_select := l_dyn_sql_select || l_intf_col_name_tbl(i) || ',';
652         END IF;
653 
654       END IF;
655     END LOOP;
656 
657     l_dyn_sql_insert := SUBSTR(l_dyn_sql_insert,0,LENGTH(l_dyn_sql_insert) - 1);
658     l_dyn_sql_select := SUBSTR(l_dyn_sql_select,0,LENGTH(l_dyn_sql_select) - 1);
659     l_dyn_sql_insert := l_dyn_sql_insert || ' ) ';
660     l_dyn_sql_select := l_dyn_sql_select || ' FROM EGO_BULKLOAD_INTF ';
661     l_dyn_sql_select := l_dyn_sql_select || ' WHERE RESULTFMT_USAGE_ID = :RESULTFMT_USAGE_ID ';
662     l_dyn_sql_select := l_dyn_sql_select || ' AND PROCESS_STATUS = 1 AND ' || l_parent_column || ' IS NOT NULL ';
663 --    l_dyn_sql_select := l_dyn_sql_select || ' AND (Transaction_Type = ''' || G_TXN_CREATE || ''' OR  Transaction_Type = ''' || G_TXN_ADD || ''') ';
664 
665     l_dyn_sql_select := l_dyn_sql_select || ' AND (Transaction_Type = ''' || G_TXN_CREATE || ''' OR  Transaction_Type = ''' || G_TXN_ADD || ''' ';
666     l_dyn_sql_select := l_dyn_sql_select || ' OR Transaction_Type = ''' || G_TXN_SYNC || ''' )';
667 
668 
669     l_dyn_sql := l_dyn_sql_insert || ' ' || l_dyn_sql_select;
670 
671     IF l_debug = 'Y' THEN
672       FND_FILE.PUT_LINE( FND_FILE.LOG,'Entering SQL 4' || l_dyn_sql);
673     END IF;
674 
675     EXECUTE IMMEDIATE l_dyn_sql USING p_resultfmt_usage_id;
676 -- End of Process Components for CREATE/ADD
677 
678       IF l_debug = 'Y' THEN
679         FND_FILE.PUT_LINE( FND_FILE.LOG,'Executed Succesfully 4');
680       END IF;
681 
682 -- Start of process components for Delete
683     l_dyn_sql_insert := '';
684     l_dyn_sql_insert := l_dyn_sql_insert || 'INSERT INTO BOM_INVENTORY_COMPS_INTERFACE ( REQUEST_ID, Transaction_Type, Transaction_Id, Process_Flag, ';
685     l_dyn_sql_insert := l_dyn_sql_insert || 'ORGANIZATION_CODE, ALTERNATE_BOM_DESIGNATOR, COMPONENT_SEQUENCE_ID, ';
686     l_dyn_sql_insert := l_dyn_sql_insert || 'DELETE_GROUP_NAME, DG_DESCRIPTION, ';
687     l_dyn_sql_select := '';
688     l_dyn_sql_select := l_dyn_sql_select || 'SELECT REQUEST_ID, Transaction_Type, Transaction_Id, 1, ' || G_INTF_ORG_CODE || ', ';
689     l_dyn_sql_select := l_dyn_sql_select || 'DECODE(' || G_INTF_STRUCT_NAME || ',Bom_Globals.Retrieve_Message(''BOM'', ''BOM_PRIMARY''),NULL,' || G_INTF_STRUCT_NAME || '), ';
690     l_dyn_sql_select := l_dyn_sql_select || G_INTF_COMP_SEQ_ID || ', ';
691     l_dyn_sql_select := l_dyn_sql_select || '''' || G_DEL_GROUP_NAME || ''', ''' || G_DEL_GROUP_DESC || ''', ' ;
692 
693     FOR i IN 1..l_prod_col_name_tbl.COUNT LOOP
694       IF (l_bom_col_name(i) IS NOT NULL) THEN
695         l_dyn_sql_insert := l_dyn_sql_insert || l_bom_col_name(i) || ',';
696 
697      -- As date values are coming as character values convert them as dates.
698         IF ((l_bom_col_type(i) IS NOT NULL) AND (l_bom_col_type(i) = 'DATETIME')) THEN
699           l_dyn_sql_select := l_dyn_sql_select || 'TO_DATE(' || l_intf_col_name_tbl(i) || ',''DD-MON-YYYY HH24:MI:SS''),';
700         ELSE
701           l_dyn_sql_select := l_dyn_sql_select || l_intf_col_name_tbl(i) || ',';
702         END IF;
703 
704       END IF;
705     END LOOP;
706 
707     l_dyn_sql_insert := SUBSTR(l_dyn_sql_insert,0,LENGTH(l_dyn_sql_insert) - 1);
708     l_dyn_sql_select := SUBSTR(l_dyn_sql_select,0,LENGTH(l_dyn_sql_select) - 1);
709     l_dyn_sql_insert := l_dyn_sql_insert || ' ) ';
710     l_dyn_sql_select := l_dyn_sql_select || ' FROM EGO_BULKLOAD_INTF ';
711     l_dyn_sql_select := l_dyn_sql_select || ' WHERE RESULTFMT_USAGE_ID = :RESULTFMT_USAGE_ID ';
712     l_dyn_sql_select := l_dyn_sql_select || ' AND PROCESS_STATUS = 1 AND ' || l_parent_column || ' IS NOT NULL ';
713     l_dyn_sql_select := l_dyn_sql_select || ' AND Transaction_Type = ''' || G_TXN_DELETE || ''' ';
714 
715     l_dyn_sql := l_dyn_sql_insert || ' ' || l_dyn_sql_select;
716 
717     IF l_debug = 'Y' THEN
718       FND_FILE.PUT_LINE( FND_FILE.LOG,'Entering SQL 5' || l_dyn_sql);
719     END IF;
720 
721     EXECUTE IMMEDIATE l_dyn_sql USING p_resultfmt_usage_id;
722 -- End of process components for Delete
723 
724     IF l_debug = 'Y' THEN
725       FND_FILE.PUT_LINE( FND_FILE.LOG,'Before UPdate of AssemblyType');
726     END IF;
727 
728 -- Updateing the assembly_type to 2 for BOM_header
729     UPDATE BOM_BILL_OF_MTLS_INTERFACE set assembly_type = 2
730     where assembly_type is null;
731 
732     IF l_debug = 'Y' THEN
733       FND_FILE.PUT_LINE( FND_FILE.LOG,'After UPdate of AssemblyType');
734     END IF;
735 
736 -- iNSERT ROWS FOR PRIMARY ALTERNATE FOR creating primary bom if it doesn't exist
737 -- Also set the txn id for all those rows
738     FOR C_BOM_BILL_PRIMARY_REC IN C_BOM_BILL_PRIMARY
739      (
740        G_REQUEST_ID
741       )
742     LOOP
743       INSERT INTO BOM_BILL_OF_MTLS_INTERFACE
744       (
745         ASSEMBLY_ITEM_ID,
746         ORGANIZATION_ID,
747         ASSEMBLY_TYPE,
748         PROCESS_FLAG,
749         ORGANIZATION_CODE,
750         COMMON_ORG_CODE,
751         ITEM_NUMBER,
752         IMPLEMENTATION_DATE,
753         ALTERNATE_BOM_DESIGNATOR,
754         TRANSACTION_TYPE,
755         REQUEST_ID)
756       VALUES
757       (
758         C_BOM_BILL_PRIMARY_REC.ASSEMBLY_ITEM_ID,
759         C_BOM_BILL_PRIMARY_REC.ORGANIZATION_ID,
760         C_BOM_BILL_PRIMARY_REC.ASSEMBLY_TYPE,
761         C_BOM_BILL_PRIMARY_REC.PROCESS_FLAG,
762         C_BOM_BILL_PRIMARY_REC.ORGANIZATION_CODE,
763         C_BOM_BILL_PRIMARY_REC.COMMON_ORG_CODE,
764         C_BOM_BILL_PRIMARY_REC.ITEM_NUMBER,
765         C_BOM_BILL_PRIMARY_REC.IMPLEMENTATION_DATE,
766         NULL,
767         G_TXN_SYNC,
768         G_REQUEST_ID);
769     END LOOP;
770 
771 
772     UPDATE BOM_BILL_OF_MTLS_INTERFACE
773      SET  Transaction_Id = MTL_SYSTEM_ITEMS_INTERFACE_S.NEXTVAL
774     WHERE  REQUEST_ID = G_REQUEST_ID AND PROCESS_FLAG = 1
775     and Transaction_Id is null;
776 
777 
778 -- Call the BOM API TO PROCESS INTERFACE TABLES
779    l_err_return_code := bom_open_interface_api.import_bom
780       ( org_id    => 207 --Dummy value, all_org below carries precedence
781       , all_org   => 1
782       , err_text  => l_err_text
783       );
784 
785 
786     IF l_debug = 'Y' THEN
787       FND_FILE.PUT_LINE( FND_FILE.LOG,'Done Processing');
788     END IF;
789 
790     --Error_Handler.Write_Debug('Structure Import : UPDATE : l_err_text = ' || l_err_text);
791 
792 -- Call completion procedure
793     Structure_Intf_Proc_Complete
794     (
795       p_resultfmt_usage_id  => p_resultfmt_usage_id
796       ,x_errbuff             => l_errbuff
797       ,x_retcode             => l_retcode
798     );
799 
800     IF l_debug = 'Y' THEN
801       FND_FILE.PUT_LINE( FND_FILE.LOG,'Completed Processing');
802     END IF;
803 
804     --Error_Handler.Write_Debug('Updated the Process Status to Indicate Successful/Unsucessful component/structure Import Completion');
805 
806   EXCEPTION
807     WHEN OTHERS THEN
808     l_err_text := SQLERRM;
809       --Error_Handler.Write_Debug('WHEN OTHERS Exception.');
810       --Error_Handler.Write_Debug('error code : '|| TO_CHAR(SQLCODE));
811       --Error_Handler.Write_Debug('error text : '|| SQLERRM);
812       x_errbuff := 'Error : '||TO_CHAR(SQLCODE)||'---'||SQLERRM;
813       x_retcode := Error_Handler.G_STATUS_ERROR;
814       IF l_debug = 'Y' THEN
815         FND_FILE.PUT_LINE( FND_FILE.LOG,'Entering Exception Message ' || x_errbuff);
816         FND_FILE.PUT_LINE( FND_FILE.LOG,'Entering Exception Code' || x_retcode);
817       END IF;
818       Error_Handler.Close_Debug_Session;
819 
820 END PROCESS_BOM_INTERFACE_LINES;
821 
822 END EGO_BOM_BULKLOAD_PVT_PKG;