DBA Data[Home] [Help]

PACKAGE BODY: APPS.OE_SCH_CONC_REQUESTS

Source


1 PACKAGE BODY OE_SCH_CONC_REQUESTS AS
2 /* $Header: OEXCSCHB.pls 120.20 2006/07/13 11:32:53 rmoharan noship $ */
3 
4 --  Global constant holding the package name
5 G_PKG_NAME                    CONSTANT VARCHAR2(30) := 'OE_SCH_CONC_REQUESTS';
6 --5166476
7 /*
8 TYPE status_arr IS TABLE OF VARCHAR2(1) INDEX BY BINARY_INTEGER;
9 OE_line_status_Tbl status_arr;
10 */
11 
12 FUNCTION model_processed(p_model_id  IN NUMBER
13                          ,p_line_id  IN NUMBER)
14 RETURN BOOLEAN
15 IS
16    l_found    BOOLEAN:= FALSE;
17    l_debug_level CONSTANT NUMBER := oe_debug_pub.g_debug_level;
18 BEGIN
19 
20    /* If many of the lines selected are part of a smc/ato/non-smc model, then delayed
21     * request must get logged only for one of the lines.
22     */
23    IF oe_model_id_tbl.EXISTS(p_model_id) THEN
24       l_found := TRUE;
25    ELSIF p_model_id = p_line_id THEN
26       oe_model_id_tbl(p_model_id) := p_model_id;
27    END IF;
28    RETURN (l_found);
29 END model_processed;
30 
31 FUNCTION included_processed(p_inc_item_id  IN NUMBER)
32 RETURN BOOLEAN
33 IS
34    l_found    BOOLEAN:= FALSE;
35    l_debug_level CONSTANT NUMBER := oe_debug_pub.g_debug_level;
36 BEGIN
37 
38    /* to list the included items processed alone
39     */
40    IF l_debug_level  > 0 THEN
41       OE_DEBUG_PUB.Add('INSIDE INCLUDED_PROCESSED',1);
42    END IF;
43 
44    IF oe_included_id_tbl.EXISTS(p_inc_item_id) THEN
45       l_found := TRUE;
46    ELSE
47       oe_included_id_tbl(p_inc_item_id) := p_inc_item_id;
48    END IF;
49    IF l_found THEN
50       IF l_debug_level  > 0 THEN
51         OE_DEBUG_PUB.Add('INCLIDED ITEM LISTED',1);
52       END IF;
53    ELSE
54       IF l_debug_level  > 0 THEN
55         OE_DEBUG_PUB.Add('INCLIDED ITEM NOT LISTED',1);
56       END IF;
57    END IF;
58    RETURN (l_found);
59 END included_processed;
60 
61 FUNCTION set_processed(p_set_id  IN NUMBER)
62 RETURN BOOLEAN
63 IS
64    l_found    BOOLEAN:= FALSE;
65    l_debug_level CONSTANT NUMBER := oe_debug_pub.g_debug_level;
66 BEGIN
67 
68    /* If many of the lines selected are part of a ship set / Arrival set, then delayed
69     * request must get logged only for one of the lines.
70     */
71    IF oe_set_id_tbl.EXISTS(p_set_id) THEN
72       l_found := TRUE;
73    ELSE
74       oe_set_id_tbl(p_set_id) := p_set_id;
75    END IF;
76    RETURN (l_found);
77 END set_processed;
78 
79 FUNCTION Line_Eligible (p_line_id IN NUMBER)
80    RETURN BOOLEAN
81 IS
82    l_activity_status_code VARCHAR2(8);
83    l_debug_level CONSTANT NUMBER := oe_debug_pub.g_debug_level;
84 BEGIN
85 
86    -- Check for workflow status to be Purchase Release Eligible
87    SELECT ACTIVITY_STATUS
88       INTO l_activity_status_code
89       FROM wf_item_activity_statuses wias, wf_process_activities wpa
90       WHERE wias.item_type = 'OEOL' AND
91       wias.item_key  = to_char(p_line_id) AND
92       wias.process_activity = wpa.instance_id AND
93       wpa.activity_item_type = 'OEOL' AND
94       wpa.activity_name = 'SCHEDULING_ELIGIBLE' AND
95       wias.activity_status = 'NOTIFIED';
96 
97    -- Return true since the record exists.
98    RETURN TRUE;
99 
100 EXCEPTION
101    WHEN NO_DATA_FOUND THEN
102       IF l_debug_level  > 0 THEN
103          oe_debug_pub.add(  'RETURNING FALSE 1 ' , 1 ) ;
104       END IF;
105       RETURN FALSE;
106    WHEN OTHERS THEN
107       RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
108 END Line_Eligible;
109 
110 /*-----------------------------------------------------------------
111 PROCEDURE  : Request
112 DESCRIPTION: Schedule Orders Concurrent Request
113 -----------------------------------------------------------------*/
114 PROCEDURE Request (ERRBUF                   OUT NOCOPY VARCHAR2,
115                    RETCODE                  OUT NOCOPY VARCHAR2,
116                    /* Moac */
117 		   p_org_id                 IN NUMBER,
118                    p_order_number_low       IN NUMBER,
119                    p_order_number_high      IN NUMBER,
120                    p_request_date_low       IN VARCHAR2,
121                    p_request_date_high      IN VARCHAR2,
122                    p_customer_po_number     IN VARCHAR2,
123                    p_ship_to_location       IN VARCHAR2,
124                    p_order_type             IN VARCHAR2,
125                    p_customer               IN VARCHAR2,
126                    p_ordered_date_low       IN VARCHAR2,
127                    p_ordered_date_high      IN VARCHAR2,
128                    p_warehouse              IN VARCHAR2,
129                    p_item                   IN VARCHAR2,
130                    p_demand_class           IN VARCHAR2,
131                    p_planning_priority      IN VARCHAR2,
132                    p_shipment_priority      IN VARCHAR2,
133                    p_line_type              IN VARCHAR2,
134                    p_line_request_date_low  IN VARCHAR2,
135                    p_line_request_date_high IN VARCHAR2,
136                    p_line_ship_to_location  IN VARCHAR2,
137                    p_sch_ship_date_low      IN VARCHAR2,
138                    p_sch_ship_date_high     IN VARCHAR2,
139                    p_sch_arrival_date_low   IN VARCHAR2,
140                    p_sch_arrival_date_high  IN VARCHAR2,
141                    p_booked                 IN VARCHAR2,
142                    p_sch_mode               IN VARCHAR2,
143                    p_dummy1                 IN VARCHAR2,
144                    p_dummy2                 IN VARCHAR2,
145                    p_apply_warehouse        IN VARCHAR2,
146                    p_apply_sch_date         IN VARCHAR2,
147                    p_order_by_first         IN VARCHAR2,
148                    p_order_by_sec           IN VARCHAR2)
149 IS
150    l_apply_sch_date          DATE;
151    l_arrival_set_id          NUMBER;
152    l_ato_line_id             NUMBER;
153    l_atp_tbl                 OE_ATP.Atp_Tbl_Type;
154    l_booked_flag             VARCHAR2(1);
155    l_control_rec             OE_GLOBALS.Control_Rec_Type;
156    l_cursor_id               INTEGER;
157    l_debug_level CONSTANT    NUMBER := oe_debug_pub.g_debug_level;
158    l_found                   BOOLEAN;
159    l_header_id               NUMBER;
160    l_init_msg_list           VARCHAR2(1) := FND_API.G_FALSE;
161    l_item_type_code          VARCHAR2(30);
162    l_line_id                 NUMBER;
163    l_line_rec                OE_ORDER_PUB.Line_Rec_Type;
164    l_line_request_date_high  DATE;
165    l_line_request_date_low   DATE;
166    l_line_tbl                OE_ORDER_PUB.Line_Tbl_Type;
167    l_msg_count               NUMBER;
168    l_msg_data                VARCHAR2(2000) := NULL;
169    l_old_line_tbl            OE_ORDER_PUB.Line_Tbl_Type;
170    l_order_date_type_code    VARCHAR2(30);
171    l_ordered_date_high       DATE;
172    l_ordered_date_low        DATE;
173    l_process_order           BOOLEAN := FALSE;
174    l_rec_failure             NUMBER := 0;
175    l_rec_processed           NUMBER := 0;
176    l_rec_success             NUMBER := 0;
177    l_request_date            DATE;
178    l_request_date_high       DATE;
179    l_request_date_low        DATE;
180    l_request_id              VARCHAR2(50);
181    l_return_status           VARCHAR2(1);
182    l_retval                  INTEGER;
183    l_sch_arrival_date_high   DATE;
184    l_sch_arrival_date_low    DATE;
185    l_sch_ship_date_high      DATE;
186    l_sch_ship_date_low       DATE;
187    l_schedule_status_code    VARCHAR2(30);
188    l_ship_from_org_id        NUMBER;
189    l_ship_set_id             NUMBER;
190    l_smc_flag                VARCHAR2(1);
191    l_stmt                    VARCHAR2(2000);
192    l_temp_flag               BOOLEAN; -- temp variable (re-usable).
193    l_temp_line_id            NUMBER;
194    l_temp_num                NUMBER; -- temp variable (re-usable).
195    l_top_model_line_id       NUMBER;
196    l_link_to_line_id         NUMBER;
197 
198    -- Moac
199    l_single_org              BOOLEAN := FALSE;
200    l_old_org_id              NUMBER  := -99;
201    l_org_id                  NUMBER;
202    l_selected_line_tbl       OE_GLOBALS.Selected_Record_Tbl; -- R12.MOAC
203    l_failure                 BOOLEAN := FALSE;
204    l_index                   NUMBER;
205    -- Moac. Changed the below cursor logic to also join to oe_order_lines for OU.
206    CURSOR wf_item IS
207       SELECT item_key, l.org_id
208       FROM wf_item_activity_statuses wias,
209            wf_process_activities wpa,
210 	   oe_order_lines l
211       WHERE wias.item_type = 'OEOL'
212       AND wias.process_activity = wpa.instance_id
213       AND wpa.activity_item_type = 'OEOL'
214       AND wpa.activity_name = 'SCHEDULING_ELIGIBLE'
215       AND wias.activity_status = 'NOTIFIED'
216       AND wias.item_key = l.line_id
217       Order by l.org_id;
218 
219    CURSOR progress_pto IS
220      SELECT line_id
221      FROM   oe_order_lines_all
222      WHERE  header_id = l_header_id
223      AND    top_model_line_id = l_line_id
224      AND    item_type_code in ('MODEL','KIT','CLASS','OPTION')
225      AND    ((ato_line_id is not null AND
226               ato_line_id = line_id) OR
227               ato_line_id is null)
228      AND    open_flag = 'Y';
229 
230 BEGIN
231    --Bug#4220950
232    ERRBUF  := 'Schedule Orders Request completed successfully';
233    RETCODE := 0;
234 
235    -- Moac Start
236    IF MO_GLOBAL.get_access_mode = 'S' THEN
237 	l_single_org := true;
238    ELSIF p_org_id IS NOT NULL THEN
239 	l_single_org := true;
240 	MO_GLOBAL.set_policy_context(p_access_mode => 'S', p_org_id => p_org_id);
241    END IF;
242    -- Moac End.
243 
244    -- Turning debug on for testing purpose.
245    fnd_file.put_line(FND_FILE.LOG, 'Parameters:');
246    fnd_file.put_line(FND_FILE.LOG, '    order_number_low =  '||
247                      p_order_number_low);
248    fnd_file.put_line(FND_FILE.LOG, '    order_number_high = '||
249                      p_order_number_high);
250    fnd_file.put_line(FND_FILE.LOG, '    request_date_low = '||
251                      p_request_date_low);
252    fnd_file.put_line(FND_FILE.LOG, '    request_date_high = '||
253                      p_request_date_high);
254    fnd_file.put_line(FND_FILE.LOG, '    customer_po_number = '||
255                      p_customer_po_number);
256    fnd_file.put_line(FND_FILE.LOG, '    ship_to_location = '||
257                      p_ship_to_location);
258    fnd_file.put_line(FND_FILE.LOG, '    order_type = '||
259                      p_order_type);
260    fnd_file.put_line(FND_FILE.LOG, '    customer = '||
261                      p_customer);
262    fnd_file.put_line(FND_FILE.LOG, '    item = '||
263                      p_item);
264    fnd_file.put_line(FND_FILE.LOG, '    ordered_date_low = ' ||
265                      p_ordered_date_low);
266    fnd_file.put_line(FND_FILE.LOG, '    ordered_date_high = ' ||
267                      p_ordered_date_high);
268    fnd_file.put_line(FND_FILE.LOG, '    warehouse = ' ||
269                      p_warehouse);
270    fnd_file.put_line(FND_FILE.LOG, '    demand_class = ' ||
271                      p_demand_class);
272    fnd_file.put_line(FND_FILE.LOG, '    planning_priority = ' ||
273                      p_planning_priority);
274    fnd_file.put_line(FND_FILE.LOG, '    shipment_priority = ' ||
275                      p_shipment_priority);
276    fnd_file.put_line(FND_FILE.LOG, '    line_type = ' ||
277                      p_line_type);
278    fnd_file.put_line(FND_FILE.LOG, '    line_request_date_low = ' ||
279                      p_line_request_date_low);
280    fnd_file.put_line(FND_FILE.LOG, '    line_request_date_high = ' ||
281                      p_line_request_date_high);
282    fnd_file.put_line(FND_FILE.LOG, '    line_ship_to_location = ' ||
283                      p_line_ship_to_location);
284    fnd_file.put_line(FND_FILE.LOG, '    sch_ship_date_low = ' ||
285                      p_sch_ship_date_low);
286    fnd_file.put_line(FND_FILE.LOG, '    sch_ship_date_high = ' ||
287                      p_sch_ship_date_high);
288    fnd_file.put_line(FND_FILE.LOG, '    sch_arrival_date_low = ' ||
289                      p_sch_arrival_date_low);
290    fnd_file.put_line(FND_FILE.LOG, '    sch_arrival_date_high = ' ||
291                      p_sch_arrival_date_high);
292    fnd_file.put_line(FND_FILE.LOG, '    booked = ' ||
293                      p_booked);
294    fnd_file.put_line(FND_FILE.LOG, '    sch_mode = ' ||
295                      p_sch_mode);
296    fnd_file.put_line(FND_FILE.LOG, '    dummy1 = ' ||
297                      p_dummy1);
298    fnd_file.put_line(FND_FILE.LOG, '    apply_warehouse = ' ||
299                      p_apply_warehouse);
300    fnd_file.put_line(FND_FILE.LOG, '    apply_sch_date = ' ||
301                      p_apply_sch_date);
302    fnd_file.put_line(FND_FILE.LOG, '    order_by_first = ' ||
303                      p_order_by_first);
304    fnd_file.put_line(FND_FILE.LOG, '    order_by_sec = ' ||
305                      p_order_by_sec);
306 
307    FND_PROFILE.Get(NAME => 'CONC_REQUEST_ID',
308                    VAL  => l_request_id);
309    OE_MSG_PUB.Initialize; -- Initializing message pub to clear messages.
310 
311    IF p_sch_mode NOT IN ('SCHEDULE','RESCHEDULE') AND
312       (p_apply_sch_date IS NOT NULL OR
313        p_apply_warehouse IS NOT NULL)
314    THEN
315       Fnd_Message.set_name('ONT', 'ONT_SCH_INVALID_MODE_ATTRB');
316       Oe_Msg_Pub.Add;
317       OE_MSG_PUB.Save_Messages(p_request_id => l_request_id);
318       l_msg_data := Fnd_Message.get_string('ONT',
319                                            'ONT_SCH_INVALID_MODE_ATTRB');
320       FND_FILE.Put_Line(FND_FILE.LOG, l_msg_data);
321       ERRBUF := 'ONT_SCH_INVALID_MODE_ATTRB';
322       IF l_debug_level  > 0 THEN
323         OE_DEBUG_PUB.Add('Error : Schedule date supplied for wrong mode.',1);
324       END IF;
325       RETCODE := 2;
326       RETURN;
327    END IF;
328 
329    -- Convert dates passed as varchar2 parameters to date variables.
330    SELECT fnd_date.canonical_to_date(p_request_date_low),
331           fnd_date.canonical_to_date(p_request_date_high),
332           fnd_date.canonical_to_date(p_ordered_date_low),
333           fnd_date.canonical_to_date(p_ordered_date_high),
334           fnd_date.canonical_to_date(p_line_request_date_low),
335           fnd_date.canonical_to_date(p_line_request_date_high),
336           fnd_date.canonical_to_date(p_sch_ship_date_low),
337           fnd_date.canonical_to_date(p_sch_ship_date_high),
338           fnd_date.canonical_to_date(p_sch_arrival_date_low),
339           fnd_date.canonical_to_date(p_sch_arrival_date_high)
340         --  fnd_date.canonical_to_date(p_apply_sch_date)
341       INTO l_request_date_low,
342            l_request_date_high,
343            l_ordered_date_low,
344            l_ordered_date_high,
345            l_line_request_date_low,
346            l_line_request_date_high,
347            l_sch_ship_date_low,
348            l_sch_ship_date_high,
349            l_sch_arrival_date_low,
350            l_sch_arrival_date_high
351          --  l_apply_sch_date
352       FROM DUAL;
353 
354       SELECT fnd_date.chardt_to_date(p_apply_sch_date)
355         INTO l_apply_sch_date
356         FROM dual;
357 
358       IF l_debug_level  > 0 THEN
359          OE_DEBUG_PUB.Add('Schedule date'||l_apply_sch_date,1);
360       END IF;
361    /* When user does not specifiy any parameters, we drive the scheduling
362     * through workflow. Pick up all the lines which are schedule eligible
363     * and notified status, call wf_engine to complete the activity.
364     * If value is passed through any of the parameters, then get the header and
365     * line records and call wf_engine.
366     */
367    IF p_order_number_low       IS NULL AND
368       p_order_number_high      IS NULL AND
369       p_request_date_low       IS NULL AND
370       p_request_date_high      IS NULL AND
371       p_customer_po_number     IS NULL AND
372       p_ship_to_location       IS NULL AND
373       p_order_type             IS NULL AND
374       p_customer               IS NULL AND
375       p_item                   IS NULL AND
376       p_ordered_date_low       IS NULL AND
377       p_ordered_date_high      IS NULL AND
378       p_warehouse              IS NULL AND
379       p_demand_class           IS NULL AND
380       p_planning_priority      IS NULL AND
381       p_shipment_priority      IS NULL AND
382       p_line_type              IS NULL AND
383       p_line_request_date_low  IS NULL AND
384       p_line_request_date_high IS NULL AND
385       p_line_ship_to_location  IS NULL AND
386       p_sch_ship_date_low      IS NULL AND
387       p_sch_ship_date_high     IS NULL AND
388       p_sch_arrival_date_low   IS NULL AND
389       p_sch_arrival_date_high  IS NULL AND
390       p_sch_mode               IS NULL AND
391       nvl(p_booked, 'Y') = 'Y'
392    THEN
393       FOR k IN wf_item LOOP
394          IF l_debug_level  > 0 THEN
395             oe_debug_pub.add('***** 1. Processing item key '||
396                              k.item_key ||' *****', 1);
397          END IF;
398 
399          -- Moac Start
400 	 IF NOT l_single_org and k.org_id <> l_old_org_id THEN
401 	    l_old_org_id := k.org_id;
402 	    MO_GLOBAL.set_policy_context(p_access_mode => 'S', p_org_id => k.org_id);
403 	 END IF;
404          -- Moac End
405 
406          -- Need to check whether still line is eligible for processing
407          IF Line_Eligible(p_line_id => to_number(K.ITEM_KEY)) THEN
408 
409             IF l_debug_level  > 0 THEN
410                oe_debug_pub.add(  'COMPLETING ACTIVITY FOR : ' || K.ITEM_KEY , 1 ) ;
411             END IF;
412 
413 
414 
415             g_process_records := 0;
416             g_failed_records  := 0;
417 
418             wf_engine.CompleteActivityInternalName
419                ('OEOL',
420                 k.item_key,
421                 'SCHEDULING_ELIGIBLE',
422                 'COMPLETE');
423 
424             OE_MSG_PUB.Count_And_Get
425                ( p_count     => l_msg_count,
426                  p_data      => l_msg_data);
427 
428             FOR I in 1..l_msg_count LOOP
429                l_msg_data := OE_MSG_PUB.Get(I,'F');
430 
431                -- Write Messages in the log file
432                fnd_file.put_line(FND_FILE.LOG, l_msg_data);
433 
434             END LOOP;
435             --5166476
436 
437             --IF g_failed_records > 0 THEN
438               IF OE_SCH_CONC_REQUESTS.oe_line_status_tbl.EXISTS(k.item_key) AND
439                  OE_SCH_CONC_REQUESTS.oe_line_status_tbl(k.item_key)= 'N' THEN
440                l_failure := TRUE;
441             END IF;
442             IF l_debug_level  > 0 THEN
443                oe_debug_pub.add(  'R1 PROCESSED: '||l_rec_processed||' FAILED: '||l_rec_failure , 1 ) ;
444             END IF;
445 
446 	 -- Moac
447 	 END IF;
448 
449       END LOOP;
450    ELSE -- Some parameter is passed
451 
452       -- Open cursor.
453       l_cursor_id := DBMS_SQL.OPEN_CURSOR;
454 
455       -- Building the dynamic query based on parameters passed.
456       -- Moac Changed below cursor to use oe_order_headers_all
457       /*Start  MOAC_SQL_CHANGE */
458       l_stmt := 'SELECT H.header_id, L.Line_id, L.org_id ';
459       IF NVL(p_sch_mode, 'LINE_ELIGIBLE') = 'LINE_ELIGIBLE' THEN
460          l_stmt := l_stmt || 'FROM oe_order_headers_all H, oe_order_lines L, '
461             || ' wf_item_activity_statuses wias, wf_process_activities wpa ';
462       ELSE
463          l_stmt := l_stmt || 'FROM oe_order_headers_all H, oe_order_lines L ';
464       END IF;
465       l_stmt := l_stmt || 'WHERE H.header_id = L.header_id '
466          || 'AND H.org_id = L.org_id '
467          || 'AND H.open_flag = ''Y'''||' AND L.open_flag = ''Y''';
468       /*End  MOAC_SQL_CHANGE */
469 
470       -- Building where clause.
471       -- Moac Start
472       IF p_org_id is NOT NULL THEN
473          l_stmt := l_stmt || ' AND L.org_id = :org_id';
474       END IF;
475       -- Moac End
476 
477       IF p_order_number_low IS NOT NULL THEN
478          l_stmt := l_stmt || ' AND H.order_number >= :order_number_low';
479       END IF;
480       IF p_order_number_high IS NOT NULL THEN
481          l_stmt := l_stmt || ' AND H.order_number <= :order_number_high';
482       END IF;
483       IF p_request_date_low IS NOT NULL THEN
484          l_stmt := l_stmt || ' AND H.request_date >= :request_date_low';
485       END IF;
486       IF p_request_date_high IS NOT NULL THEN
487          l_stmt := l_stmt || ' AND H.request_date <= :request_date_high';
488       END IF;
489       IF p_customer_po_number IS NOT NULL THEN
490          l_stmt := l_stmt || ' AND H.cust_po_number = :customer_po_number';
491       END IF;
492       IF p_ship_to_location IS NOT NULL THEN
493          l_stmt := l_stmt || ' AND H.ship_to_org_id = :ship_to_location';
494       END IF;
495       IF p_order_type IS NOT NULL THEN
496          l_stmt := l_stmt || ' AND H.order_type_id = :order_type';
497       END IF;
498       IF p_customer IS NOT NULL THEN
499          l_stmt := l_stmt || ' AND H.sold_to_org_id = :customer';
500       END IF;
501       IF p_item IS NOT NULL THEN
502          l_stmt := l_stmt || ' AND L.inventory_item_id = :item';
503       END IF;
504       IF p_ordered_date_low IS NOT NULL THEN
505          l_stmt := l_stmt || ' AND H.ordered_date >= :ordered_date_low';
506       END IF;
507       IF p_ordered_date_high IS NOT NULL THEN
508          l_stmt := l_stmt || ' AND H.ordered_date <= :ordered_date_high';
509       END IF;
510       IF p_warehouse IS NOT NULL THEN
511          l_stmt := l_stmt || ' AND L.ship_from_org_id = :warehouse';
512       END IF;
513       IF p_demand_class IS NOT NULL THEN
514          l_stmt := l_stmt || ' AND L.demand_class_code = :demand_class';
515       END IF;
516       IF p_planning_priority IS NOT NULL THEN
517          l_stmt := l_stmt || ' AND L.planning_priority = :planning_priority';
518       END IF;
519       IF p_shipment_priority IS NOT NULL THEN
520          l_stmt := l_stmt || ' AND L.shipment_priority_code = :shipment_priority';
521       END IF;
522       IF p_line_type IS NOT NULL THEN
523          l_stmt := l_stmt || ' AND L.line_type_id = :line_type';
524       END IF;
525       IF p_line_request_date_low IS NOT NULL THEN
526          l_stmt := l_stmt || ' AND L.request_date >= :line_request_date_low';
527       END IF;
528       IF p_line_request_date_high IS NOT NULL THEN
529          l_stmt := l_stmt || ' AND L.request_date <= :line_request_date_high';
530       END IF;
531       IF p_line_ship_to_location IS NOT NULL THEN
532          l_stmt := l_stmt || ' AND L.ship_to_org_id = :line_ship_to_location';
533       END IF;
534       IF p_sch_ship_date_low IS NOT NULL THEN
535          l_stmt := l_stmt || ' AND L.schedule_ship_date >= :sch_ship_date_low';
536       END IF;
537       IF p_sch_ship_date_high IS NOT NULL THEN
538          l_stmt := l_stmt || ' AND L.schedule_ship_date <= :sch_ship_date_high';
539       END IF;
540       IF p_sch_arrival_date_low IS NOT NULL THEN
541          l_stmt := l_stmt || ' AND L.schedule_arrival_date >= :sch_arrival_date_low';
542       END IF;
543       IF p_sch_arrival_date_high IS NOT NULL THEN
544          l_stmt := l_stmt || ' AND L.schedule_arrival_date <= :sch_arrival_date_high';
545       END IF;
546       IF p_booked IS NOT NULL THEN
547          l_stmt := l_stmt || ' AND L.booked_flag = :booked';
548       END IF;
549       IF p_sch_mode = 'SCHEDULE' THEN
550          l_stmt := l_stmt || ' AND L.schedule_status_code IS NULL';
551       ELSIF p_sch_mode IN ('UNSCHEDULE','RESCHEDULE','RESCHEDULE_RD') THEN
552          l_stmt := l_stmt || ' AND L.schedule_status_code IS NOT NULL';
553       ELSIF NVL(p_sch_mode, 'LINE_ELIGIBLE') = 'LINE_ELIGIBLE' THEN
554          l_stmt := l_stmt || ' AND wias.item_type = ''OEOL'''
555             || ' AND wias.process_activity = wpa.instance_id'
556             || ' AND wpa.activity_item_type = ''OEOL'''
557             || ' AND wpa.activity_name = ''SCHEDULING_ELIGIBLE'''
558             || ' AND wias.activity_status = ''NOTIFIED'''
559             || ' AND wias.item_key = to_char(L.line_id)';
560       END IF;
561 
562       -- Building order by clause.
563       IF p_order_by_first IS NOT NULL THEN
564          l_stmt := l_stmt ||' ORDER BY L.'||p_order_by_first;
565          IF p_order_by_sec IS NOT NULL THEN
566             l_stmt := l_stmt ||', L.'||p_order_by_sec;
567          END IF;
568       ELSIF p_order_by_sec IS NOT NULL THEN
569          l_stmt := l_stmt ||' ORDER BY L.'||p_order_by_sec;
570 
571 
572       END IF;
573       -- Moac start
574       IF NOT l_single_org then
575         IF p_order_by_first IS NOT NULL OR
576           p_order_by_sec IS NOT NULL THEN
577             l_stmt := l_stmt || ', L.org_id' ;
578         ELSE
579             l_stmt := l_stmt ||' ORDER BY L.org_id';
580         END IF;
581       END IF;
582       -- Moac End.
583       IF NOT l_single_org OR
584          (p_order_by_first IS NOT NULL OR
585           p_order_by_sec IS NOT NULL) then
586          l_stmt := l_stmt || ', L.top_model_line_id,l.line_id' ; --5166476
587       ELSE
588          l_stmt := l_stmt ||' ORDER BY L.top_model_line_id,l.line_id' ;
589       END IF;
590 
591       IF l_debug_level  > 0 THEN
592          oe_debug_pub.add('Query : ' || l_stmt, 1 ) ;
593       END IF;
594 
595       -- Parse statement.
596       DBMS_SQL.Parse(l_cursor_id,l_stmt,DBMS_SQL.NATIVE);
597 
598       -- Bind variables
599       -- Moac Start
600       IF p_org_id is NOT NULL THEN
601          DBMS_SQL.Bind_Variable(l_cursor_id, ':org_id', p_org_id);
602       END IF;
603       -- Moac End
604 
605       IF p_order_number_low IS NOT NULL THEN
606          DBMS_SQL.Bind_Variable(l_cursor_id, ':order_number_low',
607                                 p_order_number_low);
608       END IF;
609       IF p_order_number_high IS NOT NULL THEN
610          DBMS_SQL.Bind_Variable(l_cursor_id, ':order_number_high',
611                                 p_order_number_high);
612       END IF;
613       IF p_request_date_low IS NOT NULL THEN
614          DBMS_SQL.Bind_Variable(l_cursor_id, ':request_date_low',
615                                 l_request_date_low);
616       END IF;
617       IF p_request_date_high IS NOT NULL THEN
618          DBMS_SQL.Bind_Variable(l_cursor_id, ':request_date_high',
619                                 l_request_date_high);
620       END IF;
621       IF p_customer_po_number IS NOT NULL THEN
622          DBMS_SQL.Bind_Variable(l_cursor_id, ':customer_po_number',
623                                 p_customer_po_number);
624       END IF;
625       IF p_ship_to_location IS NOT NULL THEN
626          DBMS_SQL.Bind_Variable(l_cursor_id, ':ship_to_location',
627                                 p_ship_to_location);
628       END IF;
629       IF p_order_type IS NOT NULL THEN
630          DBMS_SQL.Bind_Variable(l_cursor_id, ':order_type', p_order_type);
631       END IF;
632       IF p_customer IS NOT NULL THEN
633          DBMS_SQL.Bind_Variable(l_cursor_id, ':customer', p_customer);
634       END IF;
635       IF p_item IS NOT NULL THEN
636          DBMS_SQL.Bind_Variable(l_cursor_id, ':item', p_item);
637       END IF;
638       IF p_ordered_date_low IS NOT NULL THEN
639          DBMS_SQL.Bind_Variable(l_cursor_id, ':ordered_date_low',
640                                 l_ordered_date_low);
641       END IF;
642       IF p_ordered_date_high IS NOT NULL THEN
643          DBMS_SQL.Bind_Variable(l_cursor_id, ':ordered_date_high',
644                                 l_ordered_date_high);
645       END IF;
646       IF p_warehouse IS NOT NULL THEN
647          DBMS_SQL.Bind_Variable(l_cursor_id, ':warehouse', p_warehouse);
648       END IF;
649       IF p_demand_class IS NOT NULL THEN
650          DBMS_SQL.Bind_Variable(l_cursor_id, ':demand_class', p_demand_class);
651       END IF;
652       IF p_planning_priority IS NOT NULL THEN
653          DBMS_SQL.Bind_Variable(l_cursor_id, ':planning_priority',
654                                 p_planning_priority);
655       END IF;
656       IF p_shipment_priority IS NOT NULL THEN
657          DBMS_SQL.Bind_Variable(l_cursor_id, ':shipment_priority',
658                                 p_shipment_priority);
659       END IF;
660       IF p_line_type IS NOT NULL THEN
661          DBMS_SQL.Bind_Variable(l_cursor_id, ':line_type', p_line_type);
662       END IF;
663       IF p_line_request_date_low IS NOT NULL THEN
664          DBMS_SQL.Bind_Variable(l_cursor_id, ':line_request_date_low',
665                                 l_line_request_date_low);
666       END IF;
667       IF p_line_request_date_high IS NOT NULL THEN
668          DBMS_SQL.Bind_Variable(l_cursor_id, ':line_request_date_high',
669                                 l_line_request_date_high);
670       END IF;
671       IF p_line_ship_to_location IS NOT NULL THEN
672          DBMS_SQL.Bind_Variable(l_cursor_id, ':line_ship_to_location',
673                                 p_line_ship_to_location);
674       END IF;
675       IF p_sch_ship_date_low IS NOT NULL THEN
676          DBMS_SQL.Bind_Variable(l_cursor_id, ':sch_ship_date_low',
677                                 l_sch_ship_date_low);
678       END IF;
679       IF p_sch_ship_date_high IS NOT NULL THEN
680          DBMS_SQL.Bind_Variable(l_cursor_id, ':sch_ship_date_high',
681                                 l_sch_ship_date_high);
682       END IF;
683       IF p_sch_arrival_date_low IS NOT NULL THEN
684          DBMS_SQL.Bind_Variable(l_cursor_id, ':sch_arrival_date_low',
685                                 l_sch_arrival_date_low);
686       END IF;
687       IF p_sch_arrival_date_high IS NOT NULL THEN
688          DBMS_SQL.Bind_Variable(l_cursor_id, ':sch_arrival_date_high',
689                                 l_sch_arrival_date_high);
690       END IF;
691       IF p_booked IS NOT NULL THEN
692          DBMS_SQL.Bind_Variable(l_cursor_id, ':booked', p_booked);
693       END IF;
694 
695       -- Map output columns
696       DBMS_SQL.Define_Column(l_cursor_id, 1, l_header_id);
697       DBMS_SQL.Define_Column(l_cursor_id, 2, l_line_id);
698       DBMS_SQL.Define_Column(l_cursor_id, 3, l_org_id);       -- Moac
699 
700       IF l_debug_level  > 0 THEN
701          oe_debug_pub.add('Before executing query.',1);
702       END IF;
703 
704       -- Execute query.
705       l_retval := DBMS_SQL.Execute(l_cursor_id);
706 
707       IF l_debug_level  > 0 THEN
708          oe_debug_pub.add('Execution Result : ' || l_retval, 2) ;
709       END IF;
710 
711       -- Process each row retrieved.
712       LOOP
713 
714          IF l_debug_level  > 0 THEN
715             oe_debug_pub.add('Execution Result : ' || l_retval, 2) ;
716          END IF;
717 
718          IF DBMS_SQL.Fetch_Rows(l_cursor_id) = 0 THEN
719             EXIT;
720          END IF;
721 
722          DBMS_SQL.Column_Value(l_cursor_id, 1, l_header_id);
723          DBMS_SQL.Column_Value(l_cursor_id, 2, l_line_id);
724          DBMS_SQL.Column_Value(l_cursor_id, 3, l_org_id);      -- Moac
725 
726 
727          IF l_debug_level  > 0 THEN
728             oe_debug_pub.add('***** 1. Processing Line Id '||
729                            l_line_id ||' *****', 1);
730          END IF;
731          --4777400: Context set is Moved up to set before call to get_date_type
732          -- Moac Start
733 	 IF NOT l_single_org and l_org_id <> l_old_org_id THEN
734             l_old_org_id := l_org_id;
735             MO_GLOBAL.set_policy_context(p_access_mode => 'S', p_org_id => l_org_id);
736          END IF;
737          -- Moac End.
738          l_order_date_type_code := NVL
739             (OE_SCHEDULE_UTIL.Get_Date_Type(l_header_id),'SHIP');
740          l_temp_line_id := 0;
741 
742          BEGIN
743 
744             SELECT L.line_id,
745                    L.booked_flag,
746                    L.request_date,
747                    L.ship_from_org_id,
748                    L.ship_set_id,
749                    L.arrival_set_id,
750                    L.ato_line_id,
751                    L.top_model_line_id,
752                    L.link_to_line_id,
753                    L.ship_model_complete_flag,
754                    L.item_type_code,
755                    L.schedule_status_code
756             INTO   l_temp_line_id,
757                    l_booked_flag,
758                    l_request_date,
759                    l_ship_from_org_id,
760                    l_ship_set_id,
761                    l_arrival_set_id,
762                    l_ato_line_id,
763                    l_top_model_line_id,
764                    l_link_to_line_id,
765                    l_smc_flag,
766                    l_item_type_code,
767                    l_schedule_status_code
768             FROM   oe_order_lines_all L
769             WHERE  L.open_flag = 'Y'
770             AND    L.line_id = l_line_id;
771 
772 
773          EXCEPTION
774             WHEN no_data_found THEN
775                NULL;
776          END;
777 
778 
779          IF l_temp_line_id <> 0 THEN
780 
781             g_conc_program := 'Y';
782             g_recorded := 'N'; -- 5166476
783 
784             IF nvl(p_sch_mode, 'LINE_ELIGIBLE') = 'LINE_ELIGIBLE' THEN
785                --5166476
786                IF Line_Eligible(p_line_id => l_line_id) THEN
787 
788                   IF l_debug_level  > 0 THEN
789                      oe_debug_pub.add(to_char(l_line_id) || ' - Line Eligible', 1);
790                   END IF;
791 
792                   --l_found := FALSE;
793 
794                --IF NOT l_found THEN
795                   g_process_records := 0;
796                   g_failed_records  := 0;
797 
798                   wf_engine.CompleteActivityInternalName ('OEOL',
799                                                           to_char(l_line_id),
800                                                           'SCHEDULING_ELIGIBLE',
801                                                           'COMPLETE');
802 
803                   OE_MSG_PUB.Count_And_Get (p_count     => l_msg_count,
804                                             p_data      => l_msg_data);
805 
806                   FOR I in 1..l_msg_count LOOP
807                      l_msg_data := OE_MSG_PUB.Get(I,'F');
808 
809                      -- Write Messages in the log file
810                      FND_FILE.PUT_LINE(FND_FILE.LOG, l_msg_data);
811 
812                   END LOOP;
813                   --5166476
814 
815                   --IF g_failed_records > 0 THEN
816                   IF OE_SCH_CONC_REQUESTS.oe_line_status_tbl.EXISTS(l_line_id) AND
817                      OE_SCH_CONC_REQUESTS.oe_line_status_tbl(l_line_id) ='N' THEN
818                      l_failure := TRUE;
819                   END IF;
820                   IF l_debug_level  > 0 THEN
821                      oe_debug_pub.add(  'R2 PROCESSED: '||l_rec_processed||' FAILED: '||l_rec_failure, 1 ) ;
822                   END IF;
823 
824                --END IF;
825                END IF;
826             ELSIF p_sch_mode = 'SCHEDULE'  AND
827                l_schedule_status_code IS NULL THEN
828 
829                IF l_debug_level  > 0 THEN
830                   oe_debug_pub.add(to_char(l_line_id) || ' - Schedule', 1);
831                END IF;
832                l_found := FALSE;
833 
834                IF l_smc_flag = 'Y' AND
835                   l_top_model_line_id IS NOT NULL THEN
836                   l_found := model_processed(l_top_model_line_id,l_top_model_line_id);
837                   --5166476
838                   IF l_found AND
839                     oe_line_status_tbl.EXISTS(l_top_model_line_id) THEN
840                     IF OE_SCH_CONC_REQUESTS.OE_line_status_Tbl(l_top_model_line_id) = 'N' THEN
841                      --5166476
842                         OE_SCH_CONC_REQUESTS.OE_line_status_Tbl(l_line_id) := 'N';
843                      ELSE
844                         OE_SCH_CONC_REQUESTS.OE_line_status_Tbl(l_line_id) := 'Y';
845                      END IF;
846                      IF l_debug_level  > 0 THEN
847                         oe_debug_pub.add(  'R3.1 PROCESSED: '||l_line_id, 1 ) ;
848                      END IF;
849                   END IF;
850                ELSIF l_ato_line_id IS NOT NULL THEN
851                   --l_top_model_line_id = l_ato_line_id THEN --5166476
852                   l_found := model_processed(l_ato_line_id,l_ato_line_id);
853                   --5166476
854                   IF l_found AND
855                      oe_line_status_tbl.EXISTS(l_ato_line_id) THEN
856                      IF OE_SCH_CONC_REQUESTS.OE_line_status_Tbl(l_ato_line_id) ='N'  THEN
857                          OE_SCH_CONC_REQUESTS.OE_line_status_Tbl(l_line_id) := 'N';
858                      ELSE
859                         OE_SCH_CONC_REQUESTS.OE_line_status_Tbl(l_line_id) := 'Y';
860                      END IF;
861                      IF l_debug_level  > 0 THEN
862                         oe_debug_pub.add(  'R3.2 PROCESSED: '||l_line_id, 1 ) ;
863                      END IF;
864                   END IF;
865                   IF NOT l_found AND
866                     l_top_model_line_id IS NOT NULL AND
867                     l_top_model_line_id <> l_ato_line_id AND
868                     (p_apply_warehouse IS NULL AND
869                      p_apply_sch_date IS NULL)THEN
870                     l_found := model_processed(l_top_model_line_id,l_line_id);
871                   END IF;
872 
873                ELSIF l_top_model_line_id IS NOT NULL THEN
874                   IF (p_apply_warehouse IS NOT NULL OR
875                      p_apply_sch_date IS NOT NULL) AND
876                      l_item_type_code NOT IN (OE_GLOBALS.G_ITEM_INCLUDED) THEN
877                      l_found := model_processed(l_line_id,l_line_id);
878                      IF l_debug_level  > 0 THEN
879                            oe_debug_pub.add(  'R3.4 PROCESSED '||l_line_id,1);
880                      END IF;
881                   --5166476
882                   ELSIF l_top_model_line_id <> l_link_to_line_id AND
883                      l_item_type_code = (OE_GLOBALS.G_ITEM_INCLUDED) AND
884                      (p_apply_warehouse IS NOT NULL OR
885                      p_apply_sch_date IS NOT NULL) THEN
886                      l_found := model_processed(l_link_to_line_id,l_line_id);
887                      IF l_found AND
888                         oe_line_status_tbl.EXISTS(l_link_to_line_id) AND
889                         oe_line_status_tbl(l_link_to_line_id) ='N' THEN
890                         oe_line_status_tbl(l_line_id) := 'N';
891                      END IF;
892                   ELSE
893 
894                      l_found := model_processed(l_top_model_line_id,l_line_id);
895                      --5166476
896                      IF l_found AND
897                         oe_line_status_tbl.EXISTS(l_top_model_line_id) AND
898                         oe_line_status_tbl(l_top_model_line_id) ='N' THEN
899                         oe_line_status_tbl(l_line_id) := 'N';
900                         IF l_debug_level  > 0 THEN
901                            oe_debug_pub.add(  'R3.5 PROCESSED: '||l_line_id, 1 ) ;
902                         END IF;
903                      END IF;
904 
905                    END IF;
906                END IF;
907 
908                IF NOT l_found THEN
909                   IF p_apply_warehouse IS NOT NULL OR
910                      p_apply_sch_date IS NOT NULL
911                   THEN
912 
913                      -- Define a save point
914                      SAVEPOINT Schedule_Line;
915 
916                      IF l_rec_processed > 1 THEN
917                         -- Initially this will be set to FND_API.G_TRUE
918                         l_init_msg_list := FND_API.G_FALSE;
919                      END IF;
920 
921                      oe_line_util.lock_row
922                         (x_return_status   => l_return_status
923                         ,p_x_line_rec      => l_line_rec
924                         ,p_line_id         => l_line_id);
925 
926                      --l_line_tbl := OE_ORDER_PUB.G_MISS_LINE_TBL;
927                      --l_old_line_tbl := OE_ORDER_PUB.G_MISS_LINE_TBL;
928                      --l_line_tbl(1) := OE_ORDER_PUB.G_MISS_LINE_REC;
929                      --l_line_tbl(1).line_id := l_line_id;
930                      --l_line_tbl(1).header_id := l_header_id;
931                      l_line_tbl(1) := l_line_rec;
932                      l_old_line_tbl(1) := l_line_rec;
933 
934                      l_line_tbl(1).operation := OE_GLOBALS.G_OPR_UPDATE;
935 
936                      IF p_apply_warehouse IS NOT NULL THEN
937                         l_line_tbl(1).ship_from_org_id := p_apply_warehouse;
938                      END IF;
939 
940                      IF p_apply_sch_date IS NOT NULL THEN
941                         IF l_order_date_type_code = 'SHIP' THEN
942                            l_line_tbl(1).schedule_ship_date := l_apply_sch_date;
943                         ELSE
944                            l_line_tbl(1).schedule_arrival_date := l_apply_sch_date;
945                         END IF;
946                      ELSE
947                         IF l_order_date_type_code = 'SHIP' THEN
948                            l_line_tbl(1).schedule_ship_date := l_request_date;
949                         ELSE
950                            l_line_tbl(1).schedule_arrival_date := l_request_date;
951                         END IF;
952 
953                      END IF;
954                      --4892724
955                      l_line_tbl(1).change_reason := 'SYSTEM';
956                      l_line_tbl(1).change_comments := 'SCHEDULE ORDERS CONCURRENT PROGRAM';
957 
958 
959                      -- Call to process order
960                      l_control_rec.controlled_operation := TRUE;
961                      l_control_rec.write_to_db := TRUE;
962                      l_control_rec.PROCESS := FALSE;
963                      l_control_rec.default_attributes := TRUE;
964                      l_control_rec.change_attributes := TRUE;
965                      l_process_order := TRUE;
966                      l_control_rec.check_security    := TRUE;-- 5168540
967 
968                      g_process_records := 0;
969                      g_failed_records  := 0;
970 
971                      Oe_Order_Pvt.Lines
972                        (p_init_msg_list     => l_init_msg_list,
973                         p_validation_level  => FND_API.G_VALID_LEVEL_FULL,
974                         p_control_rec       => l_control_rec,
975                         p_x_line_tbl        => l_line_tbl,
976                         p_x_old_line_tbl    => l_old_line_tbl,
977                         x_return_status     => l_return_status);
978 
979                      IF l_debug_level  > 0 THEN
980                         oe_debug_pub.add('Oe_Order_Pvt.Lines returns with - '
981                                                                     || l_return_status);
982                      END IF;
983 
984                      IF l_return_status IN (FND_API.G_RET_STS_ERROR,
985                                             FND_API.G_RET_STS_UNEXP_ERROR) THEN
986                         IF l_debug_level  > 0 THEN
987                            oe_debug_pub.add('#### FAILURE #### LINE_ID - '
988                                          || to_char(l_line_id) || ' ####');
989                         END IF;
990                         --5166476
991                         IF g_recorded = 'N' THEN
992                            --5166476
993                            OE_SCH_CONC_REQUESTS.oe_line_status_tbl(l_line_id) :='N';
994                            g_recorded := 'Y';
995                         END IF;
996                         --5166476
997                         --IF l_smc_flag = 'Y' AND
998                         IF l_top_model_line_id IS NOT NULL AND
999                            l_smc_flag = 'Y'  AND
1000                            l_ato_line_id IS NULL THEN
1001                            OE_line_status_Tbl(l_top_model_line_id) := 'N';
1002                         ELSIF l_ato_line_id IS NOT NULL THEN
1003                            OE_line_status_Tbl(l_ato_line_id) := 'N';
1004                         END IF;
1005 
1006 
1007                         l_failure := TRUE;
1008 
1009                         ROLLBACK TO SAVEPOINT Schedule_Line;
1010 
1011                      END IF;
1012 
1013                      IF l_debug_level  > 0 THEN
1014                         oe_debug_pub.add(  'R3 PROCESSED: '||l_line_id,1);
1015                      END IF;
1016 
1017                   ELSE -- No scheduling attributes are provided
1018 
1019                      IF l_debug_level  > 0 THEN
1020                         oe_debug_pub.add('No scheduling attributes. Booked flag - '
1021                                       || l_booked_flag);
1022                      END IF;
1023 
1024                      g_process_records := 0;
1025                      g_failed_records  := 0;
1026 
1027                      --R12.MOAC
1028                      l_selected_line_tbl(1).id1 := l_line_id;
1029 
1030                      OE_GROUP_SCH_UTIL.Schedule_Multi_lines
1031                           (p_selected_line_tbl     => l_selected_line_tbl, --R12.MOAC
1032                            p_line_count    => 1,
1033                            p_sch_action    => 'SCHEDULE',
1034                            x_atp_tbl       => l_atp_tbl,
1035                            x_return_status => l_return_status,
1036                            x_msg_count     => l_msg_count,
1037                            x_msg_data      => l_msg_data);
1038 
1039                      --ELSE
1040                      IF l_debug_level  > 0 THEN
1041                         oe_debug_pub.add('Return Status  After Schedule_Multi_lines '||l_return_status,1);
1042                      END IF;
1043 
1044                      IF NVL(l_booked_flag,'N') ='Y'
1045                       AND l_return_status = FND_API.G_RET_STS_SUCCESS THEN
1046 
1047                        IF l_debug_level  > 0 THEN
1048                         oe_debug_pub.add('It is a Booked Order' );
1049                        END IF;
1050                        -- Added PTO Logic as part of bug 5186581
1051                        IF l_top_model_line_id is not null
1052                        AND l_top_model_line_id = l_line_id
1053                        AND l_ato_line_id is null
1054                        AND l_smc_flag = 'N'  THEN
1055 
1056                        IF l_debug_level  > 0 THEN
1057 
1058                         oe_debug_pub.add('It is a PTO Model' );
1059                        END IF;
1060 
1061                          -- Workflow wont progress all child lines for the Non SMC PTO model scenario. We have to progress all the
1062                          -- child lines if the to Model is NON SMC
1063 
1064                          FOR M IN progress_pto  LOOP
1065 
1066 
1067                            IF l_debug_level  > 0 THEN
1068                               oe_debug_pub.add('Progressing Line ' || M.line_id, 1);
1069                            END IF;
1070 
1071                            BEGIN
1072                            -- COMPLETING ACTIVITY
1073                            wf_engine.CompleteActivityInternalName
1074                            ('OEOL',
1075                             to_char(M.line_id),
1076                             'SCHEDULING_ELIGIBLE',
1077                             'COMPLETE');
1078                            EXCEPTION
1079                               WHEN OTHERS THEN
1080                                  NULL;
1081                            END;
1082 
1083 
1084                          END LOOP;
1085 
1086                        ELSE -- Call for each line or ATO/SMC...
1087 
1088 
1089                            BEGIN
1090                            -- COMPLETING ACTIVITY
1091                            wf_engine.CompleteActivityInternalName
1092                            ('OEOL',
1093                             to_char(l_line_id),
1094                             'SCHEDULING_ELIGIBLE',
1095                             'COMPLETE');
1096                            EXCEPTION
1097                               WHEN OTHERS THEN
1098                                  NULL;
1099                            END;
1100                        END IF;
1101                      END IF;
1102                      --5166476
1103 
1104                      --IF g_failed_records > 0 THEN
1105                      IF OE_SCH_CONC_REQUESTS.oe_line_status_tbl.EXISTS(l_line_id) AND
1106                         OE_SCH_CONC_REQUESTS.oe_line_status_tbl(l_line_id) = 'N' THEN
1107                         l_failure := TRUE;
1108                      END IF;
1109                      IF l_debug_level  > 0 THEN
1110                         oe_debug_pub.add(  'R4 PROCESSED: '||l_rec_processed||' FAILED: '||l_rec_failure, 1 ) ;
1111                      END IF;
1112                   END IF;
1113                END IF;
1114 
1115 
1116             ELSIF p_sch_mode = 'UNSCHEDULE' AND
1117                l_schedule_status_code IS NOT NULL THEN
1118 
1119                IF l_debug_level  > 0 THEN
1120                   oe_debug_pub.add(to_char(l_line_id) || ' - Unschedule', 1);
1121                END IF;
1122 
1123                l_found := FALSE;
1124 
1125                IF l_smc_flag = 'Y' AND
1126                   l_top_model_line_id IS NOT NULL THEN
1127                   l_found := model_processed(l_top_model_line_id,l_top_model_line_id);
1128                ELSIF l_ato_line_id IS NOT NULL THEN
1129                   --l_top_model_line_id = l_ato_line_id THEN
1130                   l_found := model_processed(l_ato_line_id,l_ato_line_id);
1131                ELSIF l_smc_flag = 'N' AND
1132                   l_top_model_line_id IS NOT NULL AND
1133                   (l_ato_line_id IS NULL OR
1134                    l_ato_line_id <> l_top_model_line_id) AND
1135                    l_item_type_code = OE_GLOBALS.G_ITEM_INCLUDED THEN
1136 
1137                    l_found := included_processed(l_line_id);
1138                END IF;
1139 
1140                IF NOT l_found THEN
1141                   g_process_records := 0;
1142                   g_failed_records  := 0;
1143 
1144                   IF l_item_type_code = OE_GLOBALS.G_ITEM_INCLUDED THEN
1145                      --5166476
1146                      --g_process_records := g_process_records + 1;
1147                      OE_SCH_CONC_REQUESTS.oe_line_status_tbl(l_line_id) := 'Y';
1148                   END IF;
1149                   --R12.MOAC
1150                   l_selected_line_tbl(1).id1 := l_line_id;
1151                   OE_GROUP_SCH_UTIL.Schedule_Multi_lines
1152                      (p_selected_line_tbl     => l_selected_line_tbl,
1153                       p_line_count    => 1,
1154                       p_sch_action    => 'UNSCHEDULE',
1155                       x_atp_tbl       => l_atp_tbl,
1156                       x_return_status => l_return_status,
1157                       x_msg_count     => l_msg_count,
1158                       x_msg_data      => l_msg_data);
1159                   --5166476
1160 
1161                   --IF g_failed_records > 0 THEN
1162                   IF OE_SCH_CONC_REQUESTS.oe_line_status_tbl.EXISTS(l_line_id) AND
1163                      OE_SCH_CONC_REQUESTS.oe_line_status_tbl(l_line_id) = 'N' THEN
1164                      l_failure := TRUE;
1165                   END IF;
1166                   IF l_debug_level  > 0 THEN
1167                      oe_debug_pub.add(  'R5 PROCESSED: '||l_rec_processed||' FAILED: '||l_rec_failure, 1 ) ;
1168                   END IF;
1169 
1170                END IF;
1171             ELSIF p_sch_mode IN ('RESCHEDULE','RESCHEDULE_RD') THEN
1172 
1173                l_temp_flag := FALSE;
1174 
1175                IF l_debug_level  > 0 THEN
1176                   oe_debug_pub.add(to_char(l_line_id) || ' - Reschedule', 1);
1177                END IF;
1178 
1179                IF l_smc_flag = 'Y' AND
1180                   l_top_model_line_id IS NOT NULL THEN
1181                   l_temp_flag := model_processed(l_top_model_line_id,l_top_model_line_id);
1182                   --5166476
1183                   IF l_temp_flag AND
1184                     oe_line_status_tbl.EXISTS(l_top_model_line_id)  AND
1185                     oe_line_status_tbl(l_top_model_line_id) = 'N' THEN
1186                     oe_line_status_tbl(l_line_id) := 'N';
1187                     /*
1188                      l_rec_processed := l_rec_processed + 1;
1189                      l_rec_failure   := l_rec_failure + 1;
1190                     */
1191                      IF l_debug_level  > 0 THEN
1192                         oe_debug_pub.add(  'R6.1 PROCESSED: '||l_rec_processed||' FAILED: '||l_rec_failure, 1 ) ;
1193                      END IF;
1194                   END IF;
1195                ELSIF l_ato_line_id IS NOT NULL THEN
1196                    --l_ato_line_id = l_top_model_line_id THEN
1197                   l_temp_flag := model_processed(l_ato_line_id,l_ato_line_id);
1198                   --5166476
1199                   IF l_temp_flag AND
1200                     oe_line_status_tbl.EXISTS(l_ato_line_id) AND
1201                     oe_line_status_tbl(l_ato_line_id) = 'N' THEN
1202                      oe_line_status_tbl(l_line_id) := 'N';
1203                      /*
1204                      l_rec_processed := l_rec_processed + 1;
1205                      l_rec_failure   := l_rec_failure + 1;
1206                      */
1207                      IF l_debug_level  > 0 THEN
1208                         oe_debug_pub.add(  'R6.2 PROCESSED: '||l_rec_processed||' FAILED: '||l_rec_failure, 1 ) ;
1209                      END IF;
1210                   END IF;
1211 
1212                END IF;
1213 
1214                /* If many of the lines selected are part of a set, then delayed
1215                 * request must get logged only for one of the lines.
1216                 */
1217                IF l_ship_set_id IS NOT NULL OR
1218                   l_arrival_set_id IS NOT NULL THEN
1219 
1220                   l_temp_flag := set_processed( NVL(l_ship_set_id,l_arrival_set_id));
1221                END IF;
1222 
1223                IF NOT l_temp_flag THEN
1224 
1225                   -- Define a save point
1226                   SAVEPOINT Schedule_Line;
1227 
1228                   IF l_rec_processed > 1 THEN
1229                      l_init_msg_list := FND_API.G_FALSE;
1230                   END IF;
1231 
1232                   oe_line_util.lock_row
1233                         (x_return_status   => l_return_status
1234                         ,p_x_line_rec      => l_line_rec
1235                         ,p_line_id         => l_line_id);
1236 
1237                   l_line_tbl(1) := l_line_rec;
1238                   l_old_line_tbl(1) := l_line_rec;
1239 
1240                   l_line_tbl(1).operation := OE_GLOBALS.G_OPR_UPDATE;
1241 
1242                   IF p_sch_mode = 'RESCHEDULE_RD' THEN
1243                      l_apply_sch_date := l_line_tbl(1).request_date;
1244                   END IF;
1245 
1246                   l_line_tbl(1).ship_from_org_id
1247                      := NVL(p_apply_warehouse, l_ship_from_org_id);
1248 
1249 
1250                   IF l_apply_sch_date IS NOT NULL THEN
1251                     IF l_order_date_type_code = 'SHIP' THEN
1252                       l_line_tbl(1).schedule_ship_date := l_apply_sch_date;
1253                     ELSE
1254                       l_line_tbl(1).schedule_arrival_date := l_apply_sch_date;
1255                     END IF;
1256                   END IF;
1257 
1258                   --l_line_tbl(1).schedule_action_code := OE_SCHEDULE_UTIL.OESCH_ACT_RESCHEDULE;
1259 
1260                   --4892724
1261                   l_line_tbl(1).change_reason := 'SYSTEM';
1262                   l_line_tbl(1).change_comments := 'SCHEDULE ORDERS CONCURRENT PROGRAM';
1263 
1264                   -- Call to process order
1265                   l_control_rec.controlled_operation := TRUE;
1266                   l_control_rec.write_to_db := TRUE;
1267                   --l_control_rec.PROCESS := FALSE;
1268                   l_control_rec.default_attributes := TRUE;
1269                   l_control_rec.change_attributes := TRUE;
1270                   l_process_order := TRUE;
1271                   l_control_rec.check_security    := TRUE;-- 5168540
1272 
1273                   g_process_records := 0;
1274                   g_failed_records  := 0;
1275 
1276                   Oe_Order_Pvt.Lines
1277                      (p_validation_level   => FND_API.G_VALID_LEVEL_FULL,
1278                       p_init_msg_list      => l_init_msg_list,
1279                       p_control_rec        => l_control_rec,
1280                       p_x_line_tbl         => l_line_tbl,
1281                       p_x_old_line_tbl     => l_old_line_tbl,
1282                       x_return_status      => l_return_status);
1283 
1284                   IF l_debug_level  > 0 THEN
1285                      oe_debug_pub.add('Oe_Order_Pvt.Lines returns with - '
1286                                       || l_return_status);
1287                   END IF;
1288 
1289                   IF l_return_status IN
1290                      (FND_API.G_RET_STS_ERROR,FND_API.G_RET_STS_UNEXP_ERROR)
1291                   THEN
1292                      ROLLBACK TO SAVEPOINT Schedule_Line;
1293                      IF l_debug_level  > 0 THEN
1294                         oe_debug_pub.add('#### FAILURE #### LINE_ID - '
1295                                          || to_char(l_line_id) || ' ####');
1296                      END IF;
1297                      --5166476
1298                      OE_SCH_CONC_REQUESTS.oe_line_status_tbl(l_line_id) := 'N';
1299                      --516476
1300                      IF l_smc_flag = 'Y' AND
1301                         l_top_model_line_id IS NOT NULL THEN
1302                         OE_line_status_Tbl(l_top_model_line_id) := 'N';
1303                      ELSIF l_ato_line_id IS NOT NULL THEN
1304                         OE_line_status_Tbl(l_ato_line_id) := 'N';
1305                      END IF;
1306                      l_failure := TRUE;
1307                   END IF;
1308                   IF l_debug_level  > 0 THEN
1309                      oe_debug_pub.add(  'R6 PROCESSED: '||l_rec_processed||' FAILED: '||l_rec_failure, 1 ) ;
1310                   END IF;
1311 
1312                END IF;
1313             END IF; -- line eligible
1314 
1315             IF l_process_order = TRUE
1316               AND l_return_status = FND_API.G_RET_STS_SUCCESS THEN
1317                IF l_debug_level  > 0 THEN
1318                   oe_debug_pub.add('After Call to Process Order ',1);
1319                END IF;
1320                BEGIN
1321 
1322                   l_control_rec.controlled_operation := TRUE;
1323                   l_control_rec.process              := TRUE;
1324                   l_control_rec.process_entity       := OE_GLOBALS.G_ENTITY_ALL;
1325                   l_control_rec.check_security       := FALSE;
1326                   l_control_rec.clear_dependents     := FALSE;
1327                   l_control_rec.default_attributes   := FALSE;
1328                   l_control_rec.change_attributes    := FALSE;
1329                   l_control_rec.validate_entity      := FALSE;
1330                   l_control_rec.write_to_DB          := FALSE;
1331 
1332                   --  Instruct API to clear its request table
1333 
1334                   l_control_rec.clear_api_cache      := FALSE;
1335                   l_control_rec.clear_api_requests   := TRUE;
1336 
1337                   oe_line_util.Post_Line_Process (p_control_rec  => l_control_rec,
1338                                             p_x_line_tbl   => l_line_tbl );
1339                   g_process_records := 0;
1340                   g_failed_records  := 0;
1341 
1342                   IF l_debug_level  > 0 THEN
1343                      oe_debug_pub.add('GOING TO EXECUTE DELAYED REQUESTS ', 2);
1344                   END IF;
1345 
1346                   OE_DELAYED_REQUESTS_PVT.Process_Delayed_Requests
1347                                  (x_return_status => l_return_status);
1348 
1349                   IF l_return_status IN (FND_API.G_RET_STS_ERROR,
1350                                          FND_API.G_RET_STS_UNEXP_ERROR) THEN
1351                      IF l_debug_level  > 0 THEN
1352                         oe_debug_pub.add('#### FAILURE #### LINE_ID - '
1353                                          || to_char(l_line_id) || ' ####');
1354                      END IF;
1355 
1356                      l_failure := TRUE;
1357 
1358                      OE_Delayed_Requests_PVT.Clear_Request(l_return_status);
1359 
1360                      IF l_debug_level  > 0 THEN
1361                         oe_debug_pub.add('AFTER CLEARING DELAYED REQUESTS: '|| l_return_status, 2);
1362                      END IF;
1363 
1364                      ROLLBACK TO SAVEPOINT Schedule_Line;
1365                   END IF;
1366                EXCEPTION
1367                   WHEN OTHERS THEN
1368                      OE_Delayed_Requests_PVT.Clear_Request(l_return_status);
1369                      IF l_debug_level  > 0 THEN
1370                         oe_debug_pub.add('IN WHEN OTHERS '|| l_return_status, 2);
1371                      END IF;
1372                END;
1373 
1374                l_process_order := FALSE;
1375             ELSE -- (5174789)Return status is not success
1376                OE_DELAYED_REQUESTS_PVT.Clear_Request(l_return_status);
1377                l_process_order := FALSE;
1378             END IF;
1379 
1380          END IF;
1381       END LOOP; -- loop for each row of dynamic query.
1382 
1383       -- close the cursor
1384       DBMS_SQL.Close_Cursor(l_cursor_id);
1385 
1386    END IF; -- if parameters passed are null.
1387 
1388    OE_MSG_PUB.Save_Messages(p_request_id => to_number(l_request_id));
1389    --5166476
1390    --l_rec_success := l_rec_processed - l_rec_failure;
1391    l_rec_success :=0;
1392    l_rec_processed := 0;
1393    l_rec_failure := 0;
1394    l_index := OE_SCH_CONC_REQUESTS.oe_line_status_tbl.FIRST;
1395    WHILE l_index is not null
1396    LOOP
1397        --oe_debug_pub.add(  'R7 : '||l_index||' Status: '||oe_line_status_tbl(l_index), 1 ) ;
1398       IF OE_SCH_CONC_REQUESTS.oe_line_status_tbl(l_index) = 'Y' THEN
1399          l_rec_success := l_rec_success + 1;
1400       ELSE
1401          l_rec_failure := l_rec_failure + 1;
1402       END IF;
1403       l_rec_processed := l_rec_processed +1;
1404       l_index := OE_SCH_CONC_REQUESTS.oe_line_status_tbl.NEXT(l_index);
1405    END LOOP;
1406 
1407    FND_FILE.PUT_LINE(FND_FILE.LOG, 'Total Lines Selected : ' || l_rec_processed);
1408    FND_FILE.PUT_LINE(FND_FILE.LOG, 'Lines Failed : ' || l_rec_failure);
1409    FND_FILE.PUT_LINE(FND_FILE.LOG, 'Lines Successfully Processed : ' || l_rec_success);
1410 
1411    IF l_failure THEN
1412       RETCODE := 1;
1413    END IF;
1414 
1415 EXCEPTION
1416    WHEN FND_API.G_EXC_ERROR THEN
1417       fnd_file.put_line(FND_FILE.LOG,
1418                         'Error executing Scheduling, Exception:G_EXC_ERROR');
1419 
1420    WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
1421       fnd_file.put_line(FND_FILE.LOG,
1422                         'Error executing Scheduling, Exception:G_EXC_UNEXPECTED_ERROR');
1423 
1424    WHEN OTHERS THEN
1425       fnd_file.put_line(FND_FILE.LOG, 'Unexpected error in OE_SCH_CONC_REQUESTS.Request');
1426       fnd_file.put_line(FND_FILE.LOG, substr(sqlerrm, 1, 2000));
1427       DBMS_SQL.Close_Cursor(l_cursor_id);
1428 
1429 END Request;
1430 
1431 END OE_SCH_CONC_REQUESTS;