1 PACKAGE BODY CSD_Migrate_From_115X_PKG6
2 /* $Header: csdmig6b.pls 120.6 2005/09/23 12:27:37 sangigup noship $ */
3 AS
4
5 /*-------------------------------------------------------------------------------*/
6 /* procedure name: CSD_TASKS_MIG6 */
7 /* description : procedure for migrating Task data */
8 /* from 11.5.10 to R12 */
9 /* purpose : Create Repair Task record in CSD_TASKS */
10 /*-------------------------------------------------------------------------------*/
11
12 PROCEDURE csd_task_mig6(p_slab_number IN NUMBER DEFAULT 1)
13 IS
14
15 v_min NUMBER;
16 v_max NUMBER;
17 v_error_text VARCHAR2(2000);
18 MAX_BUFFER_SIZE NUMBER := 500;
19 l_repair_task_id NUMBER;
20 error_process EXCEPTION;
21
22 /*CURSOR get_repair_tasks(p_start_repair_line_id number, p_end_repair_line_id number)
23 IS
24 select jtf_tasks_vl.task_id, repair_line_id
25 from jtf_tasks_vl, csd_repairs
26 where jtf_tasks_vl.source_object_id = csd_repairs.repair_line_id
27 and source_object_type_code='DR'
28 and repair_line_id between p_start_repair_line_id
29 and p_end_repair_line_id
30 and not exists( select 'x' from csd_tasks
31 where csd_tasks.task_id = jtf_tasks_vl.task_id
32 and csd_tasks.repair_line_id = csd_repairs.repair_line_id);*/
33
34 BEGIN
35 -- Get the Slab Number for the table
36
37 BEGIN
38
39 CSD_MIG_SLABS_PKG.GET_TABLE_SLABS('CSD_REPAIRS',
40 'CSD',
41 p_slab_number,
42 v_min,
43 v_max);
44
45 IF v_min IS NULL
46 THEN
47 RETURN;
48 END IF;
49
50 END;
51
52 -- Migration code for creating Repair Tasks
53 insert into CSD_TASKS (
54 REPAIR_TASK_ID,
55 TASK_ID,
56 REPAIR_LINE_ID,
57 APPLICABLE_QA_PLANS,
58 OBJECT_VERSION_NUMBER,
59 CREATED_BY,
60 CREATION_DATE,
61 LAST_UPDATED_BY,
62 LAST_UPDATE_DATE,
63 LAST_UPDATE_LOGIN
64 ) select
65 CSD.csd_tasks_s.nextval,
66 jtf_tasks_vl.task_id,
67 csd_repairs.repair_line_id,
68 'N',
69 1,
70 FND_GLOBAL.user_id,
71 SYSDATE,
72 FND_GLOBAL.user_id,
73 SYSDATE,
74 FND_GLOBAL.login_id
75 from jtf_tasks_vl,
76 CSD_REPAIRS
77 where jtf_tasks_vl.source_object_id = csd_repairs.repair_line_id
78 and source_object_type_code='DR'
79 and repair_line_id between v_min and v_max
80 and not exists( select 'x' from csd_tasks
81 where csd_tasks.task_id = jtf_tasks_vl.task_id
82 and csd_tasks.repair_line_id = csd_repairs.repair_line_id);
83
84
85 COMMIT;
86
87 END csd_task_mig6;
88
89
90 /*-----------------------------------------------------------------------------*/
91 /* procedure name: csd_flex_flow_mig6 */
92 /* description : Migration script for 12.0 Flex Flow specific changes. */
93 /*-----------------------------------------------------------------------------*/
94
95 PROCEDURE csd_flex_flow_mig6
96
97 IS
98
99 -- Definitions --
100 TYPE VARTAB IS TABLE OF VARCHAR2(1);
101 TYPE NUMTAB IS TABLE OF NUMBER;
102 TYPE REP_LINE_ID_ARRAY_TYPE IS VARRAY (1000)
103 OF CSD.CSD_REPAIRS.REPAIR_LINE_ID%TYPE;
104 TYPE ORIG_SOURCE_REF_ARRAY_TYPE IS VARRAY (1000)
105 OF CSD.CSD_REPAIRS.ORIGINAL_SOURCE_REFERENCE%TYPE;
106 TYPE FLOW_STATUS_ID_ARRAY_TYPE IS VARRAY (1000)
107 OF CSD.CSD_REPAIRS.FLOW_STATUS_ID%TYPE;
108 TYPE INVENTORY_ORG_ID_ARRAY_TYPE IS VARRAY (1000)
109 OF CSD.CSD_REPAIRS.INVENTORY_ORG_ID%TYPE;
110 TYPE INVENTORY_ITEM_ID_ARRAY_TYPE IS VARRAY (1000)
111 OF CSD.CSD_REPAIRS.INVENTORY_ITEM_ID%TYPE;
112
113 -- Variables --
114 repair_line_id_arr REP_LINE_ID_ARRAY_TYPE;
115 original_source_reference_arr ORIG_SOURCE_REF_ARRAY_TYPE;
116 flow_status_id_arr FLOW_STATUS_ID_ARRAY_TYPE;
117 inventory_org_id_arr INVENTORY_ORG_ID_ARRAY_TYPE;
118 inventory_item_id_arr INVENTORY_ITEM_ID_ARRAY_TYPE;
119 l_inv_org_id NUMBER;
120
121 -- Do not mess with the order of values below.
122 -- It is crucial for the logic further below.
123 FlowStatusCodes VARTAB := VARTAB('C', 'H', 'O', 'D');
124 FlowStatusIDs NUMTAB := NUMTAB(-1, -1, -1, -1);
125
126 -- Constants --
127 c_closed_index CONSTANT NUMBER := 1;
128 c_hold_index CONSTANT NUMBER := 2;
129 c_open_index CONSTANT NUMBER := 3;
130 c_draft_index CONSTANT NUMBER := 4;
131 MAX_BUFFER_SIZE NUMBER := 1000;
132
133 -- EXCEPTIONS --
134 UNIQUE_CONSTRAINT_VIOLATED Exception;
135
136 -- This will trap all exceptions that have
137 -- SQLCODE = -00001 and name it as 'UNIQUE_CONSTRAINT_VIOLATED'.
138 PRAGMA EXCEPTION_INIT( UNIQUE_CONSTRAINT_VIOLATED, -00001 );
139
140
141 -- Cursor to derive the eligible repair orders
142 Cursor c_get_upd_ro_cursor is
143 Select
144 repair_line_id,
145 original_source_reference,
146 flow_status_id,
147 inventory_org_id,
148 inventory_item_id
149 from csd_repairs
150 where flow_status_id is null
151 or inventory_org_id is null;
152
153 -- Cursor to get om rma org id
154 CURSOR c_get_om_rma_org_id (p_repair_line_id in number) IS
155 SELECT oel.ship_from_org_id
156 FROM oe_order_lines_all oel,
157 csd_repairs cr
158 WHERE
159 cr.repair_line_id = p_repair_line_id
160 AND cr.original_source_header_id = oel.header_id
161 AND cr.original_source_line_id = oel.line_id;
162
163 -- Cursor to get ro rma org id
164 CURSOR c_get_ro_rma_org_id (p_repair_line_id in number) IS
165 SELECT oel.ship_from_org_Id
166 FROM oe_order_lines_all oel,
167 csd_product_transactions cp
168 WHERE cp.repair_line_id = p_repair_line_Id
169 AND cp.action_type in ('RMA','MOVE_IN')
170 AND cp.order_line_id = oel.line_id
171 AND cp.order_header_id = oel.header_id;
172
173 -- Cursor to get item org id
174 CURSOR c_get_item_org_id (p_inventory_item_id in number) IS
175 SELECT organization_id
176 FROM mtl_system_items_kfv
177 WHERE inventory_item_id = p_inventory_item_id;
178
179 BEGIN
180
181 -- STEP 1: Insert records to populate the flow statuses definitions
182
183 FOR i IN FlowStatusCodes.FIRST..FlowStatusCodes.LAST LOOP
184
185 BEGIN
186 insert into CSD_FLOW_STATUSES_B (
187 FLOW_STATUS_ID,
188 FLOW_STATUS_CODE,
189 STATUS_CODE,
190 SEEDED_FLAG,
191 OBJECT_VERSION_NUMBER,
192 CREATION_DATE,
193 CREATED_BY,
194 LAST_UPDATE_DATE,
195 LAST_UPDATED_BY,
196 LAST_UPDATE_LOGIN
197 ) values (
198 CSD_FLOW_STATUSES_S1.nextval,
199 FlowStatusCodes(i),
200 FlowStatusCodes(i), -- literal value is same
201 'Y',
202 1,
203 SYSDATE,
204 FND_GLOBAL.USER_ID,
205 SYSDATE,
206 FND_GLOBAL.USER_ID,
207 FND_GLOBAL.LOGIN_ID
208 );
209
210 EXCEPTION
211 WHEN UNIQUE_CONSTRAINT_VIOLATED THEN
212 -- Do nothing, as the record already exists
213 NULL;
214 END;
215
216 END LOOP;
217
218 insert into CSD_FLOW_STATUSES_TL (
219 FLOW_STATUS_ID,
220 EXTERNAL_DISPLAY_STATUS,
221 CREATED_BY,
222 CREATION_DATE,
223 LAST_UPDATED_BY,
224 LAST_UPDATE_DATE,
225 LAST_UPDATE_LOGIN,
226 LANGUAGE,
227 SOURCE_LANG
228 ) select
229 FS_B.flow_status_id,
230 NULL, -- EXTERNAL_DISPLAY_STATUS
231 FND_GLOBAL.user_id,
232 SYSDATE,
233 FND_GLOBAL.user_id,
234 SYSDATE,
235 FND_GLOBAL.login_id,
236 L.LANGUAGE_CODE,
237 L.LANGUAGE_CODE
238 from FND_LANGUAGES L,
239 CSD_FLOW_STATUSES_B FS_B
240 where L.INSTALLED_FLAG in ('I', 'B')
241 AND FS_B.flow_status_code in ('C','H','O','D')
242 and not exists
243 (select 'x'
244 from CSD_FLOW_STATUSES_TL T
245 where T.FLOW_STATUS_ID = FS_B.flow_status_id
246 and T.LANGUAGE = L.LANGUAGE_CODE);
247
248 -- STEP 2: Insert into the status transitions for each Repair Type.
249
250 insert into CSD_FLWSTS_TRANS_B (
251 REPAIR_TYPE_ID,
252 FROM_FLOW_STATUS_ID,
253 TO_FLOW_STATUS_ID,
254 WF_ITEM_TYPE,
255 WF_PROCESS_NAME,
256 REASON_REQUIRED_FLAG,
257 CAPTURE_ACTIVITY_FLAG,
258 ALLOW_ALL_RESP_FLAG,
259 OBJECT_VERSION_NUMBER,
260 FLWSTS_TRAN_ID,
261 CREATION_DATE,
262 CREATED_BY,
263 LAST_UPDATE_DATE,
264 LAST_UPDATED_BY,
265 LAST_UPDATE_LOGIN
266 )
267 SELECT RT.repair_type_id,
268 FS_B1.flow_status_id,
269 FS_B2.flow_status_id,
270 NULL, -- P_WF_ITEM_TYPE
271 NULL, -- P_WF_PROCESS_NAME
272 'N', -- P_REASON_REQUIRED_FLAG,
273 'Y', -- P_CAPTURE_ACTIVITY_FLAG,
274 'Y', -- P_ALLOW_ALL_RESP_FLAG,
275 1,
276 CSD_FLWSTS_TRANS_S1.nextval,
277 SYSDATE,
278 FND_GLOBAL.user_id,
279 SYSDATE,
280 FND_GLOBAL.user_id,
281 FND_GLOBAL.login_id
282 FROM CSD_REPAIR_TYPES_B RT,
283 CSD_FLOW_STATUSES_B FS_B1,
284 CSD_FLOW_STATUSES_B FS_B2
285 WHERE FS_B1.flow_status_code IN ('C','H','O')
286 AND FS_B2.flow_status_code IN ('C','H','O')
287 AND FS_B2.flow_status_code <> FS_B1.flow_status_code
288 AND NOT EXISTS
289 ( SELECT 'x'
290 FROM CSD_FLWSTS_TRANS_B FLWSTS_B
291 WHERE FLWSTS_B.repair_type_id = RT.repair_type_id
292 AND FLWSTS_B.from_flow_status_id = FS_B1.flow_status_id
293 AND FLWSTS_B.to_flow_status_id = FS_B2.flow_status_id
294 );
295
296 -- Populate TL table now.
297
298 insert into CSD_FLWSTS_TRANS_TL (
299 FLWSTS_TRAN_ID,
300 DESCRIPTION,
301 CREATED_BY,
302 CREATION_DATE,
303 LAST_UPDATED_BY,
304 LAST_UPDATE_DATE,
305 LAST_UPDATE_LOGIN,
306 LANGUAGE,
307 SOURCE_LANG
308 ) select
309 FLWSTS_B.flwsts_tran_id,
310 NULL, -- P_DESCRIPTION,
311 FND_GLOBAL.user_id,
312 SYSDATE,
313 FND_GLOBAL.user_id,
314 SYSDATE,
315 FND_GLOBAL.login_id,
316 L.LANGUAGE_CODE,
317 L.LANGUAGE_CODE
318 from FND_LANGUAGES L,
319 CSD_FLWSTS_TRANS_B FLWSTS_B
320 where L.INSTALLED_FLAG in ('I', 'B')
321 and not exists
322 (select 'x'
323 from CSD_FLWSTS_TRANS_TL T
324 where T.FLWSTS_TRAN_ID = FLWSTS_B.flwsts_tran_id
325 and T.LANGUAGE = L.LANGUAGE_CODE);
326
327 -- STEP 3: Get all the flow status Ids for use in next steps.
328
329 FOR i IN FlowStatusCodes.FIRST..FlowStatusCodes.LAST LOOP
330 SELECT flow_status_id
331 INTO FlowStatusIDs(i)
332 FROM CSD_FLOW_STATUSES_B
333 WHERE flow_status_code = FlowStatusCodes(i);
334 END LOOP;
335
336 -- STEP 4: Update all repair types that do not have a value.
337
338 UPDATE CSD_REPAIR_TYPES_B
339 SET start_flow_Status_id = FlowStatusIDs(c_open_index),
340 last_update_date = SYSDATE,
341 last_updated_by = FND_GLOBAL.user_id,
342 last_update_login = FND_GLOBAL.login_id
343 WHERE start_flow_Status_id IS NULL;
344
345 -- STEP 5: Update all repair orders that do not have a value.
346 -- Update Inventory_Org_id and Flow_status_id
347
348 -- Repair Inventory Org id derivation
349 -- a.If the Repair Order is created by OM relinking process then
350 -- the Org Id is derived from the original_source_line_id
351 -- of the RO Line.
352 -- b.If the RMA/IO is created from Depot, then the Org Id
353 -- is derived from the Order line of the corresponding Product
354 -- Transaction lines ( RMA/MOVE_IN line)
355 -- c.If there are no RMA/MOVE_IN lines then the Organization id of
356 -- Item is defaulted as Repair Inv Org id
357
358 OPEN c_get_upd_ro_cursor;
359
360 LOOP
361 FETCH c_get_upd_ro_cursor BULK COLLECT INTO repair_line_id_arr,
362 original_source_reference_arr,flow_status_id_arr,inventory_org_id_arr,
363 inventory_item_id_arr LIMIT MAX_BUFFER_SIZE;
364
365 FOR i IN 1..repair_line_id_arr.COUNT
366 LOOP
367
368 l_inv_org_id := null;
369
370 IF ( original_source_reference_arr(i) = 'RMA' ) THEN
371
372 OPEN c_get_om_rma_org_id (repair_line_id_arr(i));
373 FETCH c_get_om_rma_org_id into l_inv_org_id;
374 CLOSE c_get_om_rma_org_id;
375
376 ELSE
377
378 OPEN c_get_ro_rma_org_id (repair_line_id_arr(i));
379 FETCH c_get_ro_rma_org_id into l_inv_org_id;
380 CLOSE c_get_ro_rma_org_id;
381
382 END IF;
383
384 IF ( l_inv_org_id is null ) THEN
385
386 OPEN c_get_item_org_id (repair_line_id_arr(i));
387 FETCH c_get_item_org_id into l_inv_org_id;
388 CLOSE c_get_item_org_id;
389
390 END IF;
391
392 UPDATE CSD_REPAIRS
393 SET flow_Status_id = decode(status,
394 'O', FlowStatusIDs(c_open_index),
395 'C', FlowStatusIDs(c_closed_index),
396 'H', FlowStatusIDs(c_hold_index),
397 'D', FlowStatusIDs(c_draft_index)
398 ),
399 inventory_org_id = l_inv_org_id,
400 last_update_date = SYSDATE,
404
401 last_updated_by = FND_GLOBAL.user_id,
402 last_update_login = FND_GLOBAL.login_id
403 WHERE repair_line_id = repair_line_id_arr(i);
405 END LOOP;
406
407 COMMIT;
408
409 EXIT WHEN c_get_upd_ro_cursor%NOTFOUND;
410
411 END LOOP;
412
413 IF c_get_upd_ro_cursor%ISOPEN THEN
414 CLOSE c_get_upd_ro_cursor;
415 END IF;
416
417 COMMIT;
418
419 END csd_flex_flow_mig6;
420
421
422 /*-----------------------------------------------------------------------------*/
423 /* procedure name: csd_ro_diagnostic_codes_mig6 */
424 /* description : Migration script for 12.0 Diagnostic Code specific changes. */
425 /*-----------------------------------------------------------------------------*/
426
427 PROCEDURE csd_ro_diagnostic_codes_mig6
428
429 IS
430
431 -- Definitions --
432 TYPE REP_LINE_ID_ARRAY_TYPE IS VARRAY (1000)
433 OF CSD.CSD_RO_DIAGNOSTIC_CODES.REPAIR_LINE_ID%TYPE;
434 TYPE INV_ITEM_ID_ARRAY_TYPE IS VARRAY(1000)
435 OF CSD.CSD_REPAIRS.inventory_item_id%TYPE;
436
437 -- Variables --
438 rep_line_id_arr REP_LINE_ID_ARRAY_TYPE;
439 inv_item_id_arr INV_ITEM_ID_ARRAY_TYPE;
440 v_error_text VARCHAR2(2000);
441
442 -- Constants --
443 MAX_BUFFER_SIZE NUMBER := 500;
444
445 -- Exceptions --
446 error_process EXCEPTION;
447
448 -- Cursors --
449 -- cursor to get the repair order items for ro diagnostic codes
450 -- that don't have diagnostic item ids.
451 CURSOR get_rodc_repair_item_cursor
452 IS
453 SELECT DISTINCT
454 dc.repair_line_id, rep.inventory_item_id
455 FROM
456 CSD_RO_DIAGNOSTIC_CODES dc,
457 CSD_REPAIRS rep
458 WHERE dc.diagnostic_item_id IS NULL
459 AND rep.repair_line_id = dc.repair_line_id;
460
461 BEGIN
462
463
464 -- Update all RO diagnostic codes that do not have a diagnostic item.
465 -- Default diagnostic item will be the repair order item
466 OPEN get_rodc_repair_item_cursor;
467 LOOP -- sangigup
468 FETCH get_rodc_repair_item_cursor
469 BULK COLLECT INTO rep_line_id_arr, inv_item_id_arr LIMIT MAX_BUFFER_SIZE;
470
471 FOR i IN 1..rep_line_id_arr.COUNT
472 LOOP
473
474
475 UPDATE
476 CSD_RO_DIAGNOSTIC_CODES
477 SET
478 diagnostic_item_id = inv_item_id_arr(i)
479 WHERE repair_line_id = rep_line_id_arr(i);
480
481 END LOOP;
482
483 COMMIT;
484
485 EXIT WHEN get_rodc_repair_item_cursor%NOTFOUND;
486 END LOOP;
487
488 IF get_rodc_repair_item_cursor%ISOPEN
489 THEN
490 CLOSE get_rodc_repair_item_cursor;
491 END IF;
492
493 COMMIT;
494
495 END csd_ro_diagnostic_codes_mig6;
496
497
498
499
500 /*-----------------------------------------------------------------------------*/
501 /* procedure name: csd_ro_service_codes_mig6 */
502 /* description : Migration script for 12.0 Diagnostic Code specific changes. */
503 /*-----------------------------------------------------------------------------*/
504
505 PROCEDURE csd_ro_service_codes_mig6
506
507 IS
508
509 -- Definitions --
510 TYPE REP_LINE_ID_ARRAY_TYPE IS VARRAY (1000)
511 OF CSD.CSD_RO_SERVICE_CODES.REPAIR_LINE_ID%TYPE;
512 TYPE INV_ITEM_ID_ARRAY_TYPE IS VARRAY(1000)
513 OF CSD.CSD_REPAIRS.INVENTORY_ITEM_ID%TYPE;
514
515 -- Variables --
516 rep_line_id_arr REP_LINE_ID_ARRAY_TYPE;
517 inv_item_id_arr INV_ITEM_ID_ARRAY_TYPE;
518 v_error_text VARCHAR2(2000);
519
520 -- Constants --
521 MAX_BUFFER_SIZE NUMBER := 500;
522
523 -- Exceptions --
524 error_process EXCEPTION;
525
526 -- Cursors --
527 -- cursor to get the repair order items for ro service codes
528 -- that don't have service item ids.
529 CURSOR get_rosc_repair_item_cursor
530 IS
531 SELECT DISTINCT
532 sc.repair_line_id, rep.inventory_item_id
533 FROM
534 CSD_RO_SERVICE_CODES sc,
535 CSD_REPAIRS rep
536 WHERE sc.service_item_id IS NULL
537 AND rep.repair_line_id = sc.repair_line_id;
538
539 BEGIN
540
541 -- Update all RO service codes that do not have a service item.
542 -- Default service item will be the repair order item
543 OPEN get_rosc_repair_item_cursor;
544 LOOP
545 FETCH get_rosc_repair_item_cursor
546 BULK COLLECT INTO rep_line_id_arr, inv_item_id_arr LIMIT MAX_BUFFER_SIZE;
547
548 FOR i IN 1..rep_line_id_arr.COUNT
549 LOOP
550
551 UPDATE
552 CSD_RO_SERVICE_CODES
553 SET
554 service_item_id = inv_item_id_arr(i)
555 WHERE repair_line_id = rep_line_id_arr(i);
556 -- AND service_item_id IS NULL;
557
558 END LOOP;
559
560 COMMIT;
561
562 EXIT WHEN get_rosc_repair_item_cursor%NOTFOUND;
563 END LOOP;
564
565 IF get_rosc_repair_item_cursor%ISOPEN
566 THEN
567 CLOSE get_rosc_repair_item_cursor;
568 END IF;
569 COMMIT;
570 END csd_ro_service_codes_mig6;
571
572 END CSD_Migrate_From_115X_PKG6;