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