4 PROCEDURE Cumulative_Yield(
1 PACKAGE BODY BOMCUMYD AS
2 /* $Header: BOMCMYLB.pls 120.3 2010/06/28 17:49:25 umajumde ship $ */
3
5 ERRBUF IN OUT NOCOPY /* file.sql.39 change */ VARCHAR2,
6 RETCODE IN OUT NOCOPY /* file.sql.39 change */ VARCHAR2,
7 Current_org_id IN NUMBER,
8 Scope IN NUMBER DEFAULT 1,
9 Flag_Value IN VARCHAR2,
10 Item_Id IN NUMBER,
11 Operation_Type IN NUMBER DEFAULT 1,
12 Update_Events IN NUMBER DEFAULT 1,
13 Item_Low IN VARCHAR2,
14 Item_High IN VARCHAR2
15 ) IS
16 Item_Name VARCHAR2(40) ;
17 Range_Item_Id NUMBER := 0 ;
18 ROUTING_SEQ_ID NUMBER := 1 ;
19 conc_status BOOLEAN ;
20 Current_Error_Code VARCHAR2(20) := NULL;
21 l_routing_sequence_id number ; --bug 9676295
22
23 Item_Range_Not_Specified EXCEPTION;
24 Item_Specific_Not_Specified EXCEPTION;
25
26 CURSOR Item_Range_Both is
27 SELECT inventory_item_id,concatenated_segments
28 FROM mtl_system_items_b_kfv
29 WHERE concatenated_segments BETWEEN item_low and item_high
30 AND organization_id = current_org_id;
31
32 CURSOR Item_Range_Low is
33 SELECT inventory_item_id,concatenated_segments
34 FROM mtl_system_items_b_kfv
35 WHERE concatenated_segments >= item_low
36 AND organization_id = current_org_id;
37
38 CURSOR Item_Range_High is
39 SELECT inventory_item_id,concatenated_segments
40 FROM mtl_system_items_b_kfv
41 WHERE concatenated_segments <= item_high
42 AND organization_id = current_org_id;
43
44 CURSOR Cur_Rtg(Item_Id NUMBER) IS
45 SELECT routing_sequence_id,alternate_routing_designator
46 FROM bom_operational_routings
47 WHERE assembly_item_id = Item_Id
48 AND cfm_routing_flag = 3
49 AND organization_id = current_org_id;
50
51 BEGIN
52 /* Print the list of parameters */
53 FND_FILE.PUT_LINE(FND_FILE.LOG,'******************************************') ;
54 FND_FILE.PUT_LINE( FND_FILE.LOG,'SCOPE='||to_char(scope));
55 FND_FILE.PUT_LINE( FND_FILE.LOG,'CURRENT_ORG_ID='||to_char(current_org_id));
56 FND_FILE.PUT_LINE( FND_FILE.LOG,'ITEM_ID='||to_char(item_id));
57 FND_FILE.PUT_LINE( FND_FILE.LOG,'ITEM_FROM='||item_low);
58 FND_FILE.PUT_LINE( FND_FILE.LOG,'ITEM_TO='||item_high);
59 FND_FILE.PUT_LINE( FND_FILE.LOG,'OPERATION_TYPE='||to_char(operation_type));
60 FND_FILE.PUT_LINE( FND_FILE.LOG,'UPDATE_EVENTS='||to_char(update_events));
61 FND_FILE.PUT_LINE(FND_FILE.LOG,'******************************************') ;
62 /* Make sure the right set of parameter are passed */
63 IF (scope = 2) AND ((item_low IS NULL) and (item_high is NULL)) THEN
64 raise Item_Range_Not_Specified ;
65 END IF ;
66
67 IF ((scope = 1) AND (item_id IS NULL)) THEN
68 raise Item_Specific_Not_Specified ;
69 END IF ;
70
71
72 /* Open the cursor Item_Range for getting the Item ID's */
73 If scope = 2 Then
74 If ((Item_low is NOT NULL) and (Item_High is NOT NULL)) then
75 Open Item_Range_Both;
76 Loop
77 Fetch Item_Range_Both
78 Into Range_Item_Id,Item_Name;
79
80 EXIT WHEN Item_Range_Both%NOTFOUND;
81
82 /* Check if routing exists ,if it does then call the function to calculate cumulative yield */
83
84 For C1 in Cur_Rtg(Range_Item_Id)
85 Loop
86 if (C1.ALTERNATE_ROUTING_DESIGNATOR is not NULL) then
87 FND_FILE.PUT_LINE( FND_FILE.LOG,'Processing routing for item....' || Item_Name || ' with Alternate... ' || C1.ALTERNATE_ROUTING_DESIGNATOR);
88 else
89 FND_FILE.PUT_LINE( FND_FILE.LOG,'Processing routing for item....' || Item_Name);
90 end if;
91 --changes for bug 9676295 begin
92 begin
93 select common_routing_sequence_id into l_routing_sequence_id from bom_operational_routings
94 where common_routing_sequence_id <> routing_sequence_id and routing_sequence_id = C1.routing_sequence_id;
95 exception
96 when no_data_found then
97 l_routing_sequence_id := C1.routing_sequence_id;
98 end;
99 BOM_CALC_CYNP.calc_cynp(l_routing_sequence_id,1,1);
100 --changes for bug 9676295 end
101 End Loop;
102 End Loop;
103 ElsIf (Item_Low is NOT NULL) then
104 Open Item_Range_Low;
105 Loop
106 Fetch Item_Range_Low
107 Into Range_Item_Id,Item_Name;
108
109 EXIT WHEN Item_Range_Low%NOTFOUND;
110
111 /* Check if routing exists ,if it does then call the function to calculate cumulative yield */
112
113 For C1 in Cur_Rtg(Range_Item_Id)
114 Loop
115 if (C1.ALTERNATE_ROUTING_DESIGNATOR is not NULL) then
116 FND_FILE.PUT_LINE( FND_FILE.LOG,'Processing routing for item....' || Item_Name || ' with Alternate... ' || C1.ALTERNATE_ROUTING_DESIGNATOR);
117 else
118 FND_FILE.PUT_LINE( FND_FILE.LOG,'Processing routing for item....' || Item_Name);
119 end if;
120 --changes for bug 9676295 begin
121 begin
122 select common_routing_sequence_id into l_routing_sequence_id from bom_operational_routings
123 where common_routing_sequence_id <> routing_sequence_id and routing_sequence_id = C1.routing_sequence_id;
124 exception
125 when no_data_found then
126 l_routing_sequence_id := C1.routing_sequence_id;
127 end;
128 BOM_CALC_CYNP.calc_cynp(l_routing_sequence_id,1,1);
132 End Loop;
129 --changes for bug 9676295 end
130
131 End Loop;
133 ElsIf (Item_High is NOT NULL) then
134 Open Item_Range_High;
135 Loop
136 Fetch Item_Range_High
137 Into Range_Item_Id,Item_Name;
138
139 EXIT WHEN Item_Range_High%NOTFOUND;
140
141 /* Check if routing exists ,if it does then call the function to calculate cumulative yield */
142
143 For C1 in Cur_Rtg(Range_Item_Id)
144 Loop
145 if (C1.ALTERNATE_ROUTING_DESIGNATOR is not NULL) then
146 FND_FILE.PUT_LINE( FND_FILE.LOG,'Processing routing for item....' || Item_Name || ' with Alternate... ' || C1.ALTERNATE_ROUTING_DESIGNATOR);
147 else
148 FND_FILE.PUT_LINE( FND_FILE.LOG,'Processing routing for item....' || Item_Name);
149 end if;
150 --changes for bug 9676295 begin
151 begin
152 select common_routing_sequence_id into l_routing_sequence_id from bom_operational_routings
153 where common_routing_sequence_id <> routing_sequence_id and routing_sequence_id = C1.routing_sequence_id;
154 exception
155 when no_data_found then
156 l_routing_sequence_id := C1.routing_sequence_id;
157 end;
158 BOM_CALC_CYNP.calc_cynp(l_routing_sequence_id,1,1);
159 --changes for bug 9676295 end
160
161 End Loop;
162 End Loop;
163 End If;
164 Else
165 SELECT concatenated_segments
166 INTO Item_Name
167 FROM mtl_system_items_b_kfv
168 WHERE inventory_item_id = Item_Id
169 AND organization_id = Current_Org_Id;
170
171 For C1 in Cur_Rtg(Item_Id)
172 Loop
173 if (C1.ALTERNATE_ROUTING_DESIGNATOR is not NULL) then
174 FND_FILE.PUT_LINE( FND_FILE.LOG,'Processing routing for item....' || Item_Name || ' with Alternate... ' || C1.ALTERNATE_ROUTING_DESIGNATOR);
175 else
176 FND_FILE.PUT_LINE( FND_FILE.LOG,'Processing routing for item....' || Item_Name);
177 end if;
178 --changes for bug 9676295 begin
179 begin
180 select common_routing_sequence_id into l_routing_sequence_id from bom_operational_routings
181 where common_routing_sequence_id <> routing_sequence_id and routing_sequence_id = C1.routing_sequence_id;
182 FND_FILE.PUT_LINE( FND_FILE.LOG,'Processing common routing for item....' || Item_Name || ' with common routing sequence id ' || l_routing_sequence_id);
183 exception
184 when no_data_found then
185 l_routing_sequence_id := C1.routing_sequence_id;
186 FND_FILE.PUT_LINE( FND_FILE.LOG,'Processing (not commoned) routing for item....' || Item_Name || ' with routing sequence id ' || l_routing_sequence_id);
187 end;
188 BOM_CALC_CYNP.calc_cynp(l_routing_sequence_id,1,1);
189 --changes for bug 9676295 end
190
191 End Loop;
192 end if;
193 FND_FILE.PUT_LINE( FND_FILE.LOG,'Processing ends for Cumulative Yield...');
194 Exception
195 WHEN Item_Range_Not_Specified THEN
196 FND_FILE.PUT_LINE( FND_FILE.LOG,'ITEM RANGE NOT SPECIFIED');
197 RETCODE := 2;
198 conc_status := FND_CONCURRENT.SET_COMPLETION_STATUS('ERROR',Current_Error_Code);
199 WHEN Item_Specific_Not_Specified THEN
200 FND_FILE.PUT_LINE( FND_FILE.LOG,'Specific Item Value not Specified');
201 RETCODE := 2;
202 conc_status := FND_CONCURRENT.SET_COMPLETION_STATUS('ERROR',Current_Error_Code);
203 WHEN OTHERS THEN
204 FND_FILE.PUT_LINE(FND_FILE.LOG,'Others '||SQLCODE || ':'||SQLERRM) ;
205 RETCODE := 2;
206 conc_status := FND_CONCURRENT.SET_COMPLETION_STATUS('ERROR',Current_Error_Code);
207 End Cumulative_Yield;
208
209 PROCEDURE flm_calc_util(
210 org_id IN NUMBER,
211 item_id IN NUMBER,
212 opr_type IN NUMBER,
213 rtg_seq_id IN NUMBER,
214 Flow_Line_Id IN NUMBER
215 ) IS
216 l_tpct NUMBER;
217 v_Lead_Time_Profile_Val varchar2(50); --Variable to define profile for Lead Time Basis
218 l_line_hours NUMBER;
219 l_line_Seconds NUMBER;
220 BEGIN
221 FND_FILE.PUT_LINE(FND_FILE.LOG,'Inside calculation');
222
223 BOM_CALC_CYNP.calc_cynp(rtg_seq_id, opr_type, 1);
224 BOM_CALC_TPCT.calculate_tpct(rtg_seq_id, to_char(opr_type));
225 BOM_CALC_OP_TIMES_PK.calculate_operation_times(org_id, rtg_seq_id);
226
227 /*** Updation of TPCT in the Master items Table *****/
228 SELECT TOTAL_PRODUCT_CYCLE_TIME into l_tpct FROM
229 BOM_OPERATIONAL_ROUTINGS bor
230 WHERE bor.ROUTING_SEQUENCE_ID = rtg_seq_id
231 AND bor.ORGANIZATION_ID = org_id
232 AND bor.ASSEMBLY_ITEM_ID = item_id;
233
234 -- Bug 4632067. Lead time should be in days, hence dividing by 24
235 -- Bug 5869157 The profile option "BOM:LEAD TIME CALCULATION BASIS" will control whether the lead time is calculated
236 -- by dividing by 24 or by line hours
237 /** Get the value of profile option BOM:LEAD TIME CALCULATION BASIS **/
238 fnd_profile.get('BOM:LEAD_TIME_CALCULATION_BASIS', v_Lead_Time_Profile_Val);
239 IF Flow_Line_Id is NULL THEN /*** Line is not specified ***/
240 UPDATE MTL_SYSTEM_ITEMS
241 SET FULL_LEAD_TIME = l_tpct/24,
242 FIXED_LEAD_TIME = l_tpct/24,
243 PROGRAM_UPDATE_DATE = SYSDATE
244 WHERE INVENTORY_ITEM_ID = item_id
245 AND ORGANIZATION_ID = org_id;
246 ELSE
247 IF v_Lead_Time_Profile_Val = 'LHR' THEN /**--Prfoile option is Line hrs-- **/
248 /**Get the line hours using LINE_ID**/
252
249 Select (STOP_TIME - START_TIME) into l_line_Seconds
250 from wip_lines where line_id = Flow_Line_Id
251 and ORGANIZATION_ID = org_id;
253 l_line_hours := l_line_Seconds/3600;
254
255 /**Update using Line hours**/
256 UPDATE MTL_SYSTEM_ITEMS
257 SET FULL_LEAD_TIME = l_tpct/l_line_hours,
258 FIXED_LEAD_TIME = l_tpct/l_line_hours,
259 PROGRAM_UPDATE_DATE = SYSDATE
260 WHERE INVENTORY_ITEM_ID = item_id
261 AND ORGANIZATION_ID = org_id;
262 ELSE
263 UPDATE MTL_SYSTEM_ITEMS
264 SET FULL_LEAD_TIME = l_tpct/24,
265 FIXED_LEAD_TIME = l_tpct/24,
266 PROGRAM_UPDATE_DATE = SYSDATE
267 WHERE INVENTORY_ITEM_ID = item_id
268 AND ORGANIZATION_ID = org_id;
269 END IF;
270 END IF;
271
272 END flm_calc_util;
273
274 FUNCTION check_op_type(
275 rtg_seq_id IN NUMBER,
276 op_type IN NUMBER
277 ) RETURN NUMBER IS
278
279 CURSOR process_chk is
280 SELECT null from bom_operation_sequences
281 WHERE routing_sequence_id = rtg_seq_id
282 and process_op_seq_id is not null;
283
284 CURSOR line_chk is
285 SELECT null from bom_operation_sequences
286 WHERE routing_sequence_id = rtg_seq_id
287 and line_op_seq_id is not null;
288
289 temp NUMBER := 1;
290 BEGIN
291 IF op_type = 2 THEN
292 open process_chk;
293 fetch process_chk into temp;
294 IF process_chk%NOTFOUND THEN
295 temp := 1;
296 ELSE
297 temp := 2;
298 END IF;
299 close process_chk;
300 ELSIF op_type = 3 THEN
301 open line_chk;
302 fetch line_chk into temp;
303 IF line_chk%NOTFOUND THEN
304 temp := 1;
305 ELSE
306 temp := 3;
307 END IF;
308 close line_chk;
309 END IF;
310 return temp;
311 END check_op_type;
312
313 PROCEDURE print_debug(
314 item_id IN NUMBER,
315 alt IN VARCHAR2,
316 rtg_seq_id IN NUMBER
317 )
318 IS
319 BEGIN
320 if (alt is not NULL) then
321 FND_FILE.PUT_LINE(FND_FILE.LOG,'Processing routing for item....'
322 || to_char(item_id) || ' with Alternate... '
323 || alt || 'Rtg_seq_id = '
324 || to_char(rtg_seq_id));
325 else
326 FND_FILE.PUT_LINE(FND_FILE.LOG,'Processing routing for item....'
327 || to_char(item_id) || 'Rtg_seq_id '
328 || to_char(rtg_seq_id));
329 end if;
330 END print_debug;
331
332 PROCEDURE Flow_Batch_Calc(
333 ERRBUF IN OUT NOCOPY /* file.sql.39 change */ VARCHAR2,
334 RETCODE IN OUT NOCOPY /* file.sql.39 change */ VARCHAR2,
335 Current_org_id IN NUMBER,
336 Scope IN NUMBER DEFAULT 1,
337 Flag_Value IN VARCHAR2,
338 Item_Id IN NUMBER,
339 Line_Id IN NUMBER,
340 oper_type IN NUMBER DEFAULT 3,
341 Item_Low IN VARCHAR2,
342 Item_High IN VARCHAR2,
343 Operation_Name IN VARCHAR2,
344 Event_Name IN VARCHAR2
345 ) IS
346 Item_Name VARCHAR2(40) ;
347 Current_Error_Code VARCHAR2(20) := NULL;
348 conc_status BOOLEAN ;
349 Operation_Code VARCHAR2(4);
350
351 TYPE item_id_tab_type IS TABLE of
352 MTL_SYSTEM_ITEMS_B_KFV.inventory_item_id%TYPE
353 INDEX by BINARY_INTEGER;
354
355 TYPE item_name_tab_type IS TABLE of
356 MTL_SYSTEM_ITEMS_B_KFV.concatenated_segments%TYPE
357 INDEX by BINARY_INTEGER;
358
359 item_tab item_id_tab_type;
360 item_name_tab item_name_tab_type;
361
362 i NUMBER := 1;
363 l_all NUMBER := 0;
364 l_tpct NUMBER;
365 l_op_type NUMBER := 3;
366 l_op_flag NUMBER;
367 l_found BOOLEAN := false;
368
369 No_Op_On_Line EXCEPTION;
370 No_Event_On_Line EXCEPTION;
371
372 CURSOR Item_Range_Both is
373 SELECT inventory_item_id,concatenated_segments
374 FROM mtl_system_items_b_kfv
375 WHERE concatenated_segments BETWEEN item_low and item_high
376 AND organization_id = current_org_id;
377
378 CURSOR Item_Range_Low is
379 SELECT inventory_item_id,concatenated_segments
380 FROM mtl_system_items_b_kfv
381 WHERE concatenated_segments >= item_low
382 AND organization_id = current_org_id;
383
384 CURSOR Item_Range_High is
385 SELECT inventory_item_id,concatenated_segments
386 FROM mtl_system_items_b_kfv
387 WHERE concatenated_segments <= item_high
388 AND organization_id = current_org_id;
389
390 CURSOR Cur_Line_Flow_Rtg (v_line NUMBER) is
391 SELECT routing_sequence_id, alternate_routing_designator,
392 assembly_item_id
393 FROM BOM_OPERATIONAL_ROUTINGS bor
394 WHERE bor.ORGANIZATION_ID = current_org_id
395 AND bor.CFM_ROUTING_FLAG = 1
396 AND bor.LINE_ID = v_line;
397
398 CURSOR Cur_Line_Op_Flow_Rtg (v_line NUMBER, v_operation_code VARCHAR2) is
399 SELECT DISTINCT bor.routing_sequence_id, bor.alternate_routing_designator,
400 bor.assembly_item_id
401 FROM BOM_OPERATIONAL_ROUTINGS bor,
402 BOM_OPERATION_SEQUENCES bos,
403 BOM_STANDARD_OPERATIONS bso
404 WHERE bor.ORGANIZATION_ID = current_org_id
405 AND bor.CFM_ROUTING_FLAG = 1
406 AND bor.LINE_ID = v_line
407 AND bso.OPERATION_CODE = v_operation_code
408 AND bos.STANDARD_OPERATION_ID = bso.STANDARD_OPERATION_ID
409 AND bor.ROUTING_SEQUENCE_ID = bos.ROUTING_SEQUENCE_ID
410 AND bos.OPERATION_TYPE = l_op_type;
411
412 CURSOR Cur_Flow_Rtg is
416 WHERE bor.ORGANIZATION_ID = current_org_id
413 SELECT routing_sequence_id, alternate_routing_designator,
414 assembly_item_id
415 FROM BOM_OPERATIONAL_ROUTINGS bor
417 AND bor.CFM_ROUTING_FLAG = 1;
418
419 CURSOR Cur_Item_Line_Flow_Rtg (Item_id NUMBER, v_line NUMBER) is
420 SELECT routing_sequence_id, alternate_routing_designator
421 FROM BOM_OPERATIONAL_ROUTINGS bor
422 WHERE bor.ORGANIZATION_ID = current_org_id
423 AND bor.ASSEMBLY_ITEM_ID = Item_id
424 AND bor.CFM_ROUTING_FLAG = 1
425 AND bor.LINE_ID = v_line;
426
427 CURSOR Cur_Item_Line_Op_Flow_Rtg (Item_id NUMBER, v_line NUMBER, v_operation_code VARCHAR2) is
428 SELECT DISTINCT bor.routing_sequence_id, bor.alternate_routing_designator
429 FROM BOM_OPERATIONAL_ROUTINGS bor,
430 BOM_OPERATION_SEQUENCES bos,
431 BOM_STANDARD_OPERATIONS bso
432 WHERE bor.ORGANIZATION_ID = current_org_id
433 AND bor.ASSEMBLY_ITEM_ID = Item_id
434 AND bor.CFM_ROUTING_FLAG = 1
435 AND bor.LINE_ID = v_line
436 AND bso.OPERATION_CODE = v_operation_code
437 AND bos.STANDARD_OPERATION_ID = bso.STANDARD_OPERATION_ID
438 AND bor.ROUTING_SEQUENCE_ID = bos.ROUTING_SEQUENCE_ID
439 AND bos.OPERATION_TYPE = l_op_type;
440
441 CURSOR Cur_Item_Flow_Rtg (Item_id NUMBER) is
442 SELECT routing_sequence_id, alternate_routing_designator
443 FROM BOM_OPERATIONAL_ROUTINGS bor
444 WHERE bor.ORGANIZATION_ID = current_org_id
445 AND bor.ASSEMBLY_ITEM_ID = Item_id
446 AND bor.CFM_ROUTING_FLAG = 1;
447
448
449 BEGIN
450 /* Print the list of parameters */
451
452 FND_FILE.PUT_LINE(FND_FILE.LOG,'******************************************') ;
453 FND_FILE.PUT_LINE(FND_FILE.LOG,'SCOPE='||to_char(scope));
454 FND_FILE.PUT_LINE(FND_FILE.LOG,'CURRENT_ORG_ID='||to_char(current_org_id));
455 FND_FILE.PUT_LINE(FND_FILE.LOG,'ITEM_ID='||to_char(item_id));
456 FND_FILE.PUT_LINE(FND_FILE.LOG,'ITEM_FROM='||item_low);
457 FND_FILE.PUT_LINE(FND_FILE.LOG,'ITEM_TO='||item_high);
458 FND_FILE.PUT_LINE(FND_FILE.LOG,'OPERATION_TYPE='||to_char(oper_type));
459 FND_FILE.PUT_LINE(FND_FILE.LOG,'LINE_ID='||to_char(Line_Id));
460 FND_FILE.PUT_LINE(FND_FILE.LOG,'OPERATION_Name='||Operation_Name);
461 FND_FILE.PUT_LINE(FND_FILE.LOG,'Event_Name='||Event_Name);
462 FND_FILE.PUT_LINE(FND_FILE.LOG,'******************************************') ;
463
464 i := 1;
465 item_tab.DELETE;
466
467 IF scope = 1 THEN
468 IF item_id is NULL THEN
469 l_all := 1;
470 ELSE
471 item_tab(1) := item_id;
472 END IF;
473 ELSIF scope = 2 THEN
474 IF (item_high is NULL) and (item_low is NULL) THEN
475 l_all := 1;
476 ELSIF (item_high is NOT NULL) AND (item_low is NULL) THEN
477 FOR C1 in item_range_high
478 LOOP
479 item_tab(i) := C1.inventory_item_id;
480 item_name_tab(i) := C1.concatenated_segments;
481 i := i + 1;
482 END LOOP;
483 ELSIF (item_low is NOT NULL) AND (item_high is NULL) THEN
484 FOR C1 in item_range_low
485 LOOP
486 item_tab(i) := C1.inventory_item_id;
487 item_name_tab(i) := C1.concatenated_segments;
488 i := i + 1;
489 END LOOP;
490 ELSE
491 FOR C1 in item_range_both
492 LOOP
493 item_tab(i) := C1.inventory_item_id;
494 item_name_tab(i) := C1.concatenated_segments;
495 i := i + 1;
496 END LOOP;
497 END IF;
498 END IF;
499
500 -- IF Operation_Name is NULL THEN -- Event based filtering
501 -- Changed for the bug found during testing
502 IF Operation_name is NULL AND Event_Name is NOT NULL THEN
503 Operation_code := Event_Name;
504 l_op_type := 1;
505 ELSE
506 l_op_type := oper_type;
507 Operation_Code := Operation_Name;
508 END IF;
509
510 IF l_all = 0 THEN
511 FND_FILE.PUT_LINE(FND_FILE.LOG,'Item/Item range specified, op type='||to_char(l_op_type));
512 FOR i IN 1..item_tab.COUNT
513 LOOP
514 IF Line_id is NULL THEN /*** Line is not specified ***/
515 FND_FILE.PUT_LINE(FND_FILE.LOG,'No line is specified');
516 FOR C1 in Cur_Item_Flow_Rtg(item_tab(i))
517 Loop
518 print_debug(item_tab(i), C1.Alternate_Routing_Designator, C1.routing_sequence_id);
519 flm_calc_util(current_org_id, item_tab(i), l_op_type, C1.routing_sequence_id, Line_Id);
520 End Loop;
521 ELSIF Operation_code is NULL THEN /*** Only Line is specified ***/
522 FND_FILE.PUT_LINE(FND_FILE.LOG,'Only line is specified');
523 FOR C1 in Cur_Item_Line_Flow_Rtg(item_tab(i), Line_Id)
524 Loop
525 print_debug(item_tab(i), C1.Alternate_Routing_Designator, C1.routing_sequence_id);
526 flm_calc_util(current_org_id, item_tab(i), l_op_type, C1.routing_sequence_id, Line_Id);
527 End Loop;
528 ELSIF l_op_type > 1 THEN /*** Line and operation are specified ***/
529 FND_FILE.PUT_LINE(FND_FILE.LOG,'Line and operation is specified');
530 FOR C1 in Cur_Item_Line_Op_Flow_Rtg(item_tab(i), Line_id, Operation_Code)
531 Loop
532 print_debug(item_tab(i), C1.Alternate_Routing_Designator, C1.routing_sequence_id);
533 flm_calc_util(current_org_id, item_tab(i), l_op_type, C1.routing_sequence_id, Line_Id);
537 raise No_Op_On_Line;
534 l_found := true;
535 End Loop;
536 IF scope = 1 AND NOT l_found THEN
538 END IF;
539 ELSE /*** Line, operation_type and Event are specified ***/
540 FND_FILE.PUT_LINE(FND_FILE.LOG,'Line, operation and event specified');
541 FOR C1 in Cur_Item_Line_Op_Flow_Rtg(item_tab(i), Line_id, Operation_Code)
542 Loop
543 l_op_flag := check_op_type(C1.routing_sequence_id, oper_type);
544 IF l_op_flag <> 1 THEN
545 print_debug(item_tab(i), C1.Alternate_Routing_Designator, C1.routing_sequence_id);
546 flm_calc_util(current_org_id, item_tab(i), l_op_flag, C1.routing_sequence_id, Line_Id);
547 l_found := true;
548 END IF;
549 End Loop;
550 IF scope = 1 AND NOT l_found THEN
551 raise No_Event_On_Line;
552 END IF;
553 END IF;
554 End Loop;
555 ELSE
556 FND_FILE.PUT_LINE(FND_FILE.LOG,'Item/Item range NOT specified, selecting all items...');
557 IF Line_id is NULL THEN /*** Line is not specified ***/
558 FND_FILE.PUT_LINE(FND_FILE.LOG,'No line is specified');
559 FOR C1 in Cur_Flow_Rtg
560 Loop
561 print_debug(C1.assembly_item_id, C1.Alternate_Routing_Designator, C1.routing_sequence_id);
562 flm_calc_util(current_org_id, C1.assembly_item_id, l_op_type, C1.routing_sequence_id, Line_Id);
563 End Loop;
564 ELSIF Operation_code is NULL THEN /*** Only Line is specified ***/
565 FND_FILE.PUT_LINE(FND_FILE.LOG,'Only line is specified');
566 FOR C1 in Cur_Line_Flow_Rtg(Line_Id)
567 Loop
568 print_debug(C1.assembly_item_id, C1.Alternate_Routing_Designator, C1.routing_sequence_id);
569 flm_calc_util(current_org_id, C1.assembly_item_id, l_op_type, C1.routing_sequence_id, Line_Id);
570 End Loop;
571 ELSIF l_op_type > 1 THEN /*** Line and operation specified ***/
572 FND_FILE.PUT_LINE(FND_FILE.LOG,'Line and operation specified');
573 FOR C1 in Cur_Line_Op_Flow_Rtg(Line_id, Operation_Code)
574 Loop
575 print_debug(C1.assembly_item_id, C1.Alternate_Routing_Designator, C1.routing_sequence_id);
576 flm_calc_util(current_org_id, C1.assembly_item_id, l_op_type, C1.routing_sequence_id, Line_Id);
577 End Loop;
578 ELSE /*** Line, Operation and event specified ***/
579 FND_FILE.PUT_LINE(FND_FILE.LOG,'Line, operation and event specified');
580 FOR C1 in Cur_Line_Op_Flow_Rtg(Line_id, Operation_Code)
581 Loop
582 l_op_flag := check_op_type(C1.routing_sequence_id, oper_type);
583 IF l_op_flag <> 1 THEN
584 print_debug(C1.assembly_item_id, C1.Alternate_Routing_Designator, C1.routing_sequence_id);
585 flm_calc_util(current_org_id, C1.assembly_item_id, l_op_flag, C1.routing_sequence_id, Line_Id);
586 END IF;
587 End Loop;
588
589 END IF;
590 END IF;
591 Exception
592
593 WHEN No_Op_On_Line THEN
594 FND_FILE.PUT_LINE(FND_FILE.LOG,'Specified operation not available for the item on the line specified');
595 RETCODE := 2;
596 conc_status := FND_CONCURRENT.SET_COMPLETION_STATUS('ERROR',Current_Error_Code);
597 WHEN No_Event_On_Line THEN
598 FND_FILE.PUT_LINE(FND_FILE.LOG,'Specified event not available for the item on the line specified');
599 RETCODE := 2;
600 conc_status := FND_CONCURRENT.SET_COMPLETION_STATUS('ERROR',Current_Error_Code);
601
602 WHEN OTHERS THEN
603 FND_FILE.PUT_LINE(FND_FILE.LOG,'Others '||SQLCODE || ':'||SQLERRM) ;
604 RETCODE := 2;
605 conc_status := FND_CONCURRENT.SET_COMPLETION_STATUS('ERROR',Current_Error_Code);
606
607 END Flow_Batch_Calc;
608
609 END BOMCUMYD ;