DBA Data[Home] [Help]

PACKAGE BODY: APPS.BOMCUMYD

Source


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 ;