1 PACKAGE BODY CZ_IMP_SINGLE AS
2 /* $Header: czisngb.pls 120.32.12020000.3 2012/10/04 20:46:48 lamrute ship $ */
3
4 /*******************************
5 Stuller's changes :
6
7 1. extr_intl_text - orig_sys_ref has inventory_item_id:expl_type:orgId (instead of description)
8 2. Select - Distinct - items
9 3. Select - Distinct - item_property_value
10 4. Call cz_ref.delete_duplicates after populate_table
11 5. extr_intl_text change to query bill_sequence_id and use in query
12
13 ********************************/
14
15 G_BOM_APPLICATION_ID CONSTANT NUMBER := 702;
16 G_EGO_APPLICATION_ID CONSTANT NUMBER := 431;
17
18 G_PKG_NAME CONSTANT VARCHAR2(50) := 'CZ_IMP_SINGLE';
19
20 DECIMAL_TYPE CONSTANT NUMBER := 2;
21 TEXT_TYPE CONSTANT NUMBER := 4;
22 TL_TEXT_TYPE CONSTANT NUMBER := 8;
23
24 l_Batch_Size NUMBER := 100;
25
26 g_ItemCatalogTable SYSTEM.CZ_ITEM_CATALOG_TBL := SYSTEM.CZ_ITEM_CATALOG_TBL(SYSTEM.CZ_ITEM_CATALOG_REC(NULL));
27 g_CONFIG_ENGINE_TYPE VARCHAR2(10);
28
29 TYPE tCatalogGroupId IS TABLE OF cz_exv_item_master.item_catalog_group_id%TYPE INDEX BY BINARY_INTEGER;
30 TYPE tInventoryItemId IS TABLE OF cz_exv_item_master.inventory_item_id%TYPE INDEX BY BINARY_INTEGER;
31 TYPE tInt IS TABLE OF NUMBER INDEX BY BINARY_INTEGER;
32
33 itemCatalogGroupId tCatalogGroupId;
34 repCatalogGroupId tCatalogGroupId;
35 inventoryItemId tInventoryItemId;
36 repItemId tInventoryItemId;
37 hashCatalog tInt;
38
39 -- This table contains top model IDs of explosions that have been processed within an import run
40 processed_expls_tbl tInt;
41
42 --LA 9595142 This table contains model IDs that have been enabled for import
43 import_enabled_tbl tInt;
44 --Variable to store db setting value for disabling refresh of multiple copies of same model
45 disableMultipleCopyImport PLS_INTEGER;
46
47 --This variable stores a value of db setting, introduced for Pella, to be used across two procedures.
48
49 allowDecimalOptionClass PLS_INTEGER;
50
51 --9496782
52 czGatherStatsCnt NUMBER := 0;
53
54 TYPE number_tbl_type IS TABLE OF NUMBER INDEX BY BINARY_INTEGER;
55 TYPE varchar_tbl_type IS TABLE OF VARCHAR2(255) INDEX BY BINARY_INTEGER;
56 TYPE long_varchar_tbl_type IS TABLE OF VARCHAR2(4000) INDEX BY BINARY_INTEGER;
57 TYPE varchar_arr_tbl_type IS TABLE OF varchar_tbl_type INDEX BY BINARY_INTEGER;
58 TYPE number_arr_tbl_type IS TABLE OF number_tbl_type INDEX BY BINARY_INTEGER;
59 TYPE varchar_iv_tbl_type IS TABLE OF VARCHAR2(255) INDEX BY VARCHAR2(255);
60
61 TYPE rec_cols_rec IS RECORD (col_name VARCHAR2(255),col_num NUMBER);
62 TYPE rec_cols_tbl IS TABLE OF rec_cols_rec INDEX BY VARCHAR2(255);
63
64 PROCEDURE get_App_Info(p_app_short_name IN VARCHAR2,
65 x_oracle_schema OUT NOCOPY VARCHAR2) IS
66
67 v_status VARCHAR2(255);
68 v_industry VARCHAR2(255);
69 v_ret BOOLEAN;
70 BEGIN
71 v_ret := FND_INSTALLATION.GET_APP_INFO(APPLICATION_SHORT_NAME => p_app_short_name,
72 STATUS => v_status,
73 INDUSTRY => v_industry,
74 ORACLE_SCHEMA => x_oracle_schema);
75 END;
76
77 ------------------------------------------------------------------------------------------
78 -- Returns true if the input child model should be refreshed within this import run.
79 -- This check was added for Stuller but isn't currently in use. To do this correctly,
80 -- the logic in this procedure would need to be replaced for a check to see if this
81 -- model was modified in BOM.
82
83 FUNCTION importChildModel(inRunId IN NUMBER,
84 inOrgId IN NUMBER,
85 inTopId IN NUMBER,
86 inExplType IN VARCHAR2)
87 RETURN BOOLEAN IS
88
89 --LA 9595142 Create dynamic cursor
90 TYPE childModelCurType IS REF CURSOR;
91 c_childModel childModelCurType;
92 nCurStmt VARCHAR2(400);
93
94 xERROR BOOLEAN:=FALSE;
95 nChildFound BOOLEAN:=FALSE;
96 nDevlProjectId cz_devl_projects.devl_project_id%TYPE;
97
98 BEGIN
99
100 --LA 9595142 Changed the cursor sql to use import enabled flag
101 nCurStmt := 'SELECT p.model_ps_node_id FROM cz_xfr_project_bills p, cz_devl_projects d '
102 || ' WHERE p.organization_id = :1 '
103 || ' AND p.top_item_id = :2 '
104 || ' AND p.explosion_type = :3 '
105 || ' AND d.deleted_flag = ''0'' '
106 || ' AND NVL(d.config_engine_type,''L'') = :4 ' --LA 12548898 Engine Sync
107 || ' AND p.model_ps_node_id = d.devl_project_id ';
108
109 IF (disableMultipleCopyImport = 1) THEN
110 nCurStmt := nCurStmt || ' AND d.import_enabled = ''1'' ';
111 ELSE
112 nCurStmt := nCurStmt || ' AND d.devl_project_id = d.persistent_project_id ' ;
113 END IF;
114
115 --OPEN c_childModel;
116 OPEN c_childModel FOR nCurStmt USING inOrgId, inTopId, inExplType, g_CONFIG_ENGINE_TYPE;
117
118
119 FETCH c_childModel INTO nDevlProjectId;
120 nChildFound:=c_childModel%FOUND;
121 CLOSE c_childModel;
122 return nChildFound;
123 END;
124 ------------------------------------------------------------------------------------------
125
126 PROCEDURE EXTR_ITEM_MASTER(inRun_ID IN PLS_INTEGER,
127 nOrg_ID IN NUMBER,
128 nTop_ID IN NUMBER,
129 sExpl_type IN VARCHAR2)
130 IS
131 DFLT_REFPARTNBR CZ_DB_SETTINGS.VALUE%TYPE;
132 xERROR BOOLEAN :=FALSE;
133
134 v_settings_id VARCHAR2(40);
135 v_section_name VARCHAR2(30);
136
137 CURSOR C_REF_PART_NBR IS
138 SELECT UPPER(VALUE) FROM CZ_DB_SETTINGS
139 WHERE UPPER(SECTION_NAME) = v_section_name
140 AND UPPER(SETTING_ID) = v_settings_id;
141
142 TYPE tItemDesc IS TABLE OF cz_exv_items.item_desc%TYPE INDEX BY BINARY_INTEGER;
143 TYPE tBomItemType IS TABLE OF cz_exv_items.bom_item_type%TYPE INDEX BY BINARY_INTEGER;
144 TYPE tOrganizationId IS TABLE OF cz_exv_items.organization_id%TYPE INDEX BY BINARY_INTEGER;
145 TYPE tInventoryItemId IS TABLE OF cz_exv_items.inventory_item_id%TYPE INDEX BY BINARY_INTEGER;
146 TYPE tSegment1 IS TABLE OF cz_exv_items.segment1%TYPE INDEX BY BINARY_INTEGER;
147 TYPE tConcatenatedSegments IS TABLE OF cz_exv_items.concatenated_segments%TYPE INDEX BY BINARY_INTEGER;
148 TYPE tFixedLeadTime IS TABLE OF cz_exv_items.fixed_lead_time%TYPE INDEX BY BINARY_INTEGER;
149 TYPE tItemStatusCode IS TABLE OF cz_exv_items.inventory_item_status_code%TYPE INDEX BY BINARY_INTEGER;
150 TYPE tCatalogId IS TABLE OF cz_exv_items.item_catalog_group_id%TYPE INDEX BY BINARY_INTEGER;
151 TYPE tIndivisibleFlag IS TABLE OF cz_exv_items.indivisible_flag%TYPE INDEX BY BINARY_INTEGER;
152 TYPE tCustomerOrderFlag IS TABLE OF cz_exv_items.customer_order_enabled_flag%TYPE INDEX BY BINARY_INTEGER;
153 TYPE tPrimaryUomCode IS TABLE OF cz_exv_items.primary_uom_code%TYPE INDEX BY BINARY_INTEGER;
154
155 TYPE tOrigSysRef IS TABLE OF cz_imp_item_master.orig_sys_ref%TYPE INDEX BY BINARY_INTEGER;
156 TYPE tRefPartNbr IS TABLE OF cz_imp_item_master.ref_part_nbr%TYPE INDEX BY BINARY_INTEGER;
157 TYPE tDescText IS TABLE OF cz_imp_item_master.desc_text%TYPE INDEX BY BINARY_INTEGER;
158 TYPE tLeadTime IS TABLE OF cz_imp_item_master.lead_time%TYPE INDEX BY BINARY_INTEGER;
159 TYPE tQuoteableFlag IS TABLE OF cz_imp_item_master.quoteable_flag%TYPE INDEX BY BINARY_INTEGER;
160 TYPE tDeletedFlag IS TABLE OF cz_imp_item_master.deleted_flag%TYPE INDEX BY BINARY_INTEGER;
161 TYPE tItemUomCode IS TABLE OF cz_imp_item_master.primary_uom_code%TYPE INDEX BY BINARY_INTEGER;
162 TYPE tDecimalQtyFlag IS TABLE OF cz_imp_item_master.decimal_qty_flag%TYPE INDEX BY BINARY_INTEGER;
163 TYPE tFskItemType IS TABLE OF cz_imp_item_master.fsk_itemtype_1_1%TYPE INDEX BY BINARY_INTEGER;
164 TYPE tSrcApplicationId IS TABLE OF cz_imp_item_master.src_application_id%TYPE INDEX BY BINARY_INTEGER;
165 TYPE tSrcTypeCode IS TABLE OF cz_imp_item_master.src_type_code%TYPE INDEX BY BINARY_INTEGER;
166
167 InventoryItemId tInventoryItemId;
168 OrganizationId tOrganizationId;
169 Segment1 tSegment1;
170 ConcatenatedSegments tConcatenatedSegments;
171 ItemDesc tItemDesc;
172 FixedLeadTime tFixedLeadTime;
173 BomItemType tBomItemType;
174 CustomerOrderFlag tCustomerOrderFlag;
175 ItemStatusCode tItemStatusCode;
176 PrimaryUomCode tPrimaryUomCode;
177 IndivisibleFlag tIndivisibleFlag;
178 CatalogId tCatalogId;
179 SrcApplicationId tSrcApplicationId;
180
181 iOrigSysRef tOrigSysRef;
182 iRefPartNbr tRefPartNbr;
183 iDescText tDescText;
184 iLeadTime tLeadTime;
185 iQuoteableFlag tQuoteableFlag;
186 iDeletedFlag tDeletedFlag;
187 iPrimaryUomCode tItemUomCode;
188 iDecimalQtyFlag tDecimalQtyFlag;
189 iFskItemType tFskItemType;
190 iSrcApplicationId tSrcApplicationId;
191 iSrcTypeCode tSrcTypeCode;
192 nIndex PLS_INTEGER := 1;
193
194 st_time number;
195 end_time number;
196 loop_end_time number;
197 insert_end_time number;
198 d_str varchar2(255);
199
200 BEGIN
201
202 v_settings_id := 'REFPARTNBR';
203 v_section_name := 'ORAAPPS_INTEGRATE';
204
205 OPEN C_REF_PART_NBR;
206 FETCH C_REF_PART_NBR INTO DFLT_REFPARTNBR;
207 CLOSE C_REF_PART_NBR;
208
209 if (CZ_IMP_ALL.get_time) then
210 st_time := dbms_utility.get_time();
211 end if;
212
213 SELECT DISTINCT INVENTORY_ITEM_ID, ORGANIZATION_ID, SEGMENT1, CONCATENATED_SEGMENTS, ITEM_DESC,
214 FIXED_LEAD_TIME, BOM_ITEM_TYPE, CUSTOMER_ORDER_ENABLED_FLAG,
215 INVENTORY_ITEM_STATUS_CODE, PRIMARY_UOM_CODE, INDIVISIBLE_FLAG, ITEM_CATALOG_GROUP_ID,
216 INV_APPLICATION_ID
217 BULK COLLECT INTO
218 InventoryItemId, OrganizationId, Segment1, ConcatenatedSegments, ItemDesc,
219 FixedLeadTime, BomItemType, CustomerOrderFlag,
220 ItemStatusCode, PrimaryUomCode, IndivisibleFlag, CatalogId,
221 SrcApplicationId
222 FROM CZ_EXV_ITEMS
223 WHERE ORGANIZATION_ID=nOrg_ID AND TOP_ITEM_ID=nTop_ID
224 AND EXPLOSION_TYPE=sExpl_type;
225
226 if (CZ_IMP_ALL.get_time) then
227 end_time := dbms_utility.get_time();
228 d_str := inRun_Id || ' Bulk collect item master (' || nTop_Id || ') :' || (end_time-st_time)/100.00;
229 xERROR:=cz_utils.log_report(d_str,1,'EXTRACTION',11299,inRun_id);
230 end if;
231
232 FOR i IN 1..InventoryItemId.COUNT LOOP
233
234 iOrigSysRef(nIndex) := CZ_ORAAPPS_INTEGRATE.ITEM_SURROGATE_KEY(to_char(InventoryItemId(i)),to_char(OrganizationId(i)));
235 IF(DFLT_REFPARTNBR = 'SEGMENT1')THEN
236 iRefPartNbr(nIndex) := Segment1(i);
237 ELSIF(DFLT_REFPARTNBR = 'CONCATENATED_SEGMENTS')THEN
238 iRefPartNbr(nIndex) := ConcatenatedSegments(i);
239 ELSE
240 iRefPartNbr(nIndex) := ItemDesc(i);
241 END IF;
242 iDescText(nIndex) := ItemDesc(i);
243 iLeadTime(nIndex) := FixedLeadTime(i);
244 IF(CustomerOrderFlag(i) = 'N')THEN
245 IF(BomItemType(i) = cnStandard)THEN
246 iQuoteableFlag(nIndex) := '1';
247 ELSE
248 iQuoteableFlag(nIndex) := '0';
249 END IF;
250 ELSE
251 iQuoteableFlag(nIndex) := '1';
252 END IF;
253 /* Bug 8210696 - no need to check for 'OBSOLETE'
254 IF(ItemStatusCode(i) = 'OBSOLETE')THEN
255 iDeletedFlag(nIndex) := '1';
256 ELSE
257 iDeletedFlag(nIndex) := '0';
258 END IF;*/
259 iDeletedFlag(nIndex) := '0';
260 iPrimaryUomCode(nIndex) := PrimaryUomCode(i);
261
262 /* Added the profile condition for the fix of bug # 3074328 jjujjava 10/06/03 */
263 IF(UPPER(FND_PROFILE.VALUE('CZ_IMP_DECIMAL_QTY_FLAG')) = 'Y')THEN
264 IF(IndivisibleFlag(i) = 'Y')THEN
265 iDecimalQtyFlag(nIndex) := '0';
266 ELSIF(BomItemType(i) = cnStandard OR (BomItemType(i) = cnOptionClass AND allowDecimalOptionClass = 1)) THEN
267 iDecimalQtyFlag(nIndex) := '1';
268 ELSE
269 iDecimalQtyFlag(nIndex) := '0';
270 END IF;
271 ELSE
272 iDecimalQtyFlag(nIndex) := '0';
273 END IF;
274
275 iFskItemType(nIndex) := CatalogId(i);
276 iSrcApplicationId(nIndex) := SrcApplicationId(i);
277 iSrcTypeCode(nIndex) := BomItemType(i);
278
279 nIndex := nIndex + 1;
280 END LOOP;
281
282 if (CZ_IMP_ALL.get_time) then
283 loop_end_time := dbms_utility.get_time();
284 --dbms_output.put_line ('loop over coll. (' || nTop_Id || ') :' || (loop_end_time-end_time)/100.00);
285 end if;
286
287 FORALL i IN 1..iOrigSysRef.COUNT
288 INSERT /*+ APPEND */ INTO CZ_IMP_ITEM_MASTER
289 (ORIG_SYS_REF, REF_PART_NBR, DESC_TEXT, LEAD_TIME,
290 QUOTEABLE_FLAG, DELETED_FLAG,
291 RUN_ID, PRIMARY_UOM_CODE, DECIMAL_QTY_FLAG,
292 FSK_ITEMTYPE_1_1, FSK_ITEMTYPE_1_EXT,
293 SRC_APPLICATION_ID,SRC_TYPE_CODE)
294 VALUES
295 (iOrigSysRef(i), iRefPartNbr(i), ItemDesc(i), iLeadTime(i),
296 iQuoteableFlag(i), iDeletedFlag(i),
297 inRun_ID, iPrimaryUomCode(i), iDecimalQtyFlag(i),
298 iFskItemType(i), iFskItemType(i),
299 iSrcApplicationId(i), iSrcTypeCode(i));
300
301 if (CZ_IMP_ALL.get_time) then
302 insert_end_time := dbms_utility.get_time();
303 --dbms_output.put_line ('Insert imp item master (' || nTop_Id || ') :' || (insert_end_time-end_time)/100.00);
304 end if;
305
306
307 COMMIT;
308
309 EXCEPTION
310 WHEN CZ_ADMIN.IMP_UNEXP_SQL_ERROR THEN
311 RAISE;
312 WHEN CZ_ADMIN.IMP_MAXERR_REACHED THEN
313 RAISE;
314 WHEN OTHERS THEN
315 d_str:=CZ_UTILS.GET_TEXT('CZ_IMP_OPERATION_FAILED','ERRORTEXT',SQLERRM);
316 xERROR:=cz_utils.log_report(d_str,1,'EXTR_ITEM_MASTER',11276,inRun_Id);
317 RAISE CZ_ADMIN.IMP_UNEXP_SQL_ERROR;
318 END;
319 ------------------------------------------------------------------------------------------
320
321 PROCEDURE setFCEMinMax (minVal IN OUT NOCOPY NUMBER,
322 maxVal IN OUT NOCOPY NUMBER,
323 defaultVal IN NUMBER,
324 p_decimal_item_flag IN VARCHAR2,
325 p_use_defaults IN VARCHAR2,
326 p_set_decimals IN VARCHAR2,
327 p_default_dec IN NUMBER,
328 p_default_int IN NUMBER ) IS
329 l_max_boundary_val NUMBER;
330
331 FUNCTION setFCEMaxBoundary RETURN NUMBER IS
332 l_max_boundary_val NUMBER;
333 BEGIN
334 --
335 -- by default set max boundary value to FND_PROFILE.VALUE('CZ_DEFAULT_MAX_QTY_INT')
336 --
337 l_max_boundary_val := p_default_int;
338
339 --
340 -- if Imports sets decimal quantity <=> FND_PROFILE.VALUE('CZ_IMP_DECIMAL_QTY_FLAG')='Y'
341 -- and item is decimal <=> p_decimal_item_flag='1'
342 -- then set set max boundary value to FND_PROFILE.VALUE('CZ_DEFAULT_MAX_QTY_DEC')
343 --
344 IF (UPPER(p_set_decimals)='Y' AND p_decimal_item_flag='1') THEN
345 l_max_boundary_val := p_default_dec;
346 END IF;
347 RETURN l_max_boundary_val;
348 END setFCEMaxBoundary;
349
350 FUNCTION setFCEMin RETURN NUMBER IS
351 BEGIN
352 IF p_set_decimals='Y' AND p_decimal_item_flag='1' THEN
353 RETURN 0; -- decimals are used and decimal flag = true
354 END IF;
355 RETURN 1; -- integer or decimals , but decimals are not used
356 END setFCEMin;
357
358 BEGIN
359 -- get value of max boundary
360 l_max_boundary_val := setFCEMaxBoundary();
361
362 IF defaultVal IS NULL THEN
363 --
364 -- min=NULL, max=NULL, default value=NULL
365 --
366 IF minVal IS NULL AND (maxVal IS NULL OR maxVal IN(0,-1)) THEN
367 minVal := setFCEMin();
368 maxVal := l_max_boundary_val;
369 RETURN;
370 END IF;
371
372 --
373 -- min=NULL, max IS NOT NULL, default value=NULL
374 --
375 IF minVal IS NULL AND NOT(maxVal IS NULL OR maxVal IN(0,-1)) THEN
376 minVal := setFCEMin();
377 RETURN;
378 END IF;
379
380 --
381 -- min IS NOT NULL, max IS NOT NULL, default value=NULL
382 --
383 IF minVal IS NOT NULL AND NOT(maxVal IS NULL OR maxVal IN(0,-1)) THEN
384 RETURN;
385 END IF;
386
387 --
388 -- min IS NOT NULL, max IS NULL, default value=NULL
389 --
390 IF minVal IS NOT NULL AND (maxVal IS NULL OR maxVal IN(0,-1)) THEN
391 maxVal := l_max_boundary_val;
392 RETURN;
393 END IF;
394
395 ELSE -- there is a not null default value
396
397 --
398 -- min=NULL, max=NULL, default value IS NOT NULL
399 --
400 IF minVal IS NULL AND (maxVal IS NULL OR maxVal IN(0,-1)) THEN
401 IF p_use_defaults='Y' THEN
402 minVal := defaultVal;
403 maxVal := defaultVal;
404 ELSE
405 minVal := setFCEMin();
406 maxVal := l_max_boundary_val;
407 END IF;
408 RETURN;
409 END IF;
410
411 --
412 -- min=NULL, max IS NOT NULL, default value IS NOT NULL
413 --
414 IF minVal IS NULL AND NOT(maxVal IS NULL OR maxVal IN(0,-1)) THEN
415 IF p_use_defaults='Y' THEN
416 IF defaultVal <= maxVal THEN
417 minVal := defaultVal;
418 ELSE
419 minVal := setFCEMin();
420 END IF;
421 ELSE -- do not use defaults case
422 minVal := setFCEMin();
423 END IF;
424 RETURN;
425 END IF;
426
427 --
428 -- min IS NOT NULL, max IS NOT NULL, default value IS NOT NULL
429 --
430 IF minVal IS NOT NULL AND NOT(maxVal IS NULL OR maxVal IN(0,-1)) THEN
431 RETURN;
432 END IF;
433
434 --
435 -- min IS NOT NULL, max IS NULL, default value IS NOT NULL
436 --
437 IF minVal IS NOT NULL AND (maxVal IS NULL OR maxVal IN(0,-1)) THEN
438
439 IF p_use_defaults='Y' THEN
440 IF defaultVal >= minVal THEN
441 maxVal := defaultVal;
442 ELSE
443 maxVal := l_max_boundary_val;
444 END IF;
445 ELSE -- do not use defaults case
446 maxVal := l_max_boundary_val;
447 END IF;
448
449 RETURN;
450 END IF;
451
452 END IF;
453
454
455 END setFCEMinMax;
456
457 ------------------------------------------------------------------------------------------
458 PROCEDURE EXTR_PS_NODE(inRun_ID IN PLS_INTEGER,
459 nOrg_ID IN NUMBER,
460 nTop_ID IN NUMBER,
461 sExpl_type IN VARCHAR2,
462 nModelId IN NUMBER)
463 IS
464
465 TYPE tIntegerArray IS TABLE OF PLS_INTEGER INDEX BY BINARY_INTEGER;
466 TYPE tStringArray IS TABLE OF VARCHAR2(2000) INDEX BY BINARY_INTEGER;
467 TYPE tNumberArray IS TABLE OF NUMBER INDEX BY BINARY_INTEGER;
468
469 TYPE tComponentSequenceId IS TABLE OF cz_exv_item_master.component_sequence_id%TYPE INDEX BY BINARY_INTEGER;
470 TYPE tComponentCode IS TABLE OF cz_exv_item_master.component_code%TYPE INDEX BY BINARY_INTEGER;
471 TYPE tCreationDate IS TABLE OF cz_exv_item_master.creation_date%TYPE INDEX BY BINARY_INTEGER;
472 TYPE tCreatedBy IS TABLE OF cz_exv_item_master.created_by%TYPE INDEX BY BINARY_INTEGER;
473 TYPE tLastUpdateDate IS TABLE OF cz_exv_item_master.last_update_date%TYPE INDEX BY BINARY_INTEGER;
474 TYPE tLastUpdatedBy IS TABLE OF cz_exv_item_master.last_updated_by%TYPE INDEX BY BINARY_INTEGER;
475 TYPE tEffectivityDate IS TABLE OF cz_exv_item_master.effectivity_date%TYPE INDEX BY BINARY_INTEGER;
476 TYPE tDisableDate IS TABLE OF cz_exv_item_master.disable_date%TYPE INDEX BY BINARY_INTEGER;
477 TYPE tDescription IS TABLE OF cz_exv_item_master.description%TYPE INDEX BY BINARY_INTEGER;
478 TYPE tLowQuantity IS TABLE OF cz_exv_item_master.low_quantity%TYPE INDEX BY BINARY_INTEGER;
479 TYPE tHighQuantity IS TABLE OF cz_exv_item_master.high_quantity%TYPE INDEX BY BINARY_INTEGER;
480 TYPE tSortOrder IS TABLE OF cz_exv_item_master.sort_order%TYPE INDEX BY BINARY_INTEGER;
481 TYPE tBomItemType IS TABLE OF cz_exv_item_master.bom_item_type%TYPE INDEX BY BINARY_INTEGER;
482 TYPE tComponentItemId IS TABLE OF cz_exv_item_master.component_item_id%TYPE INDEX BY BINARY_INTEGER;
483 TYPE tMutuallyExclusiveOptions IS TABLE OF cz_exv_item_master.mutually_exclusive_options%TYPE INDEX BY BINARY_INTEGER;
484 TYPE tPickComponentsFlag IS TABLE OF cz_exv_item_master.pick_components_flag%TYPE INDEX BY BINARY_INTEGER;
485 TYPE tComponentQuantity IS TABLE OF cz_exv_item_master.component_quantity%TYPE INDEX BY BINARY_INTEGER;
486 TYPE tOptional IS TABLE OF cz_exv_item_master.optional%TYPE INDEX BY BINARY_INTEGER;
487 TYPE tOrganizationId IS TABLE OF cz_exv_item_master.organization_id%TYPE INDEX BY BINARY_INTEGER;
488 TYPE tTopItemId IS TABLE OF cz_exv_item_master.top_item_id%TYPE INDEX BY BINARY_INTEGER;
489 TYPE tExplosionType IS TABLE OF cz_exv_item_master.explosion_type%TYPE INDEX BY BINARY_INTEGER;
490 TYPE tPlanLevel IS TABLE OF cz_exv_item_master.plan_level%TYPE INDEX BY BINARY_INTEGER;
491 TYPE tIndivisibleFlag IS TABLE OF cz_exv_item_master.indivisible_flag%TYPE INDEX BY BINARY_INTEGER;
492 TYPE tCustomerOrderEnabledFlag IS TABLE OF cz_exv_item_master.customer_order_enabled_flag%TYPE INDEX BY BINARY_INTEGER;
493 TYPE tPrimaryUomCode IS TABLE OF cz_exv_item_master.primary_uom_code%TYPE INDEX BY BINARY_INTEGER;
494 TYPE tConfigModelType IS TABLE OF cz_exv_item_master.config_model_type%TYPE INDEX BY BINARY_INTEGER;
495 TYPE tModelType IS TABLE OF cz_exv_item_master.model_type%TYPE INDEX BY BINARY_INTEGER;
496
497 TYPE tPsNodeType IS TABLE OF cz_imp_ps_nodes.ps_node_type%TYPE INDEX BY BINARY_INTEGER;
498 TYPE tOrigSysRef IS TABLE OF cz_imp_ps_nodes.orig_sys_ref%TYPE INDEX BY BINARY_INTEGER;
499 TYPE tName IS TABLE OF cz_imp_ps_nodes.name%TYPE INDEX BY BINARY_INTEGER;
500 TYPE tMinimum IS TABLE OF cz_imp_ps_nodes.minimum%TYPE INDEX BY BINARY_INTEGER;
501 TYPE tMaximum IS TABLE OF cz_imp_ps_nodes.maximum%TYPE INDEX BY BINARY_INTEGER;
502 TYPE tTreeSeq IS TABLE OF cz_imp_ps_nodes.tree_seq%TYPE INDEX BY BINARY_INTEGER;
503 TYPE tBomTreatment IS TABLE OF cz_imp_ps_nodes.bom_treatment%TYPE INDEX BY BINARY_INTEGER;
504 TYPE tUiOmit IS TABLE OF cz_imp_ps_nodes.ui_omit%TYPE INDEX BY BINARY_INTEGER;
505 TYPE tUiSection IS TABLE OF cz_imp_ps_nodes.ui_section%TYPE INDEX BY BINARY_INTEGER;
506 TYPE tProductFlag IS TABLE OF cz_imp_ps_nodes.product_flag%TYPE INDEX BY BINARY_INTEGER;
507 TYPE tfskIntlText IS TABLE OF cz_imp_ps_nodes.fsk_intltext_1_1%TYPE INDEX BY BINARY_INTEGER;
508 TYPE tfskItemMaster IS TABLE OF cz_imp_ps_nodes.fsk_itemmaster_2_1%TYPE INDEX BY BINARY_INTEGER;
509 TYPE tfskItemMaster22 IS TABLE OF cz_imp_ps_nodes.fsk_itemmaster_2_2%TYPE INDEX BY BINARY_INTEGER;
510 TYPE tfskParentNode IS TABLE OF cz_imp_ps_nodes.fsk_psnode_3_1%TYPE INDEX BY BINARY_INTEGER;
511 TYPE tfskDevlProject IS TABLE OF cz_imp_ps_nodes.fsk_devlproject_5_1%TYPE INDEX BY BINARY_INTEGER;
512 TYPE tEffectiveFrom IS TABLE OF cz_imp_ps_nodes.effective_from%TYPE INDEX BY BINARY_INTEGER;
513 TYPE tEffectiveUntil IS TABLE OF cz_imp_ps_nodes.effective_until%TYPE INDEX BY BINARY_INTEGER;
514 TYPE tRunId IS TABLE OF cz_imp_ps_nodes.run_id%TYPE INDEX BY BINARY_INTEGER;
515 TYPE tSoItemTypeCode IS TABLE OF cz_imp_ps_nodes.so_item_type_code%TYPE INDEX BY BINARY_INTEGER;
516 TYPE tMinimumSelected IS TABLE OF cz_imp_ps_nodes.minimum_selected%TYPE INDEX BY BINARY_INTEGER;
517 TYPE tMaximumSelected IS TABLE OF cz_imp_ps_nodes.maximum_selected%TYPE INDEX BY BINARY_INTEGER;
518 TYPE tBomRequired IS TABLE OF cz_imp_ps_nodes.bom_required%TYPE INDEX BY BINARY_INTEGER;
519 TYPE tInitialValue IS TABLE OF cz_imp_ps_nodes.initial_value%TYPE INDEX BY BINARY_INTEGER;
520 TYPE tfskReference IS TABLE OF cz_imp_ps_nodes.fsk_psnode_6_1%TYPE INDEX BY BINARY_INTEGER;
521 TYPE tDecimalQtyFlag IS TABLE OF cz_imp_ps_nodes.decimal_qty_flag%TYPE INDEX BY BINARY_INTEGER;
522 TYPE tUserNum IS TABLE OF cz_imp_ps_nodes.user_num03%TYPE INDEX BY BINARY_INTEGER;
523 TYPE tQuoteableFlag IS TABLE OF cz_imp_ps_nodes.quoteable_flag%TYPE INDEX BY BINARY_INTEGER;
524 TYPE tPsPrimaryUomCode IS TABLE OF cz_imp_ps_nodes.primary_uom_code%TYPE INDEX BY BINARY_INTEGER;
525 TYPE tBomSortOrder IS TABLE OF cz_imp_ps_nodes.bom_sort_order%TYPE INDEX BY BINARY_INTEGER;
526 TYPE tComponentSequencePath IS TABLE OF cz_imp_ps_nodes.component_sequence_path%TYPE INDEX BY BINARY_INTEGER;
527 TYPE tTrackableFlag IS TABLE OF cz_imp_ps_nodes.ib_trackable%TYPE INDEX BY BINARY_INTEGER;
528 TYPE tInitNumVal IS TABLE OF cz_imp_ps_nodes.initial_num_value%TYPE INDEX BY BINARY_INTEGER;
529 TYPE tSrcApplicationId IS TABLE OF cz_imp_ps_nodes.src_application_id%TYPE INDEX BY BINARY_INTEGER;
530 TYPE tIBLinkItemFlag IS TABLE OF cz_imp_ps_nodes.ib_link_item_flag%TYPE INDEX BY BINARY_INTEGER;
531
532 -- changes for TSO --
533
534 TYPE tShippableItemFlag IS TABLE OF cz_exv_item_master.shippable_item_flag%TYPE
535 INDEX BY BINARY_INTEGER;
536 TYPE tTransEnabledFlag IS TABLE OF cz_exv_item_master.mtl_transactions_enabled_flag%TYPE
537 INDEX BY BINARY_INTEGER;
538 TYPE tReplenishToOrderFlag IS TABLE OF cz_exv_item_master.replenish_to_order_flag%TYPE
539 INDEX BY BINARY_INTEGER;
540 TYPE tSerialNumberControlCode IS TABLE OF cz_exv_item_master.serial_number_control_code%TYPE
541 INDEX BY BINARY_INTEGER;
542
543 TYPE tPSShippableItemFlag IS TABLE OF cz_imp_ps_nodes.shippable_item_flag%TYPE
544 INDEX BY BINARY_INTEGER;
545 TYPE tInventoryTransactableFlag IS TABLE OF cz_imp_ps_nodes.inventory_transactable_flag%TYPE
546 INDEX BY BINARY_INTEGER;
547 TYPE tAssembleToOrderFlag IS TABLE OF cz_imp_ps_nodes.assemble_to_order_flag%TYPE
548 INDEX BY BINARY_INTEGER;
549 TYPE tSerializableItemFlag IS TABLE OF cz_imp_ps_nodes.serializable_item_flag%TYPE
550 INDEX BY BINARY_INTEGER;
551
552 ShippableItemFlag tShippableItemFlag;
553 TransEnabledFlag tTransEnabledFlag;
554 ReplenishToOrderFlag tReplenishToOrderFlag;
555 SerialNumberControlCode tSerialNumberControlCode;
556
557 iShippableItemFlag tPSShippableItemFlag;
558 iInventoryTransactableFlag tInventoryTransactableFlag;
559 iAssembleToOrder tAssembleToOrderFlag;
560 iSerializableItemFlag tSerializableItemFlag;
561
562 -- end of changes for TSO --
563
564 n_SortWidth NUMBER := cz_imp_ps_node.n_SortWidth;
565 x_usesurr_itemmaster PLS_INTEGER:=CZ_UTILS.GET_PK_USEEXPANSION_FLAG('CZ_ITEM_MASTERS', 'IMPORT');
566 x_usesurr_intltext PLS_INTEGER:=CZ_UTILS.GET_PK_USEEXPANSION_FLAG('CZ_LOCALIZED_TEXTS', 'IMPORT');
567 x_usesurr_psnode PLS_INTEGER:=CZ_UTILS.GET_PK_USEEXPANSION_FLAG('CZ_PS_NODES', 'IMPORT');
568 x_usesurr_devlproject PLS_INTEGER:=CZ_UTILS.GET_PK_USEEXPANSION_FLAG('CZ_DEVL_PROJECTS', 'IMPORT');
569 x_error BOOLEAN:=FALSE;
570
571 ComponentSequenceId tComponentSequenceId;
572 ComponentCode tComponentCode;
573 CreationDate tCreationDate;
574 CreatedBy tCreatedBy;
575 LastUpdateDate tLastUpdateDate;
576 LastUpdatedBy tLastUpdatedBy;
577 EffectivityDate tEffectivityDate;
578 DisableDate tDisableDate;
579 Description tDescription;
580 LowQuantity tLowQuantity;
581 HighQuantity tHighQuantity;
582 SortOrder tSortOrder;
583 BomItemType tBomItemType;
584 ComponentItemId tComponentItemId;
585 MutuallyExclusiveOptions tMutuallyExclusiveOptions;
586 PickComponentsFlag tPickComponentsFlag;
587 ComponentQuantity tComponentQuantity;
588 v_Optional tOptional;
589 OrganizationId tOrganizationId;
590 TopItemId tTopItemId;
591 ExplosionType tExplosionType;
592 PlanLevel tPlanLevel;
593 IndivisibleFlag tIndivisibleFlag;
594 CustomerOrderEnabledFlag tCustomerOrderEnabledFlag;
595 PrimaryUomCode tPrimaryUomCode;
596 ConfigModelType tConfigModelType;
597 ModelType tModelType;
598 TrackableFlag tTrackableFlag;
599 SrcApplicationId tSrcApplicationId;
600 FSKItemMaster22 tfskItemMaster22;
601 IBLinkItemFlag tIBLinkItemFlag;
602
603 iComponentCode tComponentCode;
604 iPsNodeType tPsNodeType;
605 iOrigSysRef tOrigSysRef;
606 iPlanLevel tPlanLevel;
607 iName tName;
608 iMinimum tMinimum;
609 iMaximum tMaximum;
610 iTreeSeq tTreeSeq;
611 iBomTreatment tBomTreatment;
612 iUiOmit tUiOmit;
613 iUiSection tUiSection;
614 iProductFlag tProductFlag;
615 ifskIntlText tfskIntlText;
616 ifskIntlTextExt tfskIntlText;
617 ifskItemMaster tfskItemMaster;
618 ifskItemMasterExt tfskItemMaster;
619 ifskItemMaster22 tfskItemMaster22;
620 ifskParentNode tfskParentNode;
621 ifskParentNodeExt tfskParentNode;
622 ifskDevlProject tfskDevlProject;
623 ifskDevlProjectExt tfskDevlProject;
624 ifskReference tfskReference;
625 iMutuallyExclusive tMutuallyExclusiveOptions;
626 iOptional tOptional;
627 iCreationDate tCreationDate;
628 iCreatedBy tCreatedBy;
629 iLastUpdateDate tLastUpdateDate;
630 iLastUpdatedBy tLastUpdatedBy;
631 iEffectiveFrom tEffectiveFrom;
632 iEffectiveUntil tEffectiveUntil;
633 iComponentSequenceId tComponentSequenceId;
634 iRunId tRunId;
635 iSoItemTypeCode tSoItemTypeCode;
636 iMinimumSelected tMinimumSelected;
637 iMaximumSelected tMaximumSelected;
638 iBomRequired tBomRequired;
639 iInitialValue tInitialValue;
640 iOrganizationId tOrganizationId;
641 iTopItemId tTopItemId;
642 iExplosionType tExplosionType;
643 iDecimalQtyFlag tDecimalQtyFlag;
644 iQuoteableFlag tQuoteableFlag;
645 iPrimaryUomCode tPsPrimaryUomCode;
646 iBomSortOrder tBomSortOrder;
647 iComponentSequencePath tComponentSequencePath;
648 iBTrackableFlag tTrackableFlag;
649 iInitNumVal tInitNumVal;
650 iSrcApplicationId tSrcApplicationId;
651 iIBLinkItemFlag tIBLinkItemFlag;
652
653 nIndex PLS_INTEGER := 1;
654 nStack PLS_INTEGER := 1;
655 nCount PLS_INTEGER;
656 genStatisticsCz PLS_INTEGER;
657
658 l_use_defaults VARCHAR2(1);
659 l_set_decimals VARCHAR2(1);
660 l_default_dec NUMBER;
661 l_default_int NUMBER;
662
663 l_imp_decimal_qty_flag VARCHAR2(1) := UPPER(FND_PROFILE.VALUE('CZ_IMP_DECIMAL_QTY_FLAG'));
664 l_max_boundary_value NUMBER;
665
666 StackPlanLevel tPlanLevel;
667 StackComponentCode tComponentCode;
668 StackTopItemId tTopItemId;
669 StackModelType tModelType;
670 StackProcessFlag tIntegerArray;
671 AllModels tStringArray;
672 thisOrigSysRef cz_imp_ps_nodes.orig_sys_ref%TYPE;
673
674 ComponentSequencePath cz_imp_ps_nodes.component_sequence_path%TYPE;
675 previousPlanLevel PLS_INTEGER;
676
677 nDebug PLS_INTEGER;
678
679 st_time number;
680 end_time number;
681 loop_end_time number;
682 insert_end_time number;
683 d_str varchar2(255);
684 l_lang VARCHAR2(4);
685
686 MemoryBulkSize NATURAL;
687 startFlag BOOLEAN := TRUE;
688
689 v_settings_id VARCHAR2(40);
690 v_section_name VARCHAR2(30);
691 --9496782
692 v_batchSize NUMBER;
693
694
695 CURSOR c_data (inLang VARCHAR2) IS
696 SELECT
697 NVL(COMMON_COMPONENT_SEQUENCE_ID, COMPONENT_SEQUENCE_ID), COMPONENT_CODE, CREATION_DATE, CREATED_BY, LAST_UPDATE_DATE,
698 LAST_UPDATED_BY, EFFECTIVITY_DATE, DISABLE_DATE, ITEM_DESC, LOW_QUANTITY, HIGH_QUANTITY,
699 SORT_ORDER, BOM_ITEM_TYPE, COMPONENT_ITEM_ID, MUTUALLY_EXCLUSIVE_OPTIONS, plan_level,
700 PICK_COMPONENTS_FLAG, COMPONENT_QUANTITY, OPTIONAL, organization_id, top_item_id, explosion_type,
701 INDIVISIBLE_FLAG, CUSTOMER_ORDER_ENABLED_FLAG, PRIMARY_UOM_CODE, MODEL_TYPE, COMMS_NL_TRACKABLE_FLAG,
702 CONFIG_MODEL_TYPE, BOM_APPLICATION_ID, INV_APPLICATION_ID, IB_LINK_ITEM_FLAG,
703 DECODE(SHIPPABLE_ITEM_FLAG,'Y','1','N','0','0'),
704 DECODE(MTL_TRANSACTIONS_ENABLED_FLAG,'Y','1','N','0','0'),
705 DECODE(REPLENISH_TO_ORDER_FLAG,'Y','1','N','0','0'),
706 SERIAL_NUMBER_CONTROL_CODE
707 FROM cz_exv_item_master
708 WHERE organization_id = nOrg_ID
709 AND top_item_id = nTop_ID
710 AND explosion_type = sExpl_type
711 AND language = inLang
712 ORDER BY sort_order, component_code;
713
714 parentOrigSysRef tOrigSysRef;
715 childCount tNumberArray;
716
717 CURSOR c_parent IS
718 SELECT fsk_psnode_3_1, COUNT(*) FROM cz_imp_ps_nodes
719 WHERE run_id = inRun_ID
720 AND rec_status IS NULL
721 AND optional = OraNo
722 GROUP BY fsk_psnode_3_1;
723 ---------------------------------------------------------------------------------------------------
724 FUNCTION ShiftComponentCode(inComponentCode IN VARCHAR2, inPlanLevel IN NUMBER)
725 RETURN VARCHAR2 IS
726 BEGIN
727 IF(inPlanLevel = 0)THEN
728 RETURN inComponentCode;
729 ELSE
730 RETURN SUBSTR(inComponentCode, INSTR(inComponentCode, '-', 1, inPlanLevel) + 1);
731 END IF;
732 END;
733 ---------------------------------------------------------------------------------------------------
734 BEGIN
735
736 nDebug := 0;
737
738 v_settings_id := 'memorybulksize';
739 v_section_name := 'import';
740
741 BEGIN
742
743 SELECT TO_NUMBER(value) INTO MemoryBulkSize
744 FROM cz_db_settings
745 WHERE LOWER(setting_id) = v_settings_id
746 AND LOWER(section_name) = v_section_name;
747
748 EXCEPTION
749 WHEN OTHERS THEN
750 MemoryBulkSize := 10000000;
751 END;
752
753 l_lang := userenv('LANG');
754 OPEN c_data(l_lang);
755
756 LOOP
757
758 ComponentSequenceId.DELETE;
759 ComponentCode.DELETE;
760 CreationDate.DELETE;
761 CreatedBy.DELETE;
762 LastUpdateDate.DELETE;
763 LastUpdatedBy.DELETE;
764 EffectivityDate.DELETE;
765 DisableDate.DELETE;
766 Description.DELETE;
767 LowQuantity.DELETE;
768 HighQuantity.DELETE;
769 SortOrder.DELETE;
770 BomItemType.DELETE;
771 ComponentItemId.DELETE;
772 MutuallyExclusiveOptions.DELETE;
773 PlanLevel.DELETE;
774 PickComponentsFlag.DELETE;
775 ComponentQuantity.DELETE;
776 v_Optional.DELETE;
777 OrganizationId.DELETE;
778 TopItemId.DELETE;
779 ExplosionType.DELETE;
780 IndivisibleFlag.DELETE;
781 CustomerOrderEnabledFlag.DELETE;
782 PrimaryUomCode.DELETE;
783 ConfigModelType.DELETE;
784 ModelType.DELETE;
785 SrcApplicationId.DELETE;
786 FSKItemMaster22.DELETE;
787 IBLinkItemFlag.DELETE;
788
789 ShippableItemFlag.DELETE;
790 TransEnabledFlag.DELETE;
791 ReplenishToOrderFlag.DELETE;
792 SerialNumberControlCode.DELETE;
793
794 iName.DELETE;
795 iOrigSysRef.DELETE;
796 iMinimum.DELETE;
797 iMaximum.DELETE;
798 iTreeSeq.DELETE;
799 iPsNodeType.DELETE;
800 iBomTreatment.DELETE;
801 iUiOmit.DELETE;
802 iUiSection.DELETE;
803 iProductFlag.DELETE;
804 ifskIntlText.DELETE;
805 ifskIntlTextExt.DELETE;
806 ifskItemMaster.DELETE;
807 ifskItemMasterExt.DELETE;
808 ifskItemMaster22.DELETE;
809 ifskParentNode.DELETE;
810 ifskParentNodeExt.DELETE;
811 iMutuallyExclusive.DELETE;
812 iOptional.DELETE;
813 ifskDevlProject.DELETE;
814 ifskDevlProjectExt.DELETE;
815 iCreationDate.DELETE;
816 iCreatedBy.DELETE;
817 iLastUpdateDate.DELETE;
818 iLastUpdatedBy.DELETE;
819 iEffectiveFrom.DELETE;
820 iEffectiveUntil.DELETE;
821 iComponentSequenceId.DELETE;
822 iComponentCode.DELETE;
823 iPlanLevel.DELETE;
824 iRunId.DELETE;
825 iSoItemTypeCode.DELETE;
826 iMinimumSelected.DELETE;
827 iBomRequired.DELETE;
828 iInitialValue.DELETE;
829 iOrganizationId.DELETE;
830 iTopItemId.DELETE;
831 iExplosionType.DELETE;
832 ifskReference.DELETE;
833 iMaximumSelected.DELETE;
834 iDecimalQtyFlag.DELETE;
835 iQuoteableFlag.DELETE;
836 iPrimaryUomCode.DELETE;
837 iBomSortOrder.DELETE;
838 iComponentSequencePath.DELETE;
839 iSrcApplicationId.DELETE;
840 iIBLinkItemFlag.DELETE;
841
842 iShippableItemFlag.DELETE;
843 iInventoryTransactableFlag.DELETE;
844 iAssembleToOrder.DELETE;
845 iSerializableItemFlag.DELETE;
846
847
848 nIndex := 1;
849
850 if (CZ_IMP_ALL.get_time) then
851 st_time := dbms_utility.get_time();
852 end if;
853
854 l_lang := userenv('LANG');
855
856 FETCH c_data BULK COLLECT INTO
857 ComponentSequenceId, ComponentCode, CreationDate, CreatedBy, LastUpdateDate,
858 LastUpdatedBy, EffectivityDate, DisableDate, Description, LowQuantity, HighQuantity,
859 SortOrder, BomItemType, ComponentItemId, MutuallyExclusiveOptions, PlanLevel,
860 PickComponentsFlag, ComponentQuantity, v_Optional, OrganizationId, TopItemId, ExplosionType,
861 IndivisibleFlag, CustomerOrderEnabledFlag, PrimaryUomCode, ModelType, TrackableFlag, ConfigModelType,
862 SrcApplicationId, FSKItemMaster22, IBLinkItemFlag,
863 ShippableItemFlag, TransEnabledFlag, ReplenishToOrderFlag, SerialNumberControlCode -- changes for TSO
864 LIMIT MemoryBulkSize;
865
866 IF(ComponentItemId.COUNT = 0)THEN
867 IF(startFlag)THEN
868 --'No BOM data to extract. Verify that the bill you want to import exists on the import-enabled server.'
869 x_error:=cz_utils.log_report(CZ_UTILS.GET_TEXT('CZ_IMP_BOM_NO_DATA'),1,'CZ_IMP_SINGLE.EXTR_PS_NODE',11276,inRun_Id);
870 RETURN;
871 ELSE
872 EXIT;
873 END IF;
874 END IF;
875
876 if (CZ_IMP_ALL.get_time) then
877 end_time := dbms_utility.get_time();
878 d_str := inRun_Id || ' Extract ps structure (' || nTop_Id || ' - count - ' || componentItemId.COUNT || ' ) :' || (end_time-st_time)/100.00;
879 x_ERROR:=cz_utils.log_report(d_str,1,'EXTRACTION',11299,inRun_Id);
880 end if;
881
882 if (CZ_IMP_ALL.get_time) then
883 st_time := dbms_utility.get_time();
884 end if;
885
886 --DBMS_OUTPUT.PUT_LINE('COUNT IS:'||ComponentItemId.COUNT);
887 FOR i IN ComponentItemId.FIRST..ComponentItemId.LAST LOOP
888
889 --Need to account for bug #1710684.
890
891 IF(EffectivityDate(i) < cz_utils.EPOCH_BEGIN_)THEN EffectivityDate(i) := cz_utils.EPOCH_BEGIN_; END IF;
892 IF(DisableDate(i) > cz_utils.EPOCH_END_)THEN DisableDate(i) := cz_utils.EPOCH_END_; END IF;
893
894 IF(PlanLevel(i) = 0)THEN
895 nStack := 1;
896 StackComponentCode(nStack) := ComponentCode(i);
897 StackTopItemId(nStack) := TopItemId(i);
898 StackPlanLevel(nStack) := 0;
899 StackProcessFlag(nStack) := 1;
900 --DBMS_OUTPUT.PUT_LINE('IF plan level ... ModelType: '||ModelType(i));
901 StackModelType(nStack) := ModelType(i);
902 END IF;
903
904 IF((startFlag AND i = ComponentItemId.FIRST) OR PlanLevel(i) = 0)THEN
905 ComponentSequencePath := NULL;
906 previousPlanLevel := 0;
907 ELSE
908 IF(previousPlanLevel < PlanLevel(i))THEN
909 IF(ComponentSequencePath IS NOT NULL)THEN ComponentSequencePath := ComponentSequencePath || '-'; END IF;
910 ComponentSequencePath := ComponentSequencePath || ComponentSequenceId(i);
911 ELSE
912 ComponentSequencePath := SUBSTR(ComponentSequencePath, 1, INSTR(ComponentSequencePath, '-', -1, previousPlanLevel - PlanLevel(i) + 1) - 1);
913 IF(ComponentSequencePath IS NOT NULL)THEN ComponentSequencePath := ComponentSequencePath || '-'; END IF;
914 ComponentSequencePath := ComponentSequencePath || ComponentSequenceId(i);
915 END IF;
916 previousPlanLevel := PlanLevel(i);
917 END IF;
918
919 --DBMS_OUTPUT.PUT_LINE('New element: i='||i||', index='||nIndex);
920 --DBMS_OUTPUT.PUT_LINE('Parameters: BomItemType='||BomItemType(i)||', ComponentCode='||ComponentCode(i));
921 --DBMS_OUTPUT.PUT_LINE('Stack: nStack='||nStack||', StackComponentCode='||StackComponentCode(nStack)||', StackTopItemId='||StackTopItemId(nStack)||', StackPlanLevel='||StackPlanLevel(nStack)||', StackProcessFlag='||StackProcessFlag(nStack));
922
923 --The dash ('-') added to the end of StackComponentCode is a fix for the bug #1956683. To be on
924 --the safe side, we are also changing INSTR(...) = 0 to be INSTR(...) <> 1, but because of the
925 --ordering by component_code, both comparisons are equivalent.
926
927 IF(INSTR(ComponentCode(i), StackComponentCode(nStack) || '-') <> 1 OR
928 (ComponentCode(i) = StackComponentCode(nStack) AND BomItemType(i) = cnModel))THEN
929
930 --DBMS_OUTPUT.PUT_LINE('End of model, stack back');
931 --DBMS_OUTPUT.PUT_LINE('PlanLevel='||PlanLevel(i));
932
933 FOR j IN PlanLevel(i)..StackPlanLevel(nStack) LOOP
934 nStack := nStack - 1;
935 END LOOP;
936 IF(nStack < 1)THEN nStack := 1; END IF;
937
938 --DBMS_OUTPUT.PUT_LINE('New StackPlanLevel='||StackPlanLevel(nStack));
939
940 END IF;
941 IF(StackProcessFlag(nStack) = 1)THEN
942 IF(BomItemType(i) = cnModel)THEN
943 IF(PlanLevel(i) > 0)THEN
944
945 --DBMS_OUTPUT.PUT_LINE('Creating reference...');
946
947 iPsNodeType(nIndex) := cnReference;
948 iComponentCode(nIndex) := ShiftComponentCode(ComponentCode(i), StackPlanLevel(nStack));
949 iComponentSequencePath(nIndex) := ComponentSequencePath;
950 iOrigSysRef(nIndex) := CZ_ORAAPPS_INTEGRATE.COMPONENT_SURROGATE_KEY(iComponentCode(nIndex),ExplosionType(i),TO_CHAR(OrganizationId(i)),TO_CHAR(StackTopItemId(nStack)));
951 iPlanLevel(nIndex) := PlanLevel(i) - StackPlanLevel(nStack);
952
953 --DBMS_OUTPUT.PUT_LINE('PlanLevel('||i||')='||PlanLevel(i));
954 --DBMS_OUTPUT.PUT_LINE('StackPlanLevel('||nStack||')='||StackPlanLevel(nStack));
955 --DBMS_OUTPUT.PUT_LINE('iPlanLevel('||nIndex||')='||iPlanLevel(nIndex));
956
957 IF(x_usesurr_psnode = 0)THEN
958 ifskParentNode(nIndex) :=
959 CZ_ORAAPPS_INTEGRATE.COMPONENT_SURROGATE_KEY(SUBSTR(iComponentCode(nIndex),1,INSTR(iComponentCode(nIndex),'-',-1,1)-1),
960 ExplosionType(i),TO_CHAR(OrganizationId(i)),TO_CHAR(StackTopItemId(nStack)));
961 ifskParentNodeExt(nIndex) := NULL;
962 ELSE
963 ifskParentNode(nIndex) := NULL;
964 ifskParentNodeExt(nIndex) :=
965 CZ_ORAAPPS_INTEGRATE.COMPONENT_SURROGATE_KEY(SUBSTR(iComponentCode(nIndex),1,INSTR(iComponentCode(nIndex),'-',-1,1)-1),
966 ExplosionType(i),TO_CHAR(OrganizationId(i)),TO_CHAR(StackTopItemId(nStack)));
967 END IF;
968
969 IF(x_usesurr_devlproject = 0)THEN
970 ifskDevlProject(nIndex) := CZ_ORAAPPS_INTEGRATE.PROJECT_SURROGATE_KEY(ExplosionType(i),TO_CHAR(OrganizationId(i)),TO_CHAR(StackTopItemId(nStack)));
971 ifskDevlProjectExt(nIndex) := NULL;
972 ELSE
973 ifskDevlProject(nIndex) := NULL;
974 ifskDevlProjectExt(nIndex) := CZ_ORAAPPS_INTEGRATE.PROJECT_SURROGATE_KEY(ExplosionType(i),TO_CHAR(OrganizationId(i)),TO_CHAR(StackTopItemId(nStack)));
975 END IF;
976
977 ifskReference(nIndex) := CZ_ORAAPPS_INTEGRATE.COMPONENT_SURROGATE_KEY(TO_CHAR(ComponentItemId(i)),ExplosionType(i),TO_CHAR(OrganizationId(i)),TO_CHAR(ComponentItemId(i)));
978 iOrganizationId(nIndex) := OrganizationId(i);
979 iTopItemId(nIndex) := StackTopItemId(nStack);
980 iExplosionType(nIndex) := ExplosionType(i);
981
982 --DBMS_OUTPUT.PUT_LINE('Reference parameters: ComponentCode='||iComponentCode(nIndex)||', Reference='||ifskReference(nIndex)||', TopItemId='||iTopItemId(nIndex));
983
984 iName(nIndex) := SUBSTR(Description(i), 1, 240);
985 iMinimum(nIndex) := 1;
986 iMaximum(nIndex) := 1;
987 iTreeSeq(nIndex) := TO_NUMBER(SUBSTR(SortOrder(i),LENGTH(SortOrder(i))-n_SortWidth+1,n_SortWidth));
988 iBomSortOrder(nIndex) := SortOrder(i);
989 iBomTreatment(nIndex) := cnNormal;
990 iUiOmit(nIndex) := '0';
991 iUiSection(nIndex) := 1;
992 iProductFlag(nIndex) := '0';
993
994 iShippableItemFlag(nIndex) := ShippableItemFlag(i);
995 iInventoryTransactableFlag(nIndex) := TransEnabledFlag(i);
996 iAssembleToOrder(nIndex) := ReplenishToOrderFlag(i);
997
998 IF SerialNumberControlCode(i)<>1 THEN
999 iSerializableItemFlag(nIndex) := '1';
1000 ELSE
1001 iSerializableItemFlag(nIndex) := '0';
1002 END IF;
1003
1004 -- Performance fix for Stuller: FSK should be orig_sys_ref, not description.
1005 IF(x_usesurr_intltext = 0)THEN
1006 -- ifskIntlText(nIndex) := Description(i);
1007 ifskIntlText(nIndex) := ComponentItemId(i) || ':' || ExplosionType(i) || ':' || OrganizationId(i) || ':'|| ComponentSequenceId(i);
1008 ifskIntlTextExt(nIndex) := NULL;
1009 ELSE
1010 ifskIntlText(nIndex) := NULL;
1011 -- ifskIntlTextExt(nIndex) := Description(i);
1012 ifskIntlTextExt(nIndex) := ComponentItemId(i) || ':' || ExplosionType(i) || ':' || OrganizationId(i) || ':'|| ComponentSequenceId(i);
1013 END IF;
1014
1015 IF(x_usesurr_itemmaster = 0)THEN
1016 ifskItemMaster(nIndex) := CZ_ORAAPPS_INTEGRATE.ITEM_SURROGATE_KEY(TO_CHAR(ComponentItemId(i)),TO_CHAR(OrganizationId(i)));
1017 ifskItemMasterExt(nIndex) := NULL;
1018 ELSE
1019 ifskItemMaster(nIndex) := NULL;
1020 ifskItemMasterExt(nIndex) := CZ_ORAAPPS_INTEGRATE.ITEM_SURROGATE_KEY(TO_CHAR(ComponentItemId(i)),TO_CHAR(OrganizationId(i)));
1021 END IF;
1022
1023 iMutuallyExclusive(nIndex) := MutuallyExclusiveOptions(i);
1024 iOptional(nIndex) := v_Optional(i);
1025 iCreationDate(nIndex) := CreationDate(i);
1026 iCreatedBy(nIndex) := CreatedBy(i);
1027 iLastUpdateDate(nIndex) := LastUpdateDate(i);
1028 iLastUpdatedBy(nIndex) := LastUpdatedBy(i);
1029 iEffectiveFrom(nIndex) := EffectivityDate(i);
1030 iEffectiveUntil(nIndex) := DisableDate(i);
1031 iComponentSequenceId(nIndex) := ComponentSequenceId(i);
1032 iRunId(nIndex) := inRun_ID;
1033 iSoItemTypeCode(nIndex) := NULL;
1034
1035 --minimum_selected, maximum_selected of the reference inherit the values of minimum, maximum
1036 --of the child model because it's nominal minimum, maximum will be 0, -1.
1037
1038 IF(LowQuantity(i) IS NULL)THEN
1039 IF g_CONFIG_ENGINE_TYPE='F' THEN
1040 -- this will be converted to default value later
1041 iMinimumSelected(nIndex) := NULL;
1042 ELSE
1043 iMinimumSelected(nIndex) := 0;
1044 END IF;
1045 ELSE
1046 iMinimumSelected(nIndex) := LowQuantity(i);
1047 END IF;
1048
1049 IF(HighQuantity(i) IS NULL OR HighQuantity(i) = 0)THEN
1050 iMaximumSelected(nIndex) := -1;
1051 ELSE
1052 iMaximumSelected(nIndex) := HighQuantity(i);
1053 END IF;
1054
1055 iPrimaryUomCode(nIndex) := PrimaryUomCode(i);
1056 iQuoteableFlag(nIndex) := '1';
1057 IF(CustomerOrderEnabledFlag(i) = 'N')THEN
1058 IF(BomItemType(i) <> 4)THEN
1059 iQuoteableFlag(nIndex) := '0';
1060 END IF;
1061 END IF;
1062
1063 IF(UPPER(FND_PROFILE.VALUE('CZ_IMP_DECIMAL_QTY_FLAG')) = 'Y')THEN
1064
1065 IF(IndivisibleFlag(i) = 'Y')THEN
1066 iDecimalQtyFlag(nIndex) := '0';
1067 ELSIF(StackModelType(nStack) = 'A' AND (BomItemType(i) = cnStandard OR (BomItemType(i) = cnOptionClass AND allowDecimalOptionClass = 1)))THEN
1068 iDecimalQtyFlag(nIndex) := '1';
1069 ELSE
1070 iDecimalQtyFlag(nIndex) := '0';
1071 END IF;
1072 ELSE
1073 iDecimalQtyFlag(nIndex) := '0';
1074 END IF;
1075
1076 IF(v_Optional(i) = OraNo)THEN
1077 iBomRequired(nIndex) := '1';
1078 ELSE
1079 iBomRequired(nIndex) := '0';
1080 END IF;
1081
1082 IF(ComponentQuantity(i) IS NULL OR ComponentQuantity(i) = 0)THEN
1083 iInitNumVal(nIndex) := 1;
1084 ELSE
1085 iInitNumVal(nIndex) := ComponentQuantity(i);
1086 END IF;
1087
1088 IF(TrackableFlag(i) = 'Y')THEN
1089 iBTrackableFlag(nIndex) := '1';
1090 ELSE
1091 iBTrackableFlag(nIndex) := '0';
1092 END IF;
1093 iSrcApplicationId(nIndex) := SrcApplicationId(i);
1094 ifskItemMaster22(nIndex) := FSKItemMaster22(i);
1095 iIBLinkItemFlag(nIndex) := IBLinkItemFlag(i);
1096 nIndex := nIndex + 1;
1097
1098 END IF;
1099
1100 IF(i > ComponentItemId.FIRST OR (NOT startFlag))THEN
1101 nStack := nStack + 1;
1102 StackComponentCode(nStack) := ComponentCode(i);
1103 StackTopItemId(nStack) := ComponentItemId(i);
1104 StackPlanLevel(nStack) := PlanLevel(i);
1105 StackProcessFlag(nStack) := 1;
1106 --DBMS_OUTPUT.PUT_LINE('IF i> comp ... ModelType: '||ModelType(i));
1107 StackModelType(nStack) := ModelType(i);
1108
1109 END IF;
1110 thisOrigSysRef := CZ_ORAAPPS_INTEGRATE.COMPONENT_SURROGATE_KEY(TO_CHAR(ComponentItemId(i)),ExplosionType(i),TO_CHAR(OrganizationId(i)),TO_CHAR(ComponentItemId(i)));
1111
1112 --Check if the model has already been processed in this session
1113
1114 --DBMS_OUTPUT.PUT_LINE('Verifying model...');
1115
1116 IF(PlanLevel(i) > 0)THEN
1117
1118 --DBMS_OUTPUT.PUT_LINE('Child model - skip...');
1119
1120 StackProcessFlag(nStack) := 0;
1121 ELSIF(AllModels.LAST IS NOT NULL)THEN
1122 FOR j IN AllModels.FIRST..AllModels.LAST LOOP
1123 IF(AllModels(j) = thisOrigSysRef)THEN
1124 StackProcessFlag(nStack) := 0;
1125
1126 --DBMS_OUTPUT.PUT_LINE('Model already exists...');
1127
1128 EXIT;
1129 END IF;
1130 END LOOP;
1131 END IF;
1132
1133 IF(StackProcessFlag(nStack) = 1)THEN
1134 AllModels(NVL(AllModels.LAST, 0) + 1) := thisOrigSysRef;
1135 END IF;
1136 END IF;
1137
1138 IF(StackProcessFlag(nStack) = 1)THEN
1139
1140 --DBMS_OUTPUT.PUT_LINE('Processing simple node...');
1141
1142 IF(BomItemType(i) = cnModel)THEN
1143 iPsNodeType(nIndex) := bomModel;
1144 ELSIF(BomItemType(i) = cnOptionClass)THEN
1145 iPsNodeType(nIndex) := bomOptionClass;
1146 ELSIF(BomItemType(i) = cnStandard)THEN
1147 iPsNodeType(nIndex) := bomStandard;
1148 END IF;
1149 iComponentCode(nIndex) := ShiftComponentCode(ComponentCode(i), StackPlanLevel(nStack));
1150 iComponentSequencePath(nIndex) := ComponentSequencePath;
1151 iOrigSysRef(nIndex) := CZ_ORAAPPS_INTEGRATE.COMPONENT_SURROGATE_KEY(iComponentCode(nIndex),ExplosionType(i),TO_CHAR(OrganizationId(i)),TO_CHAR(StackTopItemId(nStack)));
1152 iPlanLevel(nIndex) := PlanLevel(i) - StackPlanLevel(nStack);
1153
1154 --DBMS_OUTPUT.PUT_LINE('PlanLevel('||i||')='||PlanLevel(i));
1155 --DBMS_OUTPUT.PUT_LINE('StackPlanLevel('||nStack||')='||StackPlanLevel(nStack));
1156 --DBMS_OUTPUT.PUT_LINE('iPlanLevel('||nIndex||')='||iPlanLevel(nIndex));
1157
1158 IF(x_usesurr_psnode = 0)THEN
1159 IF(BomItemType(i) = cnModel)THEN
1160 ifskParentNode(nIndex) := NULL;
1161 ELSE
1162 ifskParentNode(nIndex) :=
1163 CZ_ORAAPPS_INTEGRATE.COMPONENT_SURROGATE_KEY(SUBSTR(iComponentCode(nIndex),1,INSTR(iComponentCode(nIndex),'-',-1,1)-1),
1164 ExplosionType(i),TO_CHAR(OrganizationId(i)),TO_CHAR(StackTopItemId(nStack)));
1165 END IF;
1166 ifskParentNodeExt(nIndex) := NULL;
1167 ELSE
1168 ifskParentNode(nIndex) := NULL;
1169 IF(BomItemType(i) = cnModel)THEN
1170 ifskParentNodeExt(nIndex) := NULL;
1171 ELSE
1172 ifskParentNodeExt(nIndex) :=
1173 CZ_ORAAPPS_INTEGRATE.COMPONENT_SURROGATE_KEY(SUBSTR(iComponentCode(nIndex),1,INSTR(iComponentCode(nIndex),'-',-1,1)-1),
1174 ExplosionType(i),TO_CHAR(OrganizationId(i)),TO_CHAR(StackTopItemId(nStack)));
1175 END IF;
1176 END IF;
1177
1178 IF(x_usesurr_devlproject = 0)THEN
1179 ifskDevlProject(nIndex) := CZ_ORAAPPS_INTEGRATE.PROJECT_SURROGATE_KEY(ExplosionType(i),TO_CHAR(OrganizationId(i)),TO_CHAR(StackTopItemId(nStack)));
1180 ifskDevlProjectExt(nIndex) := NULL;
1181 ELSE
1182 ifskDevlProject(nIndex) := NULL;
1183 ifskDevlProjectExt(nIndex) := CZ_ORAAPPS_INTEGRATE.PROJECT_SURROGATE_KEY(ExplosionType(i),TO_CHAR(OrganizationId(i)),TO_CHAR(StackTopItemId(nStack)));
1184 END IF;
1185
1186 ifskReference(nIndex) := NULL;
1187 iOrganizationId(nIndex) := OrganizationId(i);
1188 iTopItemId(nIndex) := StackTopItemId(nStack);
1189 iExplosionType(nIndex) := ExplosionType(i);
1190
1191 iName(nIndex) := SUBSTR(Description(i), 1, 240);
1192
1193 IF(BomItemType(i) = cnModel)THEN
1194
1195 --This 'child' model is becoming a 'root' model so it's minimum, maximum should be 0, -1
1196 --The real values have been preserved in the corresponding reference's minimum_, maximum_selected.
1197
1198 iMinimum(nIndex) := 0;
1199 iMaximum(nIndex) := -1;
1200 iTreeSeq(nIndex) := 1;
1201 iBomSortOrder(nIndex) := LPAD('1', n_SortWidth, '0');
1202 ELSE
1203 IF(LowQuantity(i) IS NULL)THEN
1204 IF g_CONFIG_ENGINE_TYPE='F' THEN
1205 -- this will be converted to default value later
1206 iMinimum(nIndex) := NULL;
1207 ELSE
1208 iMinimum(nIndex) := 0;
1209 END IF;
1210 ELSE
1211 iMinimum(nIndex) := LowQuantity(i);
1212 END IF;
1213 IF(HighQuantity(i) IS NULL OR HighQuantity(i) = 0)THEN
1214 iMaximum(nIndex) := -1;
1215 ELSE
1216 iMaximum(nIndex) := HighQuantity(i);
1217 END IF;
1218 iTreeSeq(nIndex) := TO_NUMBER(SUBSTR(SortOrder(i),LENGTH(SortOrder(i))-n_SortWidth+1,n_SortWidth));
1219 iBomSortOrder(nIndex) := SortOrder(i);
1220 END IF;
1221
1222 IF(BomItemType(i) = cnStandard AND v_Optional(i) = OraNo)THEN
1223 iBomTreatment(nIndex) := cnSkip;
1224 ELSE
1225 iBomTreatment(nIndex) := cnNormal;
1226 END IF;
1227
1228 iUiOmit(nIndex) := '0';
1229 iUiSection(nIndex) := 1;
1230
1231 IF(BomItemType(i) = cnModel)THEN
1232 iProductFlag(nIndex) := '1';
1233 ELSE
1234 iProductFlag(nIndex) := '0';
1235 END IF;
1236
1237 iShippableItemFlag(nIndex) := ShippableItemFlag(i);
1238 iInventoryTransactableFlag(nIndex) := TransEnabledFlag(i);
1239 iAssembleToOrder(nIndex) := ReplenishToOrderFlag(i);
1240
1241 IF SerialNumberControlCode(i)<>1 THEN
1242 iSerializableItemFlag(nIndex) := '1';
1243 ELSE
1244 iSerializableItemFlag(nIndex) := '0';
1245 END IF;
1246
1247 IF(x_usesurr_intltext = 0)THEN
1248 -- ifskIntlText(nIndex) := Description(i);
1249 ifskIntlText(nIndex) := ComponentItemId(i) || ':' || ExplosionType(i) || ':' || OrganizationId(i) || ':'|| ComponentSequenceId(i);
1250 ifskIntlTextExt(nIndex) := NULL;
1251 ELSE
1252 ifskIntlText(nIndex) := NULL;
1253 ifskIntlTextExt(nIndex) := ComponentItemId(i) || ':' || ExplosionType(i) || ':' || OrganizationId(i) || ':'|| ComponentSequenceId(i);
1254 -- ifskIntlTextExt(nIndex) := Description(i);
1255 END IF;
1256
1257 IF(x_usesurr_itemmaster = 0)THEN
1258 ifskItemMaster(nIndex) := CZ_ORAAPPS_INTEGRATE.ITEM_SURROGATE_KEY(TO_CHAR(ComponentItemId(i)),TO_CHAR(OrganizationId(i)));
1259 ifskItemMasterExt(nIndex) := NULL;
1260 ELSE
1261 ifskItemMaster(nIndex) := NULL;
1262 ifskItemMasterExt(nIndex) := CZ_ORAAPPS_INTEGRATE.ITEM_SURROGATE_KEY(TO_CHAR(ComponentItemId(i)),TO_CHAR(OrganizationId(i)));
1263 END IF;
1264
1265 iMutuallyExclusive(nIndex) := MutuallyExclusiveOptions(i);
1266 iOptional(nIndex) := v_Optional(i);
1267 iCreationDate(nIndex) := CreationDate(i);
1268 iCreatedBy(nIndex) := CreatedBy(i);
1269 iLastUpdateDate(nIndex) := LastUpdateDate(i);
1270 iLastUpdatedBy(nIndex) := LastUpdatedBy(i);
1271
1272 IF(BomItemType(i) = cnModel)THEN
1273 iEffectiveFrom(nIndex) := CZ_UTILS.EPOCH_BEGIN;
1274 iEffectiveUntil(nIndex) := CZ_UTILS.EPOCH_END;
1275 iComponentSequenceId(nIndex) := NULL;
1276 ELSE
1277 iEffectiveFrom(nIndex) := EffectivityDate(i);
1278 iEffectiveUntil(nIndex) := DisableDate(i);
1279 iComponentSequenceId(nIndex) := ComponentSequenceId(i);
1280 END IF;
1281
1282 iRunId(nIndex) := inRun_ID;
1283
1284 IF(BomItemType(i) = cnModel)THEN
1285 iSoItemTypeCode(nIndex) := 'MODEL';
1286 ELSIF(BomItemType(i) = cnModel)THEN
1287 iSoItemTypeCode(nIndex) := 'CLASS';
1288 ELSE
1289 IF(PickComponentsFlag(i) = 'Y')THEN
1290 iSoItemTypeCode(nIndex) := 'KIT';
1291 ELSE
1292 iSoItemTypeCode(nIndex) := 'STANDARD';
1293 END IF;
1294 END IF;
1295
1296 iMinimumSelected(nIndex) := 0;
1297 iMaximumSelected(nIndex) := NULL;
1298 iPrimaryUomCode(nIndex) := PrimaryUomCode(i);
1299 iQuoteableFlag(nIndex) := '1';
1300 IF(CustomerOrderEnabledFlag(i) = 'N')THEN
1301 IF(BomItemType(i) <> 4)THEN
1302 iQuoteableFlag(nIndex) := '0';
1303 END IF;
1304 END IF;
1305
1306 IF(UPPER(FND_PROFILE.VALUE('CZ_IMP_DECIMAL_QTY_FLAG')) = 'Y')THEN
1307
1308 IF(IndivisibleFlag(i) = 'Y')THEN
1309 iDecimalQtyFlag(nIndex) := '0';
1310 ELSIF(StackModelType(nStack) = 'A' AND (BomItemType(i) = cnStandard OR (BomItemType(i) = cnOptionClass AND allowDecimalOptionClass = 1)))THEN
1311 iDecimalQtyFlag(nIndex) := '1';
1312 ELSE
1313 iDecimalQtyFlag(nIndex) := '0';
1314 END IF;
1315 ELSE
1316 iDecimalQtyFlag(nIndex) := '0';
1317 END IF;
1318
1319 IF(v_Optional(i) = OraNo)THEN
1320 iBomRequired(nIndex) := '1';
1321 ELSE
1322 iBomRequired(nIndex) := '0';
1323 END IF;
1324
1325 IF(ComponentQuantity(i) IS NULL OR ComponentQuantity(i) = 0)THEN
1326 iInitNumVal(nIndex) := 1;
1327 ELSE
1328 iInitNumVal(nIndex) := ComponentQuantity(i);
1329 END IF;
1330
1331 IF(TrackableFlag(i) = 'Y')THEN
1332 iBTrackableFlag(nIndex) := '1';
1333 ELSE
1334 iBTrackableFlag(nIndex) := '0';
1335 END IF;
1336 iSrcApplicationId(nIndex) := SrcApplicationId(i);
1337 ifskItemMaster22(nIndex) := FSKItemMaster22(i);
1338 iIBLinkItemFlag(nIndex) := IBLinkItemFlag(i);
1339 nIndex := nIndex + 1;
1340
1341 END IF;
1342 END IF;
1343 END LOOP;
1344
1345 if (CZ_IMP_ALL.get_time) then
1346 end_time := dbms_utility.get_time();
1347 d_str := inRun_Id || ' loop ps structure (' || nTop_Id || ') :' || (end_time-st_time)/100.00;
1348 x_error:=cz_utils.log_report(d_str,1,'EXTRACTION',11299,inRun_Id);
1349 end if;
1350
1351 if (CZ_IMP_ALL.get_time) then
1352 st_time := dbms_utility.get_time();
1353 end if;
1354
1355
1356
1357 --
1358 -- changes for Solver --
1359 --
1360 IF g_CONFIG_ENGINE_TYPE='F' THEN
1361
1362 l_use_defaults := FND_PROFILE.VALUE('CZ_BOM_DEFAULT_QTY_DOMN');
1363 l_set_decimals := FND_PROFILE.VALUE('CZ_IMP_DECIMAL_QTY_FLAG');
1364 l_default_dec := FND_PROFILE.VALUE('CZ_DEFAULT_MAX_QTY_DEC');
1365 l_default_int := FND_PROFILE.VALUE('CZ_DEFAULT_MAX_QTY_INT');
1366
1367 FOR j IN 1..iOrigSysRef.COUNT
1368 LOOP
1369 -- this a special case of root of BOM Model
1370 IF iSoItemTypeCode(j) = 'MODEL' THEN
1371 iMINIMUM(j) := 0;
1372 iMAXIMUM(j) := -1;
1373 GOTO CONTINUE;
1374 END IF;
1375 IF iPsNodeType(j) = 263 THEN -- reference
1376 setFCEMinMax (minVal => iMINIMUMSELECTED(j),
1377 maxVal => iMAXIMUMSELECTED(j),
1378 defaultVal => iInitNumVal(j),
1379 p_decimal_item_flag => iDecimalQtyFlag(j),
1380 p_use_defaults => l_use_defaults,
1381 p_set_decimals => l_set_decimals,
1382 p_default_dec => l_default_dec,
1383 p_default_int => l_default_int );
1384 ELSE -- not a reference
1385 setFCEMinMax (minVal => iMINIMUM(j),
1386 maxVal => iMAXIMUM(j),
1387 defaultVal => iInitNumVal(j),
1388 p_decimal_item_flag => iDecimalQtyFlag(j),
1389 p_use_defaults => l_use_defaults,
1390 p_set_decimals => l_set_decimals,
1391 p_default_dec => l_default_dec,
1392 p_default_int => l_default_int );
1393
1394 END IF;
1395 <<CONTINUE>> NULL;
1396 END LOOP;
1397 END IF;
1398
1399 FORALL i IN 1..iOrigSysRef.COUNT
1400 INSERT INTO cz_imp_ps_nodes
1401 (NAME, ORIG_SYS_REF, MINIMUM, MAXIMUM, TREE_SEQ, PS_NODE_TYPE, BOM_TREATMENT, UI_OMIT,
1402 UI_SECTION, PRODUCT_FLAG, FSK_INTLTEXT_1_1, FSK_INTLTEXT_1_EXT, FSK_ITEMMASTER_2_1,
1403 FSK_ITEMMASTER_2_EXT, FSK_PSNODE_3_1, FSK_PSNODE_3_EXT, MUTUALLY_EXCLUSIVE_OPTIONS, OPTIONAL,
1404 FSK_DEVLPROJECT_5_1, FSK_DEVLPROJECT_5_EXT, CREATION_DATE, CREATED_BY, LAST_UPDATE_DATE,
1405 LAST_UPDATED_BY, EFFECTIVE_FROM, EFFECTIVE_UNTIL, COMPONENT_SEQUENCE_ID, COMPONENT_CODE,
1406 PLAN_LEVEL, RUN_ID, SO_ITEM_TYPE_CODE, MINIMUM_SELECTED, BOM_REQUIRED, initial_num_value,
1407 ORGANIZATION_ID, TOP_ITEM_ID, EXPLOSION_TYPE, fsk_psnode_6_1, MAXIMUM_SELECTED,
1408 DECIMAL_QTY_FLAG, QUOTEABLE_FLAG,PRIMARY_UOM_CODE,BOM_SORT_ORDER,
1409 COMPONENT_SEQUENCE_PATH,IB_TRACKABLE,SRC_APPLICATION_ID, FSK_ITEMMASTER_2_2, IB_LINK_ITEM_FLAG,
1410 SHIPPABLE_ITEM_FLAG,INVENTORY_TRANSACTABLE_FLAG, ASSEMBLE_TO_ORDER_FLAG,SERIALIZABLE_ITEM_FLAG) -- changes for TSO
1411 VALUES
1412 (iName(i), iOrigSysRef(i), iMinimum(i), iMaximum(i), iTreeSeq(i), iPsNodeType(i), iBomTreatment(i),
1413 iUiOmit(i), iUiSection(i), iProductFlag(i), ifskIntlText(i), ifskIntlTextExt(i), ifskItemMaster(i),
1414 ifskItemMasterExt(i), ifskParentNode(i), ifskParentNodeExt(i), iMutuallyExclusive(i), iOptional(i),
1415 ifskDevlProject(i), ifskDevlProjectExt(i), iCreationDate(i), iCreatedBy(i), iLastUpdateDate(i),
1416 iLastUpdatedBy(i), iEffectiveFrom(i), iEffectiveUntil(i), iComponentSequenceId(i),
1417 iComponentCode(i), iPlanLevel(i), iRunId(i), iSoItemTypeCode(i), iMinimumSelected(i),
1418 iBomRequired(i), iInitNumVal(i), iOrganizationId(i), iTopItemId(i), iExplosionType(i),
1419 ifskReference(i), iMaximumSelected(i), iDecimalQtyFlag(i),
1420 iQuoteableFlag(i),iPrimaryUomCode(i),iBomSortOrder(i), iComponentSequencePath(i),iBTrackableFlag(i),
1421 iSrcApplicationId(i), ifskItemMaster22(i), iIBLinkItemFlag(i),
1422 iShippableItemFlag(i), iInventoryTransactableFlag(i), iAssembleToOrder(i), iSerializableItemFlag(i)); -- changes for TSO
1423
1424 if (CZ_IMP_ALL.get_time) then
1425 end_time := dbms_utility.get_time();
1426 d_str := inRun_Id || ' Insert ps nodes (' || nTop_Id || ') :' || (end_time-st_time)/100.00;
1427 x_error:=cz_utils.log_report(d_str,1,'EXTRACTION',11299,inRun_Id);
1428 end if;
1429
1430 -- 9496782
1431 czGatherStatsCnt := czGatherStatsCnt + iOrigSysRef.COUNT ;
1432
1433 COMMIT;
1434 startFlag := FALSE;
1435 END LOOP; -- FETCH c_data BULK COLLECT
1436 CLOSE c_data;
1437
1438 --Depending on db setting, generate the statistics here for the tables used in the queries bellow.
1439
1440 v_settings_id := 'GENSTATISTICSCZ';
1441 v_section_name := 'IMPORT';
1442
1443 BEGIN
1444 SELECT decode(upper(VALUE),'TRUE','1','FALSE','0','T','1','F','0','1','1','0','0','YES','1','NO','0','Y','1','N','0','0')
1445 INTO genStatisticsCz FROM CZ_DB_SETTINGS
1446 WHERE upper(SETTING_ID)=v_settings_id AND SECTION_NAME=v_section_name;
1447 EXCEPTION
1448 WHEN OTHERS THEN
1449 genStatisticsCz := 0;
1450 END;
1451
1452 IF(genStatisticsCz = 1)THEN
1453 --bug 9496782 make this call conditionalize which is really helpful when there are lot of references
1454 -- and gather stats will run after every 10000+ (batchsize setting) nodes range
1455
1456 --9496782 Get BatchSize
1457
1458 v_settings_id := 'BATCHSIZE';
1459 v_section_name := 'SCHEMA';
1460
1461 BEGIN
1462 SELECT VALUE
1463 INTO v_batchSize FROM CZ_DB_SETTINGS
1464 WHERE upper(SETTING_ID)=v_settings_id AND SECTION_NAME=v_section_name;
1465 EXCEPTION
1466 WHEN OTHERS THEN
1467 v_batchSize := 5000;
1468 END;
1469
1470 -- Due to bug 6749205, inPlanLevel is still not available in this
1471 -- version so changing original IF condition . Once that is fixed
1472 -- uncomment following line to replace existing IF condition with new one.
1473 --IF (czGatherStatsCnt > v_batchSize OR inPlanLevel = 0) THEN
1474 IF (czGatherStatsCnt > v_batchSize) THEN
1475 czGatherStatsCnt := 0;
1476 x_error:=cz_utils.log_report('Gather Stats : Start' ,1,'EXTRACTION',11299,inRun_Id);
1477 fnd_stats.gather_table_stats('CZ', 'CZ_IMP_PS_NODES');
1478 --bug 9496782 comment out following call
1479 -- fnd_stats.gather_table_stats('CZ', 'CZ_PS_NODES');
1480 fnd_stats.gather_table_stats('CZ', 'CZ_XFR_PROJECT_BILLS');
1481 x_error:=cz_utils.log_report('Gather Stats : End',1,'EXTRACTION',11299,inRun_Id);
1482
1483 if (CZ_IMP_ALL.get_time) then
1484 end_time := dbms_utility.get_time();
1485 d_str := inRun_Id || ' Gather Stats :' || (end_time-st_time)/100.00;
1486 x_error:=cz_utils.log_report(d_str,1,'EXTRACTION',11299,inRun_Id);
1487 end if;
1488 END IF;
1489 END IF;
1490
1491 --AT: The calculation of maximum_selected is moved here as we do reading into memory in batches and cannot
1492 --calculate this inside the cycle which is possibly incomplete.
1493
1494 BEGIN
1495
1496 --Bug #2737004. The cursor doesn't return records for option classes with only optional children.
1497 --As a result, such option classes are missing from the update.
1498
1499 UPDATE cz_imp_ps_nodes SET maximum_selected = 1
1500 WHERE run_id = inRun_ID
1501 AND rec_status IS NULL
1502 AND mutually_exclusive_options = OraYes
1503 AND ps_node_type = bomOptionClass;
1504
1505 COMMIT;
1506
1507 OPEN c_parent;
1508 LOOP
1509
1510 parentOrigSysRef.DELETE;
1511 childCount.DELETE;
1512
1513 FETCH c_parent BULK COLLECT INTO parentOrigSysRef, childCount LIMIT MemoryBulkSize;
1514 EXIT WHEN childCount.COUNT = 0;
1515
1516 FORALL i IN 1..childCount.COUNT
1517 UPDATE cz_imp_ps_nodes SET maximum_selected = childCount(i) + 1
1518 WHERE run_id = inRun_ID
1519 AND rec_status IS NULL
1520 AND mutually_exclusive_options = OraYes
1521 AND orig_sys_ref = parentOrigSysRef(i);
1522
1523 COMMIT;
1524 END LOOP;
1525 CLOSE c_parent;
1526
1527 EXCEPTION
1528 WHEN CZ_ADMIN.IMP_MAXERR_REACHED THEN
1529 RAISE;
1530 WHEN OTHERS THEN
1531 IF(c_parent%ISOPEN)THEN CLOSE c_parent; END IF;
1532 d_str:=CZ_UTILS.GET_TEXT('CZ_IMP_OPERATION_FAILED','ERRORTEXT',SQLERRM);
1533 x_error:=cz_utils.log_report(d_str,1,'CZ_IMP_SINGLE.maximum_selected',11276,inRun_Id);
1534 RAISE CZ_ADMIN.IMP_UNEXP_SQL_ERROR;
1535 END;
1536
1537 ------------------------------------------------------------------------------
1538 ---Check the online PS_NODE table for obsolete ps_nodes, i.e. ps_nodes -
1539 ---which are not present in the current import data under the current project,-
1540 ---and so their corresponding BOMs were likely deleted in Oracle Applications.-
1541 ---For such ps_nodes DELETED_FLAG field should be set to '1'. -
1542 ---BOM_EXPLOSIONS is supposed to be correct, and so no verification is done -
1543 ---for parent-child relationships after some of the ps_nodes are marked as -
1544 ---deleted. -
1545 -------------------------------------------------------------------------------
1546
1547 DECLARE
1548 CURSOR c_onl_ps_node IS
1549 SELECT B.ORIG_SYS_REF, B.COMPONENT_SEQUENCE_PATH, B.ps_node_id, B.ps_node_type
1550 FROM CZ_XFR_PROJECT_BILLS P,CZ_PS_NODES B
1551 WHERE B.DEVL_PROJECT_ID=P.model_ps_node_id
1552 AND P.organization_id = nORg_ID
1553 AND P.top_item_id = nTop_ID
1554 AND P.explosion_type = sExpl_type
1555 AND P.DELETED_FLAG='0'
1556 AND B.DELETED_FLAG='0'
1557 AND B.ORIG_SYS_REF IS NOT NULL
1558 AND B.PS_NODE_TYPE <> 259
1559 AND B.devl_project_id = nModelId
1560 FOR UPDATE OF B.DELETED_FLAG;
1561
1562 x_onl_ps_node_f BOOLEAN:=FALSE;
1563 x_imp_ps_node_f BOOLEAN:=FALSE;
1564 sOnlOrigSysRef CZ_PS_NODES.ORIG_SYS_REF%TYPE;
1565 v_PsNodeId CZ_PS_NODES.PS_NODE_ID%TYPE;
1566 v_PsNodeType CZ_PS_NODES.PS_NODE_TYPE%TYPE;
1567 v_SequencePath CZ_PS_NODES.COMPONENT_SEQUENCE_PATH%TYPE;
1568 cDefaultChar CHAR(1);
1569 p_out_err INTEGER;
1570
1571 BEGIN
1572
1573 if (CZ_IMP_ALL.get_time) then
1574 st_time := dbms_utility.get_time();
1575 end if;
1576
1577 OPEN c_onl_ps_node;
1578
1579 LOOP
1580
1581 sOnlOrigSysRef:=NULL;
1582 FETCH c_onl_ps_node INTO sOnlOrigSysRef, v_SequencePath, v_PsNodeId, v_PsNodeType;
1583 x_onl_ps_node_f:=c_onl_ps_node%FOUND;
1584 EXIT WHEN NOT x_onl_ps_node_f;
1585
1586 DECLARE
1587 CURSOR c_imp_ps_node IS
1588 SELECT 'F' FROM CZ_IMP_PS_NODES
1589 WHERE ORIG_SYS_REF=sOnlOrigSysRef AND RUN_ID=inRun_ID
1590 AND NVL(COMPONENT_SEQUENCE_PATH, -1) = NVL(v_SequencePath, -1)
1591 AND REC_STATUS IS NULL;
1592 BEGIN
1593 OPEN c_imp_ps_node;
1594 FETCH c_imp_ps_node INTO cDefaultChar;
1595 x_imp_ps_node_f:=c_imp_ps_node%FOUND;
1596 CLOSE c_imp_ps_node;
1597 END;
1598
1599 IF(NOT x_imp_ps_node_f) THEN
1600 UPDATE CZ_PS_NODES SET
1601 DELETED_FLAG='1'
1602 WHERE CURRENT OF c_onl_ps_node;
1603
1604 --Here to call cz_refs api
1605 IF(v_PsNodeType IN (bomModel, cnReference))THEN
1606 cz_refs.delete_Node(v_PsNodeId, v_PsNodeType, p_out_err, '1');
1607 IF (p_out_err > 0) THEN
1608 BEGIN
1609 SELECT message INTO d_str FROM cz_db_logs WHERE run_id = p_out_err;
1610 EXCEPTION
1611 WHEN NO_DATA_FOUND THEN
1612 d_str := NULL;
1613 END;
1614 RAISE CZ_REFS_DELNODE_EXCP;
1615 END IF;
1616 END IF;
1617
1618 END IF;
1619
1620 END LOOP;
1621
1622 if (CZ_IMP_ALL.get_time) then
1623 end_time := dbms_utility.get_time();
1624 d_str := inRun_Id || ' Deleted ps node check (' || nTop_Id || ') :' || (end_time-st_time)/100.00;
1625 x_error:=cz_utils.log_report(d_str,1,'EXTRACTION',11299,inRun_Id);
1626 end if;
1627
1628 CLOSE c_onl_ps_node;
1629 COMMIT;
1630
1631 EXCEPTION
1632 WHEN CZ_REFS_DELNODE_EXCP THEN
1633 IF d_str IS NULL THEN d_str := 'NO MESSAGE FOUND'; END IF;
1634 d_str := CZ_UTILS.GET_TEXT('CZ_IMP_CZREFS_DELNODE', 'MSG', d_str);
1635 x_error :=cz_utils.log_report(d_str,1,'CZ_IMP_SINGLE.EXTR_PS_NODE: delete obsolete nodes',11276,inRun_Id);
1636 ROLLBACK;
1637 RAISE;
1638 WHEN CZ_ADMIN.IMP_UNEXP_SQL_ERROR THEN
1639 ROLLBACK;
1640 RAISE;
1641 WHEN CZ_ADMIN.IMP_MAXERR_REACHED THEN
1642 RAISE;
1643 WHEN OTHERS THEN
1644 d_str:=CZ_UTILS.GET_TEXT('CZ_IMP_OPERATION_FAILED','ERRORTEXT',SQLERRM);
1645 x_error:=cz_utils.log_report(d_str,1,'CZ_IMP_SINGLE.EXTR_PS_NODE: delete obsolete nodes',11276,inRun_Id);
1646 ROLLBACK;
1647 RAISE CZ_ADMIN.IMP_UNEXP_SQL_ERROR;
1648 END;
1649
1650 EXCEPTION
1651 WHEN CZ_ADMIN.IMP_UNEXP_SQL_ERROR THEN
1652 RAISE;
1653 WHEN CZ_ADMIN.IMP_MAXERR_REACHED THEN
1654 RAISE;
1655 WHEN OTHERS THEN
1656 IF(c_data%ISOPEN)THEN CLOSE c_data; END IF;
1657 d_str:=CZ_UTILS.GET_TEXT('CZ_IMP_OPERATION_FAILED','ERRORTEXT',SQLERRM);
1658 x_error:=cz_utils.log_report(d_str,1,'CZ_IMP_SINGLE.EXTR_PS_NODE',11276,inRun_Id);
1659 RAISE CZ_ADMIN.IMP_UNEXP_SQL_ERROR;
1660 END;
1661 ------------------------------------------------------------------------------------------
1662 PROCEDURE EXTR_INTL_TEXT(inRun_ID IN PLS_INTEGER,
1663 nOrg_ID IN NUMBER,
1664 nTop_ID IN NUMBER,
1665 sExpl_type IN VARCHAR2,
1666 nModelId IN NUMBER)
1667 IS
1668 xERROR BOOLEAN:=FALSE;
1669
1670 TYPE tCompSeqId IS TABLE OF cz_exv_intl_text.component_sequence_id%TYPE INDEX BY BINARY_INTEGER;
1671 TYPE tOrgId IS TABLE OF cz_exv_intl_text.organization_id%TYPE INDEX BY BINARY_INTEGER;
1672 TYPE tCompItemId IS TABLE OF cz_exv_intl_text.component_item_id%TYPE INDEX BY BINARY_INTEGER;
1673 TYPE tCompCode IS TABLE OF cz_exv_intl_text.component_code%TYPE INDEX BY BINARY_INTEGER;
1674
1675 TYPE tOrigSysRef IS TABLE OF cz_imp_localized_texts.orig_sys_ref%TYPE INDEX BY BINARY_INTEGER;
1676 TYPE tLocalizedStr IS TABLE OF cz_imp_localized_texts.localized_str%TYPE INDEX BY BINARY_INTEGER;
1677 TYPE tLanguage IS TABLE OF cz_imp_localized_texts.language%TYPE INDEX BY BINARY_INTEGER;
1678 TYPE tSrcLang IS TABLE OF cz_imp_localized_texts.source_lang%TYPE INDEX BY BINARY_INTEGER;
1679 TYPE tFSKDevlProject IS TABLE OF cz_imp_localized_texts.fsk_devlproject_1_1%TYPE INDEX BY BINARY_INTEGER;
1680
1681 TYPE tTextStr IS TABLE OF cz_imp_intl_text.text_str%TYPE INDEX BY BINARY_INTEGER;
1682
1683 CompSeqId tCompSeqId;
1684 OrgId tOrgId;
1685 CompCode tCompCode;
1686 CompItemId tCompItemId;
1687
1688 iOrigSysRef tOrigSysRef;
1689 iLocalizedStr tLocalizedStr;
1690 iLanguage tLanguage;
1691 iSrcLang tSrcLang;
1692 -- iFSKDevlProject tFSKDevlProject;
1693 iFSKDevlProject cz_imp_localized_texts.fsk_devlproject_1_1%TYPE;
1694 nTopBillSequenceId BOM_EXPLOSIONS.top_bill_sequence_id%type;
1695
1696 st_time number;
1697 end_time number;
1698 loop_end_time number;
1699 insert_end_time number;
1700 d_str varchar2(255);
1701
1702 MemoryBulkSize NATURAL;
1703
1704 CURSOR c_data IS
1705 SELECT DISTINCT component_item_id,
1706 NVL(common_component_sequence_id, component_sequence_id) AS component_sequence_id,
1707 component_code,
1708 description, language, source_lang
1709 FROM cz_exv_intl_text
1710 WHERE organization_id = nOrg_ID
1711 AND top_item_id = nTop_ID
1712 AND explosion_type = sExpl_type;
1713
1714 l_comp_code bom_explosions.component_code%TYPE;
1715 x_model_found BOOLEAN := FALSE;
1716 l_next_model_id NUMBER;
1717 l_parent_model_id NUMBER;
1718 l_next_item_id NUMBER;
1719
1720 v_settings_id VARCHAR2(40);
1721 v_section_name VARCHAR2(30);
1722
1723 BEGIN
1724
1725 v_settings_id := 'memorybulksize';
1726 v_section_name := 'import';
1727
1728 BEGIN
1729
1730 SELECT TO_NUMBER(value) INTO MemoryBulkSize
1731 FROM cz_db_settings
1732 WHERE LOWER(setting_id) = v_settings_id
1733 AND LOWER(section_name) = v_section_name;
1734
1735 EXCEPTION
1736 WHEN OTHERS THEN
1737 MemoryBulkSize := 10000000;
1738 END;
1739
1740 OPEN c_data;
1741 LOOP
1742 iOrigSysRef.DELETE;
1743 iLocalizedStr.DELETE;
1744 iLanguage.DELETE;
1745 iSrcLang.DELETE;
1746
1747 CompSeqId.DELETE;
1748 CompItemId.DELETE;
1749 CompCode.DELETE;
1750
1751 FETCH c_data
1752 BULK COLLECT
1753 INTO CompItemId, CompSeqId, CompCode, iLocalizedStr, iLanguage, iSrcLang
1754 LIMIT MemoryBulkSize;
1755 EXIT WHEN c_data%NOTFOUND AND CompItemId.COUNT = 0;
1756
1757 IF (CompItemId.COUNT > 0) THEN
1758
1759 FOR i IN 1..CompItemId.COUNT LOOP
1760
1761 l_comp_code := CompCode(i);
1762 x_model_found := FALSE;
1763
1764 -- need to find the containing parent model, use the component_code
1765 IF (instr(l_comp_code,'-') > 0) THEN
1766
1767 WHILE (instr(l_comp_code,'-') > 0 ) AND (x_model_found = FALSE) LOOP
1768 -- get the next item in the component_code
1769 l_next_item_id := substr(l_comp_code, instr(l_comp_code,'-',-1) + 1 );
1770
1771 -- if no imported models in models cache then return
1772 IF (gModelItemId_tbl.COUNT = 0) THEN
1773 RETURN;
1774 END IF;
1775
1776 -- find the item in the list of models in the global array
1777 FOR j IN gModelItemId_tbl.FIRST..gModelItemId_tbl.LAST LOOP
1778
1779 --
1780 -- skip the model item itself, we need its parent
1781 -- because this text belongs to the reference node
1782 -- so the parent model must be found
1783 --
1784 IF (to_number(l_next_item_id) = gModelItemId_tbl(j)
1785 AND gModelItemId_tbl(j) <> CompItemId(i) ) THEN
1786
1787 -- found the containing model: the parent model
1788 l_parent_model_id := gModelItemId_tbl(j);
1789 x_model_found := TRUE;
1790 EXIT;
1791
1792 END IF ;
1793
1794 END LOOP;
1795
1796 -- get the rest of the component_code and repreat
1797 l_comp_code := substr(l_comp_code, 1, instr(l_comp_code,'-',-1)-1);
1798
1799 END LOOP;
1800
1801 IF (x_model_found = FALSE) THEN
1802 l_parent_model_id := nTop_ID; -- the parent is the left-most item, the top item
1803 END IF;
1804 ElSE
1805 l_parent_model_id := nTop_ID; -- the item belongs to the top model
1806 END IF;
1807
1808 iFSKDevlProject := CZ_ORAAPPS_INTEGRATE.PROJECT_SURROGATE_KEY(sExpl_type,to_char(nOrg_ID),to_char(l_parent_model_id));
1809
1810 INSERT INTO CZ_IMP_LOCALIZED_TEXTS
1811 (LOCALIZED_STR, LANGUAGE, SOURCE_LANG, RUN_ID, ORIG_SYS_REF, FSK_DEVLPROJECT_1_1)
1812 VALUES (iLocalizedStr(i), iLanguage(i), iSrcLang(i), inRun_ID,
1813 CompItemId(i)||':'||sExpl_type||':'||nOrg_ID||':'||CompSeqId(i), iFSKDevlProject);
1814 END LOOP;
1815 COMMIT;
1816 END IF;
1817
1818 END LOOP;
1819 CLOSE c_data;
1820
1821 --
1822 -- Insert a text for each child model root node in this top model
1823 IF (gModelItemId_tbl.COUNT > 0) THEN
1824 FOR j IN gModelItemId_tbl.FIRST..gModelItemId_tbl.LAST LOOP
1825
1826 IF ( gModelItemId_tbl(j) <> nTop_ID) THEN
1827
1828 INSERT INTO CZ_IMP_LOCALIZED_TEXTS
1829 (LOCALIZED_STR, LANGUAGE, SOURCE_LANG, RUN_ID, ORIG_SYS_REF, FSK_DEVLPROJECT_1_1)
1830 SELECT description, language, source_lang, inRun_ID,
1831 gModelItemId_tbl(j)||':'||sExpl_type||':'||nOrg_ID||':'||
1832 NVL(common_component_sequence_id, component_sequence_id),
1833 CZ_ORAAPPS_INTEGRATE.PROJECT_SURROGATE_KEY(sExpl_type,to_char(nOrg_ID),to_char(gModelItemId_tbl(j)))
1834 FROM cz_exv_intl_text
1835 WHERE organization_id = nOrg_ID
1836 AND top_item_id = gModelItemId_tbl(j)
1837 AND explosion_type = sExpl_type
1838 AND component_item_id = top_item_id;
1839 END IF;
1840
1841 END LOOP;
1842 END IF;
1843
1844 if (CZ_IMP_ALL.get_time) then
1845 end_time := dbms_utility.get_time();
1846 d_str := inRun_Id || ' Extract text (' || nTop_Id || ' - Count - ' || iLocalizedStr.COUNT || ') :' || (end_time-st_time)/100.00;
1847 xError:=cz_utils.log_report(d_str,1,'EXTRACTION',11299,inRun_Id);
1848 end if;
1849
1850 COMMIT;
1851 EXCEPTION
1852 WHEN CZ_ADMIN.IMP_UNEXP_SQL_ERROR THEN
1853 RAISE;
1854 WHEN CZ_ADMIN.IMP_MAXERR_REACHED THEN
1855 RAISE;
1856 WHEN OTHERS THEN
1857 IF(c_data%ISOPEN)THEN CLOSE c_data; END IF;
1858 d_str:=CZ_UTILS.GET_TEXT('CZ_IMP_OPERATION_FAILED','ERRORTEXT',SQLERRM);
1859 xERROR:=cz_utils.log_report(d_str,1,'CZ_IMP_SINGLE.EXTR_INTL_TEXT',11276,inRun_Id);
1860 RAISE CZ_ADMIN.IMP_UNEXP_SQL_ERROR;
1861 END;
1862 ------------------------------------------------------------------------------------------
1863 PROCEDURE EXTR_DEVL_PROJECT(inRun_ID IN PLS_INTEGER,
1864 nOrg_ID IN NUMBER,
1865 nTop_ID IN NUMBER,
1866 sExpl_type IN VARCHAR2,
1867 nModelId IN NUMBER)
1868 IS
1869 xERROR BOOLEAN:=FALSE;
1870
1871 TYPE tDescription IS TABLE OF cz_exv_item_master.description%TYPE INDEX BY BINARY_INTEGER;
1872 TYPE tComponentItemId IS TABLE OF cz_exv_item_master.component_item_id%TYPE INDEX BY BINARY_INTEGER;
1873 TYPE tOrganizationId IS TABLE OF cz_exv_item_master.organization_id%TYPE INDEX BY BINARY_INTEGER;
1874 TYPE tExplosionType IS TABLE OF cz_exv_item_master.explosion_type%TYPE INDEX BY BINARY_INTEGER;
1875 TYPE tPlanLevel IS TABLE OF cz_exv_item_master.plan_level%TYPE INDEX BY BINARY_INTEGER;
1876 TYPE tModelType IS TABLE OF cz_exv_item_master.model_type%TYPE INDEX BY BINARY_INTEGER;
1877
1878 TYPE tOrigSysRef IS TABLE OF cz_imp_devl_project.orig_sys_ref%TYPE INDEX BY BINARY_INTEGER;
1879 TYPE tName IS TABLE OF cz_imp_devl_project.name%TYPE INDEX BY BINARY_INTEGER;
1880 TYPE tDescText IS TABLE OF cz_imp_devl_project.desc_text%TYPE INDEX BY BINARY_INTEGER;
1881 TYPE tTopItemId IS TABLE OF cz_imp_devl_project.top_item_id%TYPE INDEX BY BINARY_INTEGER;
1882 TYPE tProductKey IS TABLE OF cz_imp_devl_project.product_key%TYPE INDEX BY BINARY_INTEGER;
1883
1884 Description tDescription;
1885 OrganizationId tOrganizationId;
1886 ComponentItemId tComponentItemId;
1887 ExplosionType tExplosionType;
1888 PlanLevel tPlanLevel;
1889 ModelType tModelType;
1890 ConfigModelType tModelType;
1891
1892 iOrigSysRef tOrigSysRef;
1893 iPlanLevel tPlanLevel;
1894 iName tName;
1895 iDescText tDescText;
1896 iTopItemId tTopItemId;
1897 iModelType tModelType;
1898 iConfigModelType tModelType;
1899 iOrganizationId tOrganizationId;
1900 iInventoryItemId tComponentItemId;
1901 iProductKey tProductKey;
1902
1903 nIndex PLS_INTEGER := 1;
1904
1905 st_time number;
1906 end_time number;
1907 loop_end_time number;
1908 insert_end_time number;
1909 d_str varchar2(255);
1910 l_lang VARCHAR2(4);
1911
1912 BEGIN
1913 gModelItemId_tbl.delete;
1914 if (CZ_IMP_ALL.get_time) then
1915 st_time := dbms_utility.get_time();
1916 end if;
1917
1918 l_lang := userenv('LANG');
1919
1920 SELECT
1921 ORGANIZATION_ID, COMPONENT_ITEM_ID, EXPLOSION_TYPE,
1922 DESCRIPTION, PLAN_LEVEL, MODEL_TYPE, CONFIG_MODEL_TYPE
1923 BULK COLLECT INTO
1924 OrganizationId, ComponentItemId, ExplosionType, Description, PlanLevel, ModelType, ConfigModelType
1925 FROM CZ_EXV_ITEM_MASTER WHERE bom_item_type = cz_imp_ps_node.cnModel
1926 AND ORGANIZATION_ID=nOrg_ID
1927 AND TOP_ITEM_ID=nTop_ID AND EXPLOSION_TYPE=sExpl_type
1928 AND language = l_lang;
1929
1930 if (CZ_IMP_ALL.get_time) then
1931 end_time := dbms_utility.get_time();
1932 d_str := inRun_Id || ' Extract projects (' || nTop_Id || ' - Count - ' || OrganizationId.COUNT || ') :' || (end_time-st_time)/100.00;
1933 xError:=cz_utils.log_report(d_str,1,'EXTRACTION',11299,inRun_Id);
1934 end if;
1935
1936 FOR i IN 1..OrganizationId.COUNT LOOP
1937
1938 iOrigSysRef(nIndex) := CZ_ORAAPPS_INTEGRATE.PROJECT_SURROGATE_KEY(ExplosionType(i),to_char(OrganizationId(i)),to_char(ComponentItemId(i)));
1939 iName(nIndex) := Description(i) || '(' || to_char(OrganizationId(i)) || ' ' || to_char(ComponentItemId(i)) || ')';
1940 iDescText(nIndex) := SUBSTR(Description(i), 1, 255);
1941 iPlanLevel(nIndex) := PlanLevel(i);
1942 iTopItemId(nIndex) := ComponentItemId(i);
1943 gModelItemId_tbl(nIndex) := ComponentItemId(i); -- store for access by extr_intl_text procedure
1944 iOrganizationId(nIndex) := OrganizationId(i);
1945 iInventoryItemId(nIndex) := ComponentItemId(i);
1946 iProductKey(nIndex) := OrganizationId(i)||':'||ComponentItemId(i);
1947
1948 IF(ConfigModelType(i) = 'N')THEN
1949
1950 iModelType(nIndex) := 'N';
1951 ELSE
1952
1953 iModelType(nIndex) := ModelType(i);
1954 END IF;
1955
1956 nIndex := nIndex + 1;
1957 END LOOP;
1958
1959 if (CZ_IMP_ALL.get_time) then
1960 loop_end_time := dbms_utility.get_time();
1961 d_str := inRun_Id || ' Loop Projects (' || nTop_Id || ') :' || (loop_end_time-end_time)/100.00;
1962 xError:=cz_utils.log_report(d_str,1,'EXTRACTION',11299,inRun_Id);
1963 end if;
1964
1965 FORALL i IN 1..iOrigSysRef.COUNT
1966 INSERT INTO CZ_IMP_DEVL_PROJECT
1967 (ORGANIZATION_ID, TOP_ITEM_ID, EXPLOSION_TYPE, ORIG_SYS_REF, VERSION,
1968 RUN_ID, NAME, FSK_INTLTEXT_1_1, DESC_TEXT, PLAN_LEVEL, MODEL_ID, MODEL_TYPE,
1969 INVENTORY_ITEM_ID, PRODUCT_KEY, BOM_CAPTION_RULE_ID, NONBOM_CAPTION_RULE_ID, CONFIG_ENGINE_TYPE)
1970 VALUES
1971 (nOrg_ID, iTopItemId(i), sExpl_type, iOrigSysRef(i), 1,
1972 inRun_ID, iName(i), iDescText(i), iDescText(i), iPlanLevel(i), nModelId, iModelType(i),
1973 iInventoryItemId(i), iProductKey(i), G_CAPTION_RULE_DESC, G_CAPTION_RULE_NAME, g_CONFIG_ENGINE_TYPE);
1974
1975 if (CZ_IMP_ALL.get_time) then
1976 insert_end_time := dbms_utility.get_time();
1977 d_str := inRun_Id || ' Insert projects (' || nTop_Id || ') :' || (insert_end_time-loop_end_time)/100.00;
1978 xError:=cz_utils.log_report(d_str,1,'EXTRACTION',11299,inRun_Id);
1979 end if;
1980
1981 COMMIT;
1982
1983 EXCEPTION
1984 WHEN CZ_ADMIN.IMP_UNEXP_SQL_ERROR THEN
1985 RAISE;
1986 WHEN CZ_ADMIN.IMP_MAXERR_REACHED THEN
1987 RAISE;
1988 WHEN OTHERS THEN
1989 d_str:=CZ_UTILS.GET_TEXT('CZ_IMP_OPERATION_FAILED','ERRORTEXT',SQLERRM);
1990 xERROR:=cz_utils.log_report(d_str,1,'EXTR_DEVL_PROJECT',11276,inRun_Id);
1991 RAISE CZ_ADMIN.IMP_UNEXP_SQL_ERROR;
1992 END;
1993 ------------------------------------------------------------------------------------------
1994 PROCEDURE EXTR_ITEM_TYPES(inRun_ID IN PLS_INTEGER,
1995 nOrg_ID IN NUMBER,
1996 nTop_ID IN NUMBER,
1997 sExpl_type IN VARCHAR2)
1998 IS
1999 xERROR BOOLEAN:=FALSE;
2000
2001 st_time number;
2002 end_time number;
2003 loop_end_time number;
2004 insert_end_time number;
2005 d_str varchar2(255);
2006 l_use_segments BOOLEAN:=FALSE;
2007 l_name_method VARCHAR2(255);
2008
2009 BEGIN
2010 if (CZ_IMP_ALL.get_time) then
2011 st_time := dbms_utility.get_time();
2012 end if;
2013
2014 fnd_profile.get('CZ_SEGS_FOR_ITEMTYPE_NAME', l_name_method);
2015
2016 IF (l_name_method = 'CZ_CAT_DESC') THEN
2017 l_use_segments := FALSE;
2018 ELSIF (l_name_method = 'CZ_CAT_CONCAT_SEGS') THEN
2019 l_use_segments := TRUE;
2020 END IF;
2021
2022 IF (l_use_segments = TRUE) THEN
2023 FORALL i IN 1..itemCatalogGroupId.COUNT
2024 INSERT INTO CZ_IMP_ITEM_TYPE
2025 (DESC_TEXT, NAME, ORIG_SYS_REF,SRC_APPLICATION_ID,RUN_ID)
2026 SELECT DESCRIPTION, CATALOG_CONCAT_SEGS, ITEM_CATALOG_GROUP_ID, G_BOM_APPLICATION_ID, inRUN_ID
2027 FROM CZ_EXV_ITEM_TYPES
2028 WHERE ITEM_CATALOG_GROUP_ID = itemCatalogGroupId(i);
2029 ELSE
2030 FORALL i IN 1..itemCatalogGroupId.COUNT
2031 INSERT INTO CZ_IMP_ITEM_TYPE
2032 (DESC_TEXT, NAME, ORIG_SYS_REF, SRC_APPLICATION_ID, RUN_ID)
2033 SELECT DESCRIPTION, DESCRIPTION, ITEM_CATALOG_GROUP_ID, G_BOM_APPLICATION_ID, inRUN_ID
2034 FROM CZ_EXV_ITEM_TYPES
2035 WHERE ITEM_CATALOG_GROUP_ID = itemCatalogGroupId(i);
2036 END IF;
2037
2038 if (CZ_IMP_ALL.get_time) then
2039 end_time := dbms_utility.get_time();
2040 d_str := inRun_Id || ' Insert item type (' || nTop_Id || ') :' || (end_time-st_time)/100.00;
2041 xError:=cz_utils.log_report(d_str,1,'EXTRACTION',11299,inRun_Id);
2042 end if;
2043 COMMIT;
2044
2045 EXCEPTION
2046 WHEN NO_DATA_FOUND THEN
2047 NULL;
2048 WHEN CZ_ADMIN.IMP_UNEXP_SQL_ERROR THEN
2049 RAISE;
2050 WHEN CZ_ADMIN.IMP_MAXERR_REACHED THEN
2051 RAISE;
2052 WHEN OTHERS THEN
2053 d_str:=CZ_UTILS.GET_TEXT('CZ_IMP_OPERATION_FAILED','ERRORTEXT',SQLERRM);
2054 xERROR:=cz_utils.log_report(d_str,1,'EXTR_ITEM_TYPES',11276,inRun_Id);
2055 RAISE CZ_ADMIN.IMP_UNEXP_SQL_ERROR;
2056 END;
2057 ------------------------------------------------------------------------------------------
2058
2059 FUNCTION get_Col_Num(p_col_name IN VARCHAR2,p_col_tbl IN OUT NOCOPY rec_cols_tbl) RETURN NUMBER IS
2060 BEGIN
2061 IF p_col_tbl.EXISTS(p_col_name) THEN
2062 RETURN p_col_tbl(p_col_name).col_num;
2063 END IF;
2064 RETURN -1;
2065 END get_Col_Num;
2066
2067 FUNCTION get_ItemCatalogTable RETURN SYSTEM.CZ_ITEM_CATALOG_TBL IS
2068 BEGIN
2069 RETURN g_ItemCatalogTable;
2070 END get_ItemCatalogTable;
2071
2072 PROCEDURE EXTR_APC_PROPERTIES(p_run_id IN NUMBER,
2073 p_org_id IN NUMBER,
2074 p_top_item_id IN NUMBER,
2075 p_expl_type IN VARCHAR2) IS
2076
2077 xERROR BOOLEAN:=FALSE;
2078 st_time NUMBER;
2079 end_time NUMBER;
2080 loop_end_time NUMBER;
2081 insert_end_time NUMBER;
2082 d_str VARCHAR2(255);
2083
2084 l_prev_item_catalog_tbl SYSTEM.CZ_ITEM_CATALOG_TBL := SYSTEM.CZ_ITEM_CATALOG_TBL(SYSTEM.CZ_ITEM_CATALOG_REC(NULL));
2085
2086 l_cursor NUMBER;
2087 l_exec NUMBER;
2088 l_error BOOLEAN;
2089
2090 l_col_tbl rec_cols_tbl;
2091 l_rec_tab DBMS_SQL.desc_tab;
2092 l_att_names_tbl varchar_tbl_type;
2093 l_db_columns_tbl varchar_tbl_type;
2094 l_num_value_tbl number_tbl_type;
2095
2096 l_str_value VARCHAR2(1000);
2097 l_num_value NUMBER;
2098
2099 l_column_num NUMBER;
2100 l_rec_counter NUMBER;
2101 l_inventory_item_id NUMBER;
2102 l_org_id NUMBER;
2103 l_col_num NUMBER;
2104 l_current_attr_group_id NUMBER;
2105 l_col_cnt NUMBER;
2106 l_col_length NUMBER;
2107 l_attr_group_id NUMBER;
2108 l_current_inv_item_id NUMBER;
2109 l_attr_group_col_num NUMBER;
2110 l_inv_item_col_num NUMBER;
2111 l_org_id_col_num NUMBER;
2112 l_lang_col_num NUMBER;
2113 l_source_lang_col_num NUMBER;
2114 l_language VARCHAR2(255);
2115 l_col_name VARCHAR2(255);
2116 l_source_lang VARCHAR2(255);
2117 l_column_value VARCHAR2(1000);
2118 l_item_catalog_path VARCHAR2(4000);
2119
2120 l_attr_group_id_tbl number_tbl_type;
2121 l_temp_map number_tbl_type;
2122 l_attr_group_name_tbl varchar_tbl_type;
2123 l_attr_group_type_tbl varchar_tbl_type;
2124 l_attr_id_tbl number_tbl_type;
2125 l_attr_name_tbl varchar_tbl_type;
2126 l_property_type_tbl number_tbl_type;
2127 l_database_column_tbl varchar_tbl_type;
2128 l_db_column_types_tbl number_tbl_type;
2129 l_description_tbl varchar_tbl_type;
2130 l_data_type_code_tbl varchar_tbl_type;
2131 l_item_catalog_group_id_tbl number_tbl_type;
2132 l_def_value_tbl long_varchar_tbl_type;
2133 l_item_catalog_group_map_tbl number_tbl_type;
2134 l_sql VARCHAR2(32000);
2135 l_api_name VARCHAR2(255) := 'EXTR_APC_PROPERTIES';
2136 l_ndebug NUMBER;
2137 l_check_for_stub_views NUMBER;
2138
2139 l_prop_values_tbl long_varchar_tbl_type;
2140 l_prop_orig_sys_ref_tbl long_varchar_tbl_type;
2141 l_localtext_orig_sys_ref_tbl long_varchar_tbl_type;
2142 l_item_master_orig_sys_ref_tbl varchar_tbl_type;
2143 l_group_attr_names_tbl varchar_arr_tbl_type;
2144 l_group_database_columns_tbl varchar_arr_tbl_type;
2145 l_group_db_column_types_tbl number_arr_tbl_type;
2146 l_item_cat_tbl number_tbl_type;
2147 l_item_cat_temp_tbl number_tbl_type;
2148 l_attr_list_item_cat_tbl number_tbl_type;
2149 l_used_db_columns_tbl varchar_iv_tbl_type;
2150 l_hier_item_cat_tbl number_arr_tbl_type;
2151 l_temp_hier_item_cat_tbl number_arr_tbl_type;
2152 l_attr_list_cat_tbl varchar_tbl_type;
2153
2154 l_nh_attr_list_cat_tbl varchar_arr_tbl_type;
2155 l_t_attr_list_cat_tbl varchar_tbl_type;
2156
2157 l_attr_item_cat_tbl varchar_arr_tbl_type;
2158 l_attr_by_cat_tbl varchar_arr_tbl_type;
2159
2160 l_attr_list_temp_tbl varchar_tbl_type;
2161 l_item_cat_path_tbl varchar_tbl_type;
2162 l_no_attr_item_cat_tbl number_tbl_type;
2163 l_no_attr_catalog NUMBER;
2164 l_no_attr_cat_index NUMBER;
2165 l_attr_counter NUMBER;
2166
2167 BEGIN
2168
2169 IF (FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
2170 l_ndebug := 0;
2171 cz_utils.log_report(G_PKG_NAME, l_api_name, l_ndebug,
2172 'EXTR_APC_PROPERTIES is called ('||TO_CHAR(SYSDATE,'MM-DD-YYYY HH24:MI:SS')||') :',
2173 fnd_log.LEVEL_STATEMENT);
2174 cz_utils.log_report(G_PKG_NAME, l_api_name, l_ndebug,
2175 'parameters : RUN_ID='||TO_CHAR(p_run_id)||',p_org_id='||TO_CHAR(p_org_id)||
2176 ', p_top_item_id='||TO_CHAR(p_top_item_id)||',p_expl_type='||p_expl_type ,
2177 fnd_log.LEVEL_STATEMENT);
2178 END IF;
2179
2180 --
2181 -- if l_check_for_stub_views > 0 then stub views are used
2182 --
2183 SELECT COUNT(*) INTO l_check_for_stub_views FROM CZ_EXV_APC_PROPERTIES
2184 WHERE ATTR_GROUP_ID = -1 AND
2185 ITEM_CATALOG_GROUP_ID = -1 AND
2186 ATTR_ID = -1 AND
2187 APPLICATION_ID = -1;
2188
2189 DELETE FROM CZ_IMP_TMP_ITEMCAT WHERE run_id=p_run_id;
2190 COMMIT;
2191
2192 --
2193 -- if list of item catalog group is empty or stub views are used then just return
2194 --
2195 IF itemCatalogGroupId.COUNT=0 OR l_check_for_stub_views > 0 THEN
2196 RETURN;
2197 END IF;
2198
2199 --
2200 -- Definitions of global SQL types which are used in TABLE(CAST(...))
2201 --
2202 -- CREATE OR REPLACE TYPE SYSTEM.CZ_ITEM_CATALOG_REC IS OBJECT(item_catalog_group_id number);
2203 --
2204 -- CREATE OR REPLACE TYPE SYSTEM.CZ_ITEM_CATALOG_TBL IS TABLE OF SYSTEM.CZ_ITEM_CATALOG_REC;
2205 --
2206
2207 FOR item_index IN itemCatalogGroupId.FIRST..itemCatalogGroupId.LAST
2208 LOOP
2209 l_item_catalog_path := '';
2210
2211 FOR i IN(SELECT item_catalog_group_id,parent_catalog_group_id,description,catalog_concat_segs
2212 FROM CZ_EXV_ITEM_TYPES
2213 START WITH item_catalog_group_id = itemCatalogGroupId(item_index)
2214 CONNECT BY PRIOR parent_catalog_group_id = item_catalog_group_id)
2215 LOOP
2216 l_prev_item_catalog_tbl.extend;
2217 l_prev_item_catalog_tbl(l_prev_item_catalog_tbl.LAST) := SYSTEM.CZ_ITEM_CATALOG_REC(i.item_catalog_group_id);
2218
2219 IF i.item_catalog_group_id<>itemCatalogGroupId(item_index) THEN
2220 l_item_cat_tbl(l_item_cat_tbl.COUNT+1) := i.item_catalog_group_id;
2221 l_item_catalog_path := l_item_catalog_path || '-' || TO_CHAR(i.item_catalog_group_id);
2222 END IF;
2223
2224 END LOOP;
2225
2226 IF l_item_cat_tbl.COUNT>0 THEN
2227 l_hier_item_cat_tbl(itemCatalogGroupId(item_index)) := l_item_cat_tbl;
2228 l_item_cat_path_tbl(itemCatalogGroupId(item_index)) := l_item_catalog_path;
2229 l_item_cat_tbl.DELETE;
2230 END IF;
2231
2232 END LOOP;
2233
2234 INSERT INTO CZ_IMP_TMP_ITEMCAT(run_id, item_catalog_group_id)
2235 SELECT p_run_id,item_catalog_group_id
2236 FROM (SELECT DISTINCT item_catalog_group_id
2237 FROM TABLE(CAST(l_prev_item_catalog_tbl AS SYSTEM.CZ_ITEM_CATALOG_TBL)) WHERE item_catalog_group_id IS NOT NULL);
2238
2239
2240 IF SQL%ROWCOUNT=0 THEN
2241 RETURN;
2242 END IF;
2243
2244 --
2245 -- l_prev_item_catalog_tbl will not be in use anymore - remove all elements from it
2246 --
2247 l_prev_item_catalog_tbl.DELETE;
2248
2249 --
2250 -- retrieve meta data for current itemCatalogGroupId = itemCatalogGroupId(item_index)
2251 --
2252 l_rec_counter := 0;
2253
2254
2255 FOR attr IN(SELECT attr_group_id, attr_group_name||'.'||attr_name AS attribute_name,
2256 DECODE(data_type_code,'N',DECIMAL_TYPE,'C',TEXT_TYPE,'A',TL_TEXT_TYPE,TEXT_TYPE) AS property_type,
2257 database_column,description,apcprops.item_catalog_group_id,apcprops.default_value
2258 FROM CZ_EXV_APC_PROPERTIES apcprops,
2259 CZ_IMP_TMP_ITEMCAT itemtypes
2260 WHERE apcprops.item_catalog_group_id=itemtypes.item_catalog_group_id AND
2261 itemtypes.run_id=p_run_id
2262 ORDER BY attr_group_id)
2263 LOOP
2264 l_rec_counter := l_rec_counter + 1;
2265 l_attr_group_id_tbl(l_rec_counter) := attr.attr_group_id;
2266 l_attr_name_tbl(l_rec_counter) := attr.attribute_name;
2267 l_property_type_tbl(l_rec_counter) := attr.property_type;
2268 l_database_column_tbl(l_rec_counter) := attr.database_column;
2269 l_description_tbl(l_rec_counter) := attr.description;
2270 l_item_catalog_group_id_tbl(l_rec_counter) := attr.item_catalog_group_id;
2271 l_def_value_tbl(l_rec_counter) := attr.default_value;
2272
2273 IF l_attr_by_cat_tbl.EXISTS(attr.item_catalog_group_id) THEN
2274 l_attr_counter := l_attr_by_cat_tbl(attr.item_catalog_group_id).COUNT + 1;
2275 l_attr_by_cat_tbl(attr.item_catalog_group_id)(l_attr_counter) := attr.attribute_name;
2276 ELSE
2277 l_attr_by_cat_tbl(attr.item_catalog_group_id)(1) := attr.attribute_name;
2278 END IF;
2279
2280 l_used_db_columns_tbl(attr.database_column) := attr.database_column;
2281
2282 END LOOP;
2283
2284 IF l_attr_name_tbl.COUNT = 0 THEN
2285 DELETE FROM CZ_IMP_TMP_ITEMCAT where run_id=p_run_id;
2286 RETURN;
2287 END IF;
2288
2289 IF (FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
2290 cz_utils.log_report(G_PKG_NAME, l_api_name, l_ndebug,
2291 'APC meta data have been retrieved ('||TO_CHAR(SYSDATE,'MM-DD-YYYY HH24:MI:SS')||') ',
2292 fnd_log.LEVEL_STATEMENT);
2293 END IF;
2294
2295 FOR ii IN (SELECT item_catalog_group_id FROM CZ_IMP_TMP_ITEMCAT WHERE run_id=p_run_id)
2296 LOOP
2297 IF l_hier_item_cat_tbl.EXISTS(ii.item_catalog_group_id) THEN
2298
2299 l_item_cat_tbl := l_hier_item_cat_tbl(ii.item_catalog_group_id);
2300
2301 IF l_item_cat_tbl.COUNT > 0 THEN
2302
2303 FOR jj IN l_item_cat_tbl.First..l_item_cat_tbl.Last
2304 LOOP
2305 IF l_attr_by_cat_tbl.EXISTS(l_item_cat_tbl(jj)) AND l_attr_by_cat_tbl(l_item_cat_tbl(jj)).COUNT > 0 THEN
2306 FOR kk IN 1..l_attr_by_cat_tbl(l_item_cat_tbl(jj)).COUNT
2307 LOOP
2308 IF l_attr_item_cat_tbl.EXISTS(ii.item_catalog_group_id) THEN
2309 l_attr_counter := l_attr_item_cat_tbl(ii.item_catalog_group_id).COUNT + 1;
2310 l_attr_item_cat_tbl(ii.item_catalog_group_id)(l_attr_counter) := l_attr_by_cat_tbl(l_item_cat_tbl(jj))(kk);
2311 ELSE
2312 l_attr_item_cat_tbl(ii.item_catalog_group_id)(1) := l_attr_by_cat_tbl(l_item_cat_tbl(jj))(kk);
2313 END IF;
2314 END LOOP;
2315 END IF;
2316
2317 END LOOP;
2318 END IF;
2319 END IF;
2320 END LOOP;
2321
2322
2323 --
2324 -- populate Import Property table with APC properties meta data for Items
2325 -- format of ORIG_SYS_REF : <CZ_ATTR_NAME> || ':' || <EGO_APPLICATION_ID>
2326 -- where CZ_ATTR_NAME = <APC attr_group_name>||'.'||<APC attr_name>
2327 --
2328 FOR i IN l_attr_name_tbl.FIRST..l_attr_name_tbl.LAST
2329 LOOP
2330 INSERT INTO CZ_IMP_PROPERTY
2331 (DESC_TEXT,NAME,ORIG_SYS_REF,RUN_ID,DATA_TYPE,DEF_VALUE,DEF_NUM_VALUE,SRC_APPLICATION_ID)
2332 VALUES (l_description_tbl(i),
2333 l_attr_name_tbl(i),
2334 l_attr_name_tbl(i)||'-'||TO_CHAR(G_EGO_APPLICATION_ID),
2335 p_run_id,
2336 l_property_type_tbl(i),
2337 l_def_value_tbl(i),
2338 DECODE(l_property_type_tbl(i),DECIMAL_TYPE,TO_NUMBER(l_def_value_tbl(i)),NULL),
2339 G_EGO_APPLICATION_ID);
2340 END LOOP;
2341
2342 COMMIT;
2343
2344 IF (FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
2345 cz_utils.log_report(G_PKG_NAME, l_api_name, l_ndebug,
2346 'CZ_IMP_PROPERTY has been populated ('||TO_CHAR(SYSDATE,'MM-DD-YYYY HH24:MI:SS')||') ',
2347 fnd_log.LEVEL_STATEMENT);
2348 END IF;
2349
2350 --
2351 -- populate Import Property table with APC properties meta data for Item Types
2352 -- format of ORIG_SYS_REF : <ITEM CATALOG_GROUP_ID> || ':' || <CZ_ATTR_NAME> || ':' || <EGO_APPLICATION_ID>
2353 -- where CZ_ATTR_NAME = <APC attr_group_name>||'.'||<APC attr_name>
2354 --
2355 FORALL i IN l_attr_name_tbl.FIRST..l_attr_name_tbl.LAST
2356 INSERT INTO CZ_IMP_ITEM_TYPE_PROPERTY
2357 (FSK_ITEMTYPE_1_1,FSK_ITEMTYPE_1_EXT,FSK_PROPERTY_2_1,FSK_PROPERTY_2_EXT,RUN_ID,
2358 ORIG_SYS_REF,SRC_APPLICATION_ID)
2359 VALUES (l_item_catalog_group_id_tbl(i),
2360 l_item_catalog_group_id_tbl(i),
2361 l_attr_name_tbl(i)||'-'||TO_CHAR(G_EGO_APPLICATION_ID),
2362 l_attr_name_tbl(i)||'-'||TO_CHAR(G_EGO_APPLICATION_ID),
2363 p_run_id,
2364 TO_CHAR(l_item_catalog_group_id_tbl(i)) || ':' ||l_attr_name_tbl(i)||'-'||TO_CHAR(G_EGO_APPLICATION_ID),
2365 G_EGO_APPLICATION_ID);
2366
2367 COMMIT;
2368
2369 FOR ii IN (SELECT item_catalog_group_id FROM CZ_IMP_TMP_ITEMCAT WHERE run_id=p_run_id)
2370 LOOP
2371 IF l_attr_item_cat_tbl.EXISTS(ii.item_catalog_group_id) THEN
2372 l_attr_list_temp_tbl := l_attr_item_cat_tbl(ii.item_catalog_group_id);
2373
2374 IF l_attr_list_temp_tbl.COUNT > 0 THEN
2375 FOR jj IN l_attr_list_temp_tbl.First..l_attr_list_temp_tbl.Last
2376 LOOP
2377 INSERT INTO CZ_IMP_ITEM_TYPE_PROPERTY
2378 (FSK_ITEMTYPE_1_1,FSK_ITEMTYPE_1_EXT,FSK_PROPERTY_2_1,FSK_PROPERTY_2_EXT,RUN_ID,
2379 ORIG_SYS_REF,SRC_APPLICATION_ID)
2380 VALUES (ii.item_catalog_group_id,
2381 ii.item_catalog_group_id,
2382 l_attr_list_temp_tbl(jj)||'-'||TO_CHAR(G_EGO_APPLICATION_ID),
2383 l_attr_list_temp_tbl(jj)||'-'||TO_CHAR(G_EGO_APPLICATION_ID),
2384 p_run_id,
2385 TO_CHAR(ii.item_catalog_group_id)|| ':'||
2386 l_attr_list_temp_tbl(jj)||'-'||TO_CHAR(G_EGO_APPLICATION_ID) || '-' || l_item_cat_path_tbl(ii.item_catalog_group_id) ,
2387 G_EGO_APPLICATION_ID);
2388
2389 END LOOP;
2390 END IF;
2391
2392 END IF;
2393 END LOOP;
2394
2395 IF (FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
2396 cz_utils.log_report(G_PKG_NAME, l_api_name, l_ndebug,
2397 'CZ_IMP_ITEM_TYPE_PROPERTY has been populated ('||TO_CHAR(SYSDATE,'MM-DD-YYYY HH24:MI:SS')||') ',
2398 fnd_log.LEVEL_STATEMENT);
2399 END IF;
2400
2401 --
2402 -- collect APC meta data for properties :
2403 --
2404 -- l_att_names_tbl - array of attribute names ( one array per attribute group )
2405 -- l_db_columns_tbl - array of column names ( one array per attribute group )
2406 -- l_db_column_types_tbl - array of column types ( one array per attribute group )
2407 --
2408 -- l_att_names_tbl, l_db_columns_tbl and l_db_column_types_tbl are temp arrays which are
2409 -- used for populating 2-dim arrays l_group_attr_names_tbl, l_group_database_columns_tbl, l_group_db_column_types_tbl
2410 --
2411 -- l_group_attr_names_tbl - array of array l_att_names_tbl ( stores arrays l_att_names_tbl for attribute groups )
2412 -- index of array is attribute group id
2413 -- l_group_database_columns_tbl - array of array l_db_columns_tbl ( stores arrays l_db_columns_tbl for attribute groups )
2414 -- index of array is attribute group id
2415 -- l_group_db_column_types_tbl - array of array l_group_db_column_types_tbl ( stores arrays l_group_db_column_types_tbl for attribute groups )
2416 -- index of array is attribute group id
2417 --
2418
2419 l_current_attr_group_id := 0;
2420
2421 FOR i IN l_attr_name_tbl.FIRST..l_attr_name_tbl.LAST
2422 LOOP
2423
2424 IF l_current_attr_group_id=l_attr_group_id_tbl(i) THEN
2425 l_att_names_tbl(l_att_names_tbl.COUNT+1) := l_attr_name_tbl(i);
2426 l_db_columns_tbl(l_db_columns_tbl.COUNT+1) := l_database_column_tbl(i);
2427 l_db_column_types_tbl(l_db_column_types_tbl.COUNT+1) := l_property_type_tbl(i);
2428 ELSE
2429 IF l_current_attr_group_id=0 THEN
2430 l_current_attr_group_id := l_attr_group_id_tbl(i);
2431 l_att_names_tbl(l_att_names_tbl.COUNT+1) := l_attr_name_tbl(i);
2432 l_db_columns_tbl(l_db_columns_tbl.COUNT+1) := l_database_column_tbl(i);
2433 l_db_column_types_tbl(l_db_column_types_tbl.COUNT+1) := l_property_type_tbl(i);
2434 ELSE
2435 l_group_attr_names_tbl(l_current_attr_group_id) := l_att_names_tbl;
2436 l_group_database_columns_tbl(l_current_attr_group_id) := l_db_columns_tbl;
2437 l_group_db_column_types_tbl(l_current_attr_group_id) := l_db_column_types_tbl;
2438
2439 l_att_names_tbl.DELETE;
2440 l_db_columns_tbl.DELETE;
2441 l_db_column_types_tbl.DELETE;
2442
2443 l_current_attr_group_id := l_attr_group_id_tbl(i);
2444
2445 l_att_names_tbl(l_att_names_tbl.COUNT+1) := l_attr_name_tbl(i);
2446 l_db_columns_tbl(l_db_columns_tbl.COUNT+1) := l_database_column_tbl(i);
2447 l_db_column_types_tbl(l_db_column_types_tbl.COUNT+1) := l_property_type_tbl(i);
2448
2449 END IF;
2450 END IF;
2451 END LOOP;
2452
2453 -- populate 2-dim arrays
2454 l_group_attr_names_tbl(l_current_attr_group_id) := l_att_names_tbl;
2455 l_group_database_columns_tbl(l_current_attr_group_id) := l_db_columns_tbl;
2456 l_group_db_column_types_tbl(l_current_attr_group_id) := l_db_column_types_tbl;
2457
2458 -- release temp arrays
2459 l_att_names_tbl.DELETE;
2460 l_db_columns_tbl.DELETE;
2461 l_db_column_types_tbl.DELETE;
2462
2463 IF (FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
2464 cz_utils.log_report(G_PKG_NAME, l_api_name, l_ndebug,
2465 'Internal arrays have been populated ('||TO_CHAR(SYSDATE,'MM-DD-YYYY HH24:MI:SS')||') ',
2466 fnd_log.LEVEL_STATEMENT);
2467 cz_utils.log_report(G_PKG_NAME, l_api_name, l_ndebug,
2468 'Retrieving of APC property values will be started ('||TO_CHAR(SYSDATE,'MM-DD-YYYY HH24:MI:SS')||') ',
2469 fnd_log.LEVEL_STATEMENT);
2470 END IF;
2471
2472 ---Bug Fix - 8519380
2473 l_sql := 'SELECT apcpropvals.* FROM CZ_EXV_ITEM_APC_PROP_VALUES apcpropvals,'||
2474 'CZ_IMP_TMP_ITEMCAT itemtypes '||
2475 'WHERE apcpropvals.item_catalog_group_id = itemtypes.item_catalog_group_id '||
2476 'AND EXISTS (SELECT NULL FROM CZ_EXV_ITEMS '||
2477 'WHERE inventory_item_id = apcpropvals.inventory_item_id '||
2478 ' AND organization_id = '|| p_org_id ||
2479 ' AND top_item_id = '||p_top_item_id||
2480 ' AND explosion_type = '''||p_expl_type||''')'||
2481 ' AND organization_id = '|| p_org_id ||
2482 ' AND inventory_item_id IS NOT NULL ORDER BY INVENTORY_ITEM_ID';
2483 --
2484 -- define cursor and dynamically describe columns of this cursor
2485 --
2486 l_cursor := DBMS_SQL.OPEN_CURSOR;
2487 DBMS_SQL.PARSE(l_cursor, l_sql, DBMS_SQL.NATIVE);
2488 l_exec := DBMS_SQL.EXECUTE(l_cursor);
2489 DBMS_SQL.DESCRIBE_COLUMNS(l_cursor, l_col_cnt, l_rec_tab);
2490
2491 --
2492 -- dynamically define columns of record set
2493 --
2494 l_col_num := l_rec_tab.FIRST;
2495 IF (l_col_num IS NOT NULL) THEN
2496 LOOP
2497 l_col_name:=UPPER(l_rec_tab(l_col_num).col_name);
2498 l_col_length:=l_rec_tab(l_col_num).col_max_len;
2499
2500 l_col_tbl(l_col_name).col_name := l_col_name;
2501 l_col_tbl(l_col_name).col_num := l_col_num;
2502
2503 IF l_col_name IN('ATTR_GROUP_ID') THEN
2504 DBMS_SQL.DEFINE_COLUMN(l_cursor,l_col_num,l_num_value);
2505 l_attr_group_col_num := l_col_num;
2506 ELSIF l_col_name IN('INVENTORY_ITEM_ID') THEN
2507 DBMS_SQL.DEFINE_COLUMN(l_cursor,l_col_num,l_num_value);
2508 l_inv_item_col_num := l_col_num;
2509 ELSIF l_col_name IN('ORGANIZATION_ID') THEN
2510 DBMS_SQL.DEFINE_COLUMN(l_cursor,l_col_num,l_num_value);
2511 l_org_id_col_num := l_col_num;
2512 ELSIF l_col_name IN('LANGUAGE') THEN
2513 DBMS_SQL.DEFINE_COLUMN(l_cursor,l_col_num,l_str_value,l_col_length);
2514 l_lang_col_num := l_col_num;
2515 ELSIF l_col_name IN('SOURCE_LANG') THEN
2516 DBMS_SQL.DEFINE_COLUMN(l_cursor,l_col_num,l_str_value,l_col_length);
2517 l_source_lang_col_num := l_col_num;
2518 END IF;
2519
2520 IF l_used_db_columns_tbl.EXISTS(l_col_name) THEN
2521 DBMS_SQL.DEFINE_COLUMN(l_cursor,l_col_num,l_str_value,l_col_length);
2522 END IF;
2523
2524 l_col_num := l_rec_tab.NEXT(l_col_num);
2525 EXIT WHEN (l_col_num IS NULL);
2526
2527 END LOOP; -- end of loop through l_rec_tab
2528 END IF; -- end of IF (l_col_num IS NOT NULL) THEN
2529
2530 l_current_inv_item_id := 0;
2531
2532 l_rec_counter := 0;
2533
2534 --
2535 -- fetch records from dynamic cursor with sql = l_sql
2536 --
2537 LOOP
2538
2539 IF DBMS_SQL.FETCH_ROWS(l_cursor)=0 THEN
2540 EXIT;
2541 ELSE
2542 DBMS_SQL.COLUMN_VALUE(l_cursor,l_attr_group_col_num,l_attr_group_id);
2543 DBMS_SQL.COLUMN_VALUE(l_cursor,l_inv_item_col_num,l_inventory_item_id);
2544 DBMS_SQL.COLUMN_VALUE(l_cursor,l_org_id_col_num,l_org_id);
2545 DBMS_SQL.COLUMN_VALUE(l_cursor,l_lang_col_num,l_language);
2546 DBMS_SQL.COLUMN_VALUE(l_cursor,l_source_lang_col_num,l_source_lang);
2547
2548 l_att_names_tbl := l_group_attr_names_tbl(l_attr_group_id);
2549 l_db_columns_tbl := l_group_database_columns_tbl(l_attr_group_id);
2550 l_db_column_types_tbl := l_group_db_column_types_tbl(l_attr_group_id);
2551
2552 --
2553 -- handle each EXT column in this loop
2554 --
2555 FOR n IN l_db_columns_tbl.FIRST..l_db_columns_tbl.LAST
2556 LOOP
2557 -- find column num of column with name l_db_columns_tbl(m)
2558 l_column_num := get_Col_Num(l_db_columns_tbl(n), l_col_tbl);
2559
2560 --
2561 -- find value of property which is stored in column l_db_columns_tbl(n)
2562 --
2563 DBMS_SQL.COLUMN_VALUE(l_cursor,l_column_num,l_column_value);
2564
2565 IF l_column_value IS NOT NULL THEN
2566
2567 l_rec_counter := l_rec_counter + 1;
2568
2569 l_prop_values_tbl(l_rec_counter) := l_column_value;
2570 l_prop_orig_sys_ref_tbl(l_rec_counter) := l_att_names_tbl(n)||'-'||TO_CHAR(G_EGO_APPLICATION_ID);
2571 l_item_master_orig_sys_ref_tbl(l_rec_counter) := TO_CHAR(l_inventory_item_id)||':'||TO_CHAR(l_org_id);
2572
2573 l_localtext_orig_sys_ref_tbl(l_rec_counter) := NULL;
2574
2575 --
2576 -- if it is translatable property then populate l_num_value_tbl () with intl_text_id and
2577 -- add record to CZ_IMP_LOCALIZED_TEXTS with
2578 -- ORIG_SYS_REF = l_prop_orig_sys_ref_tbl(l_rec_counter)
2579 --
2580 IF l_db_column_types_tbl(n)=TL_TEXT_TYPE THEN -- translatable text
2581 l_localtext_orig_sys_ref_tbl(l_rec_counter) := l_prop_orig_sys_ref_tbl(l_rec_counter)||':'||l_db_columns_tbl(n)||':'||TO_CHAR(l_inventory_item_id);
2582
2583 INSERT INTO CZ_IMP_LOCALIZED_TEXTS
2584 (LOCALIZED_STR, LANGUAGE, SOURCE_LANG, RUN_ID, ORIG_SYS_REF, MODEL_ID)
2585 VALUES
2586 (l_column_value,l_language, l_source_lang, p_run_id, l_localtext_orig_sys_ref_tbl(l_rec_counter),0);
2587 l_num_value_tbl (l_rec_counter) := NULL;
2588 ELSIF l_db_column_types_tbl(n)=DECIMAL_TYPE THEN -- DECIMAL
2589 l_num_value_tbl (l_rec_counter) := TO_NUMBER(l_column_value);
2590 l_prop_values_tbl(l_rec_counter) := l_column_value;
2591 ELSE
2592 l_num_value_tbl (l_rec_counter) := NULL;
2593 END IF;
2594
2595 END IF;
2596
2597 END LOOP; -- end of FOR n IN ...
2598
2599 END IF; -- end of IF DBMS_SQL.FETCH_ROWS(l_cursor)=0
2600
2601 IF l_prop_values_tbl.COUNT > 0 AND (l_rec_counter=l_Batch_Size OR FLOOR(l_rec_counter/l_Batch_Size)=0) THEN
2602
2603 --
2604 -- insert portion of data limited by l_Batch_Size to Import Property Values
2605 --
2606 FORALL i IN l_prop_values_tbl.FIRST..l_prop_values_tbl.LAST
2607 INSERT INTO CZ_IMP_ITEM_PROPERTY_VALUE
2608 (PROPERTY_VALUE, FSK_PROPERTY_1_1,FSK_PROPERTY_1_EXT,
2609 FSK_ITEMMASTER_2_1,FSK_ITEMMASTER_2_EXT,RUN_ID,ORIG_SYS_REF,FSK_LOCALIZEDTEXT_3_1,PROPERTY_NUM_VALUE,
2610 SRC_APPLICATION_ID)
2611 VALUES
2612 (l_prop_values_tbl(i), l_prop_orig_sys_ref_tbl(i),l_prop_orig_sys_ref_tbl(i),
2613 l_item_master_orig_sys_ref_tbl(i), l_item_master_orig_sys_ref_tbl(i),
2614 p_run_id,
2615 l_item_master_orig_sys_ref_tbl(i) || ':' || l_prop_orig_sys_ref_tbl(i),
2616 l_localtext_orig_sys_ref_tbl(i),
2617 l_num_value_tbl(i),
2618 G_EGO_APPLICATION_ID);
2619
2620 COMMIT;
2621
2622 FORALL i IN l_prop_values_tbl.FIRST..l_prop_values_tbl.LAST
2623 INSERT INTO CZ_IMP_LOCALIZED_TEXTS
2624 (LOCALIZED_STR, LANGUAGE, SOURCE_LANG, RUN_ID, ORIG_SYS_REF, MODEL_ID)
2625 SELECT
2626 LOCALIZED_STR, LANG.LANGUAGE_CODE, SOURCE_LANG, RUN_ID, ORIG_SYS_REF, MODEL_ID
2627 FROM CZ_IMP_LOCALIZED_TEXTS intl,fnd_languages lang
2628 WHERE intl.run_id=p_run_id AND intl.orig_sys_ref=l_localtext_orig_sys_ref_tbl(i) AND installed_flag in( 'B', 'I')
2629 AND LANGUAGE_CODE<>SOURCE_LANG
2630 AND EXISTS
2631 (SELECT 1 FROM CZ_IMP_LOCALIZED_TEXTS loc,fnd_languages lang
2632 WHERE loc.run_id=p_run_id AND orig_sys_ref = intl.orig_sys_ref
2633 AND lang.language_code <> loc.language
2634 );
2635 COMMIT;
2636
2637 l_rec_counter := 0;
2638 l_prop_values_tbl.DELETE;
2639 l_prop_orig_sys_ref_tbl.DELETE;
2640 l_item_master_orig_sys_ref_tbl.DELETE;
2641 l_num_value_tbl.DELETE;
2642 l_localtext_orig_sys_ref_tbl.DELETE;
2643 END IF;
2644
2645
2646 END LOOP; -- end of looping through l_cursor
2647
2648 -- close cursor
2649 DBMS_SQL.CLOSE_CURSOR(l_cursor);
2650
2651 DELETE FROM CZ_IMP_TMP_ITEMCAT WHERE run_id=p_run_id;
2652 COMMIT;
2653
2654 IF (FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL) THEN
2655 cz_utils.log_report(G_PKG_NAME, l_api_name, l_ndebug,
2656 'CZ_IMP_ITEM_PROPERTY_VALUE has been populated ('||TO_CHAR(SYSDATE,'MM-DD-YYYY HH24:MI:SS')||') ',
2657 fnd_log.LEVEL_STATEMENT);
2658 END IF;
2659
2660 EXCEPTION
2661 WHEN OTHERS THEN
2662 DELETE FROM CZ_IMP_TMP_ITEMCAT WHERE run_id=p_run_id;
2663 COMMIT;
2664 l_error:=CZ_UTILS.LOG_REPORT(SQLERRM,1,'EXTR_APC_PROPERTIES',11276,p_run_id);
2665 RAISE;
2666 END EXTR_APC_PROPERTIES;
2667
2668 ------------------------------------------------------------------------------------------
2669 PROCEDURE EXTR_PROPERTIES(inRun_ID IN PLS_INTEGER,
2670 nOrg_ID IN NUMBER,
2671 nTop_ID IN NUMBER,
2672 sExpl_type IN VARCHAR2)
2673 IS
2674 DECIMAL_TYPE CONSTANT NUMBER := 2;
2675 TEXT_TYPE CONSTANT NUMBER := 4;
2676
2677 xERROR BOOLEAN:=FALSE;
2678 sName CZ_IMP_PROPERTY.ORIG_SYS_REF%TYPE;
2679 nType CZ_IMP_PROPERTY.DATA_TYPE%TYPE;
2680 sResolve CZ_DB_SETTINGS.VALUE%TYPE;
2681
2682 TYPE tNumber IS TABLE OF NUMBER INDEX BY BINARY_INTEGER;
2683 tabValues tNumber;
2684
2685 CURSOR C_DATATYPE IS
2686 SELECT ORIG_SYS_REF FROM CZ_IMP_PROPERTY WHERE RUN_ID=inRUN_ID AND REC_STATUS IS NULL
2687 FOR UPDATE;
2688
2689 st_time number;
2690 end_time number;
2691 loop_end_time number;
2692 insert_end_time number;
2693 d_str varchar2(255);
2694 l_noupdate cz_xfr_fields.noupdate%TYPE;
2695 l_check_values BOOLEAN :=FALSE;
2696 l_onl_type cz_properties.data_type%TYPE;
2697
2698 v_settings_id VARCHAR2(40);
2699 v_section_name VARCHAR2(30);
2700
2701 BEGIN
2702
2703 if (CZ_IMP_ALL.get_time) then
2704 st_time := dbms_utility.get_time();
2705 end if;
2706
2707 FORALL i IN 1..itemCatalogGroupId.COUNT
2708 INSERT INTO CZ_IMP_PROPERTY
2709 (DESC_TEXT,NAME,ORIG_SYS_REF,RUN_ID,DATA_TYPE,SRC_APPLICATION_ID)
2710 SELECT DESCRIPTION, ELEMENT_NAME, ELEMENT_NAME, inRUN_ID, TEXT_TYPE, G_BOM_APPLICATION_ID
2711 FROM CZ_EXV_ITEM_PROPERTIES
2712 WHERE ITEM_CATALOG_GROUP_ID = itemCatalogGroupId(i);
2713
2714 if (CZ_IMP_ALL.get_time) then
2715 end_time := dbms_utility.get_time();
2716 d_str := inRun_Id || ' Insert property (' || nTop_Id || ') :' || (end_time-st_time)/100.00;
2717 xError:=cz_utils.log_report(d_str,1,'EXTRACTION',11299,inRun_Id);
2718 end if;
2719
2720 COMMIT;
2721
2722 v_settings_id := 'ResolvePropertyDataType';
2723 v_section_name := 'ORAAPPS_INTEGRATE';
2724
2725 BEGIN
2726 SELECT VALUE INTO sResolve FROM CZ_DB_SETTINGS
2727 WHERE SETTING_ID=v_settings_id AND SECTION_NAME=v_section_name;
2728 EXCEPTION
2729 WHEN OTHERS THEN
2730 sResolve:='NO';
2731 END;
2732
2733 BEGIN
2734 SELECT noupdate INTO l_noupdate
2735 FROM cz_xfr_fields f, cz_xfr_tables t
2736 WHERE t.order_seq=f.order_seq
2737 AND t.dst_table='CZ_PROPERTIES'
2738 AND f.xfr_group='IMPORT'
2739 AND t.xfr_group=f.xfr_group
2740 AND f.dst_field='DATA_TYPE'
2741 AND rownum < 2;
2742 EXCEPTION
2743 WHEN NO_DATA_FOUND THEN
2744 l_noupdate:='0';
2745 END;
2746
2747 OPEN C_DATATYPE;
2748 LOOP
2749 FETCH C_DATATYPE INTO sName;
2750 EXIT WHEN C_DATATYPE%NOTFOUND;
2751
2752 BEGIN
2753 SELECT data_type INTO l_onl_type
2754 FROM cz_properties
2755 WHERE orig_sys_ref=sName
2756 AND deleted_flag='0'
2757 AND rownum <2;
2758 nType := l_onl_type;
2759 EXCEPTION
2760 WHEN NO_DATA_FOUND THEN
2761 l_onl_type:= -1;
2762 END;
2763
2764 IF (l_onl_type = -1 AND sResolve = 'YES') THEN
2765 l_check_values := TRUE;
2766 ELSIF (l_onl_type = -1 AND sResolve = 'NO') THEN
2767 l_check_values := FALSE;
2768 nType := TEXT_TYPE;
2769 ELSIF (l_onl_type = TEXT_TYPE AND l_noupdate = '1') THEN
2770 l_check_values := FALSE;
2771 nType := TEXT_TYPE;
2772 ELSIF (l_onl_type = TEXT_TYPE AND l_noupdate = '0' AND sResolve='YES') THEN
2773 l_check_values := TRUE;
2774 ELSIF (l_onl_type = DECIMAL_TYPE AND l_noupdate = '1') THEN
2775 l_check_values := FALSE;
2776 nType := DECIMAL_TYPE;
2777 ELSIF (l_onl_type = DECIMAL_TYPE AND l_noupdate = '0') THEN
2778 l_check_values := TRUE;
2779 ELSE
2780 l_check_values := FALSE;
2781 nType := TEXT_TYPE;
2782 END IF;
2783
2784 IF (l_check_values = TRUE) THEN
2785 BEGIN
2786 tabValues.DELETE;
2787
2788 SELECT TO_NUMBER(element_value) BULK COLLECT INTO tabValues
2789 FROM cz_exv_descr_element_values
2790 WHERE element_name = sName;
2791
2792 IF(tabValues.COUNT > 0)THEN
2793 nType := DECIMAL_TYPE;
2794 END IF;
2795 EXCEPTION
2796 WHEN INVALID_NUMBER THEN
2797 nType := TEXT_TYPE;
2798 END;
2799 END IF;
2800
2801 IF(nType=DECIMAL_TYPE)THEN
2802 UPDATE CZ_IMP_PROPERTY SET DATA_TYPE=DECIMAL_TYPE,DEF_NUM_VALUE=0
2803 WHERE CURRENT OF C_DATATYPE;
2804 END IF;
2805 END LOOP;
2806 CLOSE C_DATATYPE;
2807 if (CZ_IMP_ALL.get_time) then
2808 loop_end_time := dbms_utility.get_time();
2809 d_str := inRun_Id || ' Resolve property datatype (' || nTop_Id || ') :' || (loop_end_time-end_time)/100.00;
2810 xError:=cz_utils.log_report(d_str,1,'EXTRACTION',11299,inRun_Id);
2811 end if;
2812 EXCEPTION
2813 WHEN NO_DATA_FOUND THEN
2814 NULL;
2815 WHEN CZ_ADMIN.IMP_UNEXP_SQL_ERROR THEN
2816 RAISE;
2817 WHEN CZ_ADMIN.IMP_MAXERR_REACHED THEN
2818 RAISE;
2819 WHEN OTHERS THEN
2820 IF(c_datatype%ISOPEN)THEN CLOSE c_datatype; END IF;
2821 d_str:=CZ_UTILS.GET_TEXT('CZ_IMP_OPERATION_FAILED','ERRORTEXT',SQLERRM);
2822 xERROR:=cz_utils.log_report(d_str,1,'EXTR_PROPERTIES',11276,inRun_Id);
2823 RAISE CZ_ADMIN.IMP_UNEXP_SQL_ERROR;
2824 END;
2825 ------------------------------------------------------------------------------------------
2826 PROCEDURE EXTR_ITEM_TYPE_PROPERTIES(inRun_ID IN PLS_INTEGER,
2827 nOrg_ID IN NUMBER,
2828 nTop_ID IN NUMBER,
2829 sExpl_type IN VARCHAR2)
2830 IS
2831 xERROR BOOLEAN:=FALSE;
2832
2833 st_time number;
2834 end_time number;
2835 loop_end_time number;
2836 insert_end_time number;
2837 d_str varchar2(255);
2838
2839 BEGIN
2840
2841 if (CZ_IMP_ALL.get_time) then
2842 st_time := dbms_utility.get_time();
2843 end if;
2844
2845 FORALL i IN 1..itemCatalogGroupId.COUNT
2846 INSERT INTO CZ_IMP_ITEM_TYPE_PROPERTY
2847 (FSK_ITEMTYPE_1_1,FSK_ITEMTYPE_1_EXT,FSK_PROPERTY_2_1,FSK_PROPERTY_2_EXT,RUN_ID,
2848 ORIG_SYS_REF,SRC_APPLICATION_ID)
2849 SELECT ITEM_CATALOG_GROUP_ID, ITEM_CATALOG_GROUP_ID, ELEMENT_NAME, ELEMENT_NAME, inRUN_ID,
2850 TO_CHAR(ITEM_CATALOG_GROUP_ID) || ':' || ELEMENT_NAME, G_BOM_APPLICATION_ID
2851 FROM CZ_EXV_ITEM_PROPERTIES
2852 WHERE ITEM_CATALOG_GROUP_ID = itemCatalogGroupId(i);
2853
2854 if (CZ_IMP_ALL.get_time) then
2855 end_time := dbms_utility.get_time();
2856 d_str := inRun_Id || ' Insert item Type prop (' || nTop_Id || ') :' || (end_time-st_time)/100.00;
2857 xError:=cz_utils.log_report(d_str,1,'EXTRACTION',11299,inRun_Id);
2858 end if;
2859
2860 COMMIT;
2861
2862 EXCEPTION
2863 WHEN NO_DATA_FOUND THEN
2864 NULL;
2865 WHEN CZ_ADMIN.IMP_UNEXP_SQL_ERROR THEN
2866 RAISE;
2867 WHEN CZ_ADMIN.IMP_MAXERR_REACHED THEN
2868 RAISE;
2869 WHEN OTHERS THEN
2870 d_str:=CZ_UTILS.GET_TEXT('CZ_IMP_OPERATION_FAILED','ERRORTEXT',SQLERRM);
2871 xERROR:=cz_utils.log_report(d_str,1,'EXTR_ITEM_TYPE_PROPERTIES',11276,inRun_Id);
2872 RAISE CZ_ADMIN.IMP_UNEXP_SQL_ERROR;
2873 END;
2874 ------------------------------------------------------------------------------------------
2875 PROCEDURE EXTR_ITEM_PROPERTY_VALUES(inRun_ID IN PLS_INTEGER,
2876 nOrg_ID IN NUMBER,
2877 nTop_ID IN NUMBER,
2878 sExpl_type IN VARCHAR2)
2879 IS
2880 xERROR BOOLEAN:=FALSE;
2881
2882 st_time number;
2883 end_time number;
2884 loop_end_time number;
2885 d_str varchar2(255);
2886
2887 BEGIN
2888
2889 if(CZ_IMP_ALL.get_time) then
2890 st_time := dbms_utility.get_time();
2891 end if;
2892
2893 FORALL i IN 1..inventoryItemId.COUNT
2894 INSERT INTO CZ_IMP_ITEM_PROPERTY_VALUE
2895 (PROPERTY_VALUE, FSK_PROPERTY_1_1, FSK_PROPERTY_1_EXT,
2896 FSK_ITEMMASTER_2_1,
2897 FSK_ITEMMASTER_2_EXT,
2898 RUN_ID,
2899 ORIG_SYS_REF, SRC_APPLICATION_ID)
2900 SELECT ELEMENT_VALUE, ELEMENT_NAME, ELEMENT_NAME,
2901 CZ_ORAAPPS_INTEGRATE.ITEM_SURROGATE_KEY(to_char(INVENTORY_ITEM_ID), to_char(ORGANIZATION_ID)),
2902 CZ_ORAAPPS_INTEGRATE.ITEM_SURROGATE_KEY(to_char(INVENTORY_ITEM_ID), to_char(ORGANIZATION_ID)),
2903 inRun_ID,
2904 CZ_ORAAPPS_INTEGRATE.ITEM_SURROGATE_KEY(to_char(INVENTORY_ITEM_ID), to_char(ORGANIZATION_ID))|| ':' || ELEMENT_NAME,
2905 G_BOM_APPLICATION_ID
2906 FROM CZ_EXV_ITEM_PROPERTY_VALUES
2907 WHERE INVENTORY_ITEM_ID = inventoryItemId(i)
2908 AND ORGANIZATION_ID = nOrg_ID
2909 AND ELEMENT_VALUE IS NOT NULL;
2910
2911 if (CZ_IMP_ALL.get_time) then
2912 loop_end_time := dbms_utility.get_time();
2913 d_str := inRun_Id || ' Bulk collect prop val (' || nTop_Id || ') :' || (end_time-st_time)/100.00;
2914 xError:=cz_utils.log_report(d_str,1,'EXTRACTION',11299,inRun_Id);
2915 end if;
2916
2917 COMMIT;
2918 EXCEPTION
2919 WHEN CZ_ADMIN.IMP_UNEXP_SQL_ERROR THEN
2920 RAISE;
2921 WHEN NO_DATA_FOUND THEN
2922 NULL;
2923 WHEN CZ_ADMIN.IMP_MAXERR_REACHED THEN
2924 RAISE;
2925 WHEN OTHERS THEN
2926 d_str:=CZ_UTILS.GET_TEXT('CZ_IMP_OPERATION_FAILED','ERRORTEXT',SQLERRM);
2927 xERROR:=cz_utils.log_report(d_str,1,'EXTR_ITEM_PROPERTY_VALUES',11276,inRun_Id);
2928 RAISE CZ_ADMIN.IMP_UNEXP_SQL_ERROR;
2929 END;
2930 ------------------------------------------------------------------------------------------
2931 PROCEDURE extract_table(inRun_ID IN PLS_INTEGER,
2932 table_name IN VARCHAR2,
2933 nOrg_ID IN NUMBER,
2934 nTop_ID IN NUMBER,
2935 sExpl_type IN VARCHAR2,
2936 nModelId IN NUMBER)
2937 IS
2938 lower_table_name VARCHAR2(50) := LOWER(table_name);
2939 xERROR BOOLEAN:=FALSE;
2940 st_time number;
2941 end_time number;
2942 d_str varchar2(255);
2943 BEGIN
2944 --DBMS_OUTPUT.ENABLE;
2945 --DBMS_OUTPUT.PUT_LINE('EXTRACTING TABLE: ' || lower_table_name);
2946 IF(lower_table_name='cz_item_masters') THEN
2947 if (CZ_IMP_ALL.get_time) then
2948 st_time := dbms_utility.get_time();
2949 end if;
2950 EXTR_ITEM_MASTER(inRun_ID,nOrg_ID,nTop_ID,sExpl_type);
2951 if (CZ_IMP_ALL.get_time) then
2952 end_time := dbms_utility.get_time();
2953 d_str := inRun_Id || ' Extract item master (' || nTop_Id || ') :' || (end_time-st_time)/100.00;
2954 xERROR:=cz_utils.log_report(d_str,1,'EXTRACTION',11299,inRun_Id);
2955 end if;
2956 ELSIF(lower_table_name='cz_ps_nodes') THEN
2957 if (CZ_IMP_ALL.get_time) then
2958 st_time := dbms_utility.get_time();
2959 end if;
2960 EXTR_PS_NODE(inRun_ID,nOrg_ID,nTop_ID,sExpl_type,nModelId);
2961 if (CZ_IMP_ALL.get_time) then
2962 end_time := dbms_utility.get_time();
2963 d_str :=inRun_Id || ' Extract ps structure (' || nTop_Id || ') :' || (end_time-st_time)/100.00;
2964 xERROR:=cz_utils.log_report(d_str,1,'EXTRACTION',11299,inRun_Id);
2965 end if;
2966 ELSIF(lower_table_name='cz_localized_texts') THEN
2967 if (CZ_IMP_ALL.get_time) then
2968 st_time := dbms_utility.get_time();
2969 end if;
2970 EXTR_INTL_TEXT(inRun_ID,nOrg_ID,nTop_ID,sExpl_type,nModelId);
2971 if (CZ_IMP_ALL.get_time) then
2972 end_time := dbms_utility.get_time();
2973 d_str := inRun_Id || ' Extract intl text (' || nTop_Id || ') :' || (end_time-st_time)/100.00;
2974 xERROR:=cz_utils.log_report(d_str,1,'EXTRACTION',11299,inRun_Id);
2975 end if;
2976 ELSIF(lower_table_name='cz_devl_projects') THEN
2977 if (CZ_IMP_ALL.get_time) then
2978 st_time := dbms_utility.get_time();
2979 end if;
2980 EXTR_DEVL_PROJECT(inRun_ID,nOrg_ID,nTop_ID,sExpl_type,nModelId);
2981 if (CZ_IMP_ALL.get_time) then
2982 end_time := dbms_utility.get_time();
2983 d_str := inRun_Id || ' Extract devl project (' || nTop_Id || ') :' || (end_time-st_time)/100.00;
2984 xERROR:=cz_utils.log_report(d_str,1,'EXTRACTION',11299,inRun_Id);
2985 end if;
2986 ELSIF(lower_table_name='cz_item_types') THEN
2987 if (CZ_IMP_ALL.get_time) then
2988 st_time := dbms_utility.get_time();
2989 end if;
2990 EXTR_ITEM_TYPES(inRun_ID,nOrg_ID,nTop_ID,sExpl_type);
2991 if (CZ_IMP_ALL.get_time) then
2992 end_time := dbms_utility.get_time();
2993 d_str := inRun_Id || ' Extract item types (' || nTop_Id || ') :' || (end_time-st_time)/100.00;
2994 xERROR:=cz_utils.log_report(d_str,1,'EXTRACTION',11299,inRun_Id);
2995 end if;
2996 ELSIF(lower_table_name='cz_properties') THEN
2997 if (CZ_IMP_ALL.get_time) then
2998 st_time := dbms_utility.get_time();
2999 end if;
3000 EXTR_PROPERTIES(inRun_ID,nOrg_ID,nTop_ID,sExpl_type);
3001
3002 EXTR_APC_PROPERTIES(p_run_id => inRun_ID,
3003 p_org_id => nOrg_ID,
3004 p_top_item_id => nTop_ID,
3005 p_expl_type => sExpl_type);
3006
3007 if (CZ_IMP_ALL.get_time) then
3008 end_time := dbms_utility.get_time();
3009 d_str := inRun_Id || ' Extract property (' || nTop_Id || ') :' || (end_time-st_time)/100.00;
3010 xERROR:=cz_utils.log_report(d_str,1,'EXTRACTION',11299,inRun_Id);
3011 end if;
3012 ELSIF(lower_table_name='cz_item_type_properties') THEN
3013 if (CZ_IMP_ALL.get_time) then
3014 st_time := dbms_utility.get_time();
3015 end if;
3016 EXTR_ITEM_TYPE_PROPERTIES(inRun_ID,nOrg_ID,nTop_ID,sExpl_type);
3017 if (CZ_IMP_ALL.get_time) then
3018 end_time := dbms_utility.get_time();
3019 d_str := inRun_Id || ' Extract item type property (' || nTop_Id || ') :' || (end_time-st_time)/100.00;
3020 xERROR:=cz_utils.log_report(d_str,1,'EXTRACTION',11299,inRun_Id);
3021 end if;
3022 ELSIF(lower_table_name='cz_item_property_values') THEN
3023 if (CZ_IMP_ALL.get_time) then
3024 st_time := dbms_utility.get_time();
3025 end if;
3026 EXTR_ITEM_PROPERTY_VALUES(inRun_ID,nOrg_ID,nTop_ID,sExpl_type);
3027 if (CZ_IMP_ALL.get_time) then
3028 end_time := dbms_utility.get_time();
3029 d_str := inRun_Id || ' Extract item property value (' || nTop_Id || ') :' || (end_time-st_time)/100.00;
3030 xERROR:=cz_utils.log_report(d_str,1,'EXTRACTION',11299,inRun_Id);
3031 end if;
3032 ELSE
3033 --DBMS_OUTPUT.PUT_LINE(CZ_UTILS.GET_TEXT('CZ_IMP_INVALID_TABLE_EXTRACT','TABLENAME',table_name));
3034 xERROR:=cz_utils.log_report(CZ_UTILS.GET_TEXT('CZ_IMP_INVALID_TABLE_EXTRACT','TABLENAME',table_name),1,'SINGLEBILL.EXTRACT_TABLE',11276,inRun_Id);
3035 END IF;
3036 END extract_table;
3037 ------------------------------------------------------------------------------------------
3038 PROCEDURE populate_table(inRun_ID IN PLS_INTEGER,
3039 table_name IN VARCHAR2,
3040 commit_size IN PLS_INTEGER,
3041 max_err IN PLS_INTEGER,
3042 inXFR_GROUP IN VARCHAR2,
3043 p_rp_folder_id IN NUMBER,
3044 x_failed IN OUT NOCOPY NUMBER
3045 )
3046 IS
3047 lower_table_name VARCHAR2(50) := LOWER(table_name);
3048 xERROR BOOLEAN:=FALSE;
3049 Inserts PLS_INTEGER;
3050 Updates PLS_INTEGER;
3051 Dups PLS_INTEGER;
3052 NoChange PLS_INTEGER;
3053 st_time number;
3054 end_time number;
3055 d_str varchar2(255);
3056 BEGIN
3057 --DBMS_OUTPUT.ENABLE;
3058 --DBMS_OUTPUT.PUT_LINE('IMPORTING TABLE: ' || lower_table_name);
3059 IF(lower_table_name='cz_item_masters') THEN
3060 if (CZ_IMP_ALL.get_time) then
3061 st_time := dbms_utility.get_time();
3062 end if;
3063 CZ_IMP_IM_MAIN.MAIN_ITEM_MASTER(inRun_ID, commit_size, max_err,
3064 Inserts, Updates, x_failed, Dups,NoChange, inXFR_GROUP);
3065 if (CZ_IMP_ALL.get_time) then
3066 end_time := dbms_utility.get_time();
3067 d_str := inRun_Id || ' Populate items :' || (end_time-st_time)/100.00;
3068 xERROR:=cz_utils.log_report(d_str,1,'POPULATE',11299,inRun_Id);
3069 end if;
3070 ELSIF(lower_table_name='cz_ps_nodes') THEN
3071 if (CZ_IMP_ALL.get_time) then
3072 st_time := dbms_utility.get_time();
3073 end if;
3074 CZ_IMP_PS_NODE.MAIN_PS_NODE(inRun_ID, commit_size, max_err,
3075 Inserts, Updates, x_failed, Dups, NoChange,inXFR_GROUP);
3076 if (CZ_IMP_ALL.get_time) then
3077 end_time := dbms_utility.get_time();
3078 d_str := inRun_Id || ' Populate product structure :' || (end_time-st_time)/100.00;
3079 xERROR:=cz_utils.log_report(d_str,1,'POPULATE',11299,inRun_Id);
3080 end if;
3081 ELSIF(lower_table_name='cz_localized_texts') THEN
3082 if (CZ_IMP_ALL.get_time) then
3083 st_time := dbms_utility.get_time();
3084 end if;
3085 CZ_IMP_PS_NODE.MAIN_INTL_TEXT(inRun_ID, commit_size, max_err,
3086 Inserts, Updates, x_failed, Dups, NoChange,inXFR_GROUP);
3087 if (CZ_IMP_ALL.get_time) then
3088 end_time := dbms_utility.get_time();
3089 d_str := inRun_Id || ' Populate intl text :' || (end_time-st_time)/100.00;
3090 xERROR:=cz_utils.log_report(d_str,1,'POPULATE',11299,inRun_Id);
3091 end if;
3092 ELSIF(lower_table_name='cz_devl_projects') THEN
3093 if (CZ_IMP_ALL.get_time) then
3094 st_time := dbms_utility.get_time();
3095 end if;
3096 CZ_IMP_PS_NODE.MAIN_DEVL_PROJECT(inRun_ID, commit_size, max_err,
3097 Inserts, Updates, x_failed, Dups,NoChange,
3098 inXFR_GROUP,p_rp_folder_id, g_CONFIG_ENGINE_TYPE);
3099 if (CZ_IMP_ALL.get_time) then
3100 end_time := dbms_utility.get_time();
3101 d_str := inRun_Id || ' Populate project :' || (end_time-st_time)/100.00;
3102 xERROR:=cz_utils.log_report(d_str,1,'POPULATE',11299,inRun_Id);
3103 end if;
3104 ELSIF(lower_table_name='cz_item_property_values') THEN
3105 if (CZ_IMP_ALL.get_time) then
3106 st_time := dbms_utility.get_time();
3107 end if;
3108 CZ_IMP_IM_MAIN.MAIN_ITEM_PROPERTY_VALUE(inRun_ID, commit_size, max_err,
3109 Inserts, Updates, x_failed, Dups, NoChange,inXFR_GROUP);
3110 if (CZ_IMP_ALL.get_time) then
3111 end_time := dbms_utility.get_time();
3112 d_str := inRun_Id || ' Populate item property val :' || (end_time-st_time)/100.00;
3113 xERROR:=cz_utils.log_report(d_str,1,'POPULATE',11299,inRun_Id);
3114 end if;
3115 ELSIF(lower_table_name='cz_item_types') THEN
3116 if (CZ_IMP_ALL.get_time) then
3117 st_time := dbms_utility.get_time();
3118 end if;
3119 CZ_IMP_IM_MAIN.MAIN_ITEM_TYPE(inRun_ID, commit_size, max_err,
3120 Inserts, Updates, x_failed, Dups, NoChange,inXFR_GROUP);
3121 if (CZ_IMP_ALL.get_time) then
3122 end_time := dbms_utility.get_time();
3123 d_str := inRun_Id || ' Populate item type :' || (end_time-st_time)/100.00;
3124 xERROR:=cz_utils.log_report(d_str,1,'POPULATE',11299,inRun_Id);
3125 end if;
3126 ELSIF(lower_table_name='cz_item_type_properties') THEN
3127 if (CZ_IMP_ALL.get_time) then
3128 st_time := dbms_utility.get_time();
3129 end if;
3130 CZ_IMP_IM_MAIN.MAIN_ITEM_TYPE_PROPERTY(inRun_ID, commit_size, max_err,
3131 Inserts, Updates, x_failed, Dups, inXFR_GROUP);
3132 if (CZ_IMP_ALL.get_time) then
3133 end_time := dbms_utility.get_time();
3134 d_str := inRun_Id || ' Populate item type property :' || (end_time-st_time)/100.00;
3135 xERROR:=cz_utils.log_report(d_str,1,'POPULATE',11299,inRun_Id);
3136 end if;
3137 ELSIF(lower_table_name='cz_properties') THEN
3138 if (CZ_IMP_ALL.get_time) then
3139 st_time := dbms_utility.get_time();
3140 end if;
3141 CZ_IMP_IM_MAIN.MAIN_PROPERTY(inRun_ID, commit_size, max_err,
3142 Inserts, Updates, x_failed, Dups, NoChange,inXFR_GROUP, p_rp_folder_id);
3143 if (CZ_IMP_ALL.get_time) then
3144 end_time := dbms_utility.get_time();
3145 d_str := inRun_Id || ' Populate property :' || (end_time-st_time)/100.00;
3146 xERROR:=cz_utils.log_report(d_str,1,'POPULATE',11299,inRun_Id);
3147 end if;
3148 ELSE
3149 --DBMS_OUTPUT.PUT_LINE(CZ_UTILS.GET_TEXT('CZ_IMP_INVALID_TABLE_IMPORT','TABLENAME',table_name));
3150 xERROR:=cz_utils.log_report(CZ_UTILS.GET_TEXT('CZ_IMP_INVALID_TABLE_IMPORT','TABLENAME',table_name),1,'CZ_IMP_SINGLE.POPULATE_TABLE',11276,inRun_Id);
3151 END IF;
3152 --DBMS_OUTPUT.PUT_LINE('INSERTS: '||to_char(Inserts));
3153 --DBMS_OUTPUT.PUT_LINE('UPDATES: '||to_char(Updates));
3154 --DBMS_OUTPUT.PUT_LINE('FAILED: '||to_char(x_failed));
3155 --DBMS_OUTPUT.PUT_LINE('DUPLICATES: '||to_char(Dups));
3156 EXCEPTION
3157 WHEN IMP_CHILD_MULTI_COPIES THEN
3158 RAISE;
3159 END populate_table;
3160 ------------------------------------------------------------------------------------------
3161 FUNCTION get_remote_import
3162 RETURN BOOLEAN IS
3163
3164 v_enabled VARCHAR2(1) := '1';
3165 v_local VARCHAR2(8) := 'LOCAL';
3166
3167 CURSOR check_remote_import IS
3168 SELECT server_local_id FROM CZ_SERVERS
3169 WHERE local_name = v_local
3170 AND import_enabled = v_enabled;
3171
3172 l_server_id CZ_SERVERS.server_local_id%type;
3173 x_get_remote_import_f BOOLEAN := false;
3174 xError boolean := false;
3175 d_str VARCHAR2(2000);
3176
3177 BEGIN
3178 -- check if this import session is local or remote. If remote do not use autonomous
3179 -- transactions
3180 OPEN check_remote_import;
3181 FETCH check_remote_import INTO l_server_id;
3182 x_get_remote_import_f := check_remote_import%FOUND;
3183 CLOSE check_remote_import;
3184
3185 IF (x_get_remote_import_f) THEN
3186 RETURN FALSE;
3187 ELSE
3188 RETURN TRUE;
3189 END IF;
3190 EXCEPTION
3191 WHEN CZ_ADMIN.IMP_MAXERR_REACHED THEN
3192 RAISE;
3193 WHEN OTHERS THEN
3194 d_str:=CZ_UTILS.GET_TEXT('CZ_IMP_OPERATION_FAILED','ERRORTEXT',SQLERRM);
3195 xERROR:=cz_utils.log_report(d_str,1,'CZ_IMP_SINGLE.GET_REMOTE_IMPORT',11276);
3196 RAISE CZ_ADMIN.IMP_UNEXP_SQL_ERROR;
3197 END GET_REMOTE_IMPORT;
3198 ------------------------------------------------------------------------------------------
3199 FUNCTION isAppsVersion11i(fndLinkName IN VARCHAR2)
3200 RETURN BOOLEAN
3201 IS
3202
3203 -- Check version of apps for existence of mtl_system_items_tl table
3204 -- This table was introduced for Multilingual support in 11i
3205
3206 xERROR BOOLEAN:=FALSE;
3207 vString VARCHAR2(255);
3208 v_count NUMBER := 0;
3209 v_inv_oracle_schema VARCHAR2(255);
3210 d_str varchar2(255);
3211 BEGIN
3212 get_App_Info('INV', v_inv_oracle_schema);
3213 vString := 'select count(*) from all_tables' ||fndLinkName||
3214 ' where owner='''||v_inv_oracle_schema||''' AND table_name = ''MTL_SYSTEM_ITEMS_TL'' AND ROWNUM<2';
3215
3216 EXECUTE IMMEDIATE vString into v_count;
3217 IF (v_count > 0) then
3218 return true;
3219 ELSE
3220 return false;
3221 END IF;
3222
3223 EXCEPTION
3224 WHEN CZ_ADMIN.IMP_UNEXP_SQL_ERROR THEN
3225 RAISE;
3226 WHEN CZ_ADMIN.IMP_MAXERR_REACHED THEN
3227 RAISE;
3228 WHEN OTHERS THEN
3229 d_str:=CZ_UTILS.GET_TEXT('CZ_IMP_OPERATION_FAILED','ERRORTEXT',SQLERRM);
3230 xERROR:=cz_utils.log_report(d_str,1,'CZ_IMP_SINGLE.isAppsVersion11i',11276);
3231 RAISE CZ_ADMIN.IMP_UNEXP_SQL_ERROR;
3232 END;
3233
3234 ------------------------------------------------------------------------------------------
3235 FUNCTION ExtractPsNode(inRunId IN NUMBER,
3236 inOrgId IN NUMBER,
3237 inTopId IN NUMBER,
3238 inExplType IN VARCHAR2,
3239 inServerId IN NUMBER,
3240 inRunExploder IN PLS_INTEGER,
3241 inRevDate IN DATE,
3242 inDateFormat IN VARCHAR2,
3243 inRefreshModelId IN NUMBER,
3244 inCopyRootModel IN VARCHAR2,
3245 inCopyChildModels IN VARCHAR2,
3246 inGenStatistics IN PLS_INTEGER)
3247 RETURN NUMBER IS
3248
3249 CURSOR c_expl (inLang VARCHAR2) IS
3250 SELECT component_item_id, component_code FROM cz_exv_item_master
3251 WHERE top_item_id = inTopId
3252 AND organization_id = inOrgId
3253 AND explosion_type = inExplType
3254 AND bom_item_type = 1
3255 AND plan_level > 0
3256 AND language = inLang
3257 order by plan_level;
3258
3259 --LA 9595142 14544881
3260 CURSOR c_ref IS
3261 SELECT component_code, component_sequence_id, component_sequence_path, -- bom_sort_order,
3262 substr(fsk_itemmaster_2_1,1,instr(fsk_itemmaster_2_1,':')-1),
3263 organization_id, explosion_type
3264 FROM cz_imp_ps_nodes
3265 WHERE run_id = inRunId
3266 AND organization_id = inOrgId
3267 AND top_item_id = inTopId
3268 AND ps_node_type = 263;
3269
3270 TYPE tStringArray IS TABLE OF VARCHAR2(2000) INDEX BY BINARY_INTEGER;
3271 tabCompCode tStringArray;
3272 tabTraversedChildCode tStringArray;
3273
3274 nModelId NUMBER;
3275 nSecondaryId NUMBER;
3276 outGrp_ID NUMBER;
3277 outError_code NUMBER;
3278 outErr_msg VARCHAR2(255);
3279 xERROR BOOLEAN:=FALSE;
3280 nTopItemId NUMBER;
3281 compCode VARCHAR2(2000);
3282 SubModelFlag PLS_INTEGER;
3283 l_check PLS_INTEGER;
3284
3285 lastCompCode VARCHAR2(2000);
3286 nChildTopItemId NUMBER;
3287
3288 bom_explode_st number;
3289 bom_explode_end number;
3290 d_str varchar2(255);
3291
3292 childDevlProjectId cz_devl_projects.devl_project_id%TYPE;
3293 l_lang VARCHAR2(4);
3294
3295 --LA 9595142
3296 l_curr_ref_id NUMBER;
3297 nImpEnabledModelId NUMBER;
3298 lCompCode CZ_IMP_PS_NODES.COMPONENT_CODE%TYPE;
3299 --lBomSortOrder CZ_IMP_PS_NODES.BOM_SORT_ORDER%TYPE; -- 14544881
3300 lCompSeqId CZ_IMP_PS_NODES.COMPONENT_SEQUENCE_ID%TYPE; -- 14544881
3301 lCompSeqPath CZ_IMP_PS_NODES.COMPONENT_SEQUENCE_PATH%TYPE; -- 14544881
3302 lInvItemId NUMBER;
3303 lOrgId NUMBER;
3304 lExplType CZ_IMP_PS_NODES.EXPLOSION_TYPE%TYPE;
3305 lDevlPrjOSR CZ_IMP_PS_NODES.FSK_DEVLPROJECT_5_1%TYPE;
3306
3307 ------------------------------------------------------------------------------------------
3308 --LA 9595142
3309 PROCEDURE getImpEnabledModelId (inDevlPrjOSR IN VARCHAR2,
3310 inRunId IN PLS_INTEGER,
3311 xModelId IN OUT NOCOPY NUMBER ) IS
3312 BEGIN
3313 SELECT d.devl_project_id INTO xModelId FROM cz_devl_projects d
3314 WHERE d.orig_sys_ref = inDevlPrjOSR
3315 AND d.deleted_flag = '0'
3316 AND d.import_enabled = '1'
3317 AND NVL(d.config_engine_type,'L') = g_CONFIG_ENGINE_TYPE --LA 12548898 Engine Sync
3318 AND EXISTS (SELECT NULL FROM CZ_RP_ENTRIES WHERE deleted_flag = '0'
3319 AND object_type = 'PRJ' AND object_id = d.devl_project_id) ;
3320 EXCEPTION
3321 WHEN TOO_MANY_ROWS THEN
3322 d_str:= 'Multiple copies of the model enabled for Import : (' || inDevlPrjOSR || ')' ;
3323 xERROR:=cz_utils.log_report(d_str,1,'ExtractPsNode.ImpEnabledChk',11276,inRunId);
3324 --xModelId := -1;
3325 xModelId := NULL;
3326 RAISE IMP_MODEL_NOT_ENABLED ;
3327 WHEN NO_DATA_FOUND THEN
3328 -- It could error out when model is not enabled for import
3329 -- or there is no entry in either cz_rp_entries or cz_devl_projects
3330 -- for given orig_sys_ref
3331 SELECT count(*) INTO xModelId FROM cz_devl_projects d, cz_rp_entries r
3332 WHERE d.orig_sys_ref = inDevlPrjOSR
3333 AND d.deleted_flag = '0'
3334 AND r.deleted_flag = '0'
3335 AND r.object_type = 'PRJ'
3336 AND NVL(d.import_enabled,'0') = '0'
3337 AND NVL(d.config_engine_type,'L') = g_CONFIG_ENGINE_TYPE --LA 12548898 Engine Sync
3338 AND d.devl_project_id = r.object_id;
3339 IF (xModelId > 0) THEN
3340 d_str:= 'Either model does not exist in Repository or not enabled for Import :'
3341 || inDevlPrjOSR ;
3342 xERROR:=cz_utils.log_report(d_str,1,'ExtractPsNode.ImpEnabledChk',11276,inRunId);
3343 --xModelId := -1;
3344 xModelId := NULL;
3345 RAISE IMP_MODEL_NOT_ENABLED ;
3346 END IF;
3347 xModelId := NULL;
3348 WHEN OTHERS THEN
3349 --xModelId := -1;
3350 xModelId := NULL;
3351 d_str:=CZ_UTILS.GET_TEXT('CZ_IMP_OPERATION_FAILED','ERRORTEXT',SQLERRM);
3352 xERROR:=cz_utils.log_report(d_str,1,'ExtractPsNode.ImpEnabledChk',11276,inRunId);
3353 RAISE CZ_ADMIN.IMP_UNEXP_SQL_ERROR;
3354 END getImpEnabledModelId;
3355
3356 -------------
3357 PROCEDURE checkImpEnabled (inDevlPrjOSR IN VARCHAR2,
3358 inInvItemId IN NUMBER,
3359 inRunId IN PLS_INTEGER,
3360 inCurrModelId IN NUMBER,
3361 xImpEnabledModelId IN OUT NOCOPY NUMBER,
3362 inProcessingModel IN NUMBER) IS
3363
3364
3365 BEGIN
3366
3367 --DBMS_OUTPUT.PUT_LINE('inInvItemId=' || inInvItemId || ' inDevlPrjOSR=' || inDevlPrjOSR ||
3368 --' inCurrModelId=' || inCurrModelId || ' xImpEnabledModelId=' || xImpEnabledModelId );
3369
3370 --Commenting out inCurrModelId <> -999 condition as during import of new model
3371 --it'll go in false condition and will fail.
3372 --IF (inCurrModelId <> -999 AND NOT import_enabled_tbl.EXISTS(inInvItemId)) THEN
3373 IF (NOT import_enabled_tbl.EXISTS(inInvItemId)) THEN
3374 getImpEnabledModelId(inDevlPrjOSR, inRunId, xImpEnabledModelId) ;
3375 IF (xImpEnabledModelId IS NOT NULL) THEN
3376 import_enabled_tbl(inInvItemId) := xImpEnabledModelId;
3377 ELSE
3378 xImpEnabledModelId := -1;
3379 END IF;
3380
3381 --DBMS_OUTPUT.PUT_LINE('*** ' || inDevlPrjOSR || ' = ' || xImpEnabledModelId);
3382 ELSE
3383
3384 xImpEnabledModelId := import_enabled_tbl(inInvItemId);
3385 --DBMS_OUTPUT.PUT_LINE('---Exists ' || inDevlPrjOSR || ' = ' || xImpEnabledModelId);
3386 END IF;
3387
3388 IF (inCurrModelId <> -999 AND xImpEnabledModelId > 0 AND xImpEnabledModelId <> inCurrModelId) THEN
3389
3390 d_str:= 'Imported referenced model is different than the one that is enabled ' ;
3391 IF (inProcessingModel > 0) THEN
3392 d_str:= d_str || ' in model id ' || inProcessingModel ;
3393 END IF;
3394 d_str:= d_str || ' for Model- ' || inDevlPrjOSR || ' Current ModelId=' || inCurrModelId ||
3395 ' Expecting ModelId=' || xImpEnabledModelId;
3396
3397 --DBMS_OUTPUT.PUT_LINE(d_str);
3398
3399 xERROR:=cz_utils.log_report(d_str,1,'ExtractPsNode.checkImpEnabled',11276,inRunId);
3400 RAISE IMP_MODEL_NOT_ENABLED ;
3401 END IF;
3402
3403
3404 END checkImpEnabled;
3405 ------------------------------------------------------------------------
3406
3407 BEGIN -- ExtractPsNode
3408
3409
3410 IF(inCopyRootModel = '1')THEN
3411
3412 SELECT CZ_XFR_PROJECT_BILLS_S.NEXTVAL INTO nModelId FROM DUAL;
3413
3414 INSERT INTO CZ_XFR_PROJECT_BILLS
3415 (ORGANIZATION_ID,TOP_ITEM_ID,EXPLOSION_TYPE,DELETED_FLAG,MODEL_PS_NODE_ID,copy_addl_child_models,
3416 source_server)
3417 SELECT inOrgId,inTopId,inExplType,'0',nModelId,inCopyChildModels,inServerId
3418 FROM DUAL;
3419
3420 ELSE
3421
3422 IF(inRefreshModelId IS NULL OR inRefreshModelId = -1)THEN
3423
3424 nModelId := NULL;
3425
3426 --LA 9595142 If multiple copies refresh disabled check whether the given model is enabled
3427 IF (disableMultipleCopyImport = 1) THEN
3428 checkImpEnabled(inExplType || ':' || inOrgId || ':' || inTopId, inTopId, inRunId, -999,nModelId, -1);
3429 ELSE
3430 BEGIN
3431 SELECT p.model_ps_node_id INTO nModelId
3432 FROM cz_xfr_project_bills p, cz_devl_projects d
3433 WHERE p.organization_id = inOrgId
3434 AND p.top_item_id = inTopId
3435 AND p.explosion_type = inExplType
3436 AND d.deleted_flag = '0'
3437 AND d.devl_project_id = d.persistent_project_id
3438 AND NVL(d.config_engine_type,'L') = g_CONFIG_ENGINE_TYPE --LA 12548898 Engine Sync
3439 AND p.model_ps_node_id = d.devl_project_id;
3440 EXCEPTION
3441 WHEN OTHERS THEN
3442 nModelId := NULL;
3443 END;
3444 END IF;
3445
3446 IF(nModelId IS NOT NULL AND nModelId > 0) THEN
3447
3448 --LA 9595142
3449 IF (disableMultipleCopyImport = 1) THEN
3450 -- If record does not exist in cz_xfr_project_bills for model that is import_enabled
3451 -- then insert that record in cz_xfr_project_bills
3452 -- This'll be required when copy is enabled for refresh
3453 INSERT INTO CZ_XFR_PROJECT_BILLS
3454 (ORGANIZATION_ID,TOP_ITEM_ID,EXPLOSION_TYPE,DELETED_FLAG,MODEL_PS_NODE_ID,copy_addl_child_models,
3455 source_server)
3456 SELECT inOrgId,inTopId,inExplType,'0',d.devl_project_id,inCopyChildModels,inServerId
3457 FROM CZ_DEVL_PROJECTS d
3458 WHERE d.orig_sys_ref = inExplType || ':' || inOrgId || ':' || inTopId
3459 AND NVL(d.config_engine_type,'L') = g_CONFIG_ENGINE_TYPE --LA 12548898 Engine Sync
3460 AND d.deleted_flag = '0' and d.import_enabled = '1' AND EXISTS
3461 (SELECT NULL FROM CZ_RP_ENTRIES WHERE deleted_flag = '0' and object_type = 'PRJ'
3462 AND object_id = d.devl_project_id) AND NOT EXISTS
3463 (SELECT NULL FROM CZ_XFR_PROJECT_BILLS WHERE model_ps_node_id = d.devl_project_id);
3464 END IF;
3465
3466 UPDATE cz_xfr_project_bills SET
3467 deleted_flag = '0',
3468 copy_addl_child_models = inCopyChildModels,
3469 source_server = inServerId
3470 WHERE model_ps_node_id = nModelId;
3471
3472 ELSE
3473
3474 SELECT CZ_XFR_PROJECT_BILLS_S.NEXTVAL INTO nModelId FROM DUAL;
3475
3476 INSERT INTO CZ_XFR_PROJECT_BILLS
3477 (ORGANIZATION_ID,TOP_ITEM_ID,EXPLOSION_TYPE,DELETED_FLAG,MODEL_PS_NODE_ID,copy_addl_child_models,
3478 source_server)
3479 SELECT inOrgId,inTopId,inExplType,'0',nModelId,inCopyChildModels,inServerId
3480 FROM DUAL;
3481
3482 END IF;
3483
3484 ELSE -- (inRefreshModelId IS NULL OR inRefreshModelId = -1)
3485
3486 nModelId := inRefreshModelId;
3487
3488 --LA 9595142
3489 IF (disableMultipleCopyImport = 1) THEN
3490 checkImpEnabled(inExplType || ':' || inOrgId || ':' || inTopId, inTopId, inRunId, inRefreshModelId,nModelId, -1);
3491 END IF;
3492
3493 INSERT INTO CZ_XFR_PROJECT_BILLS
3494 (ORGANIZATION_ID,TOP_ITEM_ID,EXPLOSION_TYPE,DELETED_FLAG,MODEL_PS_NODE_ID,copy_addl_child_models,
3495 source_server)
3496 SELECT inOrgId,inTopId,inExplType,'0',inRefreshModelId,inCopyChildModels,inServerId
3497 FROM DUAL WHERE NOT EXISTS
3498 (SELECT NULL FROM CZ_XFR_PROJECT_BILLS WHERE model_ps_node_id = inRefreshModelId);
3499
3500 UPDATE cz_xfr_project_bills SET
3501 deleted_flag = '0',
3502 copy_addl_child_models = inCopyChildModels,
3503 source_server = inServerId
3504 WHERE model_ps_node_id = inRefreshModelId;
3505
3506 END IF;
3507 END IF;
3508
3509 if (CZ_IMP_ALL.get_time) then
3510 bom_explode_st := dbms_utility.get_time();
3511 end if;
3512
3513 IF((inRunExploder = 1) and (NOT(GET_REMOTE_IMPORT))) THEN
3514
3515 DELETE FROM bom_explosions WHERE explosion_type = inExplType AND organization_id = inOrgId
3516 AND top_item_id = inTopId;
3517 COMMIT;
3518
3519 BOMPNORD.bmxporder_explode_for_order(inOrgId, 2, inExplType, 1, outGrp_ID,
3520 0, 60, inTopId, '', SYSDATE-1000, TO_CHAR(inRevDate, inDateFormat),
3521 0, 'N', outErr_msg, outError_code);
3522
3523 COMMIT;
3524
3525 IF(inGenStatistics = 1)THEN
3526
3527 fnd_stats.gather_table_stats('BOM', 'BOM_EXPLOSIONS');
3528 END IF;
3529
3530 IF(outError_code <> 0)THEN
3531 xERROR:=cz_utils.log_report(outErr_msg, 1, 'BOM_EXPLODER', 11276,inRunId);
3532 CZ_ORAAPPS_INTEGRATE.mRETCODE := 2;
3533 CZ_ORAAPPS_INTEGRATE.mERRBUF := outErr_msg;
3534 RETURN nModelId;
3535 END IF;
3536 ELSE
3537
3538 --Bug #5347969. If exploding is disabled or import is remote (we do not explode remotely),
3539 --we need to check if the available explosion is up-to-date and fail if it is not,
3540 --otherwise it is possible to delete active items from Configurator.
3541
3542 BEGIN
3543
3544 SELECT 1 INTO l_check FROM cz_exv_bom_explosions
3545 WHERE top_item_id = inTopId
3546 AND organization_id= inOrgId
3547 AND explosion_type = inExplType
3548 AND rexplode_flag = 1
3549 AND ROWNUM = 1;
3550
3551 --If found, explosion is not up-to-date.
3552
3553 outErr_msg := CZ_UTILS.GET_TEXT('CZ_IMP_STALE_EXPLOSION');
3554 xERROR:=CZ_IMP_ALL.REPORT(outErr_msg, 1, 'BOM_EXPLODER', 11276);
3555 CZ_ORAAPPS_INTEGRATE.mRETCODE := 2;
3556 CZ_ORAAPPS_INTEGRATE.mERRBUF := outErr_msg;
3557 RETURN nModelId;
3558
3559 EXCEPTION
3560 WHEN NO_DATA_FOUND THEN
3561
3562 --This exception means we can continue.
3563
3564 NULL;
3565 END;
3566 END IF;
3567
3568 if (CZ_IMP_ALL.get_time) then
3569 bom_explode_end := dbms_utility.get_time();
3570 d_str := inRunId || ' Bom Exploder (' || inTopId || ') :' || (bom_explode_end-bom_explode_st)/100.00;
3571 xERROR:=cz_utils.log_report(d_str,1,'BOM_EXPLODER',11299,inRunId);
3572 end if;
3573
3574 extract_table(inRunId, 'CZ_PS_NODES', inOrgId, inTopId, inExplType, nModelId);
3575
3576 --LA 9595142
3577 --After adding the data to import table check for the references that'll be imported
3578 --against import enabled models
3579 --
3580 IF (disableMultipleCopyImport = 1) THEN
3581 OPEN c_ref ;
3582 LOOP
3583 BEGIN
3584 --14544881
3585 FETCH c_ref INTO lCompCode, lCompSeqId, lCompSeqPath, --lBomSortOrder,
3586 lInvItemId, lOrgId, lExplType ;
3587 EXIT WHEN c_ref%NOTFOUND;
3588
3589 nImpEnabledModelId := -1;
3590
3591 BEGIN
3592 SELECT reference_id INTO l_curr_ref_id FROM cz_ps_nodes
3593 WHERE devl_project_id = nModelId
3594 AND deleted_flag = '0' and substr(orig_sys_ref,1,instr(orig_sys_ref,':') - 1) = lCompCode
3595 AND component_sequence_id = lCompSeqId
3596 AND component_sequence_path = lCompSeqPath ; -- 14544881 Added CompSeqId and CompSeqPath
3597 --AND bom_sort_order = lBomSortOrder; -- 14544881 Added CompSeqId and CompSeqPath
3598
3599 EXCEPTION
3600 WHEN NO_DATA_FOUND THEN
3601 --Model might be getting added first time.
3602 --Will continue to add it to array for the time being
3603 --DBMS_OUTPUT.PUT_LINE('No Data Found.....nModelId = ' || nModelId || ' and CompCode=' || lCompCode );
3604
3605 -- 14544881
3606 --NULL;
3607 l_curr_ref_id := -999 ;
3608
3609 WHEN OTHERS THEN
3610 --DBMS_OUTPUT.PUT_LINE('Error retrieveing reference_id: ' || SQLERRM);
3611 --DBMS_OUTPUT.PUT_LINE('.....nModelId = ' || nModelId || ' and CompCode=' || lCompCode );
3612
3613 -- 14544881
3614 d_str := 'Error retrieveing reference_id: ' || SQLERRM ;
3615 xERROR:=cz_utils.log_report(d_str,1,'ExtractPsNode.RECURSION',11276,inRunId);
3616 RAISE CZ_ADMIN.IMP_UNEXP_SQL_ERROR;
3617 END;
3618 --DBMS_OUTPUT.PUT_LINE('lInvItemId=' || lInvItemId || ' lCompCode=' || lCompCode || ' nImpEnabledModelId=' || nImpEnabledModelId);
3619 lDevlPrjOSR := lExplType || ':' || lOrgId || ':' || lInvItemId ;
3620 checkImpEnabled(lDevlPrjOSR, lInvItemId, inRunId, l_curr_ref_id,nImpEnabledModelId, nModelId);
3621
3622 EXCEPTION
3623 WHEN IMP_MODEL_NOT_ENABLED THEN
3624 RAISE ;
3625 WHEN CZ_ADMIN.IMP_UNEXP_SQL_ERROR THEN
3626 RAISE;
3627 WHEN CZ_ADMIN.IMP_MAXERR_REACHED THEN
3628 RAISE;
3629 WHEN OTHERS THEN
3630 d_str:=CZ_UTILS.GET_TEXT('CZ_IMP_OPERATION_FAILED','ERRORTEXT',SQLERRM);
3631 d_str:= d_str || ' Current info:' || inOrgId || ':'|| nTopItemId;
3632 xERROR:=cz_utils.log_report(d_str,1,'ExtractPsNode.RECURSION',11276,inRunId);
3633 RAISE CZ_ADMIN.IMP_UNEXP_SQL_ERROR;
3634 END;
3635 END LOOP;
3636 CLOSE c_ref;
3637 END IF;
3638
3639 l_lang := userenv('LANG');
3640
3641 OPEN c_expl (l_lang);
3642 LOOP
3643 BEGIN
3644 FETCH c_expl INTO nTopItemId, compCode;
3645 EXIT WHEN c_expl%NOTFOUND;
3646
3647 -- if this model has been processed within this import session, it doesn't need
3648 -- to be processed again
3649 IF(NOT processed_expls_tbl.EXISTS(nTopItemId)) THEN
3650 SubModelFlag := 0;
3651 /*
3652 -- This code may be obsoleted by use of processed_expls_tbl, but it shouldn't hurt
3653 -- to leave it in.
3654
3655 IF(tabCompCode.COUNT > 0)THEN
3656 FOR i IN 1..tabCompCode.COUNT LOOP
3657 IF(INSTR(compCode,tabCompCode(i)) <> 0)THEN
3658 SubModelFlag := 1;
3659 EXIT;
3660 END IF;
3661 END LOOP;
3662 END IF;
3663 --Commenting this piece of code as this is obsoleted by use of processed_expls_tbl.//Bug6979513
3664 */
3665 IF(SubModelFlag = 0)THEN
3666
3667 -- Skip if not refreshing unchanged child models.
3668 IF(importUnchangedChildModels = 0) THEN
3669 IF(NOT (importChildModel(inRunId, inOrgId, nTopItemId,inExplType))) THEN
3670
3671 nSecondaryId := ExtractPsNode(inRunId, inOrgId, nTopItemId, inExplType, inServerId,
3672 inRunExploder, inRevDate, inDateFormat, -1, 0, 0, 0);
3673 END IF;
3674 ELSE
3675 nSecondaryId := ExtractPsNode(inRunId, inOrgId, nTopItemId, inExplType, inServerId,
3676 inRunExploder, inRevDate, inDateFormat, -1, 0, 0, 0);
3677 END IF;
3678
3679 tabCompCode(tabCompCode.COUNT + 1) := compCode;
3680 IF(CZ_ORAAPPS_INTEGRATE.mRETCODE = 2)THEN RETURN nModelId; END IF;
3681 END IF;
3682
3683 --LA 9595142
3684 -- Explosion has been processed, add to array
3685 IF (disableMultipleCopyImport = 1) THEN
3686 processed_expls_tbl(nTopItemId) := nSecondaryId;
3687 ELSE
3688 processed_expls_tbl(nTopItemId) := 1;
3689 END IF;
3690
3691 END IF; -- NOT processed_expls_tbl(nTopItemId).EXISTS
3692
3693 EXCEPTION
3694 WHEN IMP_CHILD_MULTI_COPIES THEN --LA 9595142
3695 RAISE;
3696 WHEN IMP_MODEL_NOT_ENABLED THEN --LA 9595142
3697 RAISE ;
3698 WHEN CZ_ADMIN.IMP_UNEXP_SQL_ERROR THEN
3699 RAISE;
3700 WHEN CZ_ADMIN.IMP_MAXERR_REACHED THEN
3701 RAISE;
3702 WHEN OTHERS THEN
3703 d_str:=CZ_UTILS.GET_TEXT('CZ_IMP_OPERATION_FAILED','ERRORTEXT',SQLERRM);
3704 d_str:= d_str || ' Current info:' || inOrgId || ':'|| nTopItemId;
3705 xERROR:=cz_utils.log_report(d_str,1,'ExtractPsNode.RECURSION',11276);
3706 RAISE CZ_ADMIN.IMP_UNEXP_SQL_ERROR;
3707 END;
3708 END LOOP;
3709 CLOSE c_expl;
3710
3711 RETURN nModelId;
3712
3713 EXCEPTION
3714 WHEN IMP_CHILD_MULTI_COPIES THEN --LA 9595142
3715 RAISE;
3716 WHEN IMP_MODEL_NOT_ENABLED THEN --LA 9595142
3717 RAISE ;
3718 WHEN CZ_ADMIN.IMP_UNEXP_SQL_ERROR THEN
3719 RAISE;
3720 WHEN CZ_ADMIN.IMP_MAXERR_REACHED THEN
3721 RAISE;
3722 WHEN OTHERS THEN
3723 IF(c_ref%ISOPEN)THEN CLOSE c_ref; END IF;
3724 IF(c_expl%ISOPEN)THEN CLOSE c_expl; END IF;
3725 d_str:=CZ_UTILS.GET_TEXT('CZ_IMP_OPERATION_FAILED','ERRORTEXT',SQLERRM);
3726 xERROR:=cz_utils.log_report(d_str,1,'ExtractPsNode',11276,inRunId);
3727 RAISE CZ_ADMIN.IMP_UNEXP_SQL_ERROR;
3728 END;
3729 ------------------------------------------------------------------------------------------
3730 PROCEDURE ImportSingleBill(nOrg_ID IN NUMBER,nTop_ID IN NUMBER,
3731 COPY_CHILD_MODELS IN VARCHAR2,
3732 REFRESH_MODEL_ID IN NUMBER,
3733 COPY_ROOT_MODEL IN VARCHAR2,
3734 sExpl_type IN VARCHAR2,dRev_date IN DATE,
3735 x_run_id OUT NOCOPY NUMBER) IS
3736
3737 TYPE tUIDetailedTypeTbl IS TABLE OF CZ_UI_TYPEDPSN_V.detailed_type_id%TYPE INDEX BY VARCHAR2(15);-- kdande; Bug 6885757; 12-Mar-2008
3738
3739 genRun_ID PLS_INTEGER;
3740 nCommit_size PLS_INTEGER DEFAULT 1;
3741 nMax_err PLS_INTEGER DEFAULT 10000;
3742 sTableName CZ_XFR_TABLES.DST_TABLE%TYPE;
3743 xERROR BOOLEAN:=FALSE;
3744 nRunExploder PLS_INTEGER;
3745 cFound CHAR(1);
3746 dDateFormat VARCHAR2(40);
3747 sVersion CZ_DB_SETTINGS.VALUE%TYPE;
3748 server_id cz_servers.server_local_id%TYPE;
3749 nModelId NUMBER;
3750 topModelId NUMBER;
3751 genStatisticsBom PLS_INTEGER;
3752 genStatisticsCz PLS_INTEGER;
3753 st_time number;
3754 end_time number;
3755 extract_st number;
3756 extract_end number;
3757 d_str varchar2(255);
3758 l_failed NUMBER :=0;
3759 l_msg_tmp varchar2(2000);
3760 l_lang VARCHAR2(4);
3761 l_compare_detailed_types BOOLEAN;
3762 l_current_date DATE;
3763 l_detailed_types_tbl tUIDetailedTypeTbl;
3764 l_update_model_timestamp BOOLEAN := FALSE;
3765
3766
3767 CURSOR C_EXTRACTION_ORDER IS
3768 SELECT DST_TABLE FROM CZ_XFR_TABLES
3769 WHERE XFR_GROUP='EXTRACT' AND DISABLED='0'
3770 AND DST_TABLE IN ('CZ_ITEM_TYPES','CZ_PROPERTIES','CZ_ITEM_TYPE_PROPERTIES',
3771 'CZ_ITEM_MASTERS','CZ_ITEM_PROPERTY_VALUES','CZ_LOCALIZED_TEXTS','CZ_DEVL_PROJECTS')
3772 ORDER BY ORDER_SEQ;
3773 CURSOR C_IMPORT_ORDER IS
3774 SELECT DST_TABLE FROM CZ_XFR_TABLES
3775 WHERE XFR_GROUP='IMPORT' AND DISABLED='0'
3776 AND DST_TABLE IN ('CZ_ITEM_TYPES','CZ_PROPERTIES','CZ_ITEM_TYPE_PROPERTIES',
3777 'CZ_ITEM_MASTERS','CZ_ITEM_PROPERTY_VALUES','CZ_LOCALIZED_TEXTS','CZ_DEVL_PROJECTS',
3778 'CZ_PS_NODES')
3779 ORDER BY ORDER_SEQ;
3780 CURSOR C_BILL_OF_MATERIAL IS
3781 SELECT 'F' FROM CZ_EXV_BILL_OF_MATERIALS
3782 WHERE ORGANIZATION_ID=nOrg_ID AND ASSEMBLY_ITEM_ID=nTop_ID;
3783 NOUPDATE_SOURCE_BILL_DELETED NUMBER;
3784
3785 CZ_LANGUAGES_DO_NOT_MATCH EXCEPTION;
3786
3787 l_msg_data VARCHAR2(2000);
3788 l_msg_count NUMBER := 0;
3789 l_return_status VARCHAR2(1);
3790 l_locked_models cz_security_pvt.number_type_tbl;
3791 l_checkout_user cz_security_pvt.varchar_type_tbl;
3792 HAS_NO_PRIV EXCEPTION;
3793 PRIV_CHECK_ERR EXCEPTION;
3794 FAILED_TO_LOCK_MODEL EXCEPTION;
3795
3796 v_settings_id VARCHAR2(40);
3797 v_section_name VARCHAR2(30);
3798 v_enabled VARCHAR2(1) := '1';
3799
3800 -- LA 13733007 : OC with No children
3801 TYPE tNoChildOCName IS TABLE OF cz_ps_nodes.name%TYPE INDEX BY BINARY_INTEGER;
3802 TYPE tNoChildOCModelName IS TABLE OF cz_rp_entries.name%TYPE INDEX BY BINARY_INTEGER;
3803 lNoChildOCName tNoChildOCName ;
3804 lNoChildOCModelName tNoChildOCModelName;
3805
3806 BEGIN
3807
3808 IF (REFRESH_MODEL_ID IS NULL OR REFRESH_MODEL_ID=-1) THEN
3809 BEGIN
3810 SELECT NVL(d.config_engine_type,'L') INTO g_CONFIG_ENGINE_TYPE
3811 FROM cz_xfr_project_bills p, cz_devl_projects d
3812 WHERE p.organization_id = nOrg_ID
3813 AND p.top_item_id = nTop_ID
3814 AND p.explosion_type = sExpl_type
3815 AND d.deleted_flag = '0'
3816 AND d.devl_project_id = d.persistent_project_id
3817 AND p.model_ps_node_id = d.devl_project_id;
3818 EXCEPTION
3819 WHEN NO_DATA_FOUND THEN
3820 g_CONFIG_ENGINE_TYPE := FND_PROFILE.VALUE('CZ_CONFIG_ENGINE_NEW_MODELS');
3821 END;
3822 ELSE
3823 SELECT NVL(config_engine_type,'L') INTO g_CONFIG_ENGINE_TYPE FROM CZ_DEVL_PROJECTS
3824 WHERE devl_project_id=REFRESH_MODEL_ID;
3825 END IF;
3826
3827 CZ_ADMIN.SPX_SYNC_IMPORTSESSIONS;
3828 DBMS_APPLICATION_INFO.SET_MODULE('CZIMPORT','');
3829
3830 BEGIN
3831 SELECT server_local_id INTO server_id
3832 FROM cz_servers
3833 WHERE import_enabled = v_enabled;
3834 EXCEPTION
3835 WHEN TOO_MANY_ROWS THEN
3836 xERROR:=cz_utils.log_report(CZ_UTILS.GET_TEXT('CZ_IMP_TOO_MANY_SERVERS'),1,'CZ_IMP_ALL.ImportSingleBill',11276);
3837 RAISE CZ_ADMIN.IMP_TOO_MANY_SERVERS;
3838 WHEN NO_DATA_FOUND THEN
3839 xERROR:=cz_utils.log_report(CZ_UTILS.GET_TEXT('CZ_IMP_NO_IMP_SERVERS'),1,'CZ_IMP_ALL.ImportSingleBill',11276);
3840 RAISE CZ_ADMIN.IMP_NO_IMP_SERVER;
3841 END;
3842
3843 IF(server_id > 0)THEN
3844 IF(CZ_UTILS.check_installed_lang(server_id) <> 0)THEN
3845 xERROR:=cz_utils.log_report(CZ_UTILS.GET_TEXT('CZ_LANGUAGES_DO_NOT_MATCH'),1,'CZ_IMP_ALL.ImportSingleBill',11276);
3846 RAISE CZ_ADMIN.CZ_LANGUAGES_DO_NOT_MATCH;
3847 END IF;
3848 END IF;
3849
3850 --Determines whether unchanged child models should be refreshed during this run, default - YES.
3851
3852 v_settings_id := 'IMPORTCHILDMODEL';
3853 v_section_name := 'IMPORT';
3854
3855 BEGIN
3856 SELECT decode(upper(VALUE),'TRUE','1','FALSE','0','T','1','F','0','1','1','0','0','YES','1','NO','0','Y','1','N','0','1')
3857 INTO importUnchangedChildModels FROM CZ_DB_SETTINGS
3858 WHERE upper(SETTING_ID)=v_settings_id AND SECTION_NAME=v_section_name;
3859 EXCEPTION
3860 WHEN OTHERS THEN
3861 importUnchangedChildModels := 1;
3862 END;
3863
3864 --Generate statistics on BOM_EXPLOSIONS after root explosion, default - NO.
3865
3866 v_settings_id := 'GENSTATISTICSBOM';
3867 v_section_name := 'IMPORT';
3868
3869 BEGIN
3870 SELECT decode(upper(VALUE),'TRUE','1','FALSE','0','T','1','F','0','1','1','0','0','YES','1','NO','0','Y','1','N','0','0')
3871 INTO genStatisticsBom FROM CZ_DB_SETTINGS
3872 WHERE upper(SETTING_ID)=v_settings_id AND SECTION_NAME=v_section_name;
3873 EXCEPTION
3874 WHEN OTHERS THEN
3875 genStatisticsBom := 0;
3876 END;
3877
3878 --Generate statistics on IMPORT tables after extraction, default - NO.
3879
3880 v_settings_id := 'GENSTATISTICSCZ';
3881 v_section_name := 'IMPORT';
3882
3883 BEGIN
3884 SELECT decode(upper(VALUE),'TRUE','1','FALSE','0','T','1','F','0','1','1','0','0','YES','1','NO','0','Y','1','N','0','0')
3885 INTO genStatisticsCz FROM CZ_DB_SETTINGS
3886 WHERE upper(SETTING_ID)=v_settings_id AND SECTION_NAME=v_section_name;
3887 EXCEPTION
3888 WHEN OTHERS THEN
3889 genStatisticsCz := 0;
3890 END;
3891
3892 --Relaxing decimal quantity restriction for Pella. If this setting is set to 'YES', BOM indivisible_flag will be imported not
3893 --only for Standard Items (the default behavior), but also for Option Classes.
3894 --This setting must be present and set to 'YES' to change the default behavior.
3895 --Bug #4717871.
3896
3897 v_settings_id := 'ALLOWDECIMALOPTIONCLASS';
3898 v_section_name := 'IMPORT';
3899
3900 BEGIN
3901 SELECT decode(upper(VALUE),'TRUE',1,'FALSE',0,'T',1,'F',0,'1',1,'0',0,'YES',1,'NO',0,'Y',1,'N',0,0)
3902 INTO allowDecimalOptionClass FROM CZ_DB_SETTINGS
3903 WHERE upper(SETTING_ID)=v_settings_id AND SECTION_NAME=v_section_name;
3904 EXCEPTION
3905 WHEN OTHERS THEN
3906 allowDecimalOptionClass := 0;
3907 END;
3908
3909 BEGIN
3910 SELECT CZ_XFR_RUN_INFOS_S.NEXTVAL INTO genRun_ID FROM DUAL;
3911 INSERT INTO CZ_XFR_RUN_INFOS (RUN_ID,STARTED,LAST_ACTIVITY,COMPLETED)
3912 VALUES (genRun_ID,SYSDATE,SYSDATE,'0');
3913 x_run_id := genRun_ID;
3914 EXCEPTION
3915 WHEN OTHERS THEN
3916 d_str:=CZ_UTILS.GET_TEXT('CZ_IMP_OPERATION_FAILED','ERRORTEXT',SQLERRM);
3917 xERROR:=cz_utils.log_report(d_str,1,'SINGLEBILL:CZ_XFR_RUN_INFOS',11276,genRun_ID);
3918 RAISE CZ_ADMIN.IMP_UNEXP_SQL_ERROR;
3919 END;
3920 COMMIT;
3921
3922 ----1) Run the BOM EXPLODER for the specified bills which are not deleted
3923
3924 v_settings_id := 'RUN_BILL_EXPLODER';
3925 v_section_name := 'ORAAPPS_INTEGRATE';
3926
3927 BEGIN
3928 SELECT DECODE(UPPER(value), 'YES', 1, 'Y', 1, '1', 1, 'TRUE', 1, 'T', 1,
3929 'NO', 0, 'N', 0, '0', 0, 'FALSE', 0, 'F', 0,
3930 0)
3931 INTO nRunExploder FROM CZ_DB_SETTINGS
3932 WHERE UPPER(SECTION_NAME) = v_section_name
3933 AND UPPER(SETTING_ID) = v_settings_id;
3934 EXCEPTION
3935 WHEN OTHERS THEN
3936 nRunExploder:=0;
3937 END;
3938
3939 v_settings_id := 'BOM_REVISION';
3940 v_section_name := 'ORAAPPS_INTEGRATE';
3941
3942 BEGIN
3943 SELECT VALUE INTO sVersion FROM CZ_DB_SETTINGS
3944 WHERE UPPER(SECTION_NAME) = v_section_name
3945 AND UPPER(SETTING_ID) = v_settings_id;
3946 EXCEPTION
3947 WHEN OTHERS THEN
3948 sVersion:='11.5.0';
3949 END;
3950
3951 SELECT DECODE(SUBSTR(sVersion,1,INSTR(sVersion,'.',1,2)-1),
3952 '11.5','YYYY/MM/DD HH24:MI','DD-MON-RR HH24:MI')
3953 INTO dDateFormat FROM DUAL;
3954
3955 BEGIN
3956
3957 v_settings_id := 'COMMITSIZE';
3958 v_section_name := 'IMPORT';
3959
3960 SELECT VALUE INTO nCommit_size FROM CZ_DB_SETTINGS
3961 WHERE UPPER(SETTING_ID) = v_settings_id
3962 AND UPPER(SECTION_NAME) = v_section_name;
3963
3964 v_settings_id := 'MAXIMUMERRORS';
3965 v_section_name := 'IMPORT';
3966
3967 SELECT VALUE INTO nMax_err FROM CZ_DB_SETTINGS
3968 WHERE UPPER(SETTING_ID) = v_settings_id
3969 AND UPPER(SECTION_NAME) = v_section_name;
3970 EXCEPTION
3971 WHEN OTHERS THEN
3972 xERROR:=cz_utils.log_report(SQLERRM,1,'SINGLEBILL:COMMITSIZE',11276,x_run_id);
3973 END;
3974
3975 --LA 9595142 : Read settings that disables refresh of multiple copies of the model
3976 v_settings_id := 'DISABLEMULTIPLECOPYIMPORT';
3977 v_section_name := 'IMPORT';
3978
3979 BEGIN
3980 SELECT decode(upper(VALUE),'TRUE',1,'FALSE',0,'T',1,'F',0,'1',1,'0',0,'YES',1,'NO',0,'Y',1,'N',0,0)
3981 INTO disableMultipleCopyImport FROM CZ_DB_SETTINGS
3982 WHERE upper(SETTING_ID)=v_settings_id AND SECTION_NAME=v_section_name;
3983 EXCEPTION
3984 WHEN OTHERS THEN
3985 disableMultipleCopyImport := 0;
3986 END;
3987
3988
3989 NOUPDATE_SOURCE_BILL_DELETED:=CZ_UTILS.GET_NOUPDATE_FLAG('CZ_XFR_PROJECT_BILLS','SOURCE_BILL_DELETED', 'IMPORT');
3990 BEGIN
3991 OPEN C_BILL_OF_MATERIAL;
3992 FETCH C_BILL_OF_MATERIAL INTO cFound;
3993 IF(C_BILL_OF_MATERIAL%FOUND)THEN
3994
3995 if (CZ_IMP_ALL.get_time) then
3996 extract_st := dbms_utility.get_time();
3997 end if;
3998
3999 --LA 9595142 Clear import_enabled_tbl before and after extraction
4000 import_enabled_tbl.DELETE;
4001 -- Clear processed_expl_tbl before and after ps node extraction.
4002 processed_expls_tbl.DELETE;
4003 nModelId := ExtractPsNode(genRun_ID, nOrg_ID, nTop_ID, sExpl_type, server_id, nRunExploder,
4004 dRev_date, dDateFormat, REFRESH_MODEL_ID, COPY_ROOT_MODEL, COPY_CHILD_MODELS,
4005 genStatisticsBom);
4006 processed_expls_tbl.DELETE;
4007 --LA 9595142
4008 import_enabled_tbl.DELETE;
4009
4010
4011 ----------deep-lock the model if it exists
4012 FOR j IN (SELECT devl_project_id FROM cz_devl_projects
4013 WHERE devl_project_id = nModelId AND deleted_flag='0')
4014 LOOP
4015 cz_security_pvt.lock_model(
4016 p_api_version => 1.0,
4017 p_model_id => nModelId,
4018 p_lock_child_models => FND_API.G_TRUE,
4019 p_commit_flag => FND_API.G_TRUE,
4020 x_locked_entities => l_locked_models,
4021 x_return_status => l_return_status,
4022 x_msg_count => l_msg_count,
4023 x_msg_data => l_msg_data);
4024 IF (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
4025 FOR i IN 1..l_msg_count LOOP
4026 l_msg_data := fnd_msg_pub.GET(i,fnd_api.g_false);
4027 xERROR:=cz_utils.log_report(l_msg_data,1,'CZ_IMP_SINGLE.IMPORTSINGLEBILL',20001,genRun_ID);
4028 END LOOP;
4029 RAISE FAILED_TO_LOCK_MODEL;
4030 END IF;
4031 END LOOP;
4032
4033 if (CZ_IMP_ALL.get_time) then
4034 extract_end := dbms_utility.get_time();
4035 d_str := genRun_Id || ' EXTRACT PS - TOTAL (' || nTop_Id || ') :' || (extract_end-extract_st)/100.00;
4036 xERROR:=cz_utils.log_report(d_str,1,'EXTRACT_PS_NODE',11299,genRun_ID);
4037 end if;
4038
4039 IF(CZ_ORAAPPS_INTEGRATE.mRETCODE = 2)THEN RETURN; END IF;
4040
4041 UPDATE CZ_XFR_PROJECT_BILLS SET
4042 SOURCE_BILL_DELETED=DECODE(NOUPDATE_SOURCE_BILL_DELETED,0,'0',SOURCE_BILL_DELETED)
4043 WHERE ORGANIZATION_ID=nOrg_ID AND TOP_ITEM_ID=nTop_ID AND EXPLOSION_TYPE=sExpl_type;
4044 ELSE
4045 UPDATE CZ_XFR_PROJECT_BILLS SET
4046 SOURCE_BILL_DELETED=DECODE(NOUPDATE_SOURCE_BILL_DELETED,0,'1',SOURCE_BILL_DELETED)
4047 WHERE ORGANIZATION_ID=nOrg_ID AND TOP_ITEM_ID=nTop_ID AND EXPLOSION_TYPE=sExpl_type;
4048 END IF;
4049 CLOSE C_BILL_OF_MATERIAL;
4050 EXCEPTION
4051 WHEN PRIV_CHECK_ERR THEN
4052 xERROR:=cz_utils.log_report(l_msg_data,1,'SINGLEBILL.GENERAL',20001,genRun_ID);
4053 DBMS_APPLICATION_INFO.SET_MODULE('','');
4054 RAISE;
4055 WHEN HAS_NO_PRIV THEN
4056 xERROR:=cz_utils.log_report(l_msg_data,1,'SINGLEBILL.GENERAL',20001,genRun_ID);
4057 DBMS_APPLICATION_INFO.SET_MODULE('','');
4058 RAISE;
4059 WHEN FAILED_TO_LOCK_MODEL THEN
4060 xERROR:=cz_utils.log_report(l_msg_data,1,'SINGLEBILL.GENERAL',20001,genRun_ID);
4061 COMMIT;
4062 DBMS_APPLICATION_INFO.SET_MODULE('','');
4063 RAISE;
4064 WHEN CZ_ADMIN.IMP_UNEXP_SQL_ERROR THEN
4065 IF C_BILL_OF_MATERIAL%ISOPEN THEN CLOSE C_BILL_OF_MATERIAL; END IF;
4066 processed_expls_tbl.DELETE;
4067 --LA 9595142
4068 import_enabled_tbl.DELETE;
4069 RAISE;
4070 WHEN CZ_ADMIN.IMP_MAXERR_REACHED THEN
4071 RAISE;
4072 --LA 9595142
4073 WHEN IMP_CHILD_MULTI_COPIES THEN
4074 IF C_BILL_OF_MATERIAL%ISOPEN THEN CLOSE C_BILL_OF_MATERIAL; END IF;
4075 processed_expls_tbl.DELETE;
4076 import_enabled_tbl.DELETE;
4077 DBMS_APPLICATION_INFO.SET_MODULE('','');
4078 RAISE ;
4079 WHEN IMP_MODEL_NOT_ENABLED THEN
4080 IF C_BILL_OF_MATERIAL%ISOPEN THEN CLOSE C_BILL_OF_MATERIAL; END IF;
4081 processed_expls_tbl.DELETE;
4082 import_enabled_tbl.DELETE;
4083 DBMS_APPLICATION_INFO.SET_MODULE('','');
4084 RAISE ;
4085 WHEN OTHERS THEN
4086 IF C_BILL_OF_MATERIAL%ISOPEN THEN CLOSE C_BILL_OF_MATERIAL; END IF;
4087 processed_expls_tbl.DELETE;
4088 --LA 9595142
4089 import_enabled_tbl.DELETE;
4090 d_str:=CZ_UTILS.GET_TEXT('CZ_IMP_OPERATION_FAILED','ERRORTEXT',SQLERRM);
4091 xERROR:=cz_utils.log_report(d_str,1,'EXTRACT_PS_NODE',11299,genRun_ID);
4092 RAISE CZ_ADMIN.IMP_UNEXP_SQL_ERROR;
4093 END;
4094
4095 -------Create the table of all relevant item catalog group ids which will be used for extraction of property related data.
4096
4097 itemCatalogGroupId.DELETE;
4098 repCatalogGroupId.DELETE;
4099 inventoryItemId.DELETE;
4100 repItemId.DELETE;
4101 hashCatalog.DELETE;
4102
4103 if (CZ_IMP_ALL.get_time) then
4104 st_time := dbms_utility.get_time();
4105 end if;
4106
4107 l_lang := userenv('LANG');
4108
4109 BEGIN
4110 SELECT item_catalog_group_id, inventory_item_id
4111 BULK COLLECT INTO repCatalogGroupId, repItemId
4112 FROM cz_exv_item_master
4113 WHERE organization_id = nOrg_ID
4114 AND top_item_id = nTop_ID
4115 AND explosion_type = sExpl_type
4116 AND item_catalog_group_id IS NOT NULL
4117 AND language = l_lang;
4118
4119 --itemCatalogGroupId should be unique.
4120
4121 FOR i IN 1..repCatalogGroupId.COUNT LOOP
4122
4123 IF(NOT hashCatalog.EXISTS(repCatalogGroupId(i)))THEN
4124
4125 itemCatalogGroupId(itemCatalogGroupId.COUNT + 1) := repCatalogGroupId(i);
4126 hashCatalog(repCatalogGroupId(i)) := 1;
4127 END IF;
4128 END LOOP;
4129
4130 hashCatalog.DELETE;
4131
4132 --inventoryItemId should be unique.
4133
4134 FOR i IN 1..repItemId.COUNT LOOP
4135
4136 IF(NOT hashCatalog.EXISTS(repItemId(i)))THEN
4137
4138 inventoryItemId(inventoryItemId.COUNT + 1) := repItemId(i);
4139 hashCatalog(repItemId(i)) := 1;
4140 END IF;
4141 END LOOP;
4142
4143 EXCEPTION
4144 WHEN NO_DATA_FOUND THEN
4145 xERROR:=cz_utils.log_report(SQLERRM,1,'CZ_IMP_SINGLE.IMPORTSINGLEBILL.CATALOG',11276,genRun_ID);
4146 END;
4147
4148 if (CZ_IMP_ALL.get_time) then
4149 end_time := dbms_utility.get_time();
4150 d_str := genRun_Id ||' Collect Catalog group id (' || nTop_Id || ') :' || (end_time-st_time)/100.00;
4151 xERROR:=cz_utils.log_report(d_str,1,'EXTRACTION',11299,genRun_ID);
4152 end if;
4153
4154 ----2) Populate the table for UI refresh using the extracted list of models
4155
4156 FOR model IN (SELECT DISTINCT component_id FROM cz_model_ref_expls WHERE model_id = nModelId
4157 AND deleted_flag = '0' AND (ps_node_type IN (263, 264) OR parent_expl_node_id IS NULL))LOOP
4158
4159 FOR j IN (SELECT devl_project_id FROM cz_devl_projects
4160 WHERE devl_project_id = model.component_id AND deleted_flag='0')
4161 LOOP
4162 l_compare_detailed_types := TRUE;
4163 l_current_date := SYSDATE;
4164 FOR i IN (SELECT ps_node_id, detailed_type_id
4165 FROM CZ_UI_TYPEDPSN_V
4166 WHERE devl_project_Id = model.component_id
4167 AND ps_node_type IN (CZ_TYPES.PS_NODE_TYPE_BOM_MODEL, CZ_TYPES.PS_NODE_TYPE_BOM_OPTION_CLASS)
4168 AND deleted_flag = '0')
4169 LOOP
4170 l_detailed_types_tbl(i.ps_node_id) := i.detailed_type_id;
4171 END LOOP;
4172 END LOOP;
4173 END LOOP;
4174
4175 ----3) Call all the extract procedures in the order specified by ORDER_SEQ field of CZ_XFR_TABLES with XFR_GROUP='EXTRACT'
4176
4177 OPEN C_EXTRACTION_ORDER;
4178 LOOP
4179 BEGIN
4180 FETCH C_EXTRACTION_ORDER INTO sTableName;
4181 EXIT WHEN C_EXTRACTION_ORDER%NOTFOUND;
4182
4183 extract_table(genRun_ID, sTableName, nOrg_ID, nTop_ID, sExpl_type, nModelId);
4184
4185 EXCEPTION
4186 WHEN CZ_ADMIN.IMP_UNEXP_SQL_ERROR THEN
4187 RAISE;
4188 WHEN CZ_ADMIN.IMP_MAXERR_REACHED THEN
4189 RAISE;
4190 WHEN NO_DATA_FOUND THEN
4191 xERROR:=cz_utils.log_report(sTableName||':'||SQLERRM,1,'CZ_IMP_SINGLE.IMPORTSINGLEBILL.extract_table',11276,genRun_ID);
4192 WHEN OTHERS THEN
4193 d_str:=CZ_UTILS.GET_TEXT('CZ_IMP_OPERATION_FAILED','ERRORTEXT',SQLERRM);
4194 xERROR:=cz_utils.log_report(d_str,1,'SINGLEBILL:EXTRACTION',11276,genRun_ID);
4195 RAISE CZ_ADMIN.IMP_UNEXP_SQL_ERROR;
4196 END;
4197 END LOOP;
4198 CLOSE C_EXTRACTION_ORDER;
4199
4200 ----3.5 Gather statistics on IMPORT so that best possible plans are used during key resolution and transfer.
4201
4202 IF(genStatisticsCz = 1)THEN
4203 FOR i IN (SELECT src_table FROM cz_xfr_tables
4204 WHERE xfr_group='IMPORT'
4205 AND disabled='0') LOOP
4206 fnd_stats.GATHER_TABLE_STATS('CZ',i.src_table);
4207 END LOOP;
4208 END IF;
4209
4210 ----4) Call all the import procedures in the order specified by ORDER_SEQ field of CZ_XFR_TABLES with XFR_GROUP='IMPORT'
4211
4212 OPEN C_IMPORT_ORDER;
4213 LOOP
4214 BEGIN
4215 FETCH C_IMPORT_ORDER INTO sTableName;
4216 EXIT WHEN C_IMPORT_ORDER%NOTFOUND;
4217 populate_table(genRun_ID, sTableName, nCommit_size, nMax_err, 'IMPORT', CZ_IMP_SINGLE.RP_ROOT_FOLDER, l_failed);
4218 EXCEPTION
4219 WHEN CZ_ADMIN.IMP_UNEXP_SQL_ERROR THEN
4220 RAISE;
4221 WHEN CZ_ADMIN.IMP_MAXERR_REACHED THEN
4222 RAISE;
4223 WHEN NO_DATA_FOUND THEN
4224 xERROR:=cz_utils.log_report(sTableName||':'||SQLERRM,1,'CZ_IMP_SINGLE.IMPORTSINGLEBILL.populate_table',11276,genRun_ID);
4225 WHEN OTHERS THEN
4226 d_str:=CZ_UTILS.GET_TEXT('CZ_IMP_OPERATION_FAILED','ERRORTEXT',SQLERRM);
4227 xERROR:=cz_utils.log_report(d_str,1,'CZ_IMP_SINGLE.GO.IMPORT',11276,genRun_ID);
4228 RAISE CZ_ADMIN.IMP_UNEXP_SQL_ERROR;
4229 END;
4230 END LOOP;
4231 CLOSE C_IMPORT_ORDER;
4232
4233 --Populate has_trackable_children flag in cz_model_ref_expls. It is sufficient to call the procedure
4234 --only once for the very root project. For every run_id there is exactly one record in the table for
4235 --the root project (this is not necessarily true for the child models).
4236 BEGIN
4237 SELECT model_ps_node_id INTO nModelId
4238 FROM cz_xfr_project_bills
4239 WHERE organization_id = nOrg_ID
4240 AND top_item_id = nTop_ID
4241 AND explosion_type = sExpl_type
4242 AND last_import_run_id = genRun_ID;
4243 EXCEPTION
4244 WHEN OTHERS THEN
4245 xERROR:=cz_utils.log_report(nTop_ID||':'||SQLERRM,1,'CZ_IMP_SINGLE.IMPORTSINGLEBILL.XFRPROJECTS',11276,genRun_ID);
4246 END;
4247
4248 BEGIN
4249 cz_refs.set_Trackable_Children_Flag(nModelId);
4250 EXCEPTION
4251 WHEN OTHERS THEN
4252 xERROR:=cz_utils.log_report(nModelId||':'||SQLERRM,1,'CZ_IMP_SINGLE.IMPORTSINGLEBILL.TRACKABLE',11276,genRun_ID);
4253 END;
4254
4255 -- LA 13733007: No children OC
4256 -- Report option classes with no children or all ineffective children
4257 -- This code is also used in logic gen for LCE and FCE.
4258 -- Currently repeated this code in all the packages but later need to move to some common place
4259 -- This query is used to report all the OCs under Root model and it's reference chain
4260
4261 BEGIN
4262 SELECT MODEL.NAME, PARENT.NAME
4263 BULK COLLECT INTO lNoChildOCModelName, lNoChildOCName
4264 FROM cz_ps_nodes PARENT, cz_rp_entries MODEL
4265 WHERE PARENT.deleted_flag = '0'
4266 AND MODEL.deleted_flag = '0'
4267 AND PARENT.devl_project_id = MODEL.object_id
4268 AND MODEL.object_type = 'PRJ'
4269 AND parent.devl_project_id IN
4270 (SELECT DISTINCT component_id FROM cz_model_ref_expls
4271 WHERE deleted_flag = '0' AND model_id = nModelId
4272 AND (ps_node_type = CZ_TYPES.PS_NODE_TYPE_REFERENCE
4273 OR ps_node_type = CZ_TYPES.PS_NODE_TYPE_BOM_MODEL))
4274 AND PARENT.ps_node_type = CZ_TYPES.PS_NODE_TYPE_BOM_OPTION_CLASS
4275 AND PARENT.effective_until > SYSDATE
4276 AND NOT EXISTS
4277 (SELECT 1 FROM cz_ps_nodes CHILD
4278 WHERE CHILD.deleted_flag = '0'
4279 AND CHILD.devl_project_id = PARENT.devl_project_id
4280 AND CHILD.parent_id = PARENT.ps_node_id
4281 AND CHILD.effective_until > SYSDATE);
4282
4283 IF (lNoChildOCModelName.COUNT > 0) THEN
4284 FOR i IN 1..lNoChildOCModelName.COUNT
4285 LOOP
4286 xERROR :=CZ_UTILS.LOG_REPORT('Model ''' || lNoChildOCModelName(i) ||
4287 ''' contains an option class that has no effective children, option class ''' || lNoChildOCName(i) || '''.',
4288 1, 'CZ_IMP_SINGLE.IMPORTSINGLEBILL.NOCHILD_OC', 11276,genRun_ID);
4289 END LOOP;
4290 cz_imp_all.setReturnCode(cz_imp_all.CONCURRENT_WARNING,'Model contains option class that does not have effective children.');
4291 END IF;
4292 EXCEPTION
4293 WHEN OTHERS THEN
4294 xERROR:=cz_utils.log_report(nModelId||':'||SQLERRM,1,'CZ_IMP_SINGLE.IMPORTSINGLEBILL.NOCHILD_OC',11276,genRun_ID);
4295 END;
4296
4297 ----5) Finally update the (LAST_ACTIVITY,COMPLETED) fields of CZ_XFR_RUN_INFOS
4298 BEGIN
4299 UPDATE CZ_XFR_RUN_INFOS SET
4300 LAST_ACTIVITY=SYSDATE,
4301 COMPLETED='1'
4302 WHERE RUN_ID=genRun_ID;
4303 EXCEPTION
4304 WHEN OTHERS THEN
4305 xERROR:=cz_utils.log_report(genRun_ID||':'||SQLERRM,1,'CZ_IMP_SINGLE.IMPORTSINGLEBILL.RUNINFOS',11276,genRun_ID);
4306 END;
4307
4308 --DBMS_OUTPUT.PUT_LINE(CZ_UTILS.GET_TEXT('CZ_IMP_IMPORT_COMPLETED','RUNID',TO_CHAR(genRun_ID)));
4309
4310 IF l_compare_detailed_types THEN
4311
4312 FOR model IN (SELECT devl_project_id FROM cz_imp_devl_project WHERE run_id = genRun_ID
4313 AND rec_status = 'OK')LOOP
4314 FOR i IN (SELECT ps_node_id, detailed_type_id
4315 FROM CZ_UI_TYPEDPSN_V
4316 WHERE devl_project_Id = model.devl_project_id
4317 AND ps_node_type IN (CZ_TYPES.PS_NODE_TYPE_BOM_MODEL, CZ_TYPES.PS_NODE_TYPE_BOM_OPTION_CLASS)
4318 AND creation_date <= l_current_date
4319 AND deleted_flag = '0')
4320 LOOP
4321 IF l_detailed_types_tbl.EXISTS( i.ps_node_id ) THEN
4322 IF l_detailed_types_tbl(i.ps_node_id) <> i.detailed_type_id THEN
4323
4324 UPDATE CZ_PS_NODES set UI_TIMESTAMP_CHANGETYPE = SYSDATE
4325 WHERE devl_project_id = model.devl_project_id
4326 AND ps_node_id = i.ps_node_id;
4327
4328 l_update_model_timestamp := TRUE;
4329
4330 END IF;
4331 END IF;
4332 END LOOP;
4333
4334 IF l_update_model_timestamp THEN
4335 UPDATE cz_devl_projects set ui_timestamp_struct_update = SYSDATE
4336 WHERE devl_project_id = model.devl_project_id;
4337 END IF;
4338 END LOOP;
4339 END IF;
4340
4341 COMMIT;
4342 DBMS_APPLICATION_INFO.SET_MODULE('','');
4343
4344 ----6) Unlock model
4345 IF ( l_locked_models.COUNT > 0 ) THEN
4346 BEGIN
4347 cz_security_pvt.unlock_model(
4348 p_api_version => 1.0,
4349 p_commit_flag => FND_API.G_TRUE,
4350 p_models_to_unlock => l_locked_models,
4351 x_return_status => l_return_status,
4352 x_msg_count => l_msg_count,
4353 x_msg_data => l_msg_data);
4354 EXCEPTION
4355 WHEN OTHERS THEN
4356 xERROR:=cz_utils.log_report(nModelId||':'||SQLERRM,1,'CZ_IMP_SINGLE.IMPORTSINGLEBILL.UNLOCK',11276,genRun_ID);
4357 END;
4358 END IF;
4359 EXCEPTION
4360 WHEN CZ_ADMIN.IMP_UNEXP_SQL_ERROR THEN
4361 RAISE;
4362 WHEN CZ_ADMIN.IMP_ACTIVE_SESSION_EXISTS THEN
4363 xERROR:=cz_utils.log_report(CZ_UTILS.GET_TEXT('CZ_IMP_ACTIVE_SESSION_EXISTS'),1,'SINGLEBILL.GENERAL',11276,genRun_ID);
4364 DBMS_APPLICATION_INFO.SET_MODULE('','');
4365 RAISE;
4366 WHEN CZ_ADMIN.IMP_MAXERR_REACHED THEN
4367 RAISE;
4368 WHEN NO_DATA_FOUND THEN
4369 xERROR:=cz_utils.log_report(SQLERRM,1,'SINGLEBILL.GENERAL',11276,genRun_ID);
4370 WHEN OTHERS THEN
4371 IF ( l_locked_models.COUNT > 0 ) THEN
4372 BEGIN
4373 cz_security_pvt.unlock_model(
4374 p_api_version => 1.0,
4375 p_commit_flag => FND_API.G_TRUE,
4376 p_models_to_unlock => l_locked_models,
4377 x_return_status => l_return_status,
4378 x_msg_count => l_msg_count,
4379 x_msg_data => l_msg_data);
4380 EXCEPTION
4381 WHEN OTHERS THEN
4382 xERROR:=cz_utils.log_report(nModelId||':'||SQLERRM,1,'SINGLEBILL.GENERAL.unlock',11276,genRun_ID);
4383 END;
4384 END IF;
4385 d_str:=CZ_UTILS.GET_TEXT('CZ_IMP_OPERATION_FAILED','ERRORTEXT',SQLERRM);
4386 xERROR:=cz_utils.log_report(d_str,1,'SINGLEBILL.GENERAL',11276,genRun_ID);
4387 DBMS_APPLICATION_INFO.SET_MODULE('','');
4388 RAISE CZ_ADMIN.IMP_UNEXP_SQL_ERROR;
4389 END ImportSingleBill;
4390 ------------------------------------------------------------------------------------------
4391
4392 END CZ_IMP_SINGLE;