DBA Data[Home] [Help]

PACKAGE BODY: APPS.EGO_TA_BULKLOAD_PVT

Source


1 PACKAGE BODY EGO_TA_BULKLOAD_PVT AS
2 /* $Header: EGOVTABB.pls 120.6 2011/04/19 20:08:57 sreharih noship $ */
3 
4 -----=================Import_TA_Intf===============------
5 
6 PROCEDURE  Import_TA_Intf(
7              p_api_version             IN         NUMBER,
8              p_set_process_id          IN         NUMBER,
9              p_item_catalog_group_id   IN         NUMBER,
10              p_icc_version_number_intf IN         NUMBER,
11              p_icc_version_number_act  IN         NUMBER,
12              x_return_status           OUT NOCOPY VARCHAR2,
13              x_return_msg              OUT NOCOPY VARCHAR2)
14 IS
15 
16 l_return_status       VARCHAR2(1);
17 l_return_msg          VARCHAR2(2000);
18 l_ta_intf_tbl         TA_Intf_Tbl;
19 l_err_rec             NUMBER :=0;
20 l_rec_exists          NUMBER :=0;
21 l_proc_name           VARCHAR2(200) := 'Import_TA_Intf';
22 BEGIN
23 
24   ego_metadata_bulkload_pvt.Write_debug(G_PKG_NAME||'.'||l_proc_name||'->'||'Entering Import_TA_Intf');
25   ego_metadata_bulkload_pvt.Write_debug(G_PKG_NAME||'.'||l_proc_name||'->'||'Setting G_FLOW_TYPE=G_EGO_MD_INTF');
26   -- Initializing message --
27   FND_MSG_PUB.INITIALIZE;
28   -- setting flow type as interface
29   G_FLOW_TYPE:=G_EGO_MD_INTF;
30   x_return_status:=G_RET_STS_SUCCESS;
31 
32   /* has to be called through ICC versioning bulk validations.
33   -- Initializing transaction_id, Upper(Transaction_type and
34     -- setting G_APPLICATION_ID
35   Initialize(p_set_process_id,l_return_status);
36   --Bulk Validation on Interface table
37   Bulk_Validate_Trans_Attrs(p_set_process_id);
38   --*/
39   BEGIN
40      -- if any of the TA errored out during bulk,throw error
41      SELECT 1 INTO l_err_rec
42      FROM EGO_TRANS_ATTRS_VERS_INTF
43      WHERE item_catalog_group_id= p_item_catalog_group_id
44      AND   icc_version_number = p_icc_version_number_intf
45      AND   process_status=G_ERROR_RECORD --3
46 	 AND    ((p_set_process_id IS NULL) OR (set_process_id = p_set_process_id))
47      AND   ROWNUM=1;
48   EXCEPTION
49      WHEN No_Data_Found THEN
50       l_err_rec:=0;
51   END;
52 
53      IF l_err_rec=1 THEN
54        x_return_status:=G_RET_STS_ERROR;
55        RETURN ;
56      ELSE
57        -- checking if records are there to process or not
58        SELECT Count(1) INTO l_rec_exists
59        FROM EGO_TRANS_ATTRS_VERS_INTF
60        WHERE item_catalog_group_id= p_item_catalog_group_id
61        AND   icc_version_number= p_icc_version_number_intf
62        AND   process_status=G_PROCESS_RECORD
63 	   AND    ((p_set_process_id IS NULL) OR (set_process_id = p_set_process_id))
64 	   AND   ROWNUM=1;
65 
66        IF l_rec_exists=0 THEN -- if no record exists for TA
67          x_return_status:=G_RET_STS_SUCCESS;
68          RETURN;
69        ELSE
70          -- Loading records in pl-sql
71          Load_Trans_Attrs_recs(p_set_process_id    => p_set_process_id,
72                          p_item_catalog_group_id   => p_item_catalog_group_id,
73                          p_icc_version_number_intf => p_icc_version_number_intf,
74                          p_icc_version_number_act  => p_icc_version_number_act,
75                          x_ta_intf_tbl             => l_ta_intf_tbl,
76                          x_return_status           => l_return_status ,
77                          x_return_msg              => l_return_msg);
78 
79          -- Process_ta-- Main API which takes record table and do final transaction.
80          Process_Trans_Attrs(p_api_version         => p_api_version,
81                          p_ta_intf_tbl             => l_ta_intf_tbl,
82                          p_item_catalog_group_id   => p_item_catalog_group_id,
83                          p_icc_version_number_intf => p_icc_version_number_intf,
84                          p_icc_version_number_act  => p_icc_version_number_act,
85                          x_return_status           => l_return_status ,
86                          x_return_msg              => l_return_msg);
87 
88          x_return_status:=l_return_status;
89          x_return_msg:= l_return_msg;
90         -- RETURN; -- no need to return from here.
91        END IF ; --l_rec_exists=0
92      END IF;--l_err_rec=1
93   ego_metadata_bulkload_pvt.Write_debug(G_PKG_NAME||'.'||l_proc_name||'->'||'End Import_TA_Intf');
94 EXCEPTION
95 WHEN OTHERS THEN
96 x_return_status:=G_RET_STS_UNEXP_ERROR;
97 x_return_msg:= G_PKG_NAME||'.'||l_proc_name||'.'||SQLERRM;
98 ego_metadata_bulkload_pvt.Write_debug(G_PKG_NAME||'.'||l_proc_name||'->'||'Exception Import_TA_Intf');
99 END Import_TA_Intf ;
100 
101 ----=================Initialize =========-------
102 
103 PROCEDURE Initialize(
104             p_set_process_id IN         NUMBER,
105             x_return_status  OUT NOCOPY VARCHAR2)
106 IS
107 l_proc_name           VARCHAR2(200) := 'Initialize';
108 BEGIN
109 ego_metadata_bulkload_pvt.Write_debug(G_PKG_NAME||'.'||l_proc_name||'->'||'Entering Initialize');
110 
111   /*Sets the EGO application ID*/
112   SELECT application_id
113   INTO   G_APPLICATION_ID
114   FROM   fnd_application
115   WHERE  application_short_name = G_APP_NAME;
116 
117 
118   /*Sets the Transaction_id and upper case the transaction_type*/
119   UPDATE EGO_TRANS_ATTRS_VERS_INTF
120   SET    transaction_id     = mtl_system_items_interface_s.nextval,
121          transaction_type   = Upper(transaction_type),
122          created_by         = Nvl(created_by,g_user_id),
123          creation_date      = Nvl(creation_date,SYSDATE),
124          last_updated_by    = G_USER_ID,
125          last_update_date   = SYSDATE,
126          last_update_login  = G_LOGIN_ID,
127 	  /* bug 9752139*/
128          request_id             = G_REQUEST_ID,
129          program_application_id = G_PROG_APPL_ID,
130          program_id             = G_PROGRAM_ID   ,
131          program_update_date    = SYSDATE
132   WHERE  transaction_id IS NULL
133   AND    process_status = G_PROCESS_RECORD
134   AND    ((p_set_process_id IS NULL) OR (set_process_id = p_set_process_id));
135 
136  ego_metadata_bulkload_pvt.Write_debug(G_PKG_NAME||'.'||l_proc_name||'->'||SQL%ROWCOUNT||' Rows Initialize');
137  ego_metadata_bulkload_pvt.Write_debug(G_PKG_NAME||'.'||l_proc_name||'->'||'End Initialize');
138 EXCEPTION
139   WHEN OTHERS THEN
140   x_return_status:=G_RET_STS_ERROR;
141   ego_metadata_bulkload_pvt.Write_debug(G_PKG_NAME||'.'||l_proc_name||'->'||'When Others Exception while Initialize');
142 END Initialize;
143 
144 --=================Bulk_Validate_Trans_Attrs========
145 PROCEDURE  Bulk_Validate_Trans_Attrs (p_set_process_id   IN     NUMBER)
146 IS
147 l_proc_name           VARCHAR2(200) := 'Bulk_Validate_Trans_Attrs';
148 BEGIN
149    ego_metadata_bulkload_pvt.Write_debug(G_PKG_NAME||'.'||l_proc_name||'->'||'Entered Bulk_Validate_Trans_Attrs');
150    ego_metadata_bulkload_pvt.Write_debug(G_PKG_NAME||'.'||l_proc_name||'->'||'Checking valid transaction types');
151 
152    /* Invalid Transaction type */
153   G_MESSAGE_NAME := 'EGO_TRANS_TYPE_INVALID';
154   FND_MESSAGE.SET_NAME('EGO',G_MESSAGE_NAME);
155   G_MESSAGE_TEXT := fnd_message.get;
156 
157   INSERT INTO mtl_interface_errors(
158               transaction_id,
159               unique_id,
160               organization_id,
161               column_name,
162               table_name,
163               message_name,
164               error_message,
165               BO_IDENTIFIER,
166               ENTITY_IDENTIFIER,
167               last_update_date,
168               last_updated_by,
169               creation_date,
170               created_by,
171               last_update_login,
172               request_id,
173               program_application_id,
174               program_id,
175               program_update_date)
176        SELECT transaction_id,
177               mtl_system_items_interface_s.nextval,
178               NULL,
179               NULL,
180               'EGO_TRANS_ATTRS_VERS_INTF',
181               G_MESSAGE_NAME,
182               G_MESSAGE_TEXT,
183               G_BO_IDENTIFIER,
184               G_ENTITY_IDENTIFIER,
185               NVL(last_update_date,SYSDATE),
186               NVL(last_updated_by,G_USER_ID),
187               NVL(creation_date,SYSDATE),
188               NVL(created_by,G_USER_ID),
189               NVL(last_update_login,G_LOGIN_ID),
190               G_REQUEST_ID,
191               NVL(program_application_id,G_PROG_APPL_ID),
192               NVL(program_id,G_PROGRAM_ID),
193               NVL(program_update_date,SYSDATE)
194   FROM EGO_TRANS_ATTRS_VERS_INTF
195   WHERE ((transaction_type is NULL) or (transaction_type  NOT IN (G_CREATE,G_UPDATE,G_DELETE,G_SYNC)))
196   AND   transaction_id    IS NOT NULL
197   AND   process_status    =       G_PROCESS_RECORD
198   AND   ((p_set_process_id IS NULL) OR (set_process_id=p_set_process_id));
199 
200   /* Invalid Transaction type */
201   UPDATE EGO_TRANS_ATTRS_VERS_INTF
202   SET    process_status     =G_ERROR_RECORD,
203          last_updated_by      = G_USER_ID,
204          last_update_date     = SYSDATE,
205          last_update_login    = G_LOGIN_ID
206   WHERE  ((transaction_type is NULL) or (transaction_type  NOT IN (G_CREATE,G_UPDATE,G_DELETE,G_SYNC))) /* bug 9752139 */
207   AND    transaction_id    IS NOT NULL
208   AND    process_status=G_PROCESS_RECORD
209   AND    ((p_set_process_id IS NULL) OR (set_process_id=p_set_process_id));
210     -------------------------------------------
211   ego_metadata_bulkload_pvt.Write_debug(G_PKG_NAME||'.'||l_proc_name||'->'||'Calling Value_to_Id for ICC,Value Set and Attr name');
212 /* calling value to id for icc,valueset and attr name to id conversion*/
213 
214   Value_to_Id(p_set_process_id);
215 
216   -------------------------------------------
217   G_MESSAGE_NAME := 'EGO_NOT_SUPP_TRANS';
218   FND_MESSAGE.SET_NAME('EGO',G_MESSAGE_NAME);
219   G_MESSAGE_TEXT := fnd_message.get;
220    -- restricting updation and deletion right now as we are not supporting them for now
221    -- commenting this will allow update and delete valid cases work properly
222     INSERT INTO mtl_interface_errors(
223               transaction_id,
224               unique_id,
225               organization_id,
226               column_name,
227               table_name,
228               message_name,
229               error_message,
230               BO_IDENTIFIER,
231               ENTITY_IDENTIFIER,
232               last_update_date,
233               last_updated_by,
234               creation_date,
235               created_by,
236               last_update_login,
237               request_id,
238               program_application_id,
239               program_id,
240               program_update_date)
241        SELECT transaction_id,
242               mtl_system_items_interface_s.nextval,
243               NULL,
244               NULL,
245               'EGO_TRANS_ATTRS_VERS_INTF',
246               G_MESSAGE_NAME,
247               G_MESSAGE_TEXT,
248               G_BO_IDENTIFIER,
249               G_ENTITY_IDENTIFIER,
250               NVL(last_update_date,SYSDATE),
251               NVL(last_updated_by,G_USER_ID),
252               NVL(creation_date,SYSDATE),
253               NVL(created_by,G_USER_ID),
254               NVL(last_update_login,G_LOGIN_ID),
255               G_REQUEST_ID,
256               NVL(program_application_id,G_PROG_APPL_ID),
257               NVL(program_id,G_PROGRAM_ID),
258               NVL(program_update_date,SYSDATE)
259   FROM EGO_TRANS_ATTRS_VERS_INTF
260   WHERE transaction_type  IN (G_UPDATE,G_DELETE,G_SYNC)
261   AND   transaction_id    IS NOT NULL
262   AND   process_status    =  G_PROCESS_RECORD
263   AND   ((p_set_process_id IS NULL) OR (set_process_id=p_set_process_id));
264 
265   /* not supporting now */
266   UPDATE EGO_TRANS_ATTRS_VERS_INTF
267   SET    process_status     =G_ERROR_RECORD,
268          last_updated_by      = G_USER_ID,
269          last_update_date     = SYSDATE,
270          last_update_login    = G_LOGIN_ID
271   WHERE  transaction_type IN (G_UPDATE,G_DELETE,G_SYNC)
272   AND    transaction_id    IS NOT NULL
273   AND    process_status=G_PROCESS_RECORD
274   AND    ((p_set_process_id IS NULL) OR (set_process_id=p_set_process_id));
275 ---------------------------------------------------------
276   G_MESSAGE_NAME := 'EGO_NOT_SUPP_DFT_CREATE';
277   FND_MESSAGE.SET_NAME('EGO',G_MESSAGE_NAME);
278   G_MESSAGE_TEXT := fnd_message.get;
279   -- for now not supporting creation of TA for draft.
280   -- commenting this will allow create TA on draft version
281   INSERT INTO mtl_interface_errors(
282               transaction_id,
283               unique_id,
284               organization_id,
285               column_name,
286               table_name,
287               message_name,
288               error_message,
289               BO_IDENTIFIER,
290               ENTITY_IDENTIFIER,
291               last_update_date,
292               last_updated_by,
293               creation_date,
294               created_by,
295               last_update_login,
296               request_id,
297               program_application_id,
298               program_id,
299               program_update_date)
300        SELECT transaction_id,
301               mtl_system_items_interface_s.nextval,
302               NULL,
303               NULL,
304               'EGO_TRANS_ATTRS_VERS_INTF',
305               G_MESSAGE_NAME,
306               G_MESSAGE_TEXT,
307               G_BO_IDENTIFIER,
308               G_ENTITY_IDENTIFIER,
309               NVL(last_update_date,SYSDATE),
310               NVL(last_updated_by,G_USER_ID),
311               NVL(creation_date,SYSDATE),
312               NVL(created_by,G_USER_ID),
313               NVL(last_update_login,G_LOGIN_ID),
314               G_REQUEST_ID,
315               NVL(program_application_id,G_PROG_APPL_ID),
316               NVL(program_id,G_PROGRAM_ID),
317               NVL(program_update_date,SYSDATE)
318   FROM EGO_TRANS_ATTRS_VERS_INTF
319   WHERE transaction_type  IN (G_CREATE)
320   AND   transaction_id    IS NOT NULL
321   AND   icc_version_number=0
322   AND   process_status    =  G_PROCESS_RECORD
323   AND   ((p_set_process_id IS NULL) OR (set_process_id=p_set_process_id));
324 
325   /* not supporting now */
326   UPDATE EGO_TRANS_ATTRS_VERS_INTF
327   SET    process_status     =G_ERROR_RECORD,
328          last_updated_by      = G_USER_ID,
329          last_update_date     = SYSDATE,
330          last_update_login    = G_LOGIN_ID
331   WHERE transaction_type  IN (G_CREATE)
332   AND   transaction_id    IS NOT NULL
333   AND   icc_version_number=0
334   AND   process_status=G_PROCESS_RECORD
335   AND   ((p_set_process_id IS NULL) OR (set_process_id=p_set_process_id));
336 
337   --------------------------------------------------
338   --ego_metadata_bulkload_pvt.Write_debug(G_PKG_NAME||'.'||l_proc_name||'->'||' Checking ICC name provided doesnt exists in table');
339 
340  /* commented as now decided to process ICC one by one
341  so not validated ICC at table level as that not be there and set to 3*/
342   /*G_MESSAGE_NAME := 'EGO_ITEMCATALOG_INVALID';
343   FND_MESSAGE.SET_NAME('EGO',G_MESSAGE_NAME);
344   G_MESSAGE_TEXT := fnd_message.get;
345   INSERT INTO mtl_interface_errors(
346               transaction_id,
347               unique_id,
348               organization_id,
349               column_name,
350               table_name,
351               message_name,
352               error_message,
353               BO_IDENTIFIER,
354               ENTITY_IDENTIFIER,
355               last_update_date,
356               last_updated_by,
357               creation_date,
358               created_by,
359               last_update_login,
360               request_id,
361               program_application_id,
362               program_id,
363               program_update_date)
364        SELECT transaction_id,
365               mtl_system_items_interface_s.nextval,
366               NULL,
367               NULL,
368               'EGO_TRANS_ATTRS_VERS_INTF',
369               G_MESSAGE_NAME,
370               G_MESSAGE_TEXT,
371               G_BO_IDENTIFIER,
372               G_ENTITY_IDENTIFIER,
373               NVL(last_update_date,SYSDATE),
374               NVL(last_updated_by,G_USER_ID),
375               NVL(creation_date,SYSDATE),
376               NVL(created_by,G_USER_ID),
377               NVL(last_update_login,G_LOGIN_ID),
378               G_REQUEST_ID,
379               NVL(program_application_id,G_PROG_APPL_ID),
380               NVL(program_id,G_PROGRAM_ID),
381               NVL(program_update_date,SYSDATE)
382        FROM   EGO_TRANS_ATTRS_VERS_INTF
383        WHERE  item_catalog_group_id IS NULL
384        AND    item_catalog_group_name IS NOT NULL
385        AND    transaction_id    IS NOT NULL
386        AND    process_status    =       G_PROCESS_RECORD
387        AND    ((p_set_process_id IS NULL) OR (set_process_id=p_set_process_id));
388 
389   UPDATE EGO_TRANS_ATTRS_VERS_INTF
390   SET   process_status       = G_ERROR_RECORD,
391         last_updated_by      = G_USER_ID,
392         last_update_date     = SYSDATE,
393         last_update_login    = G_LOGIN_ID
394   WHERE item_catalog_group_id   IS NULL
395   AND   item_catalog_group_name IS NOT NULL
396   AND   transaction_id          IS NOT NULL
397   AND   process_status=G_PROCESS_RECORD
398   AND   ((p_set_process_id IS NULL) OR (set_process_id=p_set_process_id));*/
399 
400   ego_metadata_bulkload_pvt.Write_debug(G_PKG_NAME||'.'||l_proc_name||'->'||'Checking if both icc_id and icc_name are null');
401 
402   G_MESSAGE_NAME := 'EGO_ICC_REQUIRED_FIELD';
403   FND_MESSAGE.SET_NAME('EGO',G_MESSAGE_NAME);
404   G_MESSAGE_TEXT := fnd_message.get;
405   /* if both icc_id and icc_name are null*/
406   INSERT INTO mtl_interface_errors(
407               transaction_id,
408               unique_id,
409               organization_id,
410               column_name,
411               table_name,
412               message_name,
413               error_message,
414               BO_IDENTIFIER,
415               ENTITY_IDENTIFIER,
416               last_update_date,
417               last_updated_by,
418               creation_date,
419               created_by,
420               last_update_login,
421               request_id,
422               program_application_id,
423               program_id,
424               program_update_date)
425        SELECT transaction_id,
426               mtl_system_items_interface_s.nextval,
427               NULL,
428               NULL,
429               'EGO_TRANS_ATTRS_VERS_INTF',
430               G_MESSAGE_NAME,
431               G_MESSAGE_TEXT,
432               G_BO_IDENTIFIER,
433               G_ENTITY_IDENTIFIER,
434               NVL(last_update_date,SYSDATE),
435               NVL(last_updated_by,G_USER_ID),
436               NVL(creation_date,SYSDATE),
437               NVL(created_by,G_USER_ID),
438               NVL(last_update_login,G_LOGIN_ID),
439               G_REQUEST_ID,
440               NVL(program_application_id,G_PROG_APPL_ID),
441               NVL(program_id,G_PROGRAM_ID),
442               NVL(program_update_date,SYSDATE)
443        FROM   EGO_TRANS_ATTRS_VERS_INTF
444        WHERE  item_catalog_group_id IS NULL
445        AND    item_catalog_group_name IS NULL
446        AND    transaction_id    IS NOT NULL
447        AND    process_status    =       G_PROCESS_RECORD
448        AND    ((p_set_process_id IS NULL) OR (set_process_id=p_set_process_id));
449 
450     /* if both icc_id and icc_name are null*/
451   UPDATE EGO_TRANS_ATTRS_VERS_INTF
452   SET   process_status       = G_ERROR_RECORD,
453         last_updated_by      = G_USER_ID,
454         last_update_date     = SYSDATE,
455         last_update_login    = G_LOGIN_ID
456   WHERE item_catalog_group_id   IS NULL
457   AND   item_catalog_group_name IS NULL
458   AND   transaction_id          IS NOT NULL
459   AND   process_status=G_PROCESS_RECORD
460   AND   ((p_set_process_id IS NULL) OR (set_process_id=p_set_process_id));
461 
462 
463   ego_metadata_bulkload_pvt.Write_debug(G_PKG_NAME||'.'||l_proc_name||'->'||'Checking if passed icc_id dosent exists');
464 
465   G_MESSAGE_NAME := 'EGO_ITEMCATALOG_INVALID';
466   FND_MESSAGE.SET_NAME('EGO',G_MESSAGE_NAME);
467   G_MESSAGE_TEXT := fnd_message.get;
468    /* If passed icc_id dosent exists*/
469   INSERT INTO mtl_interface_errors(
470               transaction_id,
471               unique_id,
472               organization_id,
473               column_name,
474               table_name,
475               message_name,
476               error_message,
477               BO_IDENTIFIER,
478               ENTITY_IDENTIFIER,
479               last_update_date,
480               last_updated_by,
481               creation_date,
482               created_by,
483               last_update_login,
484               request_id,
485               program_application_id,
486               program_id,
487               program_update_date)
488        SELECT transaction_id,
489               mtl_system_items_interface_s.nextval,
490               NULL,
491               NULL,
492               'EGO_TRANS_ATTRS_VERS_INTF',
493               G_MESSAGE_NAME,
494               G_MESSAGE_TEXT,
495               G_BO_IDENTIFIER,
496               G_ENTITY_IDENTIFIER,
497               NVL(last_update_date,SYSDATE),
498               NVL(last_updated_by,G_USER_ID),
499               NVL(creation_date,SYSDATE),
500               NVL(created_by,G_USER_ID),
501               NVL(last_update_login,G_LOGIN_ID),
502               G_REQUEST_ID,
503               NVL(program_application_id,G_PROG_APPL_ID),
504               NVL(program_id,G_PROGRAM_ID),
505               NVL(program_update_date,SYSDATE)
506        FROM   EGO_TRANS_ATTRS_VERS_INTF ETAVI
507        WHERE  ETAVI.item_catalog_group_id IS NOT NULL
508        AND    NOT EXISTS (
509                     SELECT 1
510                     FROM mtl_item_catalog_groups micg
511                     WHERE micg.ITEM_CATALOG_GROUP_ID=ETAVI.ITEM_CATALOG_GROUP_ID)
512        AND    ETAVI.transaction_id    IS NOT NULL
513        AND    ETAVI.process_status    =       G_PROCESS_RECORD
514        AND    ((p_set_process_id IS NULL) OR (ETAVI.set_process_id=p_set_process_id));
515 
516    /* If passed icc_id dosent exists*/
517   UPDATE EGO_TRANS_ATTRS_VERS_INTF ETAVI
518   SET   ETAVI.process_status       = G_ERROR_RECORD,
519         ETAVI.last_updated_by      = G_USER_ID,
520         ETAVI.last_update_date     = SYSDATE,
521         ETAVI.last_update_login    = G_LOGIN_ID
522   WHERE ETAVI.item_catalog_group_id IS NOT NULL
523   AND   NOT EXISTS (
524                     SELECT 1
525                     FROM mtl_item_catalog_groups micg
526                     WHERE micg.ITEM_CATALOG_GROUP_ID=ETAVI.ITEM_CATALOG_GROUP_ID)
527   AND   ETAVI.transaction_id    IS NOT NULL
528   AND   ETAVI.process_status    =       G_PROCESS_RECORD
529   AND   ((p_set_process_id IS NULL) OR (ETAVI.set_process_id=p_set_process_id));
530    -------------------------------------------
531   ego_metadata_bulkload_pvt.Write_debug(G_PKG_NAME||'.'||l_proc_name||'->'||'Checking if VS name provided doesnt exists');
532 
533   G_MESSAGE_NAME := 'EGO_EF_NO_VALUE_SETS_FOUND';
534   FND_MESSAGE.SET_NAME('EGO',G_MESSAGE_NAME);
535   G_MESSAGE_TEXT := fnd_message.get;
536   /*if VS name provided doesnt exists in table */
537   INSERT INTO mtl_interface_errors(
538               transaction_id,
539               unique_id,
540               organization_id,
541               column_name,
542               table_name,
543               message_name,
544               error_message,
545               BO_IDENTIFIER,
546               ENTITY_IDENTIFIER,
547               last_update_date,
548               last_updated_by,
549               creation_date,
550               created_by,
551               last_update_login,
552               request_id,
553               program_application_id,
554               program_id,
555               program_update_date)
556        SELECT transaction_id,
557               mtl_system_items_interface_s.nextval,
558               NULL,
559               NULL,
560               'EGO_TRANS_ATTRS_VERS_INTF',
561               G_MESSAGE_NAME,
562               G_MESSAGE_TEXT,
563               G_BO_IDENTIFIER,
564               G_ENTITY_IDENTIFIER,
565               NVL(last_update_date,SYSDATE),
566               NVL(last_updated_by,G_USER_ID),
567               NVL(creation_date,SYSDATE),
568               NVL(created_by,G_USER_ID),
569               NVL(last_update_login,G_LOGIN_ID),
570               G_REQUEST_ID,
571               NVL(program_application_id,G_PROG_APPL_ID),
572               NVL(program_id,G_PROGRAM_ID),
573               NVL(program_update_date,SYSDATE)
574        FROM   EGO_TRANS_ATTRS_VERS_INTF
575        WHERE  value_set_id   IS NULL
576        AND    Value_set_name IS NOT NULL
577        AND    transaction_type IN (G_CREATE,G_UPDATE,G_SYNC)
578        AND    transaction_id IS NOT NULL
579        AND    process_status    =  G_PROCESS_RECORD
580        AND    ((p_set_process_id IS NULL) OR (set_process_id=p_set_process_id));
581 
582 
583   /*if value set name provided doesnt exists in table */
584   UPDATE EGO_TRANS_ATTRS_VERS_INTF
585   SET   process_status       = G_ERROR_RECORD,
586         last_updated_by      = G_USER_ID,
587         last_update_date     = SYSDATE,
588         last_update_login    = G_LOGIN_ID
589   WHERE value_set_id   IS NULL
590   AND   Value_set_name IS NOT NULL
591   AND   transaction_type IN (G_CREATE,G_UPDATE,G_SYNC)
592   AND   transaction_id IS NOT NULL
593   AND   process_status   =   G_PROCESS_RECORD
594   AND   ((p_set_process_id IS NULL) OR (set_process_id=p_set_process_id));
595 
596 
597   ego_metadata_bulkload_pvt.Write_debug(G_PKG_NAME||'.'||l_proc_name||'->'||'Checking if given value set id is valid or not');
598 
599   G_MESSAGE_NAME := 'EGO_EF_NO_VALUE_SETS_FOUND';
600   FND_MESSAGE.SET_NAME('EGO',G_MESSAGE_NAME);
601   G_MESSAGE_TEXT := fnd_message.get;
602   INSERT INTO mtl_interface_errors(
603               transaction_id,
604               unique_id,
605               organization_id,
606               column_name,
607               table_name,
608               message_name,
609               error_message,
610               BO_IDENTIFIER,
611               ENTITY_IDENTIFIER,
612               last_update_date,
613               last_updated_by,
614               creation_date,
615               created_by,
616               last_update_login,
617               request_id,
618               program_application_id,
619               program_id,
620               program_update_date)
621        SELECT transaction_id,
622               mtl_system_items_interface_s.nextval,
623               NULL,
624               NULL,
625               'EGO_TRANS_ATTRS_VERS_INTF',
626               G_MESSAGE_NAME,
627               G_MESSAGE_TEXT,
628               G_BO_IDENTIFIER,
629               G_ENTITY_IDENTIFIER,
630               NVL(last_update_date,SYSDATE),
631               NVL(last_updated_by,G_USER_ID),
632               NVL(creation_date,SYSDATE),
633               NVL(created_by,G_USER_ID),
634               NVL(last_update_login,G_LOGIN_ID),
635               G_REQUEST_ID,
636               NVL(program_application_id,G_PROG_APPL_ID),
637               NVL(program_id,G_PROGRAM_ID),
638               NVL(program_update_date,SYSDATE)
639        FROM   EGO_TRANS_ATTRS_VERS_INTF ETAVT
640        WHERE  value_set_id IS NOT NULL
641        AND    NOT EXISTS (
642                     SELECT 1
643                     FROM fnd_flex_value_sets  ffvs
644                     WHERE ffvs.flex_value_set_id = ETAVT.value_set_id)
645        AND    transaction_type IN (G_CREATE,G_UPDATE,G_SYNC)
646        AND    ETAVT.transaction_id    IS NOT NULL
647        AND    ETAVT.process_status    =       G_PROCESS_RECORD
648        AND    ((p_set_process_id IS NULL) OR (ETAVT.set_process_id=p_set_process_id));
649 
650     /*given value set id is valid or not*/
651   UPDATE EGO_TRANS_ATTRS_VERS_INTF ETAVT
652   SET   ETAVT.process_status       =G_ERROR_RECORD,
653         ETAVT.last_updated_by      = G_USER_ID,
654         ETAVT.last_update_date     = SYSDATE,
655         ETAVT.last_update_login    = G_LOGIN_ID
656   WHERE ETAVT.value_set_id IS NOT NULL
657   AND   NOT EXISTS (
658                     SELECT 1
659                     FROM fnd_flex_value_sets
660                     WHERE flex_value_set_id = ETAVT.value_set_id)
661   AND   transaction_type IN (G_CREATE,G_UPDATE,G_SYNC)
662   AND   ETAVT.transaction_id IS NOT NULL
663   AND   ETAVT.process_status = G_PROCESS_RECORD
664   AND   ((p_set_process_id IS NULL) OR (ETAVT.set_process_id=p_set_process_id));
665 
666    -------------------------------------------
667   ego_metadata_bulkload_pvt.Write_debug(G_PKG_NAME||'.'||l_proc_name||'->'||'Checking if given attr_name is valid');
668 
669   G_MESSAGE_NAME := 'EGO_ATTR_NOT_EXISTS';
670   FND_MESSAGE.SET_NAME('EGO',G_MESSAGE_NAME);
671   G_MESSAGE_TEXT := fnd_message.get;
672   /* Attrname provided is valid or not*/
673   INSERT INTO mtl_interface_errors(
674               transaction_id,
675               unique_id,
676               organization_id,
677               column_name,
678               table_name,
679               message_name,
680               error_message,
681               BO_IDENTIFIER,
682               ENTITY_IDENTIFIER,
683               last_update_date,
684               last_updated_by,
685               creation_date,
686               created_by,
687               last_update_login,
688               request_id,
689               program_application_id,
690               program_id,
691               program_update_date)
692        SELECT transaction_id,
693               mtl_system_items_interface_s.nextval,
694               NULL,
695               NULL,
696               'EGO_TRANS_ATTRS_VERS_INTF',
697               G_MESSAGE_NAME,
698               G_MESSAGE_TEXT,
699               G_BO_IDENTIFIER,
700               G_ENTITY_IDENTIFIER,
701               NVL(last_update_date,SYSDATE),
702               NVL(last_updated_by,G_USER_ID),
703               NVL(creation_date,SYSDATE),
704               NVL(created_by,G_USER_ID),
705               NVL(last_update_login,G_LOGIN_ID),
706               G_REQUEST_ID,
707               NVL(program_application_id,G_PROG_APPL_ID),
708               NVL(program_id,G_PROGRAM_ID),
709               NVL(program_update_date,SYSDATE)
710        FROM   EGO_TRANS_ATTRS_VERS_INTF
711        WHERE  attr_id IS NULL
712        AND    attr_name IS NOT NULL
713        AND    transaction_type IN (G_UPDATE,G_DELETE)
714        AND    transaction_id    IS NOT NULL
715        AND    process_status    =       G_PROCESS_RECORD
716        AND    ((p_set_process_id IS NULL) OR (set_process_id=p_set_process_id));
717 
718    /*if attr name provided doesnt exists in table */
719   UPDATE EGO_TRANS_ATTRS_VERS_INTF
720   SET   process_status       = G_ERROR_RECORD,
721         last_updated_by      = G_USER_ID,
722         last_update_date     = SYSDATE,
723         last_update_login    = G_LOGIN_ID
724   WHERE attr_id IS NULL
725   AND   attr_name IS NOT NULL
726   AND   transaction_type IN (G_UPDATE,G_DELETE)
727   AND   transaction_id  IS NOT NULL
728   AND   process_status = G_PROCESS_RECORD
729   AND   ((p_set_process_id IS NULL) OR (set_process_id=p_set_process_id));
730 
731   ego_metadata_bulkload_pvt.Write_debug(G_PKG_NAME||'.'||l_proc_name||'->'||'if attr_name is given with sync and not exists- convert to Create');
732    /* converting sync to create or update */
733      /* if attr_name is given with sync and not exists */
734      UPDATE EGO_TRANS_ATTRS_VERS_INTF ETAVT
735      SET   transaction_type     = G_CREATE,
736            last_updated_by      = G_USER_ID,
737            last_update_date     = SYSDATE,
738            last_update_login    = G_LOGIN_ID
739      WHERE attr_id   IS NULL
740      AND   attr_name IS NOT NULL
741      AND   transaction_type =G_SYNC
742      AND   transaction_id IS NOT NULL
743      AND   process_status = G_PROCESS_RECORD
744      AND   ((p_set_process_id IS NULL) OR (ETAVT.set_process_id=p_set_process_id));
745 
746   ego_metadata_bulkload_pvt.Write_debug(G_PKG_NAME||'.'||l_proc_name||'->'||'Checking if given attr_id is valid or not');
747 
748   G_MESSAGE_NAME := 'EGO_INVALID_TA';
749   FND_MESSAGE.SET_NAME('EGO',G_MESSAGE_NAME);
750   G_MESSAGE_TEXT := fnd_message.get;
751 	/*given attr_id is invalid or not*/
752   INSERT INTO mtl_interface_errors(
753               transaction_id,
754               unique_id,
755               organization_id,
756               column_name,
757               table_name,
758               message_name,
759               error_message,
760               BO_IDENTIFIER,
761               ENTITY_IDENTIFIER,
762               last_update_date,
763               last_updated_by,
764               creation_date,
765               created_by,
766               last_update_login,
767               request_id,
768               program_application_id,
769               program_id,
770               program_update_date)
771        SELECT transaction_id,
772               mtl_system_items_interface_s.nextval,
773               NULL,
774               NULL,
775               'EGO_TRANS_ATTRS_VERS_INTF',
776               G_MESSAGE_NAME,
777               G_MESSAGE_TEXT,
778               G_BO_IDENTIFIER,
779               G_ENTITY_IDENTIFIER,
780               NVL(last_update_date,SYSDATE),
781               NVL(last_updated_by,G_USER_ID),
782               NVL(creation_date,SYSDATE),
783               NVL(created_by,G_USER_ID),
784               NVL(last_update_login,G_LOGIN_ID),
785               G_REQUEST_ID,
786               NVL(program_application_id,G_PROG_APPL_ID),
787               NVL(program_id,G_PROGRAM_ID),
788               NVL(program_update_date,SYSDATE)
789        FROM   EGO_TRANS_ATTRS_VERS_INTF ETAVT
790        WHERE  attr_id IS NOT NULL
791        AND    NOT EXISTS (
792                     SELECT 1
793                     FROM EGO_TRANS_ATTR_VERS_B ETAVB
794                     WHERE ETAVB.attr_id = ETAVT.attr_id
795                     AND   ETAVB.item_catalog_group_id=ETAVT.item_catalog_group_id
796                     AND   ETAVB.icc_version_number=0)
797        AND    ETAVT.transaction_type IN (G_UPDATE,G_DELETE,G_SYNC)
798        AND    ETAVT.transaction_id    IS NOT NULL
799        AND    ETAVT.process_status    =       G_PROCESS_RECORD
800        AND    ((p_set_process_id IS NULL) OR (ETAVT.set_process_id=p_set_process_id));
801 
802   /*given attr id is valid or not*/
803   UPDATE EGO_TRANS_ATTRS_VERS_INTF ETAVT
804   SET   ETAVT.process_status       = G_ERROR_RECORD,
805         ETAVT.last_updated_by      = G_USER_ID,
806         ETAVT.last_update_date     = SYSDATE,
807         ETAVT.last_update_login    = G_LOGIN_ID
808   WHERE attr_id IS NOT NULL
809   AND   NOT EXISTS (
810                     SELECT 1
811                     FROM EGO_TRANS_ATTR_VERS_B ETAVB
812                     WHERE ETAVB.attr_id = ETAVT.attr_id
813                     AND   ETAVB.item_catalog_group_id=ETAVT.item_catalog_group_id
814                     AND   ETAVB.icc_version_number=0)
815   AND   ETAVT.transaction_type IN (G_UPDATE,G_DELETE,G_SYNC)
816   AND   ETAVT.transaction_id    IS NOT NULL
817   AND   ETAVT.process_status    =       G_PROCESS_RECORD
818   AND   ((p_set_process_id IS NULL) OR (ETAVT.set_process_id=p_set_process_id));
819 
820   ego_metadata_bulkload_pvt.Write_debug(G_PKG_NAME||'.'||l_proc_name||'->'||'Checking if attr_name given with sync - convert to Update');
821    /* if attr_name is given with sync and exists */
822      UPDATE EGO_TRANS_ATTRS_VERS_INTF ETAVT
823      SET   transaction_type     = G_UPDATE,
824            last_updated_by      = G_USER_ID,
825            last_update_date     = SYSDATE,
826            last_update_login    = G_LOGIN_ID
827      WHERE attr_id   IS NOT NULL
828      AND   EXISTS (
829                     SELECT 1
830                     FROM EGO_TRANS_ATTR_VERS_B ETAVB
831                     WHERE ETAVB.attr_id = ETAVT.attr_id
832                     AND   ETAVB.item_catalog_group_id=ETAVT.item_catalog_group_id
833                     AND   ETAVB.icc_version_number=0)
834      --AND   attr_name IS NOT NULL
835      AND   transaction_type =G_SYNC
836      AND   transaction_id IS NOT NULL
837      AND   process_status = G_PROCESS_RECORD
838      AND   ((p_set_process_id IS NULL) OR (ETAVT.set_process_id=p_set_process_id));
839 
840      ego_metadata_bulkload_pvt.Write_debug(G_PKG_NAME||'.'||l_proc_name||'->'||'Getting attr_name if only display_name is given');
841      /* if attr_display name and sync given and it got converted into
842       update as here we are sure we got the attr_id so populating attr_name
843       if not given*/
844      UPDATE EGO_TRANS_ATTRS_VERS_INTF ETAVT
845      SET    attr_name= (SELECT attr_name
846                            FROM ego_attrs_v  EAV
847                            WHERE EAV.attr_id= ETAVT.attr_id
848                            )
849      WHERE  ETAVT.attr_id IS NOT NULL
850      AND    ETAVT.attr_display_name IS NOT NULL
851      AND    ETAVT.transaction_type IN (G_UPDATE)
852      AND    ETAVT.process_status = G_PROCESS_RECORD
853      AND    ((p_set_process_id IS NULL) OR (set_process_id = p_set_process_id));
854 
855     ego_metadata_bulkload_pvt.Write_debug(G_PKG_NAME||'.'||l_proc_name||'->'||'Getting other metadata from main table if not provided by user to complete the record');
856      /* to copy rest of the meta data for same attr_id,icc_id and version */
857       UPDATE EGO_TRANS_ATTRS_VERS_INTF ETAVT
858       SET  (uom_class,
859             default_value,
860             rejected_value,
861             required_flag,
862             readonly_flag,
863             hidden_flag,
864             searchable_flag,
865             check_eligibility,
866             value_set_id,
867             attr_display_name,
868             sequence) =
869         (SELECT nvl(a.uom_class,b.uom_class),
870                 nvl(a.default_value,b.default_value),
871                 nvl(a.rejected_value,b.rejected_value),
872                 nvl(a.required_flag,b.required_flag),
873                 nvl(a.readonly_flag,b.readonly_flag),
874                 nvl(a.hidden_flag,b.hidden_flag),
875                 nvl(a.searchable_flag,b.searchable_flag),
876                 nvl(a.check_eligibility,b.check_eligibility),
877                 nvl(a.value_set_id,b.value_set_id),
878                 nvl(a.attr_display_name,b.attr_display_name),
879                 b.sequence
880          FROM   EGO_TRANS_ATTRS_VERS_INTF a,EGO_TRANS_ATTR_VERS_B b
881          WHERE  a.attr_id=b.attr_id
882          AND    a.item_catalog_group_id=b.item_catalog_group_id
883          AND    b.icc_version_number=0
884          AND    a.attr_id=ETAVT.attr_id)
885       WHERE attr_id IS NOT NULL
886       AND   ETAVT.attr_name IS NOT NULL
887       AND   ETAVT.transaction_type IN (G_UPDATE)
888       AND   ETAVT.process_status = G_PROCESS_RECORD
889       AND   ((p_set_process_id IS NULL) OR (set_process_id = p_set_process_id));
890 
891      -------------------------------------------
892   ego_metadata_bulkload_pvt.Write_debug(G_PKG_NAME||'.'||l_proc_name||'->'||'Checking given attr_display name is valid or not.');
893 
894   G_MESSAGE_NAME := 'EGO_ATTR_DISP_NAME_MISSING';
895   FND_MESSAGE.SET_NAME('EGO',G_MESSAGE_NAME);
896   G_MESSAGE_TEXT := fnd_message.get;
897   /* given attr_display name is valid or not and getting id or not */
898 
899   INSERT INTO mtl_interface_errors(
900               transaction_id,
901               unique_id,
902               organization_id,
903               column_name,
904               table_name,
905               message_name,
906               error_message,
907               BO_IDENTIFIER,
908               ENTITY_IDENTIFIER,
909               last_update_date,
910               last_updated_by,
911               creation_date,
912               created_by,
913               last_update_login,
914               request_id,
915               program_application_id,
916               program_id,
917               program_update_date)
918        SELECT transaction_id,
919               mtl_system_items_interface_s.nextval,
920               NULL,
921               NULL,
922               'EGO_TRANS_ATTRS_VERS_INTF',
923               G_MESSAGE_NAME,
924               G_MESSAGE_TEXT,
925               G_BO_IDENTIFIER,
926               G_ENTITY_IDENTIFIER,
927               NVL(last_update_date,SYSDATE),
928               NVL(last_updated_by,G_USER_ID),
929               NVL(creation_date,SYSDATE),
930               NVL(created_by,G_USER_ID),
931               NVL(last_update_login,G_LOGIN_ID),
932               G_REQUEST_ID,
933               NVL(program_application_id,G_PROG_APPL_ID),
934               NVL(program_id,G_PROGRAM_ID),
935               NVL(program_update_date,SYSDATE)
936        FROM   EGO_TRANS_ATTRS_VERS_INTF
937        WHERE  attr_id IS NULL
938        AND    attr_display_name  IS NOT NULL
939        AND    transaction_type   IN (G_UPDATE,G_DELETE)
940        AND    transaction_id     IS NOT NULL
941        AND    process_status     =       G_PROCESS_RECORD
942        AND    ((p_set_process_id IS NULL) OR (set_process_id=p_set_process_id));
943 
944 
945     /*if attr disp name provided doesnt exists in table */
946   UPDATE EGO_TRANS_ATTRS_VERS_INTF
947   SET   process_status       = G_ERROR_RECORD,
948         last_updated_by      = G_USER_ID,
949         last_update_date     = SYSDATE,
950         last_update_login    = G_LOGIN_ID
951   WHERE attr_id IS NULL
952   AND   attr_display_name IS NOT NULL
953   AND   transaction_type  IN (G_UPDATE,G_DELETE)
954   AND   transaction_id    IS NOT NULL
955   AND   process_status    =       G_PROCESS_RECORD
956   AND   ((p_set_process_id IS NULL) OR (set_process_id=p_set_process_id));
957 
958   ego_metadata_bulkload_pvt.Write_debug(G_PKG_NAME||'.'||l_proc_name||'->'||'If attr_display_name is given with sync and not exists- convert to Create .');
959     /* converting sync to create or update */
960      /* if attr_display_name is given with sync and not exists */
961      UPDATE EGO_TRANS_ATTRS_VERS_INTF ETAVT
962      SET   transaction_type     = G_CREATE,
963            last_updated_by      = G_USER_ID,
964            last_update_date     = SYSDATE,
965            last_update_login    = G_LOGIN_ID
966      WHERE attr_id   IS NULL
967      AND   attr_display_name IS NOT NULL
968      AND   transaction_type =G_SYNC
969      AND   transaction_id IS NOT NULL
970      AND   process_status = G_PROCESS_RECORD
971      AND   ((p_set_process_id IS NULL) OR (ETAVT.set_process_id=p_set_process_id));
972 
973   ego_metadata_bulkload_pvt.Write_debug(G_PKG_NAME||'.'||l_proc_name||'->'||'Checking if All Attr_name, Attr_Display_Name,Attr_id are NULL For Upd,Del,Sync');
974   /* if attr_name is null,attr_display_name is null and attr_id is null
975      with sync then error out */
976 
977   UPDATE EGO_TRANS_ATTRS_VERS_INTF
978   SET   process_status       =G_ERROR_RECORD,
979         last_updated_by      = G_USER_ID,
980         last_update_date     = SYSDATE,
981         last_update_login    = G_LOGIN_ID
982   WHERE attr_id IS NULL
983   AND   attr_display_name IS NULL
984   AND   attr_name IS NULL
985   AND   transaction_type  IN (G_UPDATE,G_DELETE,G_SYNC)
986   AND   transaction_id    IS NOT NULL
987   AND   process_status    =       G_PROCESS_RECORD
988   AND   ((p_set_process_id IS NULL) OR (set_process_id=p_set_process_id));
989 
990        -------------------------------------------
991   ego_metadata_bulkload_pvt.Write_debug(G_PKG_NAME||'.'||l_proc_name||'->'||'Checking if Association_id is Valid or not');
992 
993   G_MESSAGE_NAME := 'EGO_TA_ASSOC_FAILED';
994   FND_MESSAGE.SET_NAME('EGO',G_MESSAGE_NAME);
995   G_MESSAGE_TEXT := fnd_message.get;
996   /* Association id not able to convert in case of upate,delete,sync
997    or association id provided doesnt exists in table*/
998 
999   INSERT INTO mtl_interface_errors(
1000               transaction_id,
1001               unique_id,
1002               organization_id,
1003               column_name,
1004               table_name,
1005               message_name,
1006               error_message,
1007               BO_IDENTIFIER,
1008               ENTITY_IDENTIFIER,
1009               last_update_date,
1010               last_updated_by,
1011               creation_date,
1012               created_by,
1013               last_update_login,
1014               request_id,
1015               program_application_id,
1016               program_id,
1017               program_update_date)
1018        SELECT transaction_id,
1019               mtl_system_items_interface_s.nextval,
1020               NULL,
1021               NULL,
1022               'EGO_TRANS_ATTRS_VERS_INTF',
1023               G_MESSAGE_NAME,
1024               G_MESSAGE_TEXT,
1025               G_BO_IDENTIFIER,
1026               G_ENTITY_IDENTIFIER,
1027               NVL(last_update_date,SYSDATE),
1028               NVL(last_updated_by,G_USER_ID),
1029               NVL(creation_date,SYSDATE),
1030               NVL(created_by,G_USER_ID),
1031               NVL(last_update_login,G_LOGIN_ID),
1032               G_REQUEST_ID,
1033               NVL(program_application_id,G_PROG_APPL_ID),
1034               NVL(program_id,G_PROGRAM_ID),
1035               NVL(program_update_date,SYSDATE)
1036        FROM   EGO_TRANS_ATTRS_VERS_INTF
1037        WHERE  attr_id IS NOT NULL
1038        AND    item_catalog_group_id  IS NOT NULL
1039        AND    association_id IS NULL
1040        AND    transaction_type IN (G_UPDATE,G_DELETE,G_SYNC)
1041        AND    transaction_id    IS NOT NULL
1042        AND    process_status    =       G_PROCESS_RECORD
1043        AND    ((p_set_process_id IS NULL) OR (set_process_id=p_set_process_id));
1044 
1045 
1046   /*if not able to convert association id from given attr_id and icc_id
1047    in case of upd,del,sync */
1048   UPDATE EGO_TRANS_ATTRS_VERS_INTF
1049   SET   process_status       =G_ERROR_RECORD,
1050         last_updated_by      = G_USER_ID,
1051         last_update_date     = SYSDATE,
1052         last_update_login    = G_LOGIN_ID
1053   WHERE attr_id IS NOT NULL
1054   AND   item_catalog_group_id  IS NOT NULL
1055   AND   association_id IS NULL
1056   AND   transaction_type IN (G_UPDATE,G_DELETE,G_SYNC)
1057   AND   transaction_id    IS NOT NULL
1058   AND   process_status    =       G_PROCESS_RECORD
1059   AND   ((p_set_process_id IS NULL) OR (set_process_id=p_set_process_id));
1060 
1061 
1062   G_MESSAGE_NAME := 'EGO_ASSOC_ID_MISSING';
1063   FND_MESSAGE.SET_NAME('EGO',G_MESSAGE_NAME);
1064   G_MESSAGE_TEXT := fnd_message.get;
1065   /*given association is valid or not*/
1066   INSERT INTO mtl_interface_errors(
1067               transaction_id,
1068               unique_id,
1069               organization_id,
1070               column_name,
1071               table_name,
1072               message_name,
1073               error_message,
1074               BO_IDENTIFIER,
1075               ENTITY_IDENTIFIER,
1076               last_update_date,
1077               last_updated_by,
1078               creation_date,
1079               created_by,
1080               last_update_login,
1081               request_id,
1082               program_application_id,
1083               program_id,
1084               program_update_date)
1085        SELECT transaction_id,
1086               mtl_system_items_interface_s.nextval,
1087               NULL,
1088               NULL,
1089               'EGO_TRANS_ATTRS_VERS_INTF',
1090               G_MESSAGE_NAME,
1091               G_MESSAGE_TEXT,
1092               G_BO_IDENTIFIER,
1093               G_ENTITY_IDENTIFIER,
1094               NVL(last_update_date,SYSDATE),
1095               NVL(last_updated_by,G_USER_ID),
1096               NVL(creation_date,SYSDATE),
1097               NVL(created_by,G_USER_ID),
1098               NVL(last_update_login,G_LOGIN_ID),
1099               G_REQUEST_ID,
1100               NVL(program_application_id,G_PROG_APPL_ID),
1101               NVL(program_id,G_PROGRAM_ID),
1102               NVL(program_update_date,SYSDATE)
1103        FROM   EGO_TRANS_ATTRS_VERS_INTF ETAVT
1104        WHERE  attr_id IS NOT NULL
1105        AND    item_catalog_group_id  IS NOT NULL
1106        AND    association_id IS NOT NULL
1107        AND    NOT EXISTS (
1108                     SELECT 1
1109                     FROM  EGO_TRANS_ATTR_VERS_B ETAVB
1110                     WHERE ETAVB.association_id = ETAVT.association_id
1111                     AND   ETAVB.item_Catalog_group_id= ETAVT.item_Catalog_group_id
1112                     AND   ETAVB.icc_version_number=0)
1113        AND    ETAVT.transaction_type IN (G_UPDATE,G_DELETE,G_SYNC)
1114        AND    ETAVT.transaction_id   IS NOT NULL
1115        AND    ETAVT.process_status   =  G_PROCESS_RECORD
1116        AND    ((p_set_process_id IS NULL) OR (ETAVT.set_process_id=p_set_process_id));
1117 
1118       /*if association provided and it is not valid*/
1119   UPDATE EGO_TRANS_ATTRS_VERS_INTF ETAVT
1120   SET   process_status       =G_ERROR_RECORD,
1121         last_updated_by      = G_USER_ID,
1122         last_update_date     = SYSDATE,
1123         last_update_login    = G_LOGIN_ID
1124   WHERE attr_id IS NOT NULL
1125   AND   item_catalog_group_id  IS NOT NULL
1126   AND   association_id IS NOT NULL
1127   AND   NOT EXISTS (
1128                     SELECT 1
1129                     FROM EGO_TRANS_ATTR_VERS_B ETAVB
1130                     WHERE ETAVB.association_id = ETAVT.association_id
1131                     AND   ETAVB.item_Catalog_group_id= ETAVT.item_Catalog_group_id
1132                     AND ETAVB.icc_version_number=0)
1133   AND   transaction_type IN (G_UPDATE,G_DELETE,G_SYNC)
1134   AND   transaction_id    IS NOT NULL
1135   AND   process_status    =       G_PROCESS_RECORD
1136   AND   ((p_set_process_id IS NULL) OR (set_process_id=p_set_process_id));
1137 
1138     -------------------------------------------
1139 
1140   ego_metadata_bulkload_pvt.Write_debug(G_PKG_NAME||'.'||l_proc_name||'->'||'Checking  Metadata Flag Values');
1141 
1142   G_MESSAGE_NAME := 'EGO_METADATA_FLAGS_INVALID';
1143   FND_MESSAGE.SET_NAME('EGO',G_MESSAGE_NAME);
1144   G_MESSAGE_TEXT := fnd_message.get;
1145 
1146   INSERT INTO mtl_interface_errors(
1147               transaction_id,
1148               unique_id,
1149               organization_id,
1150               column_name,
1151               table_name,
1152               message_name,
1153               error_message,
1154               BO_IDENTIFIER,
1155               ENTITY_IDENTIFIER,
1156               last_update_date,
1157               last_updated_by,
1158               creation_date,
1159               created_by,
1160               last_update_login,
1161               request_id,
1162               program_application_id,
1163               program_id,
1164               program_update_date)
1165        SELECT transaction_id,
1166               mtl_system_items_interface_s.nextval,
1167               NULL,
1168               NULL,
1169               'EGO_TRANS_ATTRS_VERS_INTF',
1170               G_MESSAGE_NAME,
1171               G_MESSAGE_TEXT,
1172               G_BO_IDENTIFIER,
1173               G_ENTITY_IDENTIFIER,
1174               NVL(last_update_date,SYSDATE),
1175               NVL(last_updated_by,G_USER_ID),
1176               NVL(creation_date,SYSDATE),
1177               NVL(created_by,G_USER_ID),
1178               NVL(last_update_login,G_LOGIN_ID),
1179               G_REQUEST_ID,
1180               NVL(program_application_id,G_PROG_APPL_ID),
1181               NVL(program_id,G_PROGRAM_ID),
1182               NVL(program_update_date,SYSDATE)
1183   FROM  EGO_TRANS_ATTRS_VERS_INTF
1184   WHERE transaction_type IN (G_CREATE,G_UPDATE,G_DELETE,G_SYNC)
1185   AND   transaction_id    IS NOT NULL
1186   AND ((required_flag IS NOT NULL) OR (readonly_flag IS NOT NULL)
1187         OR (hidden_flag IS NOT NULL) OR (searchable_flag IS NOT NULL)
1188         OR (check_eligibility IS NOT NULL))
1189   AND  ( (required_flag NOT IN ('Y','N')) OR (readonly_flag NOT IN ('Y','N')) OR (hidden_flag NOT IN ('Y','N')) OR (searchable_flag NOT IN ('Y','N'))
1190         OR (check_eligibility NOT IN ('Y','N')))
1191   AND   process_status    =       G_PROCESS_RECORD
1192   AND   ((p_set_process_id IS NULL) OR (set_process_id=p_set_process_id));
1193 
1194         /*IF any of the flag has value other than 'Y' or 'N'*/
1195   UPDATE EGO_TRANS_ATTRS_VERS_INTF ETAVT
1196   SET   process_status       = G_ERROR_RECORD,
1197         last_updated_by      = G_USER_ID,
1198         last_update_date     = SYSDATE,
1199         last_update_login    = G_LOGIN_ID
1200   WHERE ((required_flag IS NOT NULL) OR (readonly_flag IS NOT NULL)
1201         OR (hidden_flag IS NOT NULL) OR (searchable_flag IS NOT NULL)
1202         OR (check_eligibility IS NOT NULL))
1203   AND   ((Upper(required_flag) NOT IN ('Y','N')) OR (Upper(readonly_flag) NOT IN ('Y','N'))
1204         OR (Upper(hidden_flag) NOT IN ('Y','N')) OR (Upper(searchable_flag) NOT IN ('Y','N'))
1205         OR (Upper(check_eligibility) NOT IN ('Y','N')))
1206   AND   transaction_type IN (G_CREATE,G_UPDATE,G_DELETE,G_SYNC)
1207   AND   transaction_id    IS NOT NULL
1208   AND   process_status    =       G_PROCESS_RECORD
1209   AND   ((p_set_process_id IS NULL) OR (set_process_id=p_set_process_id));
1210 
1211     -------------------------------------------
1212 
1213   ego_metadata_bulkload_pvt.Write_debug(G_PKG_NAME||'.'||l_proc_name||'->'||'Checking Valid Values for data type while CREATE');
1214 
1215   G_MESSAGE_NAME := 'EGO_DATA_TYPE_INVALID';
1216   FND_MESSAGE.SET_NAME('EGO',G_MESSAGE_NAME);
1217   G_MESSAGE_TEXT := fnd_message.get;
1218 
1219   INSERT INTO mtl_interface_errors(
1220               transaction_id,
1221               unique_id,
1222               organization_id,
1223               column_name,
1224               table_name,
1225               message_name,
1226               error_message,
1227               BO_IDENTIFIER,
1228               ENTITY_IDENTIFIER,
1229               last_update_date,
1230               last_updated_by,
1231               creation_date,
1232               created_by,
1233               last_update_login,
1234               request_id,
1235               program_application_id,
1236               program_id,
1237               program_update_date)
1238        SELECT transaction_id,
1239               mtl_system_items_interface_s.nextval,
1240               NULL,
1241               NULL,
1242               'EGO_TRANS_ATTRS_VERS_INTF',
1243               G_MESSAGE_NAME,
1244               G_MESSAGE_TEXT,
1245               G_BO_IDENTIFIER,
1246               G_ENTITY_IDENTIFIER,
1247               NVL(last_update_date,SYSDATE),
1248               NVL(last_updated_by,G_USER_ID),
1249               NVL(creation_date,SYSDATE),
1250               NVL(created_by,G_USER_ID),
1251               NVL(last_update_login,G_LOGIN_ID),
1252               G_REQUEST_ID,
1253               NVL(program_application_id,G_PROG_APPL_ID),
1254               NVL(program_id,G_PROGRAM_ID),
1255               NVL(program_update_date,SYSDATE)
1256   FROM  EGO_TRANS_ATTRS_VERS_INTF
1257   WHERE transaction_type  IN (G_CREATE)
1258   AND   transaction_id    IS NOT NULL
1259   AND   data_type         IS NOT NULL
1260   AND   Upper(data_type) NOT IN ('C','A','N','X','Y')
1261   AND   process_status    =       G_PROCESS_RECORD
1262   AND   ((p_set_process_id IS NULL) OR (set_process_id=p_set_process_id));
1263 
1264         /*if association provided and it is not valid*/
1265   UPDATE EGO_TRANS_ATTRS_VERS_INTF ETAVT
1266   SET   process_status       = G_ERROR_RECORD,
1267         last_updated_by      = G_USER_ID,
1268         last_update_date     = SYSDATE,
1269         last_update_login    = G_LOGIN_ID
1270   WHERE data_type    IS NOT NULL
1271   AND   Upper(data_type) NOT IN ('C','A','N','X','Y')
1272   AND   transaction_type IN (G_CREATE)
1273   AND   transaction_id    IS NOT NULL
1274   AND   process_status    =    G_PROCESS_RECORD
1275   AND   ((p_set_process_id IS NULL) OR (set_process_id=p_set_process_id));
1276 
1277     -------------------------------------------
1278 
1279   ego_metadata_bulkload_pvt.Write_debug(G_PKG_NAME||'.'||l_proc_name||'->'||'Checking Association_id and attr_id should be null while T_Type is CREATE');
1280 
1281   G_MESSAGE_NAME := 'EGO_INCRRCT_VAL_ASSO_ATTR_ID';
1282   FND_MESSAGE.SET_NAME('EGO',G_MESSAGE_NAME);
1283   G_MESSAGE_TEXT := fnd_message.get;
1284 
1285   INSERT INTO mtl_interface_errors(
1286               transaction_id,
1287               unique_id,
1288               organization_id,
1289               column_name,
1290               table_name,
1291               message_name,
1292               error_message,
1293               BO_IDENTIFIER,
1294               ENTITY_IDENTIFIER,
1295               last_update_date,
1296               last_updated_by,
1297               creation_date,
1298               created_by,
1299               last_update_login,
1300               request_id,
1301               program_application_id,
1302               program_id,
1303               program_update_date)
1304        SELECT transaction_id,
1305               mtl_system_items_interface_s.nextval,
1306               NULL,
1307               NULL,
1308               'EGO_TRANS_ATTRS_VERS_INTF',
1309               G_MESSAGE_NAME,
1310               G_MESSAGE_TEXT,
1311               G_BO_IDENTIFIER,
1312               G_ENTITY_IDENTIFIER,
1313               NVL(last_update_date,SYSDATE),
1314               NVL(last_updated_by,G_USER_ID),
1315               NVL(creation_date,SYSDATE),
1316               NVL(created_by,G_USER_ID),
1317               NVL(last_update_login,G_LOGIN_ID),
1318               G_REQUEST_ID,
1319               NVL(program_application_id,G_PROG_APPL_ID),
1320               NVL(program_id,G_PROGRAM_ID),
1321               NVL(program_update_date,SYSDATE)
1322        FROM   EGO_TRANS_ATTRS_VERS_INTF
1323        WHERE  transaction_type  IN (G_CREATE)
1324        AND    transaction_id    IS NOT NULL
1325        AND    process_status    =       G_PROCESS_RECORD
1326        AND    ((p_set_process_id IS NULL) OR (set_process_id=p_set_process_id))
1327        AND    ((Association_id IS NOT NULL) OR (Attr_id IS NOT NULL));
1328 
1329   /* Association_id and Attr_id should be NULL if CREATING TA */
1330   UPDATE EGO_TRANS_ATTRS_VERS_INTF
1331   SET    process_status       = G_ERROR_RECORD,
1332          last_updated_by      = G_USER_ID,
1333          last_update_date     = SYSDATE,
1334          last_update_login    = G_LOGIN_ID
1335   WHERE  transaction_type  IN (G_CREATE)
1336   AND    transaction_id    IS NOT NULL
1337   AND    process_status    =   G_PROCESS_RECORD
1338   AND    ((p_set_process_id IS NULL) OR (set_process_id=p_set_process_id))
1339   AND   ((Association_id IS NOT NULL) OR (Attr_id IS NOT NULL));
1340 
1341 -------------------------------------------
1342   ego_metadata_bulkload_pvt.Write_debug(G_PKG_NAME||'.'||l_proc_name||'->'||'Checking ATTR_NAME,ATTR_DISPLAY_NAME,SEQUENCE Should not be null while CREATE');
1343 
1344   G_MESSAGE_NAME := 'EGO_TA_PK_NULL';
1345   FND_MESSAGE.SET_NAME('EGO',G_MESSAGE_NAME);
1346   G_MESSAGE_TEXT := fnd_message.get;
1347   /* ATTR_NAME,ATTR_DISPLAY_NAME,SEQUENCE Should not be null if CREATE*/
1348   INSERT INTO mtl_interface_errors(
1349               transaction_id,
1350               unique_id,
1351               organization_id,
1352               column_name,
1353               table_name,
1354               message_name,
1355               error_message,
1356               BO_IDENTIFIER,
1357               ENTITY_IDENTIFIER,
1358               last_update_date,
1359               last_updated_by,
1360               creation_date,
1361               created_by,
1362               last_update_login,
1363               request_id,
1364               program_application_id,
1365               program_id,
1366               program_update_date)
1367        SELECT transaction_id,
1368               mtl_system_items_interface_s.nextval,
1369               NULL,
1370               NULL,
1371               'EGO_TRANS_ATTRS_VERS_INTF',
1372               G_MESSAGE_NAME,
1373               G_MESSAGE_TEXT,
1374               G_BO_IDENTIFIER,
1375               G_ENTITY_IDENTIFIER,
1376               NVL(last_update_date,SYSDATE),
1377               NVL(last_updated_by,G_USER_ID),
1378               NVL(creation_date,SYSDATE),
1379               NVL(created_by,G_USER_ID),
1380               NVL(last_update_login,G_LOGIN_ID),
1381               G_REQUEST_ID,
1382               NVL(program_application_id,G_PROG_APPL_ID),
1383               NVL(program_id,G_PROGRAM_ID),
1384               NVL(program_update_date,SYSDATE)
1385        FROM   EGO_TRANS_ATTRS_VERS_INTF
1386        WHERE  transaction_type  IN (G_CREATE)
1387        AND    transaction_id    IS NOT NULL
1388        AND    process_status    =   G_PROCESS_RECORD
1389        AND    ((p_set_process_id IS NULL) OR (set_process_id=p_set_process_id))
1390        AND    ((attr_name IS NULL) OR (attr_display_name IS NULL) OR (SEQUENCE IS NULL)) ;
1391 
1392   /* ATTR_NAME,ATTR_DISPLAY_NAME,SEQUENCE Should not be null if CREATE*/
1393   UPDATE EGO_TRANS_ATTRS_VERS_INTF
1394   SET    process_status       = G_ERROR_RECORD,
1395          last_updated_by      = G_USER_ID,
1396          last_update_date     = SYSDATE,
1397          last_update_login    = G_LOGIN_ID
1398   WHERE  transaction_type  IN (G_CREATE)
1399   AND    transaction_id    IS NOT NULL
1400   AND    process_status=G_PROCESS_RECORD
1401   AND    ((p_set_process_id IS NULL) OR (set_process_id=p_set_process_id))
1402   AND   ((attr_name IS NULL) OR (attr_display_name IS NULL) OR (SEQUENCE IS NULL));
1403 
1404 -------------------------------------------------
1405   ego_metadata_bulkload_pvt.Write_debug(G_PKG_NAME||'.'||l_proc_name||'->'||'Checking if ICC version is NULL while CREATE');
1406 
1407   G_MESSAGE_NAME := 'EGO_ICC_VERSION_NULL';
1408   FND_MESSAGE.SET_NAME('EGO',G_MESSAGE_NAME);
1409   G_MESSAGE_TEXT := fnd_message.get;
1410   /* ICC_VERSION NUMBER should not be NULL in CREATE flow */
1411   INSERT INTO mtl_interface_errors(
1412               transaction_id,
1413               unique_id,
1414               organization_id,
1415               column_name,
1416               table_name,
1417               message_name,
1418               error_message,
1419               BO_IDENTIFIER,
1420               ENTITY_IDENTIFIER,
1421               last_update_date,
1422               last_updated_by,
1423               creation_date,
1424               created_by,
1425               last_update_login,
1426               request_id,
1427               program_application_id,
1428               program_id,
1429               program_update_date)
1430        SELECT transaction_id,
1431               mtl_system_items_interface_s.nextval,
1432               NULL,
1433               NULL,
1434               'EGO_TRANS_ATTRS_VERS_INTF',
1435               G_MESSAGE_NAME,
1436               G_MESSAGE_TEXT,
1437               G_BO_IDENTIFIER,
1438               G_ENTITY_IDENTIFIER,
1439               NVL(last_update_date,SYSDATE),
1440               NVL(last_updated_by,G_USER_ID),
1441               NVL(creation_date,SYSDATE),
1442               NVL(created_by,G_USER_ID),
1443               NVL(last_update_login,G_LOGIN_ID),
1444               G_REQUEST_ID,
1445               NVL(program_application_id,G_PROG_APPL_ID),
1446               NVL(program_id,G_PROGRAM_ID),
1447               NVL(program_update_date,SYSDATE)
1448        FROM   EGO_TRANS_ATTRS_VERS_INTF
1449        WHERE  transaction_type  IN (G_CREATE)
1450        AND    transaction_id    IS NOT NULL
1451        AND    process_status    =       G_PROCESS_RECORD
1452        AND    ((p_set_process_id IS NULL) OR (set_process_id=p_set_process_id))
1453        AND    icc_version_number IS NULL;
1454        --AND    item_catalog_group_id IS NOT NULL;/* bug 9752139 */
1455 
1456   /* ICC_VERSION NUMBER should not be NULL in CREATE flow */
1457   UPDATE EGO_TRANS_ATTRS_VERS_INTF
1458   SET    process_status       = G_ERROR_RECORD,
1459          last_updated_by      = G_USER_ID,
1460          last_update_date     = SYSDATE,
1461          last_update_login    = G_LOGIN_ID
1462   WHERE  transaction_type  IN (G_CREATE)
1463   AND    transaction_id    IS NOT NULL
1464   AND    process_status    =   G_PROCESS_RECORD
1465   AND    ((p_set_process_id IS NULL) OR (set_process_id=p_set_process_id))
1466   AND    icc_version_number IS NULL;
1467   --AND    item_catalog_group_id IS NOT NULL; /* bug 9752139 */
1468 
1469 -------------------------------------------------
1470   ego_metadata_bulkload_pvt.Write_debug(G_PKG_NAME||'.'||l_proc_name||'->'||'Defaulting Data Type and Display Flag while CREATE');
1471 
1472  /*Defaulting data_type to'C' if not passed*/
1473   UPDATE EGO_TRANS_ATTRS_VERS_INTF
1474   SET    data_type = G_CHAR_DATA_TYPE
1475   WHERE  transaction_type=G_CREATE
1476   AND    transaction_id IS NOT NULL
1477   AND    process_status = G_PROCESS_RECORD
1478   AND    ((p_set_process_id IS NULL) OR (set_process_id = p_set_process_id))
1479   AND    data_type IS NULL;
1480 
1481  /*Sets the display_flag as 'T'*/
1482   UPDATE EGO_TRANS_ATTRS_VERS_INTF
1483   SET    display_flag = 'T'
1484   WHERE  transaction_type=G_CREATE
1485   AND    transaction_id IS NOT NULL
1486   AND    process_status = G_PROCESS_RECORD
1487   AND    ((p_set_process_id IS NULL) OR (set_process_id = p_set_process_id));
1488 
1489  /*Sets the Metadata_level as 'ICC'*/
1490   UPDATE EGO_TRANS_ATTRS_VERS_INTF
1491   SET    Metadata_level = 'ICC'
1492   WHERE  transaction_type=G_CREATE
1493   AND    transaction_id IS NOT NULL
1494   AND    process_status = G_PROCESS_RECORD
1495   AND    ((p_set_process_id IS NULL) OR (set_process_id = p_set_process_id));
1496 
1497    /*Assigning icc_version_no as 0 if not provided in update and delete*/
1498   UPDATE EGO_TRANS_ATTRS_VERS_INTF
1499   SET    icc_version_number = 0
1500   WHERE  transaction_type IN (G_UPDATE,G_DELETE)
1501   AND    transaction_id IS NOT NULL
1502   AND    process_status = G_PROCESS_RECORD
1503   AND    ((p_set_process_id IS NULL) OR (set_process_id = p_set_process_id))
1504   AND    icc_version_number IS NULL;
1505 
1506 
1507 -------------------------------------------------
1508   ego_metadata_bulkload_pvt.Write_debug(G_PKG_NAME||'.'||l_proc_name||'->'||'Icc_Version_Number greater than zero not allowed while UPDATE and DELETE');
1509 
1510   G_MESSAGE_NAME := 'EGO_VER_GR_ZERO';
1511   FND_MESSAGE.SET_NAME('EGO',G_MESSAGE_NAME);
1512   G_MESSAGE_TEXT := fnd_message.get;
1513   /* Icc_Version_Number greater than zero not allowed while UPDATE and DELETE*/
1514   INSERT INTO mtl_interface_errors(
1515               transaction_id,
1516               unique_id,
1517               organization_id,
1518               column_name,
1519               table_name,
1520               message_name,
1521               error_message,
1522               BO_IDENTIFIER,
1523               ENTITY_IDENTIFIER,
1524               last_update_date,
1525               last_updated_by,
1526               creation_date,
1527               created_by,
1528               last_update_login,
1529               request_id,
1530               program_application_id,
1531               program_id,
1532               program_update_date)
1533        SELECT transaction_id,
1534               mtl_system_items_interface_s.nextval,
1535               NULL,
1536               NULL,
1537               'EGO_TRANS_ATTRS_VERS_INTF',
1538               G_MESSAGE_NAME,
1539               G_MESSAGE_TEXT,
1540               G_BO_IDENTIFIER,
1541               G_ENTITY_IDENTIFIER,
1542               NVL(last_update_date,SYSDATE),
1543               NVL(last_updated_by,G_USER_ID),
1544               NVL(creation_date,SYSDATE),
1545               NVL(created_by,G_USER_ID),
1546               NVL(last_update_login,G_LOGIN_ID),
1547               G_REQUEST_ID,
1548               NVL(program_application_id,G_PROG_APPL_ID),
1549               NVL(program_id,G_PROGRAM_ID),
1550               NVL(program_update_date,SYSDATE)
1551        FROM   EGO_TRANS_ATTRS_VERS_INTF
1552        WHERE  transaction_type  IN (G_UPDATE,G_DELETE)
1553        AND    transaction_id    IS NOT NULL
1554        AND    process_status    =       G_PROCESS_RECORD
1555        AND    ((p_set_process_id IS NULL) OR (set_process_id=p_set_process_id))
1556        AND    icc_version_number>0;
1557 
1558   /* Icc_Version_Number greater than zero not allowed while UPDATE and DELETE*/
1559   UPDATE EGO_TRANS_ATTRS_VERS_INTF
1560   SET    process_status       = G_ERROR_RECORD,
1561          last_updated_by      = G_USER_ID,
1562          last_update_date     = SYSDATE,
1563          last_update_login    = G_LOGIN_ID
1564   WHERE  transaction_type  IN (G_UPDATE,G_DELETE)
1565   AND    transaction_id    IS NOT NULL
1566   AND    process_status=G_PROCESS_RECORD
1567   AND    ((p_set_process_id IS NULL) OR (set_process_id=p_set_process_id))
1568   AND   Nvl(icc_version_number,0)>0;
1569 
1570   -------------------------------------------------
1571   ego_metadata_bulkload_pvt.Write_debug(G_PKG_NAME||'.'||l_proc_name||'->'||'Association_id and attr_id should not be null for DELETE');
1572 
1573   G_MESSAGE_NAME := 'EGO_ASSO_ATTR_NULL_DEL';
1574   FND_MESSAGE.SET_NAME('EGO',G_MESSAGE_NAME);
1575   G_MESSAGE_TEXT := fnd_message.get;
1576   /*Association_id and attr_id should not be null for DELETE*/
1577   INSERT INTO mtl_interface_errors(
1578               transaction_id,
1579               unique_id,
1580               organization_id,
1581               column_name,
1582               table_name,
1583               message_name,
1584               error_message,
1585               BO_IDENTIFIER,
1586               ENTITY_IDENTIFIER,
1587               last_update_date,
1588               last_updated_by,
1589               creation_date,
1590               created_by,
1591               last_update_login,
1592               request_id,
1593               program_application_id,
1594               program_id,
1595               program_update_date)
1596        SELECT transaction_id,
1597               mtl_system_items_interface_s.nextval,
1598               NULL,
1599               NULL,
1600               'EGO_TRANS_ATTRS_VERS_INTF',
1601               G_MESSAGE_NAME,
1602               G_MESSAGE_TEXT,
1603               G_BO_IDENTIFIER,
1604               G_ENTITY_IDENTIFIER,
1605               NVL(last_update_date,SYSDATE),
1606               NVL(last_updated_by,G_USER_ID),
1607               NVL(creation_date,SYSDATE),
1608               NVL(created_by,G_USER_ID),
1609               NVL(last_update_login,G_LOGIN_ID),
1610               G_REQUEST_ID,
1611               NVL(program_application_id,G_PROG_APPL_ID),
1612               NVL(program_id,G_PROGRAM_ID),
1613               NVL(program_update_date,SYSDATE)
1614        FROM   EGO_TRANS_ATTRS_VERS_INTF
1615        WHERE  transaction_type  IN (G_DELETE)
1616        AND    transaction_id    IS NOT NULL
1617        AND    process_status    =       G_PROCESS_RECORD
1618        AND    ((p_set_process_id IS NULL) OR (set_process_id=p_set_process_id))
1619        AND    ((association_id IS NULL) OR (attr_id IS NULL));
1620 
1621   /*Association_id and attr_id should not be null for DELETE */
1622   UPDATE EGO_TRANS_ATTRS_VERS_INTF
1623   SET    process_status       = G_ERROR_RECORD,
1624          last_updated_by      = G_USER_ID,
1625          last_update_date     = SYSDATE,
1626          last_update_login    = G_LOGIN_ID
1627   WHERE  transaction_type  IN (G_DELETE)
1628   AND    transaction_id    IS NOT NULL
1629   AND    process_status    =   G_PROCESS_RECORD
1630   AND    ((p_set_process_id IS NULL) OR (set_process_id=p_set_process_id))
1631   AND   ((association_id IS NULL) OR (attr_id IS NULL));
1632 
1633   ego_metadata_bulkload_pvt.Write_debug(G_PKG_NAME||'.'||l_proc_name||'->'||'End Bulk_Validate_Trans_Attrs ');
1634 EXCEPTION
1635   WHEN OTHERS THEN
1636   ego_metadata_bulkload_pvt.Write_debug(G_PKG_NAME||'.'||l_proc_name||'->'||'Exception When Others Bulk_Validate_Trans_Attrs ');
1637 END Bulk_Validate_Trans_Attrs;
1638 
1639 --================= Bulk_Validate_Trans_Attrs_ICC ========----
1640 
1641 PROCEDURE Bulk_Validate_Trans_Attrs_ICC (
1642         p_set_process_id          IN         NUMBER,
1643         p_item_catalog_group_id   IN         NUMBER,
1644         p_item_catalog_group_name IN         VARCHAR2)
1645 IS
1646 l_proc_name           VARCHAR2(200) := 'Bulk_Validate_Trans_Attrs_ICC';
1647 BEGIN
1648 
1649   ego_metadata_bulkload_pvt.Write_debug(G_PKG_NAME||'.'||l_proc_name||'->'||'Entering Bulk_Validate_Trans_Attrs_ICC');
1650   ego_metadata_bulkload_pvt.Write_debug(G_PKG_NAME||'.'||l_proc_name||'->'||'Updating ICC name from ICC id');
1651   /* ICC name to ICC id conversion */
1652   UPDATE EGO_TRANS_ATTRS_VERS_INTF ETAVT
1653   SET item_catalog_group_id = p_item_catalog_group_id
1654   WHERE  ETAVT.item_catalog_group_name IS NOT NULL
1655   AND    ETAVT.item_catalog_group_id IS NULL
1656   AND    ETAVT.process_status = G_PROCESS_RECORD
1657   AND    ((p_set_process_id IS NULL) OR (set_process_id = p_set_process_id))
1658   AND     Upper(ETAVT.item_catalog_group_name) =Upper(p_item_catalog_group_name); -- added to make it ICC specific.
1659 
1660  ego_metadata_bulkload_pvt.Write_debug(G_PKG_NAME||'.'||l_proc_name||'->'||' End Bulk_Validate_Trans_Attrs_ICC');
1661 
1662 EXCEPTION
1663   WHEN OTHERS THEN
1664   ego_metadata_bulkload_pvt.Write_debug(G_PKG_NAME||'.'||l_proc_name||'->'||'Exception Bulk_Validate_Trans_Attrs_ICC');
1665 END Bulk_Validate_Trans_Attrs_ICC;
1666 
1667 
1668 --================= Value_to_Id ========----
1669 
1670 PROCEDURE Value_to_Id(
1671             p_set_process_id  IN            NUMBER)
1672 IS
1673 l_proc_name           VARCHAR2(200) := 'Value_to_Id';
1674 BEGIN
1675     ego_metadata_bulkload_pvt.Write_debug(G_PKG_NAME||'.'||l_proc_name||'->'||'Entering Value_to_Id');
1676   --ego_metadata_bulkload_pvt.Write_debug(G_PKG_NAME||'.'||l_proc_name||'->'||'Converting ICC name to ICC id');
1677   /* ICC name to ICC id conversion */
1678   /* NOt Req now are we are doing this in Bulk_Validate_Trans_Attrs_ICC */
1679   /*
1680   UPDATE EGO_TRANS_ATTRS_VERS_INTF ETAVT
1681   SET item_catalog_group_id = (SELECt icc_kfv.item_catalog_group_id
1682                                FROM   mtl_item_catalog_groups_kfv icc_kfv
1683                                where Upper(icc_kfv.concatenated_segments) = Upper(ETAVT.item_catalog_group_name)
1684                                )
1685   WHERE  ETAVT.item_catalog_group_name IS NOT NULL
1686   AND    ETAVT.item_catalog_group_id IS NULL
1687   --AND    ETAVT.transaction_type IN (G_CREATE,G_UPDATE,G_DELETE_G_SYNC)
1688   AND    ETAVT.process_status = G_PROCESS_RECORD
1689   AND ((p_set_process_id IS NULL) OR (set_process_id = p_set_process_id));*/
1690 
1691   ego_metadata_bulkload_pvt.Write_debug(G_PKG_NAME||'.'||l_proc_name||'->'||'Converting Value set name to value set id');
1692   /*Value set name to value set id conversion*/
1693   UPDATE EGO_TRANS_ATTRS_VERS_INTF ETAVT
1694   SET value_set_id = ( SELECT flex_value_set_id
1695                                 FROM fnd_flex_value_sets
1696                                 WHERE Upper(flex_value_set_name) = Upper(ETAVT.value_set_name)
1697                                )
1698   WHERE  ETAVT.value_set_name IS NOT NULL
1699   AND    ETAVT.value_set_id IS NULL
1700   AND    ETAVT.transaction_type IN (G_CREATE,G_UPDATE,G_SYNC)
1701   AND    ETAVT.process_status = G_PROCESS_RECORD
1702   AND ((p_set_process_id IS NULL) OR (set_process_id = p_set_process_id));
1703 
1704   ego_metadata_bulkload_pvt.Write_debug(G_PKG_NAME||'.'||l_proc_name||'->'||'Converting Attr_Name to Attr_id');
1705   /* Attr_Name to Attr_id conversion */
1706   UPDATE EGO_TRANS_ATTRS_VERS_INTF ETAVT
1707   SET (attr_id/*,attr_display_name,sequence*/) = ( SELECT attr_id/*,attr_display_name,sequence*/
1708                   FROM ego_trans_attr_vers_b
1709                   WHERE attr_id IN ( SELECT efdcue.attr_id
1710                                      FROM   fnd_descr_flex_column_usages fdfcu,
1711                                             ego_fnd_df_col_usgs_ext efdcue
1712                                      WHERE  fdfcu.application_id = efdcue.application_id
1713                                      AND fdfcu.descriptive_flexfield_name = efdcue.descriptive_flexfield_name
1714                                      AND fdfcu.descriptive_flex_context_code = efdcue.descriptive_flex_context_code
1715                                      AND fdfcu.application_column_name = efdcue.application_column_name
1716                                      AND fdfcu.application_id = G_APPLICATION_ID
1717                                      AND fdfcu.descriptive_flexfield_name = 'EGO_ITEM_TRANS_ATTR_GROUP'
1718                                      AND fdfcu.descriptive_flex_context_code IN (SELECT attr_group_name
1719                                                                                  FROM EGO_OBJ_ATTR_GRP_ASSOCS_V
1720                                                                                  WHERE association_id in (SELECT association_id
1721                                                                                                           FROM EGO_OBJ_AG_ASSOCS_B
1722                                                                                                           WHERE classification_code=ETAVT.item_catalog_group_id)
1723                                                                                  AND ATTR_GROUP_TYPE= 'EGO_ITEM_TRANS_ATTR_GROUP'
1724                                                                                  )
1725                                      AND Upper(fdfcu.end_user_column_name) = Upper(ETAVT.attr_name)
1726                                    )
1727                   AND item_catalog_group_id=ETAVT.item_catalog_group_id
1728                   AND icc_version_number=0 -- we only allow update on draft
1729                 )
1730   WHERE  ETAVT.attr_name IS NOT NULL
1731   AND    ETAVT.attr_id IS NULL
1732   AND    ETAVT.transaction_type IN (G_CREATE,G_UPDATE,G_DELETE,G_SYNC)
1733   AND    ETAVT.process_status = G_PROCESS_RECORD
1734   AND    ((p_set_process_id IS NULL) OR (set_process_id = p_set_process_id));
1735 
1736 
1737   ego_metadata_bulkload_pvt.Write_debug(G_PKG_NAME||'.'||l_proc_name||'->'||'Converting attr display name to attr_id ');
1738   /*attr display name to attr_id conversion*/
1739   UPDATE EGO_TRANS_ATTRS_VERS_INTF ETAVT
1740   SET    attr_id = ( SELECT attr_id
1741                      FROM EGO_TRANS_ATTR_VERS_B
1742                      WHERE Upper(attr_display_name) = Upper(ETAVT.attr_display_name)
1743                      AND item_catalog_group_id=ETAVT.item_catalog_group_id
1744                      AND icc_version_number=0
1745                    )
1746   WHERE  ETAVT.attr_display_name IS NOT NULL
1747   AND    ETAVT.attr_id IS NULL
1748   AND    ETAVT.transaction_type IN (G_CREATE,G_UPDATE,G_DELETE,G_SYNC)
1749   AND    ETAVT.process_status = G_PROCESS_RECORD
1750   AND    ((p_set_process_id IS NULL) OR (set_process_id = p_set_process_id));
1751 
1752   ego_metadata_bulkload_pvt.Write_debug(G_PKG_NAME||'.'||l_proc_name||'->'||'Converting associaton_id from icc_id,attr_id ');
1753   /* associaton_id from icc_id */
1754   UPDATE EGO_TRANS_ATTRS_VERS_INTF ETAVT
1755   SET    association_id = ( SELECT association_id
1756                             FROM EGO_TRANS_ATTR_VERS_B
1757                             WHERE attr_id= ETAVT.attr_id
1758                             AND   item_catalog_group_id=ETAVT.item_catalog_group_id
1759                             AND icc_version_number=0
1760                           )
1761   WHERE  ETAVT.attr_id IS NOT NULL
1762   AND    ETAVT.item_catalog_group_id IS NOT NULL
1763   AND    ETAVT.association_id IS NULL
1764   AND    ETAVT.icc_version_number=0
1765   AND    ETAVT.transaction_type IN (G_UPDATE,G_DELETE,G_SYNC)
1766   AND    ETAVT.process_status = G_PROCESS_RECORD
1767   AND    ((p_set_process_id IS NULL) OR (set_process_id = p_set_process_id));
1768 
1769   ego_metadata_bulkload_pvt.Write_debug(G_PKG_NAME||'.'||l_proc_name||'->'||'End Value_to_Id');
1770 EXCEPTION
1771   WHEN OTHERS THEN
1772   ego_metadata_bulkload_pvt.Write_debug(G_PKG_NAME||'.'||l_proc_name||'->'||'Exception Value_to_Id');
1773 END Value_to_Id;
1774 
1775 --=================Load_Trans_Attrs_recs ========
1776 
1777 PROCEDURE Load_Trans_Attrs_recs(
1778            p_set_process_id          IN            NUMBER,
1779            p_item_catalog_group_id   IN            NUMBER,
1780            p_icc_version_number_intf IN            NUMBER,
1781            p_icc_version_number_act  IN            NUMBER,
1782            x_ta_intf_tbl             IN OUT NOCOPY TA_Intf_Tbl,
1783            x_return_status           OUT    NOCOPY VARCHAR2,
1784            x_return_msg              OUT    NOCOPY VARCHAR2)
1785 IS
1786    CURSOR c_ta IS
1787       SELECT *
1788       FROM ego_trans_attrs_vers_intf
1789       WHERE ((p_set_process_id IS NULL) OR (set_process_id = p_set_process_id))
1790       AND transaction_id IS NOT NULL
1791       AND process_status=G_PROCESS_RECORD
1792       AND item_catalog_group_id=p_item_catalog_group_id /* for integration with version*/
1793       AND icc_version_number= p_icc_version_number_intf
1794       ORDER BY transaction_type,icc_version_number;
1795 
1796       l_proc_name VARCHAR2(30):= 'Load_Trans_Attrs_recs';
1797 
1798 BEGIN
1799   ego_metadata_bulkload_pvt.Write_debug(G_PKG_NAME||'.'||l_proc_name||'->'||'Entering Load_Trans_Attrs_recs');
1800 
1801   OPEN c_ta;
1802       FETCH c_ta BULK COLLECT INTO x_ta_intf_tbl; --LIMIT 2000;
1803   CLOSE c_ta;
1804   ego_metadata_bulkload_pvt.Write_debug(G_PKG_NAME||'.'||l_proc_name||'->'||'End Load_Trans_Attrs_recs.No of rec in intf pl-sql tbl :'||x_ta_intf_tbl.count );
1805 
1806 EXCEPTION
1807   WHEN OTHERS THEN
1808     x_return_status:= G_RET_STS_UNEXP_ERROR;
1809     x_return_msg:= G_PKG_NAME||'.'||l_proc_name||'.'||SQLERRM;
1810     ego_metadata_bulkload_pvt.Write_debug(G_PKG_NAME||'.'||l_proc_name||'->'||'Exception when Others in  Load_Trans_Attrs_recs');
1811 END Load_Trans_Attrs_recs;
1812 
1813 --=================convert_intf_rec_to_api_rec========
1814 
1815 PROCEDURE convert_intf_rec_to_api_rec (
1816            p_ta_intf_tbl      IN         TA_Intf_Tbl,
1817            x_ego_ta_tbl       OUT NOCOPY ego_tran_attr_tbl)
1818 IS
1819 l_proc_name           VARCHAR2(200) := 'convert_intf_rec_to_api_rec';
1820 BEGIN
1821   ego_metadata_bulkload_pvt.Write_debug(G_PKG_NAME||'.'||l_proc_name||'->'||'Entering convert_intf_rec_to_api_rec');
1822   ego_metadata_bulkload_pvt.Write_debug(G_PKG_NAME||'.'||l_proc_name||'->'||'Converting interface rec to prod rec type');
1823   -- Initializing table type
1824   x_ego_ta_tbl:=   EGO_TRAN_ATTR_TBL(NULL);
1825 
1826   FOR i IN p_ta_intf_tbl.first..p_ta_intf_tbl.last LOOP
1827 
1828   --x_ego_ta_tbl.extend;
1829   x_ego_ta_tbl(1):= ego_tran_attr_rec(  p_ta_intf_tbl(i).Association_Id,
1830                                         p_ta_intf_tbl(i).Attr_Id,
1831                                         p_ta_intf_tbl(i).icc_version_number,
1832                                         p_ta_intf_tbl(i).revision_id,
1833                                         p_ta_intf_tbl(i).SEQUENCE,
1834                                         p_ta_intf_tbl(i).Value_Set_Id,
1835                                         p_ta_intf_tbl(i).Uom_Class,
1836                                         p_ta_intf_tbl(i).default_value,
1837                                         p_ta_intf_tbl(i).Rejected_Value,
1838                                         p_ta_intf_tbl(i).Required_Flag,
1839                                         p_ta_intf_tbl(i).Readonly_Flag,
1840                                         p_ta_intf_tbl(i).Hidden_Flag,
1841                                         p_ta_intf_tbl(i).Searchable_Flag,
1842                                         p_ta_intf_tbl(i).Check_Eligibility,
1843                                         p_ta_intf_tbl(i).Inventory_Item_Id,
1844                                         p_ta_intf_tbl(i).Organization_Id,
1845                                         p_ta_intf_tbl(i).Metadata_Level,
1846                                         p_ta_intf_tbl(i).Created_By,
1847                                         p_ta_intf_tbl(i).Creation_Date,
1848                                         p_ta_intf_tbl(i).Last_Updated_By,
1849                                         p_ta_intf_tbl(i).Last_Update_Date,
1850                                         p_ta_intf_tbl(i).Last_Update_Login,
1851                                         p_ta_intf_tbl(i).Program_Application_Id,
1852                                         p_ta_intf_tbl(i).Program_Id,
1853                                         p_ta_intf_tbl(i).Program_Update_Date,
1854                                         p_ta_intf_tbl(i).Request_Id,
1855                                         p_ta_intf_tbl(i).Item_Catalog_Group_Id,
1856                                         p_ta_intf_tbl(i).Attr_Name,
1857                                         p_ta_intf_tbl(i).Attr_Display_Name,
1858                                         p_ta_intf_tbl(i).Data_Type,
1859                                         p_ta_intf_tbl(i).display_flag,
1860                                         p_ta_intf_tbl(i).Value_Set_Name
1861                                         );
1862 
1863   END LOOP;
1864   ego_metadata_bulkload_pvt.Write_debug(G_PKG_NAME||'.'||l_proc_name||'->'||'End convert_intf_rec_to_api_rec');
1865 EXCEPTION
1866   WHEN OTHERS THEN
1867   ego_metadata_bulkload_pvt.Write_debug(G_PKG_NAME||'.'||l_proc_name||'->'||'Exception when Others in convert_intf_rec_to_api_rec');
1868 END convert_intf_rec_to_api_rec;
1869 
1870 --=================Process_Trans_Attrs  ========
1871 PROCEDURE Process_Trans_Attrs (
1872            p_api_version             IN                NUMBER,
1873            p_ta_intf_tbl             IN OUT NOCOPY     TA_Intf_Tbl,
1874            p_item_catalog_group_id   IN                NUMBER,
1875            p_icc_version_number_intf IN                NUMBER,
1876            p_icc_version_number_act  IN                NUMBER,
1877            x_return_status           OUT NOCOPY        VARCHAR2,
1878            x_return_msg              OUT NOCOPY        VARCHAR2)
1879 IS
1880  l_ta_intf_rec ego_trans_attrs_vers_intf%ROWTYPE;
1881  l_ta_intf_tbl TA_Intf_Tbl;
1882  l_return_status VARCHAR2(1);
1883  l_proc_name     VARCHAR2(200):= 'Process_Trans_Attrs';
1884 BEGIN
1885    ego_metadata_bulkload_pvt.Write_debug(G_PKG_NAME||'.'||l_proc_name||'->'||'Entering Process_Trans_Attrs');
1886 
1887    /* when coming from Public API*/
1888    IF G_FLOW_TYPE=G_EGO_MD_API THEN
1889      ego_metadata_bulkload_pvt.Write_debug(G_PKG_NAME||'.'||l_proc_name||'->'||'In to API Flow');
1890      l_ta_intf_tbl:= p_ta_intf_tbl;
1891 
1892      ego_metadata_bulkload_pvt.Write_debug(G_PKG_NAME||'.'||l_proc_name||'->'||'Calling Construct_TA');
1893      /* same as initialize and value_to_id */
1894      Construct_Trans_Attrs(p_api_version=>p_api_version,
1895                     p_ta_intf_tbl     => l_ta_intf_tbl,
1896                     x_return_status   => x_return_status,
1897                     x_return_msg      => x_return_msg);
1898 
1899      ego_metadata_bulkload_pvt.Write_debug(G_PKG_NAME||'.'||l_proc_name||'->'||'Calling Validate_TA');
1900      /* same as bulk validation*/
1901      Validate_Trans_Attrs(p_api_version => p_api_version,
1902                   p_ta_intf_tbl       => l_ta_intf_tbl,
1903                   x_return_status     => x_return_status,
1904                   x_return_msg        => x_return_msg);
1905 
1906      p_ta_intf_tbl:= l_ta_intf_tbl;
1907    END IF;
1908    ego_metadata_bulkload_pvt.Write_debug(G_PKG_NAME||'.'||l_proc_name||'->'||'Loop for Transact_TA record by record');
1909    -- loop to transact record by record
1910    FOR i IN p_ta_intf_tbl.first..p_ta_intf_tbl.last LOOP
1911      /* Assigning intf record to process*/
1912      l_ta_intf_rec:=p_ta_intf_tbl(i);
1913        -- changing icc_version_number to actual as passed
1914        IF l_ta_intf_rec.TRANSACTION_type=G_CREATE THEN
1915           l_ta_intf_rec.icc_version_number:=p_icc_version_number_act;
1916        END IF ;
1917 
1918        Transact_Trans_Attrs(p_api_version     =>p_api_version,
1919                    p_ta_intf_rec     =>l_ta_intf_rec,
1920                    x_return_status   =>x_return_status,
1921                    x_return_msg      =>x_return_msg);
1922        -- changing icc_version_number back to intf so no change in interface table
1923        IF l_ta_intf_rec.TRANSACTION_type=G_CREATE THEN
1924           l_ta_intf_rec.icc_version_number:=p_icc_version_number_intf;
1925        END IF ;
1926 
1927      /*Assiging back to table after transact_ta */
1928      p_ta_intf_tbl(i):= l_ta_intf_rec;
1929 	   G_MESSAGE_TEXT:=x_return_msg;
1930 
1931      IF (Nvl(x_return_status,G_RET_STS_SUCCESS)= G_RET_STS_ERROR)
1932               OR (p_ta_intf_tbl(i).process_status=G_ERROR_RECORD) THEN
1933          -- LOG the error in interface table
1934          G_TOKEN_TBL(1).Token_Name   :=  'Entity_Name';
1935          G_TOKEN_TBL(1).Token_Value  :=  G_ENTITY_IDENTIFIER;
1936          G_TOKEN_TBL(2).Token_Name   :=  'Transaction_Type';
1937          G_TOKEN_TBL(2).Token_Value  :=  p_ta_intf_tbl(i).transaction_type;
1938          G_TOKEN_TBL(3).Token_Name   :=  'Package_Name';
1939          G_TOKEN_TBL(3).Token_Value  :=  'EGO_TRANSACTION_ATTRS_PVT';
1940          G_TOKEN_TBL(4).Token_Name   :=  'Proc_Name';
1941          SELECT Decode(p_ta_intf_tbl(i).transaction_type,'CREATE','Create_Transaction_Attribute',
1942                                                          'UPDATE','Update_Transaction_Attribute',
1943                                                          'DELETE','Delete_Transaction_Attribute') INTO G_TOKEN_TBL(4).Token_Value
1944          FROM dual;
1945 
1946          /* added p_addto_fnd_stack because in case of error ICC API will rollback the TA
1947             so messages will also get rollback. So if it get added to stack we can print and insert
1948             to interface_error table again*/
1949 
1950          Error_Handler.Add_Error_Message
1951              (
1952               p_message_name   =>  'EGO_ENTITY_API_FAILED'
1953              ,p_application_id =>  G_APP_NAME
1954              ,p_message_type   =>  G_RET_STS_ERROR
1955              ,p_entity_code    =>  G_Entity_Identifier
1956              ,p_row_identifier =>  p_ta_intf_tbl(i).transaction_id
1957              ,p_table_name     =>  G_Table_Name
1958              ,p_token_tbl      =>  G_TOKEN_TBL
1959 	     ,p_addto_fnd_stack=> 'Y'
1960              );
1961 
1962          G_TOKEN_TBL.DELETE;
1963 
1964          RETURN;
1965      END IF ;
1966    END LOOP;
1967   /* if record successful then update the intf table with success(7)*/
1968   IF G_FLOW_TYPE=G_EGO_MD_INTF THEN
1969      Update_Intf_Trans_Attrs(p_ta_intf_tbl    => p_ta_intf_tbl,
1970                              x_return_status  => l_return_status,
1971                              x_return_msg     => x_return_msg);
1972   END IF;
1973   ego_metadata_bulkload_pvt.Write_debug(G_PKG_NAME||'.'||l_proc_name||'->'||'End Process_Trans_Attrs');
1974 EXCEPTION
1975   WHEN OTHERS THEN
1976   x_return_status:= G_RET_STS_UNEXP_ERROR;
1977   x_return_msg:= G_PKG_NAME||'.'||l_proc_name||'.'||SQLERRM;
1978   ego_metadata_bulkload_pvt.Write_debug(G_PKG_NAME||'.'||l_proc_name||'->'||'Exception when others Process_Trans_Attrs');
1979 
1980 END Process_Trans_Attrs;
1981 
1982 --=================Construct_Trans_Attrs ========
1983 /* This is same as initialize and value_to_id during interface flow */
1984 PROCEDURE Construct_Trans_Attrs(
1985            p_api_version      IN         NUMBER,
1986            p_ta_intf_tbl      IN OUT NOCOPY  TA_Intf_Tbl,
1987            x_return_status    OUT NOCOPY VARCHAR2,
1988            x_return_msg       OUT NOCOPY VARCHAR2)
1989 IS
1990 l_proc_name VARCHAR2(200):='Construct_Trans_Attrs';
1991 BEGIN
1992   ego_metadata_bulkload_pvt.Write_debug(G_PKG_NAME||'.'||l_proc_name||'->'||'Entering Construct_Trans_Attrs');
1993 
1994 FOR i IN p_ta_intf_tbl.first..p_ta_intf_tbl.last LOOP
1995 
1996  IF (p_ta_intf_tbl(i).process_status = G_PROCESS_RECORD) THEN
1997 
1998 
1999      /* setting G_APPLICATION_ID*/
2000      SELECT application_id INTO   G_APPLICATION_ID
2001      FROM   fnd_application
2002      WHERE  application_short_name=G_APP_NAME;
2003 
2004     /*Sets the transaction_id*/
2005      SELECT mtl_system_items_interface_s.NEXTVAL,Upper(p_ta_intf_tbl(i).transaction_type)
2006      INTO   p_ta_intf_tbl(i).transaction_id,p_ta_intf_tbl(i).transaction_type
2007      FROM   dual;
2008 
2009      /* if not a valid transaction type*/
2010      IF p_ta_intf_tbl(i).transaction_type NOT IN (G_CREATE,G_UPDATE,G_DELETE,G_SYNC) THEN
2011         ego_metadata_bulkload_pvt.Write_debug(G_PKG_NAME||'.'||l_proc_name||'->'||'Transaction Type  '
2012                                                       ||p_ta_intf_tbl(i).transaction_type
2013                                                       ||'Is not Valid');
2014 
2015         p_ta_intf_tbl(i).process_status := G_ERROR_RECORD;
2016         x_return_status := G_RET_STS_ERROR;
2017         /*error_handler.Add_error_message(p_message_name => 'EGO_ICC_INVALID',p_application_id => 'EGO',
2018                                                 p_token_tbl => g_token_table,p_message_type => g_ret_sts_error,
2019                                                 p_row_identifier => P_ag_tbl(i).transaction_id,
2020                                                 p_entity_code => g_entity_ag,p_table_name => g_entity_ag_tab);*/
2021      END IF;
2022 
2023      ego_metadata_bulkload_pvt.Write_debug(G_PKG_NAME||'.'||l_proc_name||'->'||'Icc_name to Icc_id conversion');
2024 
2025      /* Getting ICC_id from icc_name */
2026      IF  (p_ta_intf_tbl(i).transaction_type IN (G_CREATE,G_UPDATE,G_DELETE,G_SYNC)
2027             AND p_ta_intf_tbl(i).item_catalog_group_id IS NULL
2028             AND p_ta_intf_tbl(i).item_catalog_group_name IS NOT  NULL) THEN
2029 
2030           BEGIN
2031              SELECt icc_kfv.item_catalog_group_id INTO p_ta_intf_tbl(i).item_catalog_group_id
2032              FROM   mtl_item_catalog_groups_kfv icc_kfv
2033              WHERE  Upper(icc_kfv.concatenated_segments) = Upper(p_ta_intf_tbl(i).item_catalog_group_name);
2034           EXCEPTION
2035             WHEN no_data_found THEN
2036                 ego_metadata_bulkload_pvt.Write_debug(G_PKG_NAME||'.'||l_proc_name||'->'||'ICC '
2037                                                       ||p_ta_intf_tbl(i).item_catalog_group_name
2038                                                       ||'does not exist in the system');
2039 
2040                 p_ta_intf_tbl(i).process_status := G_ERROR_RECORD;
2041                 x_return_status := G_RET_STS_ERROR;
2042                 /*error_handler.Add_error_message(p_message_name => 'EGO_ICC_INVALID',p_application_id => 'EGO',
2043                                                 p_token_tbl => g_token_table,p_message_type => g_ret_sts_error,
2044                                                 p_row_identifier => P_ag_tbl(i).transaction_id,
2045                                                 p_entity_code => g_entity_ag,p_table_name => g_entity_ag_tab);*/
2046             WHEN OTHERS THEN
2047               ego_metadata_bulkload_pvt.Write_debug(G_PKG_NAME||'.'||l_proc_name||'->'||'ICC_NAME to ICC_ID Exception when others');
2048               x_return_status := G_RET_STS_UNEXP_ERROR;
2049           END;
2050      END IF;/*icc_name to icc_id */
2051 
2052      ego_metadata_bulkload_pvt.Write_debug(G_PKG_NAME||'.'||l_proc_name||'->'||'Value_set_id from Value_set_name');
2053      /* Getting value_set_id from value_set_name */
2054      IF  (p_ta_intf_tbl(i).transaction_type IN (G_CREATE,G_UPDATE,G_DELETE,G_SYNC)
2055             AND p_ta_intf_tbl(i).value_set_id IS  NULL
2056             AND p_ta_intf_tbl(i).value_set_name IS NOT NULL) THEN
2057           BEGIN
2058              SELECT flex_value_set_id INTO p_ta_intf_tbl(i).value_set_id
2059              FROM fnd_flex_value_sets
2060              WHERE Upper(flex_value_set_name) = Upper(p_ta_intf_tbl(i).value_set_name);
2061           EXCEPTION
2062             WHEN no_data_found THEN
2063                 ego_metadata_bulkload_pvt.Write_debug(G_PKG_NAME||'.'||l_proc_name||'->'||'Value Set '
2064                                                       ||p_ta_intf_tbl(i).value_set_name
2065                                                       ||'does not exist in the system');
2066 
2067                 p_ta_intf_tbl(i).process_status := G_ERROR_RECORD;
2068                 x_return_status := G_RET_STS_ERROR;
2069                 /*error_handler.Add_error_message(p_message_name => 'EGO_ICC_INVALID',p_application_id => 'EGO',
2070                                                 p_token_tbl => g_token_table,p_message_type => g_ret_sts_error,
2071                                                 p_row_identifier => P_ag_tbl(i).transaction_id,
2072                                                 p_entity_code => g_entity_ag,p_table_name => g_entity_ag_tab);*/
2073             WHEN OTHERS THEN
2074               ego_metadata_bulkload_pvt.Write_debug(G_PKG_NAME||'.'||l_proc_name||'->'||'Value Set Name to ID Exception when others');
2075               x_return_status := G_RET_STS_UNEXP_ERROR;
2076           END;
2077      END IF;/*value_set_name to value_set_id */
2078 
2079      ego_metadata_bulkload_pvt.Write_debug(G_PKG_NAME||'.'||l_proc_name||'->'||'Getting Attr_id from Attr_name');
2080      /* Getting Attr_id from Attr_name */
2081      IF  (p_ta_intf_tbl(i).transaction_type IN (G_CREATE,G_UPDATE,G_DELETE,G_SYNC)
2082             AND p_ta_intf_tbl(i).attr_id IS  NULL
2083             AND p_ta_intf_tbl(i).attr_name IS NOT NULL) THEN
2084 
2085 			BEGIN
2086              SELECT attr_id  INTO p_ta_intf_tbl(i).attr_id
2087              FROM EGO_TRANS_ATTR_VERS_B
2088              WHERE attr_id IN ( SELECT efdcue.attr_id
2089                                 FROM   fnd_descr_flex_column_usages fdfcu,
2090                                        ego_fnd_df_col_usgs_ext efdcue
2091                                  WHERE  fdfcu.application_id = efdcue.application_id
2092                                  AND fdfcu.descriptive_flexfield_name = efdcue.descriptive_flexfield_name
2093                                  AND fdfcu.descriptive_flex_context_code = efdcue.descriptive_flex_context_code
2094                                  AND fdfcu.application_column_name = efdcue.application_column_name
2095                                  AND fdfcu.application_id = G_APPLICATION_ID
2096                                  AND fdfcu.descriptive_flexfield_name = 'EGO_ITEM_TRANS_ATTR_GROUP'
2097                                  AND fdfcu.descriptive_flex_context_code IN (SELECT attr_group_name
2098                                                                              FROM EGO_OBJ_ATTR_GRP_ASSOCS_V
2099                                                                              WHERE association_id in (SELECT association_id
2100                                                                                                       FROM EGO_OBJ_AG_ASSOCS_B
2101                                                                                                       WHERE classification_code=p_ta_intf_tbl(i).item_catalog_group_id)
2102                                                                              AND ATTR_GROUP_TYPE= 'EGO_ITEM_TRANS_ATTR_GROUP'
2103                                                                                  )
2104                                      AND Upper(fdfcu.end_user_column_name) = Upper(p_ta_intf_tbl(i).attr_name)
2105                                    )
2106              AND item_catalog_group_id=p_ta_intf_tbl(i).item_catalog_group_id
2107              AND icc_version_number=0; -- we only allow update on draft;
2108 
2109           EXCEPTION
2110             WHEN no_data_found THEN
2111               IF (p_ta_intf_tbl(i).transaction_type = G_SYNC) THEN
2112                   p_ta_intf_tbl(i).transaction_type := G_CREATE;
2113               ELSE
2114                 ego_metadata_bulkload_pvt.Write_debug(G_PKG_NAME||'.'||l_proc_name||'->'||'Attribute Name'
2115                                                       ||p_ta_intf_tbl(i).attr_name
2116                                                       ||'does not exist in the system');
2117 
2118                 p_ta_intf_tbl(i).process_status := G_ERROR_RECORD;
2119                 x_return_status := G_RET_STS_ERROR;
2120                 /*error_handler.Add_error_message(p_message_name => 'EGO_ICC_INVALID',p_application_id => 'EGO',
2121                                                 p_token_tbl => g_token_table,p_message_type => g_ret_sts_error,
2122                                                 p_row_identifier => P_ag_tbl(i).transaction_id,
2123                                                 p_entity_code => g_entity_ag,p_table_name => g_entity_ag_tab);*/
2124               END IF;
2125             WHEN OTHERS THEN
2126               ego_metadata_bulkload_pvt.Write_debug(G_PKG_NAME||'.'||l_proc_name||'->'||'Attribute Name to ID Exception when others');
2127               x_return_status := G_RET_STS_UNEXP_ERROR;
2128           END;
2129      END IF; /*attr_name to attr_id */
2130 
2131      ego_metadata_bulkload_pvt.Write_debug(G_PKG_NAME||'.'||l_proc_name||'->'||'Getting Attr_id from Attr_Display_name');
2132      /* Getting Attr_id from Attr_Display_name */
2133      IF  (p_ta_intf_tbl(i).transaction_type IN (G_CREATE,G_UPDATE,G_DELETE,G_SYNC)
2134             AND p_ta_intf_tbl(i).attr_id IS NULL
2135             AND p_ta_intf_tbl(i).attr_display_name IS NOT NULL
2136             AND p_ta_intf_tbl(i).attr_name IS NULL)/* extra condition becoz if attr_name is given then i could have*/
2137             THEN                                  /* resolved sync and get the attr_id in previour attr_name to attr_id*/
2138 
2139           BEGIN
2140              SELECT attr_id INTO p_ta_intf_tbl(i).attr_id
2141              FROM EGO_TRANS_ATTR_VERS_B
2142              WHERE Upper(attr_display_name) = Upper(p_ta_intf_tbl(i).attr_display_name)
2143              AND item_catalog_group_id=p_ta_intf_tbl(i).item_catalog_group_id
2144              AND icc_version_number=0;
2145 
2146 
2147           EXCEPTION
2148             WHEN no_data_found THEN
2149               IF (p_ta_intf_tbl(i).transaction_type = G_SYNC) THEN
2150                   p_ta_intf_tbl(i).transaction_type := G_CREATE;
2151               ELSE
2152                 ego_metadata_bulkload_pvt.Write_debug(G_PKG_NAME||'.'||l_proc_name||'->'||'Attribute Display Name'
2153                                                       ||p_ta_intf_tbl(i).attr_display_name
2154                                                       ||'does not exist in the system');
2155 
2156                 p_ta_intf_tbl(i).process_status := G_ERROR_RECORD;
2157                 x_return_status := G_RET_STS_ERROR;
2158                 /*error_handler.Add_error_message(p_message_name => 'EGO_ICC_INVALID',p_application_id => 'EGO',
2159                                                 p_token_tbl => g_token_table,p_message_type => g_ret_sts_error,
2160                                                 p_row_identifier => P_ag_tbl(i).transaction_id,
2161                                                 p_entity_code => g_entity_ag,p_table_name => g_entity_ag_tab);*/
2162               END IF;
2163             WHEN OTHERS THEN
2164               ego_metadata_bulkload_pvt.Write_debug(G_PKG_NAME||'.'||l_proc_name||'->'||'Attribute Name to ID Exception when others');
2165               x_return_status := G_RET_STS_UNEXP_ERROR;
2166           END;
2167      END IF; /*attr_display_name to attr_id */
2168 
2169      ego_metadata_bulkload_pvt.Write_debug(G_PKG_NAME||'.'||l_proc_name||'->'||'Getting associaton_id from icc_id and attr_id');
2170      /* Getting associaton_id from icc_id and attr_id, need this for update and delete*/
2171      IF  (p_ta_intf_tbl(i).transaction_type IN (G_UPDATE,G_DELETE,G_SYNC)
2172             AND p_ta_intf_tbl(i).attr_id IS NOT NULL
2173             AND p_ta_intf_tbl(i).item_catalog_group_id IS NOT NULL
2174             AND p_ta_intf_tbl(i).association_id is NULL) THEN
2175 
2176           BEGIN
2177              SELECT association_id INTO p_ta_intf_tbl(i).association_id
2178              FROM   EGO_TRANS_ATTR_VERS_B
2179              WHERE  attr_id=  p_ta_intf_tbl(i).attr_id
2180              AND    item_catalog_group_id= p_ta_intf_tbl(i).item_catalog_group_id
2181              AND    icc_version_number=0;
2182 
2183 
2184           EXCEPTION
2185             WHEN no_data_found THEN
2186                 ego_metadata_bulkload_pvt.Write_debug(G_PKG_NAME||'.'||l_proc_name||'->'||'Not able to get association id frrom '
2187                                                       ||p_ta_intf_tbl(i).attr_id ||' ' || p_ta_intf_tbl(i).item_catalog_group_id
2188                                                       ||'Unexpected');
2189 
2190                 p_ta_intf_tbl(i).process_status := G_ERROR_RECORD;
2191                 x_return_status := G_RET_STS_ERROR;
2192                 /*error_handler.Add_error_message(p_message_name => 'EGO_ICC_INVALID',p_application_id => 'EGO',
2193                                                 p_token_tbl => g_token_table,p_message_type => g_ret_sts_error,
2194                                                 p_row_identifier => P_ag_tbl(i).transaction_id,
2195                                                 p_entity_code => g_entity_ag,p_table_name => g_entity_ag_tab);*/
2196             WHEN OTHERS THEN
2197               ego_metadata_bulkload_pvt.Write_debug(G_PKG_NAME||'.'||l_proc_name||'->'||'Attribute Name to ID Exception when others');
2198               x_return_status := G_RET_STS_UNEXP_ERROR;
2199           END;
2200      END IF; /*association id from attr_id and icc_id */
2201   END IF;-- process status
2202 END LOOP;
2203 ego_metadata_bulkload_pvt.Write_debug(G_PKG_NAME||'.'||l_proc_name||'->'||'End Construct_Trans_Attrs');
2204 
2205 EXCEPTION WHEN OTHERS THEN
2206   x_return_status:= G_RET_STS_UNEXP_ERROR;
2207   x_return_msg:= G_PKG_NAME||'.'||l_proc_name||'.'||SQLERRM;
2208   ego_metadata_bulkload_pvt.Write_debug(G_PKG_NAME||'.'||l_proc_name||'->'||'Exception when others Construct_Trans_Attrs');
2209 END Construct_Trans_Attrs;
2210 
2211 --=================Validate_Trans_Attrs ========
2212  /* This is same as Bulk Validation TA during interface flow */
2213  PROCEDURE Validate_Trans_Attrs(
2214            p_api_version      IN         NUMBER,
2215            p_ta_intf_tbl      IN OUT NOCOPY TA_Intf_Tbl,
2216            x_return_status    OUT NOCOPY VARCHAR2,
2217            x_return_msg       OUT NOCOPY VARCHAR2)
2218 IS
2219 l_return_status VARCHAR2(1):=G_RET_STS_SUCCESS;
2220 l_msg_count NUMBER :=G_MISS_NUM;
2221 l_msg_data VARCHAR(2000):=G_MISS_CHAR;
2222 l_proc_name VARCHAR2(200):='Validate_Trans_Attrs';
2223 
2224 l_id_exists NUMBER;
2225 
2226 BEGIN
2227   ego_metadata_bulkload_pvt.Write_debug(G_PKG_NAME||'.'||l_proc_name||'->'||'Entering Validate_Trans_Attrs');
2228   x_return_status  := G_RET_STS_SUCCESS;
2229   x_return_msg     := G_MISS_CHAR;
2230 
2231 FOR i IN p_ta_intf_tbl.first..p_ta_intf_tbl.last LOOP
2232  IF (p_ta_intf_tbl(i).process_status = G_PROCESS_RECORD
2233          AND p_ta_intf_tbl(i).TRANSACTION_ID IS NOT NULL
2234           ) THEN
2235 
2236             ego_metadata_bulkload_pvt.Write_debug(G_PKG_NAME||'.'||l_proc_name||'->'||'ICC_validations');
2237             /* ICC_validations*/
2238             IF   p_ta_intf_tbl(i).transaction_type IN (G_CREATE,G_UPDATE,G_DELETE,G_SYNC) THEN
2239                IF  (p_ta_intf_tbl(i).item_catalog_group_id IS  NULL
2240                    AND p_ta_intf_tbl(i).item_catalog_group_name IS NULL) THEN /*if both ICC_ID and ICC_NAME is NULL*/
2241                        ego_metadata_bulkload_pvt.Write_debug(G_PKG_NAME||'.'||l_proc_name||'->'||'ERR : ICC Id and ICC_NAME both NULL ');
2242                        p_ta_intf_tbl(i).process_status := G_ERROR_RECORD;
2243                        x_return_status := G_RET_STS_ERROR;
2244                        /*error_handler.Add_error_message(p_message_name => 'EGO_ICC_INVALID',p_application_id => 'EGO',
2245                                                           p_token_tbl => g_token_table,p_message_type => g_ret_sts_error,
2246                                                           p_row_identifier => P_ag_tbl(i).transaction_id,
2247                                                           p_entity_code => g_entity_ag,p_table_name => g_entity_ag_tab);*/
2248 
2249                ELSIF (p_ta_intf_tbl(i).item_catalog_group_id IS NOT NULL) THEN /* if ICC_ID provided doesn't exists*/
2250 
2251                       BEGIN
2252                         SELECT item_catalog_group_id INTO l_id_exists
2253                         FROM mtl_item_catalog_groups micg
2254                         WHERE micg.ITEM_CATALOG_GROUP_ID=p_ta_intf_tbl(i).item_catalog_group_id;
2255 
2256                       EXCEPTION
2257                       WHEN no_data_found THEN
2258                         ego_metadata_bulkload_pvt.Write_debug(G_PKG_NAME||'.'||l_proc_name||'->'||'ICC '
2259                                                       ||p_ta_intf_tbl(i).item_catalog_group_id
2260                                                       ||'does not exist in the system');
2261 
2262                         p_ta_intf_tbl(i).process_status := G_ERROR_RECORD;
2263                         x_return_status := G_RET_STS_ERROR;
2264                         /*error_handler.Add_error_message(p_message_name => 'EGO_ICC_INVALID',p_application_id => 'EGO',
2265                                                           p_token_tbl => g_token_table,p_message_type => g_ret_sts_error,
2266                                                           p_row_identifier => P_ag_tbl(i).transaction_id,
2267                                                           p_entity_code => g_entity_ag,p_table_name => g_entity_ag_tab);*/
2268                       WHEN OTHERS THEN
2269                         ego_metadata_bulkload_pvt.Write_debug(G_PKG_NAME||'.'||l_proc_name||'->'||'ICC_ID provided Exception when others');
2270                         x_return_status := G_RET_STS_UNEXP_ERROR;
2271                       END;
2272                END IF;
2273             END IF;-- If Transaction_type in ALL
2274 
2275             ego_metadata_bulkload_pvt.Write_debug(G_PKG_NAME||'.'||l_proc_name||'->'||'Value_set_Validations ');
2276             /* Value_set Validations*/
2277             IF   p_ta_intf_tbl(i).transaction_type IN (G_CREATE,G_UPDATE,G_SYNC) THEN
2278                /* if given value_set_id not exists */
2279                IF (p_ta_intf_tbl(i).value_set_id IS NOT  NULL) THEN
2280                       BEGIN
2281                         SELECT flex_value_set_id INTO l_id_exists
2282                         FROM fnd_flex_value_sets  ffvs
2283                         WHERE ffvs.flex_value_set_id = p_ta_intf_tbl(i).value_set_id ;
2284 
2285                       EXCEPTION
2286                       WHEN no_data_found THEN
2287                         ego_metadata_bulkload_pvt.Write_debug(G_PKG_NAME||'.'||l_proc_name||'->'||'Value Set Id '
2288                                                       ||p_ta_intf_tbl(i).value_set_id
2289                                                       ||'does not exist in the system');
2290 
2291                         p_ta_intf_tbl(i).process_status := G_ERROR_RECORD;
2292                         x_return_status := G_RET_STS_ERROR;
2293                         /*error_handler.Add_error_message(p_message_name => 'EGO_ICC_INVALID',p_application_id => 'EGO',
2294                                                           p_token_tbl => g_token_table,p_message_type => g_ret_sts_error,
2295                                                           p_row_identifier => P_ag_tbl(i).transaction_id,
2296                                                           p_entity_code => g_entity_ag,p_table_name => g_entity_ag_tab);*/
2297                       WHEN OTHERS THEN
2298                         ego_metadata_bulkload_pvt.Write_debug(G_PKG_NAME||'.'||l_proc_name||'->'||'value_Set_id provided Exception when others');
2299                         x_return_status := G_RET_STS_UNEXP_ERROR;
2300                       END;
2301                END IF;
2302             END IF;-- If Transaction_type in except delete
2303 
2304              ego_metadata_bulkload_pvt.Write_debug(G_PKG_NAME||'.'||l_proc_name||'->'||'attr_id Validations and conversion of sync to create/update ');
2305             /* attr_id Validations*/
2306             IF   p_ta_intf_tbl(i).transaction_type IN (G_UPDATE,G_DELETE,G_SYNC) THEN
2307                /* if given attr_id not exists */
2308                IF (p_ta_intf_tbl(i).attr_id IS NOT NULL) THEN
2309 
2310                    BEGIN
2311                         SELECT attr_id INTO l_id_exists
2312                         FROM EGO_TRANS_ATTR_VERS_B ETAVB
2313                         WHERE ETAVB.attr_id = p_ta_intf_tbl(i).attr_id
2314                         AND  item_catalog_group_id=p_ta_intf_tbl(i).item_catalog_group_id
2315                         AND icc_version_number=0;
2316 
2317                         IF (p_ta_intf_tbl(i).transaction_type = G_SYNC) THEN
2318                             p_ta_intf_tbl(i).transaction_type := G_UPDATE;
2319                         END IF;
2320                            /* assigning defaults required for update*/
2321                            IF p_ta_intf_tbl(i).attr_display_name IS NOT NULL  THEN
2322                             BEGIN
2323                               SELECT attr_name INTO p_ta_intf_tbl(i).attr_name
2324                               FROM ego_attrs_v  EAV
2325                               WHERE EAV.attr_id= p_ta_intf_tbl(i).attr_id;
2326                             END ;
2327                            END IF;
2328 
2329                            IF p_ta_intf_tbl(i).attr_name IS NOT NULL  THEN
2330                             BEGIN
2331                                ego_metadata_bulkload_pvt.Write_debug(G_PKG_NAME||'.'||l_proc_name||'->'||'assining rest of defaults');
2332                               SELECT nvl(p_ta_intf_tbl(i).uom_class,b.uom_class),nvl(p_ta_intf_tbl(i).default_value,b.default_value),
2333                                      nvl(p_ta_intf_tbl(i).rejected_value,b.rejected_value),nvl(p_ta_intf_tbl(i).required_flag,b.required_flag),
2334                                      nvl(p_ta_intf_tbl(i).readonly_flag,b.readonly_flag),nvl(p_ta_intf_tbl(i).hidden_flag,b.hidden_flag),
2335                                      nvl(p_ta_intf_tbl(i).searchable_flag,b.searchable_flag), nvl(p_ta_intf_tbl(i).check_eligibility,b.check_eligibility),
2336                                      nvl(p_ta_intf_tbl(i).value_set_id,b.value_set_id), nvl(p_ta_intf_tbl(i).attr_display_name,b.attr_display_name),b.SEQUENCE
2337                                      INTO
2338                                      p_ta_intf_tbl(i).uom_class,p_ta_intf_tbl(i).default_value,p_ta_intf_tbl(i).rejected_value,
2339                                      p_ta_intf_tbl(i).required_flag,p_ta_intf_tbl(i).readonly_flag,p_ta_intf_tbl(i).hidden_flag,
2340                                      p_ta_intf_tbl(i).searchable_flag, p_ta_intf_tbl(i).check_eligibility,
2341                                      p_ta_intf_tbl(i).value_set_id,p_ta_intf_tbl(i).attr_display_name,p_ta_intf_tbl(i).SEQUENCE
2342                              FROM EGO_TRANS_ATTR_VERS_B b
2343                              WHERE b.item_catalog_group_id=p_ta_intf_tbl(i).item_catalog_group_id
2344                              AND   b.icc_version_number=0
2345                              AND   b.attr_id= p_ta_intf_tbl(i).attr_id;
2346 
2347 							              END ;
2348                            END IF;
2349 
2350                    EXCEPTION
2351                    WHEN no_data_found THEN
2352                         ego_metadata_bulkload_pvt.Write_debug(G_PKG_NAME||'.'||l_proc_name||'->'||'Attr Id provided '
2353                                                       ||p_ta_intf_tbl(i).attr_id
2354                                                       ||'does not exist in the system');
2355 
2356                         p_ta_intf_tbl(i).process_status := G_ERROR_RECORD;
2357                         x_return_status := G_RET_STS_ERROR;
2358                         /*error_handler.Add_error_message(p_message_name => 'EGO_ICC_INVALID',p_application_id => 'EGO',
2359                                                           p_token_tbl => g_token_table,p_message_type => g_ret_sts_error,
2360                                                           p_row_identifier => P_ag_tbl(i).transaction_id,
2361                                                           p_entity_code => g_entity_ag,p_table_name => g_entity_ag_tab);*/
2362                       WHEN OTHERS THEN
2363                         ego_metadata_bulkload_pvt.Write_debug(G_PKG_NAME||'.'||l_proc_name||'->'||'attr_id provided Exception when others');
2364                         x_return_status := G_RET_STS_UNEXP_ERROR;
2365 
2366                    END;
2367 
2368                ELSIF (p_ta_intf_tbl(i).attr_id IS NULL AND p_ta_intf_tbl(i).attr_name IS  NULL AND p_ta_intf_tbl(i).attr_display_name IS NULL ) THEN
2369                      ego_metadata_bulkload_pvt.Write_debug(G_PKG_NAME||'.'||l_proc_name||'->'||'ALL Attr_id, Attr_name and Attr_Display Name cannot be NULL for UPDATE,DEL and SYNC');
2370                      p_ta_intf_tbl(i).process_status := G_ERROR_RECORD;
2371                      x_return_status := G_RET_STS_ERROR;
2372                      /*error_handler.Add_error_message(p_message_name => 'EGO_ICC_INVALID',p_application_id => 'EGO',
2373                                                           p_token_tbl => g_token_table,p_message_type => g_ret_sts_error,
2374                                                           p_row_identifier => P_ag_tbl(i).transaction_id,
2375                                                           p_entity_code => g_entity_ag,p_table_name => g_entity_ag_tab);*/
2376 
2377                END IF; -- if attr_id is not NULL
2378 
2379               ego_metadata_bulkload_pvt.Write_debug(G_PKG_NAME||'.'||l_proc_name||'->'||'If association id provided is not valid');
2380                /* if association id provided is not valid*/
2381                IF ( p_ta_intf_tbl(i).association_id IS NOT NULL AND p_ta_intf_tbl(i).attr_id IS NOT NULL AND p_ta_intf_tbl(i).item_catalog_group_id IS NOT NULL) THEN
2382 
2383                    BEGIN
2384                      SELECT association_id INTO l_id_exists
2385                      FROM EGO_TRANS_ATTR_VERS_B ETAVB
2386                      WHERE ETAVB.association_id = p_ta_intf_tbl(i).association_id
2387                      AND   item_catalog_group_id= p_ta_intf_tbl(i).item_catalog_group_id
2388                      AND   icc_version_number=0
2389                      AND  attr_id=p_ta_intf_tbl(i).attr_id;
2390 
2391                    EXCEPTION
2392                    WHEN no_data_found THEN
2393                         ego_metadata_bulkload_pvt.Write_debug(G_PKG_NAME||'.'||l_proc_name||'->'||'Association provided '
2394                                                       ||p_ta_intf_tbl(i).attr_id
2395                                                       ||'does not exist in the system');
2396 
2397                         p_ta_intf_tbl(i).process_status := G_ERROR_RECORD;
2398                         x_return_status := G_RET_STS_ERROR;
2399                         /*error_handler.Add_error_message(p_message_name => 'EGO_ICC_INVALID',p_application_id => 'EGO',
2400                                                           p_token_tbl => g_token_table,p_message_type => g_ret_sts_error,
2401                                                           p_row_identifier => P_ag_tbl(i).transaction_id,
2402                                                           p_entity_code => g_entity_ag,p_table_name => g_entity_ag_tab);*/
2403                       WHEN OTHERS THEN
2404                         ego_metadata_bulkload_pvt.Write_debug(G_PKG_NAME||'.'||l_proc_name||'->'||'value_Set_id provided Exception when others');
2405                         x_return_status := G_RET_STS_UNEXP_ERROR;
2406 
2407                    END;
2408                END IF;
2409             END IF;-- If transaction_type
2410 
2411             /* ============ Specific Validations ======== */
2412             /* CREATE */
2413            ego_metadata_bulkload_pvt.Write_debug(G_PKG_NAME||'.'||l_proc_name||'->'||'Create Specific Validations');
2414             IF   p_ta_intf_tbl(i).transaction_type IN (G_CREATE) THEN
2415 
2416                IF  (p_ta_intf_tbl(i).Association_id  IS NOT NULL
2417                     OR p_ta_intf_tbl(i).Attr_id  IS NOT NULL ) THEN /*if association_id or attr_id is NOT NULL*/
2418                        ego_metadata_bulkload_pvt.Write_debug(G_PKG_NAME||'.'||l_proc_name||'->'||'ERR : Association_Is and Attr_id shud be NULL for CREATE');
2419                        p_ta_intf_tbl(i).process_status := G_ERROR_RECORD;
2420                        x_return_status := G_RET_STS_ERROR;
2421                        /*error_handler.Add_error_message(p_message_name => 'EGO_ICC_INVALID',p_application_id => 'EGO',
2422                                                           p_token_tbl => g_token_table,p_message_type => g_ret_sts_error,
2423                                                           p_row_identifier => P_ag_tbl(i).transaction_id,
2424                                                           p_entity_code => g_entity_ag,p_table_name => g_entity_ag_tab);*/
2425 
2426 
2427                ELSIF ((p_ta_intf_tbl(i).attr_name IS  NULL)
2428                       OR (p_ta_intf_tbl(i).attr_display_name  IS  NULL)
2429                        OR (p_ta_intf_tbl(i).SEQUENCE  IS  NULL)) THEN /* if ICC_ID provided doesn't exists*/
2430                        ego_metadata_bulkload_pvt.Write_debug(G_PKG_NAME||'.'||l_proc_name||'->'||'Attr_Name and ATT_DISPLAY_NAM and Seq shud not be NULL for CREATE');
2431                         p_ta_intf_tbl(i).process_status := G_ERROR_RECORD;
2432                         x_return_status := G_RET_STS_ERROR;
2433                         /*error_handler.Add_error_message(p_message_name => 'EGO_ICC_INVALID',p_application_id => 'EGO',
2434                                                           p_token_tbl => g_token_table,p_message_type => g_ret_sts_error,
2435                                                           p_row_identifier => P_ag_tbl(i).transaction_id,
2436                                                           p_entity_code => g_entity_ag,p_table_name => g_entity_ag_tab);*/
2437 
2438                ELSIF  (p_ta_intf_tbl(i).icc_version_number IS  NULL) THEN /*If ICC version is NULL while create*/
2439                        ego_metadata_bulkload_pvt.Write_debug(G_PKG_NAME||'.'||l_proc_name||'->'||'ERR : ICC_VERSION_NUMBER cannot be NULL while CREATE');
2440                        p_ta_intf_tbl(i).process_status := G_ERROR_RECORD;
2441                        x_return_status := G_RET_STS_ERROR;
2442                        /*error_handler.Add_error_message(p_message_name => 'EGO_ICC_INVALID',p_application_id => 'EGO',
2443                                                           p_token_tbl => g_token_table,p_message_type => g_ret_sts_error,
2444                                                           p_row_identifier => P_ag_tbl(i).transaction_id,
2445                                                           p_entity_code => g_entity_ag,p_table_name => g_entity_ag_tab);*/
2446 
2447                END IF;
2448 
2449                 ego_metadata_bulkload_pvt.Write_debug(G_PKG_NAME||'.'||l_proc_name||'->'||'Defaulting of data type and dispaly_name');
2450                 /* Defaulting data type to 'C' if NULL */
2451                IF (p_ta_intf_tbl(i).data_type IS  NULL) THEN
2452                    p_ta_intf_tbl(i).data_type:='C';
2453                END IF ;
2454 
2455                IF (Nvl(p_ta_intf_tbl(i).display_flag,'ZZZ')  <> 'T') THEN
2456                    p_ta_intf_tbl(i).display_flag:='T';
2457                END IF ;
2458             END IF;-- If Transaction_type CREATE
2459 
2460             ego_metadata_bulkload_pvt.Write_debug(G_PKG_NAME||'.'||l_proc_name||'->'||'Icc_Version_Number greater than zero not allowed while UPDATE and DELETE');
2461             /* Both UPDATE and DELETE NOT SYNC */
2462             IF   p_ta_intf_tbl(i).transaction_type IN (G_UPDATE, G_DELETE) THEN
2463 
2464                IF (p_ta_intf_tbl(i).icc_version_number>0) then /*Icc_Version_Number greater than zero not allowed while UPDATE and DELETE*/
2465 
2466                        ego_metadata_bulkload_pvt.Write_debug(G_PKG_NAME||'.'||l_proc_name||'->'||'Icc_Version_Number greater than zero not allowed while UPDATE and DELETE');
2467                         p_ta_intf_tbl(i).process_status := G_ERROR_RECORD;
2468                         x_return_status := G_RET_STS_ERROR;
2469                         /*error_handler.Add_error_message(p_message_name => 'EGO_ICC_INVALID',p_application_id => 'EGO',
2470                                                           p_token_tbl => g_token_table,p_message_type => g_ret_sts_error,
2471                                                           p_row_identifier => P_ag_tbl(i).transaction_id,
2472                                                           p_entity_code => g_entity_ag,p_table_name => g_entity_ag_tab);*/
2473                 END IF;
2474             END IF ;
2475 
2476             ego_metadata_bulkload_pvt.Write_debug(G_PKG_NAME||'.'||l_proc_name||'->'||'Association_id and attr_id should not be null for DELETE');
2477             /* DELETE*/
2478             IF   p_ta_intf_tbl(i).transaction_type IN (G_DELETE) THEN
2479 
2480                IF  ((p_ta_intf_tbl(i).association_id  IS NULL)
2481                  OR  (p_ta_intf_tbl(i).attr_id  IS  NULL)) THEN /*Association_id and attr_id should not be null for DELETE */
2482 
2483                        ego_metadata_bulkload_pvt.Write_debug(G_PKG_NAME||'.'||l_proc_name||'->'||'ERR : Association_id and attr_id should not be null for DELETE');
2484                        p_ta_intf_tbl(i).process_status := G_ERROR_RECORD;
2485                        x_return_status := G_RET_STS_ERROR;
2486                END IF;
2487             END IF ;
2488 
2489  END IF;
2490 END LOOP;
2491  ego_metadata_bulkload_pvt.Write_debug(G_PKG_NAME||'.'||l_proc_name||'->'||'End Validate_Trans_Attrs');
2492 EXCEPTION
2493 WHEN OTHERS THEN
2494    x_return_status:= G_RET_STS_UNEXP_ERROR;
2495    x_return_msg := G_PKG_NAME||'.'||l_proc_name||'.'||SQLERRM;
2496    ego_metadata_bulkload_pvt.Write_debug(G_PKG_NAME||'.'||l_proc_name||'->'||'Exception when others Validate_Trans_Attrs');
2497 END Validate_Trans_Attrs;
2498 
2499 --
2500 -- Bug 9980051. Added few supporting sub functions.
2501 -- For MIB we need to call create_inherited_attribute
2502 -- if user is trying to add inherited attribute.
2503 -- sreharih. Tue Apr 19 11:06:55 PDT 2011
2504 --
2505 
2506 --
2507 -- Get start active date for given ICC and version.
2508 --
2509 FUNCTION get_start_active_date (p_item_catalog_group_id IN NUMBER,
2510                                 p_version_seq_id        IN NUMBER) RETURN DATE IS
2511 
2512  CURSOR c IS
2513   SELECT nvl(vers.start_active_date,SYSDATE)
2514     FROM ego_mtl_catalog_grp_vers_b vers
2515    WHERE vers.item_catalog_group_id = p_item_catalog_group_id
2516      AND vers.version_seq_id        = p_version_seq_id;
2517 
2518  l_ret ego_mtl_catalog_grp_vers_b.start_active_date%TYPE;
2519 
2520 BEGIN
2521   OPEN c;
2522   FETCH c INTO l_ret;
2523   CLOSE c;
2524 
2525   RETURN l_ret;
2526 END get_start_active_date;
2527 
2528 --
2529 -- Check whether given ICC has parents.
2530 --
2531 FUNCTION has_parent (p_item_catalog_group_id IN NUMBER
2532                     )  RETURN BOOLEAN IS
2533 
2534  CURSOR c IS
2535  SELECT cat.parent_catalog_group_id
2536    FROM mtl_item_catalog_groups_b cat
2537   WHERE cat.item_catalog_group_id = p_item_catalog_group_id;
2538 
2539  l_ret  mtl_item_catalog_groups_b.parent_catalog_group_id%TYPE;
2540 
2541 BEGIN
2542  OPEN c;
2543  FETCH c INTO l_ret;
2544  CLOSE c;
2545 
2546  IF l_ret IS NOT NULL THEN
2547    RETURN true;
2548  ELSE
2549    RETURN false;
2550  END IF;
2551 
2552 END has_parent;
2553 
2554 
2555 --
2556 -- Get latest version for the ICC effective after given active date
2557 --
2558 FUNCTION get_latest_version (
2559                     p_item_catalog_group_id IN NUMBER,
2560                     p_active_date           IN DATE) RETURN NUMBER IS
2561 
2562  CURSOR c IS
2563   SELECT version_seq_id
2564     FROM (SELECT version_seq_id
2565             FROM ego_mtl_catalog_grp_vers_b cat_vers
2566            WHERE cat_vers.item_catalog_group_id = p_item_catalog_group_id
2567              AND cat_vers.start_active_date   <= p_active_date
2568              AND (cat_vers.end_active_date IS NULL
2569                       OR cat_vers.end_active_date >= p_active_date)
2570              ORDER BY version_seq_id DESC)
2571    WHERE rownum = 1;
2572 
2573  l_ret ego_mtl_catalog_grp_vers_b.version_seq_id%TYPE;
2574 BEGIN
2575   OPEN c;
2576   FETCH c INTO l_ret;
2577   CLOSE c;
2578 
2579   RETURN l_ret;
2580 
2581 END get_latest_version;
2582 
2583 --
2584 -- Check whether given attribute is inherited from parent or not.
2585 -- If inherited it will also return the attr_id and association id.
2586 --
2587 FUNCTION is_inherited_attribute (p_item_catalog_group_id IN NUMBER,
2588                                  p_version_seq_id        IN NUMBER,
2589                                  p_attr_name             IN VARCHAR2,
2590                                  x_attr_id               OUT NOCOPY NUMBER,
2591                                  x_association_id        OUT NOCOPY NUMBER) RETURN BOOLEAN IS
2592 
2593  l_start_date      ego_mtl_catalog_grp_vers_b.start_active_date%TYPE;
2594  l_latest_vers     ego_mtl_catalog_grp_vers_b.version_seq_id%TYPE;
2595  l_attr_id         ego_trans_attr_vers_b.attr_id%TYPE;
2596  l_association_id  ego_trans_attr_vers_b.association_id%TYPE;
2597  l_proc_name       CONSTANT VARCHAR2(30) := 'IS_INHERITED_ATTRIBUTE';
2598 
2599  CURSOR c_parents IS
2600    SELECT heir.item_catalog_group_id,
2601           heir.lev
2602      FROM (SELECT item_catalog_group_id ,
2603                   level lev
2604             FROM  mtl_item_catalog_groups_b micg
2605             START WITH item_catalog_group_id = p_item_catalog_group_id
2606             CONNECT BY PRIOR parent_catalog_group_id = item_catalog_group_id
2607             ) heir
2608     WHERE heir.lev > 1 -- only parents
2609  ORDER BY heir.lev; -- if same attribute exists in more than one parent, pick it from the least level
2610 
2611  CURSOR c(c_item_catalog_group_id IN NUMBER,
2612           c_latest_ver            IN NUMBER) IS
2613      SELECT ta.attr_id,
2614             ta.association_id
2615        FROM ego_trans_attr_vers_b ta,
2616             ego_fnd_df_col_usgs_ext attr ,
2617             fnd_descr_flex_column_usages flex_col
2618       WHERE 1=1
2619         AND ta.metadata_level       = 'ICC'
2620         AND ta.item_catalog_group_id = c_item_catalog_group_id
2621         AND ta.icc_version_number    = c_latest_ver
2622         AND ta.attr_id               = attr.attr_id
2623         AND attr.descriptive_flex_context_code  = flex_col.descriptive_flex_context_code
2624         AND attr.descriptive_flexfield_name     = flex_col.descriptive_flexfield_name
2625         AND attr.application_column_name        = flex_col.application_column_name
2626         AND flex_col.descriptive_flexfield_name = 'EGO_ITEM_TRANS_ATTR_GROUP'
2627         AND flex_col.end_user_column_name       =  p_attr_name;
2628 
2629 
2630 BEGIN
2631   ego_metadata_bulkload_pvt.Write_debug(G_PKG_NAME||'.'||l_proc_name||'->'||' Entering method with params ' ||
2632                                                                             ' icc = ' ||  p_item_catalog_group_id ||
2633                                                                             ' attrbute name = ' || p_attr_name ||
2634                                                                             ' version = ' || p_version_seq_id);
2635 
2636   l_start_date :=  get_start_active_date(p_item_catalog_group_id => p_item_catalog_group_id,
2637                                          p_version_seq_id        => p_version_seq_id);
2638 
2639   ego_metadata_bulkload_pvt.Write_debug(G_PKG_NAME||'.'||l_proc_name||'->'||'Start date = ' || l_start_date);
2640 
2641 
2642  FOR c_rec IN c_parents LOOP
2643     ego_metadata_bulkload_pvt.Write_debug(G_PKG_NAME||'.'||l_proc_name||'->'||' Checking for parent ' || c_rec.item_catalog_group_id || 'level ' || c_rec.lev);
2644 
2645     l_latest_vers := get_latest_version(p_item_catalog_group_id => c_rec.item_catalog_group_id,
2646                                         p_active_date           => l_start_date);
2647 
2648    ego_metadata_bulkload_pvt.Write_debug(G_PKG_NAME||'.'||l_proc_name||'->'||' Checking for parent ' || c_rec.item_catalog_group_id || 'latest version '|| l_latest_vers );
2649 
2650    OPEN c( c_rec.item_catalog_group_id, l_latest_vers); -- check only on the latest active version of the parent
2651    FETCH c INTO l_attr_id, l_association_id;
2652    CLOSE c;
2653 
2654    IF l_attr_id IS NOT NULL THEN
2655      ego_metadata_bulkload_pvt.Write_debug(G_PKG_NAME||'.'||l_proc_name||'->'||' Attribute ' || l_attr_id || ' exists in parent so returning true' );
2656      x_attr_id := l_attr_id;
2657      x_association_id := l_association_id;
2658      RETURN true;
2659    END IF;
2660 
2661  END LOOP;
2662 
2663  ego_metadata_bulkload_pvt.Write_debug(G_PKG_NAME||'.'||l_proc_name||'->'||' Returning false' );
2664  RETURN false;
2665 
2666 END is_inherited_attribute;
2667 
2668 --=================Transact_Trans_Attrs ========
2669 
2670 PROCEDURE Transact_Trans_Attrs(
2671            p_api_version      IN         NUMBER,
2672            p_ta_intf_rec      IN OUT NOCOPY ego_trans_attrs_vers_intf%ROWTYPE,
2673            x_return_status    OUT NOCOPY VARCHAR2,
2674            x_return_msg       OUT NOCOPY VARCHAR2)
2675 IS
2676 l_ego_ta_tbl EGO_TRAN_ATTR_TBL;
2677 l_ta_intf_tbl TA_Intf_Tbl;
2678 
2679 l_return_status VARCHAR2(1):=G_RET_STS_SUCCESS;
2680 l_msg_count NUMBER :=G_MISS_NUM;
2681 l_msg_data VARCHAR(2000):=G_MISS_CHAR;
2682 
2683 l_proc_name VARCHAR2(200):='Transact_Trans_Attrs';
2684 
2685 l_is_child_icc NUMBER;
2686 l_is_ta_there  NUMBER;
2687 l_inherited    BOOLEAN; -- bug 9980051
2688 l_attr_id         ego_trans_attr_vers_b.attr_id%TYPE;         -- bug 9980051
2689 l_association_id  ego_trans_attr_vers_b.association_id%TYPE;  -- bug 9980051
2690 e_ta_int_name_exist  EXCEPTION;
2691 e_ta_disp_name_exist EXCEPTION;
2692 e_ta_sequence_exist  EXCEPTION;
2693 
2694 BEGIN
2695   ego_metadata_bulkload_pvt.Write_debug(G_PKG_NAME||'.'||l_proc_name||'->'||'Entering Transact_Trans_Attrs');
2696   x_return_status  := G_RET_STS_SUCCESS;
2697   x_return_msg       := G_MISS_CHAR ;
2698 
2699 -----================ /* MAIN LOGIC FOR TRANSACT */ =============------------
2700 
2701     IF   p_ta_intf_rec.process_status=G_PROCESS_RECORD THEN
2702 
2703       IF     p_ta_intf_rec.transaction_type=G_CREATE THEN
2704               ego_metadata_bulkload_pvt.Write_debug(G_PKG_NAME||'.'||l_proc_name||'->'||'Entering CREATE');
2705 
2706 
2707              /* for passing only one record at a time to convert*/
2708              l_ta_intf_tbl(1):= p_ta_intf_rec;
2709 
2710             /*calling proc to convert intf collection to original which calls create api*/
2711              convert_intf_rec_to_api_rec(p_ta_intf_tbl=>l_ta_intf_tbl,
2712                                x_ego_ta_tbl=>l_ego_ta_tbl);
2713 
2714 
2715 
2716               --
2717               -- Bug 9980051. If the user passed attribute is an inherited
2718               -- attribute then call create_inherited_attr API
2719               -- sreharih. Tue Apr 19 11:06:55 PDT 2011
2720               --
2721 
2722              l_inherited := false;
2723              IF has_parent(p_item_catalog_group_id => p_ta_intf_rec.item_catalog_group_id) THEN
2724                 ego_metadata_bulkload_pvt.Write_debug(G_PKG_NAME||'.'||l_proc_name||'->'||' The ICC  ' ||  p_ta_intf_rec.item_catalog_group_id
2725                                                                                         ||'has parents so check for inheritance ...');
2726 
2727                 IF is_inherited_attribute(p_item_catalog_group_id => p_ta_intf_rec.item_catalog_group_id,
2728                                           p_attr_name             => p_ta_intf_rec.attr_name,
2729                                           p_version_seq_id        => p_ta_intf_rec.icc_version_number,
2730                                           x_attr_id               => l_attr_id,
2731                                           x_association_id        => l_association_id) THEN
2732 
2733                         -- inherited just check for display name
2734                         /* Check  if att_disp_name already exist*/
2735                         IF (    Check_TA_IS_INVALID (p_item_cat_group_id   => p_ta_intf_rec.item_catalog_group_id,
2736                                            p_icc_version_number  => p_ta_intf_rec.icc_version_number,
2737                                            p_attr_id             => p_ta_intf_rec.attr_id,
2738                                            p_attr_disp_name      => p_ta_intf_rec.attr_display_name) ) THEN
2739                            p_ta_intf_rec.process_status:=G_ERROR_RECORD;
2740                            RAISE  e_ta_disp_name_exist;
2741                         END IF;
2742 
2743                     ego_metadata_bulkload_pvt.Write_debug(G_PKG_NAME||'.'||l_proc_name||'->'||' Attribute ' ||  p_ta_intf_rec.attr_name || ' is inherited so call Create_inherit API' );
2744                     ego_metadata_bulkload_pvt.Write_debug(G_PKG_NAME||'.'||l_proc_name||'->'||' Attr id ' || l_attr_id || ' association id ' || l_association_id );
2745                     l_ego_ta_tbl(1).attrid         := l_attr_id;
2746                     l_ego_ta_tbl(1).associationid  := l_association_id;
2747                     ego_transaction_attrs_pvt.Create_Inherited_Trans_Attr (
2748                                               p_api_version      => p_api_version,
2749                                               p_tran_attrs_tbl   => l_ego_ta_tbl,
2750                                               x_return_status    => l_return_status,
2751                                               x_msg_count        => l_msg_count,
2752                                               x_msg_data         => l_msg_data);
2753                      l_inherited := true;
2754                  END IF;
2755              END IF;
2756 
2757               --
2758               -- Bug 9980051. If the user passed attribute is NOT an inherited
2759               -- attribute then call normal create_attr API
2760               -- sreharih. Tue Apr 19 11:06:55 PDT 2011
2761               --
2762 
2763 
2764              IF NOT l_inherited THEN
2765 
2766                   -- not inherited so check for all.
2767 
2768          	      /* Check  if att_int_name already exist*/
2769                    IF (    Check_TA_IS_INVALID (p_item_cat_group_id   => p_ta_intf_rec.item_catalog_group_id,
2770                                            p_icc_version_number  => p_ta_intf_rec.icc_version_number,
2771                                            p_attr_id             => p_ta_intf_rec.attr_id,
2772                                            p_attr_name           => p_ta_intf_rec.attr_name) ) THEN
2773                       p_ta_intf_rec.process_status:=G_ERROR_RECORD;
2774                       RAISE  e_ta_int_name_exist;
2775                    END IF;
2776 
2777                    /* Check  if att_disp_name already exist*/
2778                    IF (    Check_TA_IS_INVALID (p_item_cat_group_id   => p_ta_intf_rec.item_catalog_group_id,
2779                                            p_icc_version_number  => p_ta_intf_rec.icc_version_number,
2780                                            p_attr_id             => p_ta_intf_rec.attr_id,
2781                                            p_attr_disp_name      => p_ta_intf_rec.attr_display_name) ) THEN
2782                         p_ta_intf_rec.process_status:=G_ERROR_RECORD;
2783                         RAISE  e_ta_disp_name_exist;
2784                    END IF;
2785 
2786                    /* Check  if sequence already exist*/
2787                    IF (    Check_TA_IS_INVALID (p_item_cat_group_id   => p_ta_intf_rec.item_catalog_group_id,
2788                                            p_icc_version_number => p_ta_intf_rec.icc_version_number,
2789                                            p_attr_id             => p_ta_intf_rec.attr_id,
2790                                            p_attr_sequence       => p_ta_intf_rec.sequence) ) THEN
2791                        p_ta_intf_rec.process_status:=G_ERROR_RECORD;
2792                        RAISE  e_ta_sequence_exist;
2793                    END IF;
2794 
2795 
2796                    ego_metadata_bulkload_pvt.Write_debug(G_PKG_NAME||'.'||l_proc_name||'->'||' Call create for ICC: ' || p_ta_intf_rec.item_catalog_group_id ||
2797                                                                                              ' attribute ' || p_ta_intf_rec.attr_id  );
2798 
2799                    /* calling API to Create TA */
2800                    ego_transaction_attrs_pvt.Create_Transaction_Attribute (
2801                                       p_api_version    => p_api_version,
2802                                       p_tran_attrs_tbl => l_ego_ta_tbl,
2803                                       x_return_status  => l_return_status,
2804                                       x_msg_count      => l_msg_count,
2805                                       x_msg_data       => l_msg_data);
2806              END IF;
2807 
2808 
2809              /* Check if x_return_status is sucess or not otherwise set process_status
2810              of l_ta_intf_rec with 3 and log error message*/
2811              IF (Nvl(l_return_status,G_RET_STS_SUCCESS) IN (G_RET_STS_ERROR,G_RET_STS_UNEXP_ERROR) )THEN
2812                 p_ta_intf_rec.process_status:=G_ERROR_RECORD;
2813                 x_return_status:= G_RET_STS_ERROR;
2814                 x_return_msg:=  l_msg_data;
2815              ELSE
2816                 p_ta_intf_rec.process_status:=G_SUCCESS_RECORD;
2817                 x_return_status:= G_RET_STS_SUCCESS;
2818              END IF;
2819 
2820       ELSIF  p_ta_intf_rec.transaction_type=G_UPDATE THEN
2821               ego_metadata_bulkload_pvt.Write_debug(G_PKG_NAME||'.'||l_proc_name||'->'||'Entering UPDATE');
2822               /* for passing only one record at a time to convert*/
2823               l_ta_intf_tbl(1):= p_ta_intf_rec;
2824 
2825              /*calling proc to convert intf collection to original which calls create api*/
2826               convert_intf_rec_to_api_rec(p_ta_intf_tbl=>l_ta_intf_tbl,
2827                                 x_ego_ta_tbl=>l_ego_ta_tbl);
2828 
2829               BEGIN /* Checking if ICC is child ICC */
2830                 SELECT 1 INTO l_is_child_icc
2831                 FROM mtl_item_catalog_groups
2832                 WHERE ITEM_CATALOG_GROUP_ID=p_ta_intf_rec.item_catalog_group_id
2833                 AND   PARENT_CATALOG_GROUP_ID IS NOT NULL;
2834 
2835               EXCEPTION
2836               WHEN No_Data_Found THEN
2837                 l_is_child_icc:=0;
2838               END;
2839 
2840               IF  l_is_child_icc=1 THEN
2841 
2842                   BEGIN  /* Checking is TA thre for same icc, iccversion*/
2843                     SELECT 1 INTO l_is_ta_there
2844                     FROM EGO_TRANS_ATTR_VERS_B
2845                     WHERE item_catalog_group_id=p_ta_intf_rec.item_catalog_group_id
2846                     AND icc_version_number=p_ta_intf_rec.icc_version_number
2847                     AND attr_id= p_ta_intf_rec.attr_id;
2848 
2849                   EXCEPTION
2850                   WHEN No_Data_Found THEN
2851                     l_is_ta_there:=0;
2852                   END ;
2853 
2854                   IF l_is_ta_there=1 THEN /* if there then usual update */
2855 
2856                      ego_transaction_attrs_pvt.Update_Transaction_Attribute (
2857                                               p_api_version      => p_api_version,
2858                                               p_tran_attrs_tbl   => l_ego_ta_tbl,
2859                                               x_return_status    => l_return_status,
2860                                               x_msg_count        => l_msg_count,
2861                                               x_msg_data         => l_msg_data);
2862                   ELSE  /* calling Create_Inherited_Trans_Attr*/
2863 
2864                      ego_transaction_attrs_pvt.Create_Inherited_Trans_Attr (
2865                                               p_api_version      => p_api_version,
2866                                               p_tran_attrs_tbl   => l_ego_ta_tbl,
2867                                               x_return_status    => l_return_status,
2868                                               x_msg_count        => l_msg_count,
2869                                               x_msg_data         => l_msg_data);
2870                   END IF ; --l_is_ta_there=1
2871 
2872               ELSE
2873                    /* calling API to Update TA */
2874                    ego_transaction_attrs_pvt.Update_Transaction_Attribute (
2875                                               p_api_version      => p_api_version,
2876                                               p_tran_attrs_tbl   => l_ego_ta_tbl,
2877                                               x_return_status    => l_return_status,
2878                                               x_msg_count        => l_msg_count,
2879                                               x_msg_data         => l_msg_data);
2880               END IF; --l_is_child_icc=1
2881 
2882              /* Check if x_return_status is sucess or not otherwise set process_status
2883              of l_ta_intf_rec with 3 and log error message*/
2884               IF (Nvl(l_return_status,G_RET_STS_SUCCESS) IN (G_RET_STS_ERROR,G_RET_STS_UNEXP_ERROR) )THEN
2885                 p_ta_intf_rec.process_status:=G_ERROR_RECORD;
2886                 x_return_status:= G_RET_STS_ERROR;
2887                 x_return_msg:=  l_msg_data;
2888              ELSE
2889                 p_ta_intf_rec.process_status:=G_SUCCESS_RECORD;
2890                 x_return_status:= G_RET_STS_SUCCESS;
2891              END IF;
2892 
2893       ELSIF  p_ta_intf_rec.transaction_type=G_DELETE THEN
2894 
2895               ego_metadata_bulkload_pvt.Write_debug(G_PKG_NAME||'.'||l_proc_name||'->'||'Entering DELETE');
2896 
2897              /* for passing only one record at a time to convert*/
2898              l_ta_intf_tbl(1):= p_ta_intf_rec;
2899 
2900              /*calling proc to convert intf collection to original which calls create api*/
2901               convert_intf_rec_to_api_rec(p_ta_intf_tbl=>l_ta_intf_tbl,
2902                                 x_ego_ta_tbl=>l_ego_ta_tbl);
2903 
2904              /* calling API to Delete TA */
2905              ego_transaction_attrs_pvt.Delete_Transaction_Attribute (
2906                                       p_api_version      => p_api_version,
2907                                       p_association_id   => l_ego_ta_tbl(1).associationid,
2908                                       p_attr_id          => l_ego_ta_tbl(1).attrid,
2909                                       --p_tran_attrs_tbl   => l_ego_ta_tbl,
2910                                       x_return_status    => l_return_status,
2911                                       x_msg_count        => l_msg_count,
2912                                       x_msg_data         => l_msg_data);
2913              /* Check if x_return_status is sucess or not otherwise set process_status
2914              of l_ta_intf_rec with 3 and log error message*/
2915              IF (Nvl(l_return_status,G_RET_STS_SUCCESS) IN (G_RET_STS_ERROR,G_RET_STS_UNEXP_ERROR) )THEN
2916                 p_ta_intf_rec.process_status:=G_ERROR_RECORD;
2917                 x_return_status:= G_RET_STS_ERROR;
2918                 x_return_msg:=  l_msg_data;
2919              ELSE
2920                 p_ta_intf_rec.process_status:=G_SUCCESS_RECORD;
2921                 x_return_status:= G_RET_STS_SUCCESS;
2922              END IF;
2923       END IF ; -- transaction type checking;
2924     END IF; --l_ego_ta_rec.process_status=G_PROCESS_RECORD
2925 
2926   ego_metadata_bulkload_pvt.Write_debug(G_PKG_NAME||'.'||l_proc_name||'->'||'End Transact_Trans_Attrs');
2927 EXCEPTION
2928     WHEN e_ta_int_name_exist THEN
2929       x_return_status   :=  G_RET_STS_ERROR;
2930          Error_Handler.Add_Error_Message
2931              (
2932               p_message_name	 =>  'EGO_EF_INTERNAL_NAME_UNIQUE'
2933              ,p_application_id =>  G_APP_NAME
2934              ,p_message_type	 =>  G_RET_STS_ERROR
2935              ,p_entity_code		 =>  G_Entity_Identifier
2936              ,p_row_identifier =>  p_ta_intf_rec.transaction_id
2937              ,p_table_name     =>  G_Table_Name
2938              --,p_token_tbl      =>  G_TOKEN_TBL
2939              ,p_addto_fnd_stack=> 'Y'
2940              );
2941 
2942   WHEN e_ta_disp_name_exist THEN
2943       x_return_status   :=  G_RET_STS_ERROR;
2944           Error_Handler.Add_Error_Message
2945              (
2946               p_message_name	 =>  'EGO_TA_DISPLAY_NAME_UNIQUE'
2947              ,p_application_id =>  G_APP_NAME
2948              ,p_message_type	 =>  G_RET_STS_ERROR
2949              ,p_entity_code		 =>  G_Entity_Identifier
2950              ,p_row_identifier =>  p_ta_intf_rec.transaction_id
2951              ,p_table_name     =>  G_Table_Name
2952              --,p_token_tbl      =>  G_TOKEN_TBL
2953              ,p_addto_fnd_stack=> 'Y'
2954              );
2955 
2956   WHEN e_ta_sequence_exist THEN
2957       x_return_status   :=  G_RET_STS_ERROR;
2958           Error_Handler.Add_Error_Message
2959              (
2960               p_message_name	 =>  'EGO_EF_CR_ATTR_DUP_SEQ_ERR'
2961              ,p_application_id =>  G_APP_NAME
2962              ,p_message_type	 =>  G_RET_STS_ERROR
2963              ,p_entity_code		 =>  G_Entity_Identifier
2964              ,p_row_identifier =>  p_ta_intf_rec.transaction_id
2965              ,p_table_name     =>  G_Table_Name
2966              --,p_token_tbl      =>  G_TOKEN_TBL
2967              ,p_addto_fnd_stack=> 'Y'
2968              );
2969   WHEN OTHERS THEN
2970   x_return_status:= G_RET_STS_UNEXP_ERROR;
2971   x_return_msg := G_PKG_NAME||'.'||l_proc_name||'.'||SQLERRM;
2972   ego_metadata_bulkload_pvt.Write_debug(G_PKG_NAME||'.'||l_proc_name||'->'||'Exception Transact_Trans_Attrs');
2973 END  Transact_Trans_Attrs;
2974 
2975 PROCEDURE Update_Intf_Trans_Attrs(
2976            p_ta_intf_tbl      IN OUT NOCOPY  TA_Intf_Tbl,
2977            x_return_status    OUT NOCOPY     VARCHAR2,
2978            x_return_msg       OUT NOCOPY     VARCHAR2)
2979 IS
2980 l_proc_name VARCHAR2(200):='Update_Intf_Trans_Attrs';
2981 trans_id dbms_sql.number_table; --bug 9701271
2982 BEGIN
2983 ego_metadata_bulkload_pvt.Write_debug(G_PKG_NAME||'.'||l_proc_name||'->'||'Entering Update_Intf_Trans_Attrs');
2984 
2985 -- bug 9701271
2986 FOR i IN p_ta_intf_tbl.FIRST..p_ta_intf_tbl.LAST LOOP
2987         trans_id(i) := p_ta_intf_tbl(i).transaction_id;
2988 END LOOP;
2989 
2990 
2991 FORALL I IN  p_ta_intf_tbl.first..p_ta_intf_tbl.last -- LOOP
2992     UPDATE EGO_TRANS_ATTRS_VERS_INTF
2993     SET  ROW= p_ta_intf_tbl(i) -- bug 9701271
2994     WHERE
2995     transaction_id = trans_id(i);
2996 
2997 ego_metadata_bulkload_pvt.Write_debug(G_PKG_NAME||'.'||l_proc_name||'->'||'End Update_Intf_Trans_Attrs');
2998 
2999 EXCEPTION
3000   WHEN OTHERS THEN
3001   x_return_status:= G_RET_STS_UNEXP_ERROR;
3002   x_return_msg    := G_PKG_NAME||'.'||l_proc_name||'.'||SQLERRM;
3003   ego_metadata_bulkload_pvt.Write_debug(G_PKG_NAME||'.'||l_proc_name||'->'||'Exception Update_Intf_Trans_Attrs');
3004 
3005 END Update_Intf_Trans_Attrs;
3006 
3007 /* This has to be called through ICC_versions if any of the TA fails we return from here.
3008 so Icc_version fails and we set all the TA's also to error*/
3009 
3010 PROCEDURE Update_Intf_Err_Trans_Attrs(
3011            p_set_process_id          IN                  NUMBER,
3012            p_item_catalog_group_id   IN                  NUMBER,
3013            p_icc_version_number_intf IN                  NUMBER,
3014            x_return_status           OUT NOCOPY          VARCHAR2,
3015            x_return_msg              OUT NOCOPY          VARCHAR2)
3016 IS
3017 l_proc_name VARCHAR2(200) :='Update_Intf_Err_Trans_Attrs';
3018 BEGIN
3019   x_return_status:=G_RET_STS_SUCCESS;
3020   ego_metadata_bulkload_pvt.Write_debug(G_PKG_NAME||'.'||l_proc_name||'->'||'Entering Update_Intf_Err_Trans_Attrs');
3021 
3022    UPDATE EGO_TRANS_ATTRS_VERS_INTF
3023    SET process_status= G_ERROR_RECORD
3024    WHERE item_catalog_group_id = p_item_catalog_group_id
3025    AND   icc_version_number    = p_icc_version_number_intf
3026    AND   ((p_set_process_id IS NULL) OR (set_process_id=p_set_process_id));
3027 
3028   ego_metadata_bulkload_pvt.Write_debug(G_PKG_NAME||'.'||l_proc_name||'->'||'End Update_Intf_Err_Trans_Attrs');
3029 
3030 EXCEPTION
3031   WHEN OTHERS THEN
3032   x_return_status:= G_RET_STS_UNEXP_ERROR;
3033   x_return_msg    := G_PKG_NAME||'.'||l_proc_name||'.'||SQLERRM;
3034   ego_metadata_bulkload_pvt.Write_debug(G_PKG_NAME||'.'||l_proc_name||'->'||'Exception Update_Intf_Err_Trans_Attrs');
3035 
3036 END Update_Intf_Err_Trans_Attrs;
3037 
3038 /* This has to be called by main API of CP based on the parameter passed by user
3039 while running cp, if user says delete all processed records then this will get called */
3040 
3041 PROCEDURE Delete_Processed_Trans_Attrs(
3042            p_set_process_id          IN                  NUMBER,
3043 	   x_return_status           OUT NOCOPY          VARCHAR2,
3044 	   x_return_msg              OUT NOCOPY          VARCHAR2
3045            )
3046 IS
3047 l_proc_name varchar2(200):='Delete_Processed_Trans_Attrs';
3048 BEGIN
3049    x_return_status:=G_RET_STS_SUCCESS;
3050   ego_metadata_bulkload_pvt.Write_debug(G_PKG_NAME||'.'||l_proc_name||'->'||'Entering Delete_Processed_Trans_Attrs');
3051 
3052    DELETE FROM EGO_TRANS_ATTRS_VERS_INTF
3053    WHERE  process_status = G_SUCCESS_RECORD
3054    AND   ((p_set_process_id IS NULL) OR (set_process_id=p_set_process_id));
3055 
3056   ego_metadata_bulkload_pvt.Write_debug(G_PKG_NAME||'.'||l_proc_name||'->'||'End Delete_Processed_Trans_Attrs');
3057 EXCEPTION
3058   WHEN OTHERS THEN
3059   x_return_status:= G_RET_STS_UNEXP_ERROR;
3060   x_return_msg    := G_PKG_NAME||'.'||l_proc_name||'.'||SQLERRM;
3061   ego_metadata_bulkload_pvt.Write_debug(G_PKG_NAME||'.'||l_proc_name||'->'||'Exception Delete_Processed_Trans_Attrs');
3062 
3063 END Delete_Processed_Trans_Attrs;
3064 
3065 --=================Check_TA_IS_INVALID===============--------
3066 FUNCTION Check_TA_IS_INVALID (
3067         p_item_cat_group_id  IN NUMBER,
3068         p_icc_version_number IN NUMBER,
3069         p_attr_id            IN NUMBER,
3070         p_attr_name          IN VARCHAR2,
3071         p_attr_disp_name     IN VARCHAR2,
3072         p_attr_sequence      IN NUMBER
3073 )
3074 RETURN BOOLEAN
3075   IS
3076 
3077   l_attr_id NUMBER;
3078   l_attr_name VARCHAR2(80);
3079   l_attr_disp_name VARCHAR2(80);
3080   l_attr_sequence NUMBER;
3081   l_ta_is_invalid BOOLEAN := FALSE;
3082   l_proc_name varchar2(200):='Check_TA_IS_INVALID';
3083 /**------Query to fetch all associated attribute with passed in ICC--------**/
3084 CURSOR cur_list
3085 IS
3086         SELECT item_catalog_group_id,
3087                icc_version_NUMBER   ,
3088                SEQUENCE             ,
3089                attr_display_name    ,
3090                attr_name            ,
3091                attr_id              ,
3092                lev
3093         FROM
3094                (SELECT versions.item_catalog_group_id,
3095                       versions.icc_version_NUMBER    ,
3096                       versions.SEQUENCE              ,
3097                       attrs.attr_display_name        ,
3098                       attrs.attr_name                ,
3099                       attrs.attr_id                  ,
3100                       hier.lev
3101                FROM   ego_obj_AG_assocs_b assocs      ,
3102                       ego_attrs_v attrs               ,
3103                       ego_attr_groups_v ag            ,
3104                       EGO_TRANS_ATTR_VERS_B versions  ,
3105                       mtl_item_catalog_groups_kfv icv ,
3106                       (SELECT item_catalog_group_id   ,
3107                              LEVEL lev
3108                       FROM   mtl_item_catalog_groups_b START
3109                       WITH item_catalog_group_id = p_item_cat_group_id CONNECT BY PRIOR parent_catalog_group_id = item_catalog_group_id
3110                       ) hier
3111         WHERE  ag.attr_group_type                      = 'EGO_ITEM_TRANS_ATTR_GROUP'
3112            AND assocs.attr_group_id                    = ag.attr_group_id
3113            AND assocs.classification_code              = TO_CHAR(hier.item_catalog_group_id)
3114            AND attrs.attr_group_name                   = ag.attr_group_name
3115            AND TO_CHAR(icv.item_catalog_group_id)      = assocs.classification_code
3116            AND TO_CHAR(versions.association_id)        = assocs.association_id
3117            AND TO_CHAR(versions.item_catalog_group_id) = assocs.classification_code
3118            AND attrs.attr_id                           = versions.attr_id
3119                )
3120         WHERE
3121                (
3122                       (
3123                              LEV                = 1
3124                          AND ICC_VERSION_NUMBER = p_icc_version_number
3125                       )
3126                    OR
3127                       (
3128                              LEV <> 1
3129                          AND
3130                              (
3131                                     item_catalog_group_id, ICC_VERSION_NUMBER
3132                              )
3133                              IN
3134                              (SELECT item_catalog_group_id,
3135                                     VERSION_SEQ_ID
3136                              FROM   EGO_MTL_CATALOG_GRP_VERS_B
3137                              WHERE  start_active_date <=
3138                                     (SELECT NVL(start_active_date,SYSDATE)
3139                                     FROM   EGO_MTL_CATALOG_GRP_VERS_B
3140                                     WHERE  ITEM_CATALOG_GROUP_ID = p_item_cat_group_id
3141                                        AND VERSION_SEQ_ID        = p_icc_version_number
3142                                     )
3143                                 AND NVL(end_active_date, sysdate) >=
3144                                     (SELECT NVL(start_active_date,SYSDATE)
3145                                     FROM   EGO_MTL_CATALOG_GRP_VERS_B
3146                                     WHERE  ITEM_CATALOG_GROUP_ID = p_item_cat_group_id
3147                                        AND VERSION_SEQ_ID        = p_icc_version_number
3148                                     )
3149                                 AND version_seq_id > 0
3150                              )
3151                       )
3152                ); --end CURSOR cur_list
3153 
3154 
3155 /**------Query to fetch overridden values for a transaction attribute------**/
3156 CURSOR cur_metadata
3157 IS
3158         SELECT *
3159         FROM
3160                (SELECT *
3161                FROM
3162                       (SELECT versions.item_catalog_group_id,
3163                              versions.ICC_VERSION_NUMBER    ,
3164                              versions.ATTR_ID               ,
3165                              versions.SEQUENCE              ,
3166                              versions.attr_display_name     ,
3167                              versions.metadata_level        ,
3168                              attrs.attr_name                ,
3169                              Hier.lev
3170                       FROM   EGO_TRANS_ATTR_VERS_B VERSIONS,
3171                              EGO_ATTRS_V ATTRS             ,
3172                              (SELECT ITEM_CATALOG_GROUP_ID ,
3173                                     LEVEL LEV
3174                              FROM   MTL_ITEM_CATALOG_GROUPS_B START
3175                              WITH ITEM_CATALOG_GROUP_ID = p_item_cat_group_id CONNECT BY PRIOR PARENT_CATALOG_GROUP_ID =ITEM_CATALOG_GROUP_ID
3176                              ) HIER
3177                WHERE  HIER.ITEM_CATALOG_GROUP_ID = versions.item_catalog_group_id
3178                   AND attrs.attr_id              = versions.attr_id
3179                   AND attrs.attr_group_type      ='EGO_ITEM_TRANS_ATTR_GROUP'
3180                   AND versions.metadata_level    ='ICC'
3181                       )
3182                WHERE
3183                       (
3184                              (
3185                                     LEV                = 1
3186                                 AND ICC_VERSION_number = p_icc_version_number
3187                              )
3188                           OR
3189                              (
3190                                     LEV <> 1
3191                                 AND
3192                                     (
3193                                            item_catalog_group_id, ICC_VERSION_NUMBER
3194                                     )
3195                                     IN
3196                                     (SELECT item_catalog_group_id,
3197                                            VERSION_SEQ_ID
3198                                     FROM   EGO_MTL_CATALOG_GRP_VERS_B
3199                                     WHERE
3200                                            (
3201                                                   item_catalog_group_id,start_active_date
3202                                            )
3203                                            IN
3204                                            (SELECT  item_catalog_group_id,
3205                                                     MAX(start_active_date) start_active_date
3206                                            FROM     EGO_MTL_CATALOG_GRP_VERS_B
3207                                            WHERE    NVL(end_active_date, sysdate) >=
3208                                                     (SELECT NVL(start_active_date,SYSDATE)
3209                                                     FROM   EGO_MTL_CATALOG_GRP_VERS_B
3210                                                     WHERE  ITEM_CATALOG_GROUP_ID = p_item_cat_group_id
3211                                                        AND VERSION_SEQ_ID        = p_icc_version_number
3212                                                     )
3213                                                 AND version_seq_id > 0
3214 
3215                                                 AND  start_active_date <=
3216                                                     (SELECT NVL(start_active_date,SYSDATE)
3217                                                     FROM   EGO_MTL_CATALOG_GRP_VERS_B
3218                                                     WHERE  ITEM_CATALOG_GROUP_ID = p_item_cat_group_id
3219                                                        AND VERSION_SEQ_ID        = p_icc_version_number
3220                                                     )
3221 
3222 
3223 
3224                                            GROUP BY item_catalog_group_id
3225                                            HAVING   MAX(start_active_date)<=
3226                                                     (SELECT NVL(start_active_date,SYSDATE)
3227                                                     FROM   EGO_MTL_CATALOG_GRP_VERS_B
3228                                                     WHERE  ITEM_CATALOG_GROUP_ID = p_item_cat_group_id
3229                                                        AND VERSION_SEQ_ID        = p_icc_version_number
3230                                                     )
3231                                            )
3232                                     )
3233                              )
3234                       )
3235                )
3236         WHERE
3237                (
3238                       lev,attr_id
3239                )
3240                IN
3241                (SELECT  MIN(lev),
3242                         attr_id
3243                FROM
3244                         (SELECT versions.item_catalog_group_id,
3245                                versions.ICC_VERSION_NUMBER    ,
3246                                versions.ATTR_ID               ,
3247                                versions.SEQUENCE              ,
3248                                versions.attr_display_name     ,
3249                                versions.metadata_level        ,
3250                                Hier.lev
3251                         FROM   EGO_TRANS_ATTR_VERS_B VERSIONS,
3252                                (SELECT ITEM_CATALOG_GROUP_ID ,
3253                                       LEVEL LEV
3254                                FROM   MTL_ITEM_CATALOG_GROUPS_B
3255                                 START  WITH ITEM_CATALOG_GROUP_ID = p_item_cat_group_id
3256                                 CONNECT BY PRIOR PARENT_CATALOG_GROUP_ID =ITEM_CATALOG_GROUP_ID
3257                                ) HIER
3258                         WHERE  HIER.ITEM_CATALOG_GROUP_ID = versions.item_catalog_group_id
3259                            AND versions.metadata_level    ='ICC'
3260                            AND versions.attr_display_name IS NOT NULL
3261                         )
3262                WHERE
3263                         (
3264                                  (
3265                                           LEV                =1
3266                                       AND ICC_VERSION_number = p_icc_version_number
3267                                  )
3268                               OR
3269                                  (
3270                                           LEV <> 1
3271                                       AND
3272                                           (
3273                                                    item_catalog_group_id, ICC_VERSION_NUMBER
3274                                           )
3275                                           IN
3276                                           (SELECT item_catalog_group_id,
3277                                                  VERSION_SEQ_ID
3278                                           FROM   EGO_MTL_CATALOG_GRP_VERS_B
3279                                           WHERE
3280                                                  (
3281                                                         item_catalog_group_id,start_active_date
3282                                                  )
3283                                                  IN
3284                                                  (SELECT  item_catalog_group_id,
3285                                                           MAX(start_active_date) start_active_date
3286                                                  FROM     EGO_MTL_CATALOG_GRP_VERS_B
3287                                                  WHERE    NVL(end_active_date, sysdate) >=
3288                                                           (SELECT NVL(start_active_date,SYSDATE)
3289                                                           FROM   EGO_MTL_CATALOG_GRP_VERS_B
3290                                                           WHERE  ITEM_CATALOG_GROUP_ID = p_item_cat_group_id
3291                                                              AND VERSION_SEQ_ID        = p_icc_version_number
3292                                                           )
3293                                                       AND version_seq_id > 0
3294 
3295 
3296                                                       AND  start_active_date <=
3297                                                       (SELECT NVL(start_active_date,SYSDATE)
3298                                                       FROM   EGO_MTL_CATALOG_GRP_VERS_B
3299                                                       WHERE  ITEM_CATALOG_GROUP_ID = p_item_cat_group_id
3300                                                         AND VERSION_SEQ_ID        = p_icc_version_number
3301                                                       )
3302 
3303 
3304 
3305 
3306                                                  GROUP BY item_catalog_group_id
3307                                                  HAVING   MAX(start_active_date)<=
3308                                                           (SELECT NVL(start_active_date,SYSDATE)
3309                                                           FROM   EGO_MTL_CATALOG_GRP_VERS_B
3310                                                           WHERE  ITEM_CATALOG_GROUP_ID = p_item_cat_group_id
3311                                                              AND VERSION_SEQ_ID        = p_icc_version_number
3312                                                           )
3313                                                  )
3314                                           )
3315                                  )
3316                              --AND metadata_level ='ICC'
3317                         )
3318                GROUP BY attr_id
3319                )
3320            AND attr_id=l_attr_id
3321            AND attr_id<>Nvl(p_attr_id,0000); --end cur_metadata
3322 BEGIN
3323      ego_metadata_bulkload_pvt.Write_debug(G_PKG_NAME||'.'||l_proc_name||'->'||'Entering Check_TA_IS_INVALID');
3324         FOR i IN cur_list
3325         LOOP
3326                 l_attr_id := i.attr_id;
3327                 FOR j IN cur_metadata
3328                 LOOP
3329                         l_attr_name      := j.attr_name;
3330                         l_attr_disp_name := j.attr_display_name;
3331                         l_attr_sequence  := j.SEQUENCE;
3332 
3333                        /** Validate if any transaction atrribute exist with same
3334                        internal name while creating/ updating a transaction attribute**/
3335                        IF (p_attr_name IS NOT NULL ) THEN
3336                           IF (p_attr_name= l_attr_name) THEN
3337                             l_ta_is_invalid := TRUE;
3338                           END IF; --IF (p_attr_name= l_attr_name) THEN
3339                        END IF ; --IF (p_attr_name IS NOT NULL ) THEN
3340 
3341                        /** Validate if any transaction atrribute exist with same
3342                        display name while creating/ updating a transaction attribute**/
3343                        IF (p_attr_disp_name IS NOT NULL ) THEN
3344                           IF (p_attr_disp_name= l_attr_disp_name) THEN
3345                             l_ta_is_invalid := TRUE;
3346                           END IF; --IF (p_attr_disp_name= l_attr_disp_name) THEN
3347                        END IF; --IF (p_attr_disp_name IS NOT NULL ) THEN
3348 
3349                         /** Validate if any transaction atrribute exist with same
3350                        sequence while creating/ updating a transaction attribute**/
3351                        IF (p_attr_sequence IS NOT NULL ) THEN
3352                           IF (p_attr_sequence = l_attr_sequence) THEN
3353                             l_ta_is_invalid := TRUE;
3354                           END IF; --IF (p_attr_sequence= l_attr_sequence) THEN
3355                        END IF ; --IF (p_attr_sequence IS NOT NULL )
3356 
3357                 END LOOP;--FOR j IN cur_metadata
3358 
3359         END LOOP; --FOR i IN cur_list
3360         RETURN l_ta_is_invalid;
3361      ego_metadata_bulkload_pvt.Write_debug(G_PKG_NAME||'.'||l_proc_name||'->'||'End Check_TA_IS_INVALID');
3362 END Check_TA_IS_INVALID;
3363 
3364 END EGO_TA_BULKLOAD_PVT;