DBA Data[Home] [Help]

PACKAGE BODY: APPS.MSC_ATP_PF

Source


1 PACKAGE BODY MSC_ATP_PF AS
2 /* $Header: MSCPFATB.pls 120.16 2011/12/06 10:05:42 vjuluri ship $  */
3 
4 /*--------------------------------------------------------------------------
5 |  Begin Private Package Variables
6 +-------------------------------------------------------------------------*/
7 G_PKG_NAME              CONSTANT VARCHAR2(30)   := 'MSC_ATP_PF';
8 PG_DEBUG                VARCHAR2(1)             := NVL(FND_PROFILE.value('MSC_ATP_DEBUG'), 'N');
9 G_CAL_EXC_SET_ID        CONSTANT INTEGER        := -1;
10 G_USER_ID               CONSTANT NUMBER         := FND_GLOBAL.USER_ID;
11 MEMBER                  CONSTANT NUMBER         := 1;
12 FAMILY                  CONSTANT NUMBER         := 2;
13 
14 /*--------------------------------------------------------------------------
15 |  Begin Private Procedures Declaration
16 +-------------------------------------------------------------------------*/
17 
18 PROCEDURE Calc_Bucketed_Demands_Info(
19         p_req_date                      IN      DATE,
20         p_atf_date                      IN      DATE,
21         p_req_qty                       IN      NUMBER,
22         p_req_date_qty                  IN      NUMBER,
23         p_atf_date_qty                  IN      NUMBER,
24         x_bucketed_demands_rec          OUT     NOCOPY Bucketed_Demands_Rec,
25         x_return_status                 OUT     NOCOPY VARCHAR2
26 );
27 
28 PROCEDURE Insert_Bucketed_Demand(
29         p_atp_rec          		IN	MRP_ATP_PVT.AtpRec,
30         p_plan_id          		IN	NUMBER,
31         p_bucketed_demand_date          IN	DATE,
32         p_bucketed_demand_qty           IN	NUMBER,
33         p_display_flag                  IN	NUMBER,
34         p_parent_demand_id 		IN	NUMBER,
35         p_level                         IN      NUMBER,
36         p_refresh_number                IN      NUMBER,
37         x_return_status                 OUT     NOCOPY VARCHAR2
38 );
39 
40 PROCEDURE Move_PF_Bd_Dates(
41         p_plan_id                       IN	NUMBER,
42         p_parent_demand_id              IN	NUMBER,
43         p_old_demand_date               IN	DATE,
44         p_new_demand_date               IN	DATE,
45         p_atf_date                      IN      DATE,
46         x_return_status                 OUT     NOCOPY VARCHAR2
47 );
48 
49 PROCEDURE Get_Mat_Avail_Pf_Ods_Summ(
50         p_item_id                       IN      NUMBER,
51         p_org_id                        IN      NUMBER,
52         p_instance_id                   IN      NUMBER,
53         p_plan_id                       IN      NUMBER,
54         p_demand_class                  IN      VARCHAR2,
55         p_default_atp_rule_id           IN      NUMBER,
56         p_default_dmd_class             IN      VARCHAR2,
57         p_itf                           IN      DATE,
58         x_atp_dates                     OUT     NOCOPY MRP_ATP_PUB.date_arr,
59         x_atp_qtys                      OUT     NOCOPY MRP_ATP_PUB.number_arr,
60         x_return_status                 OUT     NOCOPY VARCHAR2
61 );
62 
63 PROCEDURE Get_Mat_Avail_Pf_Ods(
64         p_item_id                       IN      NUMBER,
65         p_org_id                        IN      NUMBER,
66         p_instance_id                   IN      NUMBER,
67         p_plan_id                       IN      NUMBER,
68         p_cal_code                      IN      VARCHAR2,
69         p_sysdate_seq_num               IN      NUMBER,
70         p_sys_next_date                 IN      DATE,
71         p_demand_class                  IN      VARCHAR2,
72         p_default_atp_rule_id           IN      NUMBER,
73         p_default_dmd_class             IN      VARCHAR2,
74         p_itf                           IN      DATE,
75         x_atp_dates                     OUT     NOCOPY MRP_ATP_PUB.date_arr,
76         x_atp_qtys                      OUT     NOCOPY MRP_ATP_PUB.number_arr,
77         x_return_status                 OUT     NOCOPY VARCHAR2
78 );
79 
80 PROCEDURE Get_Mat_Avail_Pf_Pds_Summ(
81         p_sr_member_id                  IN      NUMBER,
82         p_sr_family_id                  IN      NUMBER,
83         p_org_id                        IN      NUMBER,
84         p_instance_id                   IN      NUMBER,
85         p_plan_id                       IN      NUMBER,
86         p_itf                           IN      DATE,
87         p_refresh_number                IN      NUMBER,     -- For summary enhancement
88         x_atp_dates                     OUT     NOCOPY MRP_ATP_PUB.date_arr,
89         x_atp_qtys                      OUT     NOCOPY MRP_ATP_PUB.number_arr,
90         x_return_status                 OUT     NOCOPY VARCHAR2
91 );
92 
93 PROCEDURE Get_Mat_Avail_Pf_Pds(
94         p_sr_member_id                  IN      NUMBER,
95         p_sr_family_id                  IN      NUMBER,
96         p_org_id                        IN      NUMBER,
97         p_instance_id                   IN      NUMBER,
98         p_plan_id                       IN      NUMBER,
99         p_itf                           IN      DATE,
100         x_atp_dates                     OUT     NOCOPY MRP_ATP_PUB.date_arr,
101         x_atp_qtys                      OUT     NOCOPY MRP_ATP_PUB.number_arr,
102         x_return_status                 OUT     NOCOPY VARCHAR2
103 );
104 
105 PROCEDURE Get_Mat_Avail_Pf_Ods_Dtls (
106         p_item_id                       IN      NUMBER,
107         p_request_item_id               IN      NUMBER,
108         p_org_id                        IN      NUMBER,
109         p_instance_id                   IN      NUMBER,
110         p_plan_id                       IN      NUMBER,
111         p_cal_code                      IN      VARCHAR2,
112         p_sysdate_seq_num               IN      NUMBER,
113         p_sys_next_date                 IN      DATE,
114         p_demand_class                  IN      VARCHAR2,
115         p_default_atp_rule_id           IN      NUMBER,
116         p_default_dmd_class             IN      VARCHAR2,
117         p_itf                           IN      DATE,
118         p_level                         IN      NUMBER,
119         p_scenario_id                   IN      NUMBER,
120         p_identifier                    IN      NUMBER,
121         x_return_status                 OUT     NOCOPY VARCHAR2
122 );
123 
124 PROCEDURE Get_Mat_Avail_Pf_Pds_Dtls (
125         p_sr_member_id                  IN      NUMBER,
126         p_sr_family_id                  IN      NUMBER,
127         p_org_id                        IN      NUMBER,
128         p_instance_id                   IN      NUMBER,
129         p_plan_id                       IN      NUMBER,
130         p_itf                           IN      DATE,
131         p_level                         IN      NUMBER,
132         p_scenario_id                   IN      NUMBER,
133         p_identifier                    IN      NUMBER,
134         x_return_status                 OUT     NOCOPY VARCHAR2
135 );
136 
137 -- New private procedure added for forecast at PF
138 PROCEDURE Prepare_Demands_Stmt(
139 	p_share_partition               IN      VARCHAR2,
140 	p_demand_priority               IN      VARCHAR2,
141 	p_excess_supply_by_dc           IN      VARCHAR2,
142 	p_temp_table                    IN      VARCHAR2,
143 	p_alloc_temp_table              IN      VARCHAR2,
144 	p_parallel_degree               IN      NUMBER,
145 	x_sql_stmt                      OUT 	NOCOPY VARCHAR2,
146         x_return_status                 OUT     NOCOPY VARCHAR2
147 );
148 
149 -- New private procedure added for forecast at PF
150 PROCEDURE Prepare_Supplies_Stmt(
151 	p_share_partition               IN      VARCHAR2,
152 	p_demand_priority               IN      VARCHAR2,
153 	p_excess_supply_by_dc           IN      VARCHAR2,
154 	p_temp_table                    IN      VARCHAR2,
155 	p_alloc_temp_table              IN      VARCHAR2,
156 	p_parallel_degree               IN      NUMBER,
157 	x_sql_stmt                      OUT 	NOCOPY VARCHAR2,
158         x_return_status                 OUT     NOCOPY VARCHAR2
159 );
160 
161 /* Private procedures removed for forecast at PF **Will be deleted after code review
162 PROCEDURE Prepare_Demands_Stmt1(
163 	p_share_partition               IN      VARCHAR2,
164 	p_demand_priority               IN      VARCHAR2,
165 	p_excess_supply_by_dc           IN      VARCHAR2,
166 	p_temp_table                    IN      VARCHAR2,
167 	p_parallel_degree               IN      NUMBER,
168 	x_sql_stmt                      OUT 	NOCOPY VARCHAR2,
169         x_return_status                 OUT     NOCOPY VARCHAR2
170 );
171 
172 PROCEDURE Prepare_Demands_Stmt2(
173 	p_share_partition               IN      VARCHAR2,
174 	p_temp_table                    IN      VARCHAR2,
175 	p_parallel_degree               IN      NUMBER,
176 	x_sql_stmt                      OUT 	NOCOPY VARCHAR2,
177         x_return_status                 OUT     NOCOPY VARCHAR2
178 );
179 
180 PROCEDURE Prepare_Supplies_Stmt1(
181 	p_share_partition               IN      VARCHAR2,
182 	p_demand_priority               IN      VARCHAR2,
183 	p_excess_supply_by_dc           IN      VARCHAR2,
184 	p_temp_table                    IN      VARCHAR2,
185 	p_parallel_degree               IN      NUMBER,
186 	x_sql_stmt                      OUT 	NOCOPY VARCHAR2,
187         x_return_status                 OUT     NOCOPY VARCHAR2
188 );
189 
190 PROCEDURE Prepare_Supplies_Stmt2(
191 	p_share_partition               IN      VARCHAR2,
192 	p_temp_table                    IN      VARCHAR2,
193 	p_parallel_degree               IN      NUMBER,
194 	x_sql_stmt                      OUT 	NOCOPY VARCHAR2,
195         x_return_status                 OUT     NOCOPY VARCHAR2
196 );
197 */
198 
199 PROCEDURE Update_Pf_Display_Flag(
200 	p_plan_id                       IN      NUMBER,
201         x_return_status                 OUT     NOCOPY VARCHAR2
202 );
203 
204 /*--------------------------------------------------------------------------
205 |  End Private Procedures Declaration
206 +-------------------------------------------------------------------------*/
207 
208 /*--Add_PF_Bucketed_Demands-------------------------------------------------
209 |  o  This procedure is called from Add_Mat_Demand to add the bucketed
210 |       demands for the parent demand.
211 |  o  This procedure calls private procedure Insert_Bucketed_Demand to
212 |       add the bucketed demands
213 +-------------------------------------------------------------------------*/
214 PROCEDURE Add_PF_Bucketed_Demands(
215         p_atp_rec          		IN	MRP_ATP_PVT.AtpRec,
216         p_plan_id          		IN	NUMBER,
217         p_parent_demand_id 		IN	NUMBER,
218         p_refresh_number                IN      NUMBER,
219         x_return_status                 OUT     NOCOPY VARCHAR2
220 ) IS
221         -- local variables
222         l_bucketed_demands_rec          Bucketed_Demands_Rec;
223         l_req_date                      DATE;
224         l_atf_date                      DATE;
225         l_req_qty                       NUMBER;
226         l_req_date_qty                  NUMBER;
227         l_atf_date_qty                  NUMBER;
228         l_return_status                 VARCHAR2(1);
229 
230 BEGIN
231         IF PG_DEBUG in ('Y', 'C') THEN
232                 msc_sch_wb.atp_debug('*********Begin procedure Add_PF_Bucketed_Demands ********');
233                 msc_sch_wb.atp_debug('Add_PF_Bucketed_Demands: ' ||  'demand_source_type = ' ||p_atp_rec.demand_source_type);--cmro
234         END IF;
235 
236         -- Initializing API return code
237         x_return_status := FND_API.G_RET_STS_SUCCESS;
238 
239         l_req_date      := p_atp_rec.requested_ship_date;
240         l_atf_date      := p_atp_rec.atf_date;
241         l_req_qty       := nvl(p_atp_rec.quantity_ordered, 0);
242         l_req_date_qty  := greatest(nvl(p_atp_rec.requested_date_quantity, 0), 0);
243         /* Assumption is that atf date qty passed to this procedure can be null only
244            in scenario where we find req qty within atf*/
245         --bug3919371  When Atf date qty is null then
246         --            1. Treat requested_date_quantity as atf_date_qty if req date after atf.
247         --            2. Treat p_atp_rec.quantity_ordered as atf_date_qty if req date within atf.
248 
249         IF l_req_date > l_atf_date THEN
250            l_atf_date_qty  := greatest(nvl(p_atp_rec.atf_date_quantity, l_req_date_qty), 0);
251         ELSE
252            l_atf_date_qty  := greatest(nvl(p_atp_rec.atf_date_quantity, l_req_qty), 0);
253         END IF;
254 
255         Calc_Bucketed_Demands_Info(
256                 l_req_date,
257                 l_atf_date,
258                 l_req_qty,
259                 l_req_date_qty,
260                 l_atf_date_qty,
261                 l_bucketed_demands_rec,
262                 l_return_status
263         );
264 
265         IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
266                 IF PG_DEBUG in ('Y', 'C') THEN
267                         msc_sch_wb.atp_debug('Add_PF_Bucketed_Demands: ' || 'Error occured in procedure Calc_Bucketed_Demands_Info');
268                 END IF;
269                 x_return_status := FND_API.G_RET_STS_ERROR;
270                 return;
271         END IF;
272 
273         IF l_bucketed_demands_rec.insert_mem_bd = 'Y' and l_bucketed_demands_rec.mem_bd_qty > 0 THEN
274                 Insert_Bucketed_Demand(
275                         p_atp_rec,
276                         p_plan_id,
277                         l_bucketed_demands_rec.mem_bd_date,
278                         l_bucketed_demands_rec.mem_bd_qty,
279                         l_bucketed_demands_rec.mem_display_flag,
280                         p_parent_demand_id,
281                         member, -- member item bd
282                         p_refresh_number,
283                         l_return_status
284                 );
285                 IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
286                         IF PG_DEBUG in ('Y', 'C') THEN
287                                 msc_sch_wb.atp_debug('Add_PF_Bucketed_Demands: ' || 'Error occured in procedure Insert_Bucketed_Demand');
288                         END IF;
289                         x_return_status := FND_API.G_RET_STS_ERROR;
290                         return;
291                 END IF;
292         END IF;
293 
294         IF l_bucketed_demands_rec.insert_pf_bd = 'Y' and l_bucketed_demands_rec.pf_bd_qty > 0 THEN
295                 Insert_Bucketed_Demand(
296                         p_atp_rec,
297                         p_plan_id,
298                         l_bucketed_demands_rec.pf_bd_date,
299                         l_bucketed_demands_rec.pf_bd_qty,
300                         l_bucketed_demands_rec.pf_display_flag,
301                         p_parent_demand_id,
302                         family, -- family item bd
303                         p_refresh_number,
304                         l_return_status
305                 );
306                 IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
307                         IF PG_DEBUG in ('Y', 'C') THEN
308                                 msc_sch_wb.atp_debug('Add_PF_Bucketed_Demands: ' || 'Error occured in procedure Insert_Bucketed_Demand');
309                         END IF;
310                         x_return_status := FND_API.G_RET_STS_ERROR;
311                         return;
312                 END IF;
313         END IF;
314 
315         IF PG_DEBUG in ('Y', 'C') THEN
316                 msc_sch_wb.atp_debug('*********End of procedure Add_PF_Bucketed_Demands ********');
317         END IF;
318 
319 EXCEPTION
320         WHEN OTHERS THEN
321                 IF PG_DEBUG in ('Y', 'C') THEN
322                         msc_sch_wb.atp_debug('Add_PF_Bucketed_Demands: ' || 'Error occurred: ' || to_char(sqlcode) || ':' || SQLERRM);
323                 END IF;
324                 x_return_status := FND_API.G_RET_STS_ERROR;
325 
326 END Add_PF_Bucketed_Demands;
327 
328 /*--Calc_Bucketed_Demands_Info----------------------------------------------
329 |  o  This procedure calculates bucketed demands information
330 +-------------------------------------------------------------------------*/
331 PROCEDURE Calc_Bucketed_Demands_Info(
332         p_req_date              IN      DATE,
333         p_atf_date              IN      DATE,
334         p_req_qty               IN      NUMBER,
335         p_req_date_qty          IN      NUMBER,
336         p_atf_date_qty          IN      NUMBER,
337         x_bucketed_demands_rec  OUT     NOCOPY Bucketed_Demands_Rec,
338         x_return_status         OUT     NOCOPY VARCHAR2
339 ) IS
340         -- local variables
341 
342 BEGIN
343         IF PG_DEBUG in ('Y', 'C') THEN
344                 msc_sch_wb.atp_debug('*********Begin procedure Calc_Bucketed_Demands_Info ********');
345                 msc_sch_wb.atp_debug('Calc_Bucketed_Demands_Info: ' ||  'Req Date = ' ||to_char(p_req_date));
346                 msc_sch_wb.atp_debug('Calc_Bucketed_Demands_Info: ' ||  'ATF Date = ' ||to_char(p_atf_date));
347                 msc_sch_wb.atp_debug('Calc_Bucketed_Demands_Info: ' ||  'Req Qty = ' ||to_char(p_req_qty));
348                 msc_sch_wb.atp_debug('Calc_Bucketed_Demands_Info: ' ||  'Req Date Qty = ' ||to_char(p_req_date_qty));
349                 msc_sch_wb.atp_debug('Calc_Bucketed_Demands_Info: ' ||  'ATF Date Qty = ' ||to_char(p_atf_date_qty));
350         END IF;
351 
352         -- Initializing API return code
353         x_return_status := FND_API.G_RET_STS_SUCCESS;
354 
355         IF p_req_date <= p_atf_date THEN
356                 IF (p_req_date_qty >= p_req_qty) OR (p_atf_date_qty >= p_req_qty) THEN
357                         /* Request is satisfied using member item's supply within ATF.
358                            One bucketed demand would be inserted in this case*/
359                         x_bucketed_demands_rec.insert_mem_bd         := 'Y';
360                         x_bucketed_demands_rec.mem_display_flag      := 1;
361                         x_bucketed_demands_rec.mem_bd_date           := p_req_date;
362                         x_bucketed_demands_rec.mem_bd_qty            := p_req_qty;
363 
364                         x_bucketed_demands_rec.insert_pf_bd          := 'N';
365                 ELSE
366                         /* Request is satisfied using both member item's supply within ATF
367                            and family item's supply outside ATF.
368                            Two bucketed demands would be inserted in this case*/
369                         x_bucketed_demands_rec.insert_mem_bd         := 'Y';
370                         x_bucketed_demands_rec.mem_bd_date           := p_req_date;
371                         x_bucketed_demands_rec.mem_bd_qty            := p_atf_date_qty;
372 
373                         If x_bucketed_demands_rec.mem_bd_qty > 0 THEN
374                                 x_bucketed_demands_rec.mem_display_flag      := 1;
375                         ELSE
376                                 x_bucketed_demands_rec.pf_display_flag       := 1;
377                         END IF;
378 
379                         x_bucketed_demands_rec.insert_pf_bd          := 'Y';
380                         x_bucketed_demands_rec.pf_bd_date            := p_atf_date+1;
381                         x_bucketed_demands_rec.pf_bd_qty             := p_req_qty - p_atf_date_qty;
382 
383                 END IF;
384         ELSIF (p_req_date_qty >= p_req_qty) THEN
385                 IF (p_req_date_qty - p_atf_date_qty >= p_req_qty) THEN
386                         /* Request is satisfied using family item's supply outside ATF.
387                            One bucketed demand would be inserted in this case*/
388                         x_bucketed_demands_rec.insert_pf_bd          := 'Y';
389                         x_bucketed_demands_rec.pf_display_flag       := 1;
390                         x_bucketed_demands_rec.pf_bd_date            := p_req_date;
391                         x_bucketed_demands_rec.pf_bd_qty             := p_req_qty;
392 
393                         x_bucketed_demands_rec.insert_mem_bd         := 'N';
394                 ELSE
395                         /* Request is satisfied using both member item's supply within ATF
396                            and family item's supply outside ATF.
397                            Two bucketed demands would be inserted in this case*/
398                         x_bucketed_demands_rec.insert_mem_bd := 'Y';
399                         x_bucketed_demands_rec.mem_bd_date   := p_atf_date;
400                         x_bucketed_demands_rec.mem_bd_qty    := greatest(p_req_qty - (p_req_date_qty - p_atf_date_qty), 0);
401 
402                         x_bucketed_demands_rec.insert_pf_bd  := 'Y';
403                         x_bucketed_demands_rec.pf_bd_date    := p_req_date;
404                         x_bucketed_demands_rec.pf_bd_qty     := p_req_date_qty - p_atf_date_qty;
405 
406                         If x_bucketed_demands_rec.pf_bd_qty > 0 THEN
407                                 x_bucketed_demands_rec.pf_display_flag      := 1;
408                         ELSE
409                                 x_bucketed_demands_rec.mem_display_flag     := 1;
410                         END IF;
411                 END IF;
412         ELSE
413                 /* Request is satisfied using both member item's supply within ATF
414                    and family item's supply outside ATF.
415                    Two bucketed demands would be inserted in this case*/
416                 x_bucketed_demands_rec.insert_mem_bd := 'Y';
417                 x_bucketed_demands_rec.mem_bd_date   := p_atf_date;
418                 x_bucketed_demands_rec.mem_bd_qty    := p_atf_date_qty;
419 
420                 x_bucketed_demands_rec.insert_pf_bd  := 'Y';
421                 x_bucketed_demands_rec.pf_bd_date    := p_req_date;
422                 x_bucketed_demands_rec.pf_bd_qty     := p_req_qty - p_atf_date_qty;
423 
424                 If x_bucketed_demands_rec.pf_bd_qty > 0 THEN
425                         x_bucketed_demands_rec.pf_display_flag      := 1;
426                 ELSE
427                         x_bucketed_demands_rec.mem_display_flag     := 1;
428                 END IF;
429         END IF;
430 
431         IF PG_DEBUG in ('Y', 'C') THEN
432                 msc_sch_wb.atp_debug('**************  Bucketed Demands  *************');
433                 msc_sch_wb.atp_debug('*    Add member item bucketed demand = ' ||x_bucketed_demands_rec.insert_mem_bd);
434                 msc_sch_wb.atp_debug('*    Member Item BD Date             = ' ||to_char(x_bucketed_demands_rec.mem_bd_date));
435                 msc_sch_wb.atp_debug('*    Member Item BD Qty              = ' ||to_char(x_bucketed_demands_rec.mem_bd_qty));
436                 msc_sch_wb.atp_debug('*    Member Display Flag             = ' ||to_char(x_bucketed_demands_rec.mem_display_flag));
437                 msc_sch_wb.atp_debug('*    ');
438                 msc_sch_wb.atp_debug('*    Add family item bucketed demand = ' ||x_bucketed_demands_rec.insert_pf_bd);
439                 msc_sch_wb.atp_debug('*    Family Item BD Date             = ' ||to_char(x_bucketed_demands_rec.pf_bd_date));
440                 msc_sch_wb.atp_debug('*    Family Item BD Qty              = ' ||to_char(x_bucketed_demands_rec.pf_bd_qty));
441                 msc_sch_wb.atp_debug('*    Pf Display Flag                 = ' ||to_char(x_bucketed_demands_rec.pf_display_flag));
442                 msc_sch_wb.atp_debug('***********************************************');
443                 msc_sch_wb.atp_debug('*********End of procedure Calc_Bucketed_Demands_Info ********');
444         END IF;
445 
446 EXCEPTION
447         WHEN OTHERS THEN
448                 IF PG_DEBUG in ('Y', 'C') THEN
449                         msc_sch_wb.atp_debug('Calc_Bucketed_Demands_Info: ' || 'Error occurred: ' || to_char(sqlcode) || ':' || SQLERRM);
450                 END IF;
451                 x_return_status := FND_API.G_RET_STS_ERROR;
452 
453 END Calc_Bucketed_Demands_Info;
454 
455 /*--Update_PF_Bucketed_Demands----------------------------------------------
456 |  o  This procedure updates bucketed demands
457 +-------------------------------------------------------------------------*/
458 PROCEDURE Update_PF_Bucketed_Demands(
459         p_plan_id                       IN	NUMBER,
460         p_parent_demand_id              IN	NUMBER,
461         p_demand_date                   IN	DATE,
462         p_atf_date                      IN      DATE,
463         p_old_demand_date_qty           IN      NUMBER,
464         p_new_demand_date_qty           IN      NUMBER,
465         x_return_status                 OUT     NOCOPY VARCHAR2
466 ) IS
467         -- local variables
468         l_mem_bd_qty                    NUMBER;
469         l_mem_bd_decrement_qty          NUMBER;
470         l_pf_bd_decrement_qty           NUMBER;
471         l_update_mem_bd                 VARCHAR2(1) := 'N';
472         l_update_pf_bd                  VARCHAR2(1) := 'N';
473 
474 BEGIN
475         IF PG_DEBUG in ('Y', 'C') THEN
476                 msc_sch_wb.atp_debug('*********Begin procedure Update_PF_Bucketed_Demands ********');
477                 msc_sch_wb.atp_debug('Update_PF_Bucketed_Demands: ' ||  'p_plan_id = ' ||to_char(p_plan_id));
478                 msc_sch_wb.atp_debug('Update_PF_Bucketed_Demands: ' ||  'p_parent_demand_id = ' ||to_char(p_parent_demand_id));
479                 msc_sch_wb.atp_debug('Update_PF_Bucketed_Demands: ' ||  'p_demand_date = ' ||to_char(p_demand_date));
480                 msc_sch_wb.atp_debug('Update_PF_Bucketed_Demands: ' ||  'p_atf_date = ' ||to_char(p_atf_date));
481                 msc_sch_wb.atp_debug('Update_PF_Bucketed_Demands: ' ||  'p_old_demand_date_qty = ' ||to_char(p_old_demand_date_qty));
482                 msc_sch_wb.atp_debug('Update_PF_Bucketed_Demands: ' ||  'p_new_demand_date_qty = ' ||to_char(p_new_demand_date_qty));
483         END IF;
484 
485         -- Initializing API return code
486         x_return_status := FND_API.G_RET_STS_SUCCESS;
487 
488         IF p_demand_date <= p_atf_date THEN
489                 l_update_mem_bd := 'Y';
490                 l_mem_bd_qty := p_new_demand_date_qty;
491 
492                 l_update_pf_bd := 'D';
493                 IF PG_DEBUG in ('Y', 'C') THEN
494                         msc_sch_wb.atp_debug('*********  New Bucketed Demands  ********');
495                         msc_sch_wb.atp_debug('*    Member Item BD Date = ' ||to_char(p_demand_date));
496                         msc_sch_wb.atp_debug('*    Member Item BD Qty = ' ||to_char(l_mem_bd_qty));
497                         msc_sch_wb.atp_debug('*    ');
498                         msc_sch_wb.atp_debug('*    Family Item BD Qty = 0');
499                         msc_sch_wb.atp_debug('*************************************');
500                 END IF;
501         ELSE
502                 l_update_mem_bd := 'Y';
503                 l_mem_bd_qty := null;
504 
505                 l_update_pf_bd := 'Y';
506                 l_pf_bd_decrement_qty := GREATEST(nvl(p_old_demand_date_qty, 0)
507                                                   - nvl(p_new_demand_date_qty, 0), 0);
508                 IF PG_DEBUG in ('Y', 'C') THEN
509                         msc_sch_wb.atp_debug('************  New Bucketed Demands  **************');
510                         msc_sch_wb.atp_debug('*    Decremented Previous Family Item BD by ' ||to_char(l_pf_bd_decrement_qty));
511                         msc_sch_wb.atp_debug('**************************************************');
512                 END IF;
513         END IF;
514 
515         IF l_update_mem_bd = 'Y' THEN
516                 update  msc_alloc_demands
517                 set     allocated_quantity = nvl(l_mem_bd_qty, allocated_quantity),
518                         demand_quantity = nvl(p_new_demand_date_qty, demand_quantity)
519                 where   parent_demand_id = p_parent_demand_id
520                 --bug3693892 added trunc
521                 and     trunc(demand_date) <= p_atf_date
522                 and     plan_id = p_plan_id;
523         END IF;
524 
525         IF l_update_pf_bd = 'Y' THEN
526                 update  msc_alloc_demands
527                 set     allocated_quantity = allocated_quantity - l_pf_bd_decrement_qty,
528                         demand_quantity = nvl(p_new_demand_date_qty, demand_quantity)
529                 where   parent_demand_id = p_parent_demand_id
530                 --bug3693892 added trunc
531                 and     trunc(demand_date) > p_atf_date
532                 and     plan_id = p_plan_id;
533         ELSIF l_update_pf_bd = 'D' THEN
534                 delete  msc_alloc_demands
535                 where   parent_demand_id = p_parent_demand_id
536                 --bug3693892 added trunc
537                 and     trunc(demand_date) > p_atf_date
538                 and     plan_id = p_plan_id;
539         END IF;
540 
541         IF PG_DEBUG in ('Y', 'C') THEN
542                 msc_sch_wb.atp_debug('*********End of procedure Update_PF_Bucketed_Demands ********');
543         END IF;
544 
545 EXCEPTION
546         WHEN OTHERS THEN
547                 IF PG_DEBUG in ('Y', 'C') THEN
548                         msc_sch_wb.atp_debug('Update_PF_Bucketed_Demands: ' || 'Error occurred: ' || to_char(sqlcode) || ':' || SQLERRM);
549                 END IF;
550                 x_return_status := FND_API.G_RET_STS_ERROR;
551 
552 END Update_PF_Bucketed_Demands;
553 
554 /*--Increment_Bucketed_Demands_Qty------------------------------------------
555 |  o  This procedure increments member item's bucketed demand by
556 |       p_mem_bd_increment_qty and family item's bucketed demand by
557 |       p_pf_bd_increment_qty.
558 |  o  This procedure calls private procedure Insert_Bucketed_Demand if
559 |       there is no existing bucketed demand.
560 +-------------------------------------------------------------------------*/
561 PROCEDURE Increment_Bucketed_Demands_Qty(
562         p_atp_rec               IN OUT  NOCOPY MRP_ATP_PVT.AtpRec,
563         p_plan_id               IN	NUMBER,
564         p_parent_demand_id      IN	NUMBER,
565 --        p_mem_bd_increment_qty  IN	NUMBER,
566 --        p_pf_bd_increment_qty   IN	NUMBER,
567         x_return_status         OUT     NOCOPY VARCHAR2
568 ) IS
569         -- local variables
570         l_bucketed_demands_rec          Bucketed_Demands_Rec;
571         l_req_date                      DATE;
572         l_atf_date                      DATE;
573         l_req_qty                       NUMBER;
574         l_req_date_qty                  NUMBER;
575         l_atf_date_qty                  NUMBER;
576         l_return_status                 VARCHAR2(1);
577 
578 BEGIN
579         IF PG_DEBUG in ('Y', 'C') THEN
580                 msc_sch_wb.atp_debug('*********Begin procedure Increment_Bucketed_Demands_Qty ********');
581                 msc_sch_wb.atp_debug('Increment_Bucketed_Demands_Qty: ' ||  'p_plan_id = ' ||to_char(p_plan_id));
582                 msc_sch_wb.atp_debug('Increment_Bucketed_Demands_Qty: ' ||  'p_parent_demand_id = ' ||to_char(p_parent_demand_id));
583         END IF;
584 
585         -- Initializing API return code
586         x_return_status := FND_API.G_RET_STS_SUCCESS;
587 
588         l_req_date      := p_atp_rec.requested_ship_date;
589         l_atf_date      := p_atp_rec.atf_date;
590         l_req_qty       := nvl(p_atp_rec.quantity_ordered, 0);
591         l_req_date_qty  := greatest(nvl(p_atp_rec.requested_date_quantity, 0), 0);
592         /* Assumption is that atf date qty passed to this procedure can be null only
593            in scenario where we find req qty within atf*/
594         --bug3919371  When Atf date qty is null then
595         --            1. Treat requested_date_quantity as atf_date_qty if req date after atf.
596         --            2. Treat p_atp_rec.quantity_ordered as atf_date_qty if req date within atf.
597 
598         IF l_req_date > l_atf_date THEN
599            l_atf_date_qty  := greatest(nvl(p_atp_rec.atf_date_quantity,l_req_date_qty), 0);
600         ELSE
601            l_atf_date_qty  := greatest(nvl(p_atp_rec.atf_date_quantity, l_req_qty), 0);
602         END IF;
603 
604         Calc_Bucketed_Demands_Info(
605                 l_req_date,
606                 l_atf_date,
607                 l_req_qty,
608                 l_req_date_qty,
609                 l_atf_date_qty,
610                 l_bucketed_demands_rec,
611                 l_return_status
612         );
613 
614         IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
615                 IF PG_DEBUG in ('Y', 'C') THEN
616                         msc_sch_wb.atp_debug('Increment_Bucketed_Demands_Qty: ' || 'Error occured in procedure Calc_Bucketed_Demands_Info');
617                 END IF;
618                 x_return_status := FND_API.G_RET_STS_ERROR;
619                 return;
620         END IF;
621 
622         IF nvl(l_bucketed_demands_rec.mem_bd_qty, 0) = 0 THEN
623                 IF PG_DEBUG in ('Y', 'C') THEN
624                         msc_sch_wb.atp_debug('Increment_Bucketed_Demands_Qty: Deleting member item bucketed demand...');
625                 END IF;
626                 delete  msc_alloc_demands
627                 where   parent_demand_id = p_parent_demand_id
628                 and     inventory_item_id = p_atp_rec.request_item_id
629                 and     plan_id = p_plan_id;
630         ELSIF l_bucketed_demands_rec.mem_bd_qty > 0 THEN
631                 update  msc_alloc_demands
632                 set     allocated_quantity = l_bucketed_demands_rec.mem_bd_qty,
633                         demand_quantity = l_req_qty,
634                         --bug3697365 added timestamp also
635                         demand_date = trunc(l_bucketed_demands_rec.mem_bd_date) + MSC_ATP_PVT.G_END_OF_DAY,
636                         original_demand_date = trunc(l_req_date) + MSC_ATP_PVT.G_END_OF_DAY,
637                         Pf_Display_Flag = l_bucketed_demands_rec.mem_display_flag
638                 where   parent_demand_id = p_parent_demand_id
639                 and     inventory_item_id = p_atp_rec.request_item_id
640                 and     plan_id = p_plan_id;
641 
642                 IF SQL%NOTFOUND THEN
643                         IF PG_DEBUG in ('Y', 'C') THEN
644                                 msc_sch_wb.atp_debug('Increment_Bucketed_Demands_Qty: Member item bucketed demand not found. Inserting now...');
645                         END IF;
646                         Insert_Bucketed_Demand(
647                                 p_atp_rec,
648                                 p_plan_id,
649                                 l_bucketed_demands_rec.mem_bd_date,
650                                 l_bucketed_demands_rec.mem_bd_qty,
651                                 l_bucketed_demands_rec.mem_display_flag,
652                                 p_parent_demand_id,
653                                 member, -- member item bd
654                                 p_atp_rec.refresh_number,
655                                 l_return_status
656                         );
657                         IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
658                                 IF PG_DEBUG in ('Y', 'C') THEN
659                                         msc_sch_wb.atp_debug('Increment_Bucketed_Demands_Qty: ' || 'Error occured in procedure Insert_Bucketed_Demand');
660                                 END IF;
661                                 x_return_status := FND_API.G_RET_STS_ERROR;
662                                 return;
663                         END IF;
664                 END IF;
665         END IF;
666 
667         IF nvl(l_bucketed_demands_rec.pf_bd_qty,0) = 0 THEN
668                 IF PG_DEBUG in ('Y', 'C') THEN
669                         msc_sch_wb.atp_debug('Increment_Bucketed_Demands_Qty: Deleting family item bucketed demand...');
670                 END IF;
671                 delete  msc_alloc_demands
672                 where   parent_demand_id = p_parent_demand_id
673                 and     inventory_item_id = p_atp_rec.inventory_item_id
674                 and     plan_id = p_plan_id;
675         ELSIF l_bucketed_demands_rec.pf_bd_qty > 0 THEN
676                 update  msc_alloc_demands
677                 set     allocated_quantity = l_bucketed_demands_rec.pf_bd_qty,
678                         demand_quantity = l_req_qty,
679                         --bug3697365 added timestamp also
680                         demand_date = trunc(l_bucketed_demands_rec.pf_bd_date) + MSC_ATP_PVT.G_END_OF_DAY,
681                         original_demand_date = trunc(l_req_date) + MSC_ATP_PVT.G_END_OF_DAY,
682                         Pf_Display_Flag = l_bucketed_demands_rec.pf_display_flag
683                 where   parent_demand_id = p_parent_demand_id
684                 and     inventory_item_id = p_atp_rec.inventory_item_id
685                 and     plan_id = p_plan_id;
686 
687                 IF SQL%NOTFOUND THEN
688                         IF PG_DEBUG in ('Y', 'C') THEN
689                                 msc_sch_wb.atp_debug('Increment_Bucketed_Demands_Qty: Family item bucketed demand not found. Inserting now...');
690                         END IF;
691                         Insert_Bucketed_Demand(
692                                 p_atp_rec,
693                                 p_plan_id,
694                                 l_bucketed_demands_rec.pf_bd_date,
695                                 l_bucketed_demands_rec.pf_bd_qty,
696                                 l_bucketed_demands_rec.pf_display_flag,
697                                 p_parent_demand_id,
698                                 family, -- family item bd
699                                 p_atp_rec.refresh_number,
700                                 l_return_status
701                         );
702                         IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
703                                 IF PG_DEBUG in ('Y', 'C') THEN
704                                         msc_sch_wb.atp_debug('Increment_Bucketed_Demands_Qty: ' || 'Error occured in procedure Insert_Bucketed_Demand');
705                                 END IF;
706                                 x_return_status := FND_API.G_RET_STS_ERROR;
707                                 return;
708                         END IF;
709                 END IF;
710         END IF;
711 
712         IF PG_DEBUG in ('Y', 'C') THEN
713                 msc_sch_wb.atp_debug('*********End of procedure Increment_Bucketed_Demands_Qty ********');
714         END IF;
715 
716 EXCEPTION
717         WHEN OTHERS THEN
718                 IF PG_DEBUG in ('Y', 'C') THEN
719                         msc_sch_wb.atp_debug('Increment_Bucketed_Demands_Qty: ' || 'Error occurred: ' || to_char(sqlcode) || ':' || SQLERRM);
720                 END IF;
721                 x_return_status := FND_API.G_RET_STS_ERROR;
722 
723 END Increment_Bucketed_Demands_Qty;
724 
725 /*--Move_PF_Bucketed_Demands------------------------------------------------
726 |  o  This procedure moves bucketed demands dates and quantities.
727 |  o  If p_atf_date_quantity passed is null it means only move the dates
728 +-------------------------------------------------------------------------*/
729 PROCEDURE Move_PF_Bucketed_Demands(
730         p_plan_id               IN	NUMBER,
731         p_parent_demand_id      IN	NUMBER,
732         p_old_demand_date       IN	DATE,
733         p_new_demand_date       IN	DATE,
734         p_demand_qty            IN      NUMBER,
735         p_new_demand_date_qty   IN      NUMBER,
736         p_atf_date              IN      DATE,
737         p_atf_date_qty          IN      NUMBER,
738         x_return_status         OUT     NOCOPY VARCHAR2,
739         p_bkwd_pass_atf_date_qty IN      NUMBER, --bug3397904
740         p_atp_rec               IN      MRP_ATP_PVT.AtpRec := NULL
741 ) IS
742         -- local variables
743         l_update_mem_bd                 VARCHAR(1) :='N';
744         l_update_pf_bd                  VARCHAR(1) :='N';
745         l_mem_bd_date                   DATE;
746         l_pf_bd_date                    DATE;
747         l_mem_bd_qty                    NUMBER :=0;--bug3397904
748         l_pf_bd_qty                     NUMBER :=0;--bug3397904
749         l_mem_display_flag              NUMBER;
750         l_pf_display_flag               NUMBER;
751         l_return_status                 VARCHAR2(1);
752         l_atp_rec                       MRP_ATP_PVT.AtpRec := p_atp_rec;
753         l_demand_qty                    NUMBER; --bug3397904
754         l_new_demand_date_qty           NUMBER; --bug3397904
755         l_atf_date_qty                  NUMBER; --bug3397904
756 
757 BEGIN
758         IF PG_DEBUG in ('Y', 'C') THEN
759                 msc_sch_wb.atp_debug('*********Begin procedure Move_PF_Bucketed_Demands ********');
760                 msc_sch_wb.atp_debug('Move_PF_Bucketed_Demands: ' ||  'p_plan_id = ' ||to_char(p_plan_id));
761                 msc_sch_wb.atp_debug('Move_PF_Bucketed_Demands: ' ||  'p_parent_demand_id = ' ||to_char(p_parent_demand_id));
762                 msc_sch_wb.atp_debug('Move_PF_Bucketed_Demands: ' ||  'p_old_demand_date = ' ||to_char(p_old_demand_date));
763                 msc_sch_wb.atp_debug('Move_PF_Bucketed_Demands: ' ||  'p_new_demand_date = ' ||to_char(p_new_demand_date));
764                 msc_sch_wb.atp_debug('Move_PF_Bucketed_Demands: ' ||  'p_demand_qty = ' ||to_char(p_demand_qty));
765                 msc_sch_wb.atp_debug('Move_PF_Bucketed_Demands: ' ||  'p_new_demand_date_qty = ' ||to_char(p_new_demand_date_qty));
766                 msc_sch_wb.atp_debug('Move_PF_Bucketed_Demands: ' ||  'p_atf_date = ' ||to_char(p_atf_date));
767                 msc_sch_wb.atp_debug('Move_PF_Bucketed_Demands: ' ||  'p_atf_date_qty = ' ||to_char(p_atf_date_qty));
768         END IF;
769 
770         -- Initializing API return code
771        x_return_status := FND_API.G_RET_STS_SUCCESS;
772 
773         --bug3555084 start
774        IF p_parent_demand_id is not null THEN
775         IF upper(p_atp_rec.override_flag) = 'Y' THEN
776         --IF p_old_demand_date = p_new_demand_date THEN
777                 --This condition was before for override case
778                 --now checking by flag as now both dates can be different.
779                 /*
780                 IF PG_DEBUG in ('Y', 'C') THEN
781                         msc_sch_wb.atp_debug('Move_PF_Bucketed_Demands: No need to move bucketed demand dates. Update qtys');
782                 END IF;
783                 IF (p_atf_date_qty is NULL) THEN
784                         IF PG_DEBUG in ('Y', 'C') THEN
785                                 msc_sch_wb.atp_debug('Move_PF_Bucketed_Demands: No need to update qtys');
786                         END IF;
787                 ELSIF p_old_demand_date <= p_atf_date THEN
788                         update  msc_alloc_demands
789                         set     allocated_quantity = p_demand_qty,
790                                 demand_quantity = p_demand_qty
791                         where   parent_demand_id = p_parent_demand_id
792                         and     demand_date <= p_atf_date
793                         and     plan_id = p_plan_id;
794 
795                         IF PG_DEBUG in ('Y', 'C') THEN
796                                 msc_sch_wb.atp_debug('*********  New Bucketed Demand Qtys  ********');
797                                 msc_sch_wb.atp_debug('*    Member Item BD Qty = ' || nvl(p_atf_date_qty, 0));
798                                 msc_sch_wb.atp_debug('*    ');
799                                 msc_sch_wb.atp_debug('*    Family Item BD Qty = ' || (p_demand_qty - nvl(p_atf_date_qty, 0)));
800                                 msc_sch_wb.atp_debug('*********************************************');
801                         END IF;
802                 ELSE
803                         update  msc_alloc_demands
804                         set     allocated_quantity = nvl(p_atf_date_qty, 0),
805                                 demand_quantity = p_demand_qty
806                         where   parent_demand_id = p_parent_demand_id
807                         and     demand_date <= p_atf_date
808                         and     plan_id = p_plan_id;
809 
810                         update  msc_alloc_demands
811                         set     allocated_quantity = p_demand_qty - nvl(p_atf_date_qty, 0),
812                                 demand_quantity = p_demand_qty
813                         where   parent_demand_id = p_parent_demand_id
814                         and     demand_date > p_atf_date
815                         and     plan_id = p_plan_id;
816 
817                         IF PG_DEBUG in ('Y', 'C') THEN
818                                 msc_sch_wb.atp_debug('*********  New Bucketed Demand Qtys  ********');
819                                 msc_sch_wb.atp_debug('*    Member Item BD Qty = ' || nvl(p_atf_date_qty, 0));
820                                 msc_sch_wb.atp_debug('*    ');
821                                 msc_sch_wb.atp_debug('*    Family Item BD Qty = ' || (p_demand_qty - nvl(p_atf_date_qty, 0)));
822                                 msc_sch_wb.atp_debug('*********************************************');
823                         END IF;
824                 END IF;*/
825                 IF (p_new_demand_date <= p_atf_date) AND
826                    (NVL(p_atf_date_qty,p_demand_qty) >= p_demand_qty) THEN
827 
828                         l_update_mem_bd         := 'Y';
829                         l_mem_display_flag      := 1;
830                         l_mem_bd_date           := p_new_demand_date;
831                         l_mem_bd_qty            := p_demand_qty;
832 
833                         IF PG_DEBUG in ('Y', 'C') THEN
834                            msc_sch_wb.atp_debug('Move_PF_Bucketed_Demands: Inside IF');
835                         END IF;
836 
837                 ELSIF (p_new_demand_date <= p_atf_date) AND (p_atf_date_qty > 0) THEN
838 
839                         l_update_mem_bd         := 'Y';
840                         l_mem_display_flag      := 1;
841                         l_mem_bd_date           := p_new_demand_date;
842                         l_mem_bd_qty            := p_atf_date_qty;
843 
844                         l_update_pf_bd          := 'Y';
845                         l_pf_display_flag       := null;
846                         l_pf_bd_date            := p_atf_date + 1;
847                         l_pf_bd_qty             := p_demand_qty - p_atf_date_qty;
848 
849                         IF PG_DEBUG in ('Y', 'C') THEN
850                            msc_sch_wb.atp_debug('Move_PF_Bucketed_Demands: p_new_demand_date <= p_atf_date');
851                         END IF;
852 
853                 ELSIF (p_new_demand_date <= p_atf_date)  THEN
854 
855                         l_update_pf_bd          := 'Y';
856                         l_pf_display_flag       := 1;
857                         l_pf_bd_date            := p_atf_date + 1;
858                         l_pf_bd_qty             := p_demand_qty;
859 
860                 --8604062 RSD/DSD are outside ATF and ATF date quantity is 0. We should not be updating member demand.
861                 ELSIF (NVL(p_atf_date_qty,0) = 0) THEN
862 
863                         l_update_pf_bd          := 'Y';
864                         l_pf_display_flag       := 1;
865                         l_pf_bd_date            := p_new_demand_date;
866                         l_pf_bd_qty             := p_demand_qty;
867                 ELSE
868                         l_update_mem_bd         := 'Y';
869                         l_mem_display_flag      := null;
870                         l_mem_bd_date           := p_atf_date;
871                         l_mem_bd_qty            := p_atf_date_qty;
872 
873                         l_update_pf_bd          := 'Y';
874                         l_pf_display_flag       := 1;
875                         l_pf_bd_date            := p_new_demand_date;
876                         l_pf_bd_qty             := p_demand_qty - p_atf_date_qty;
877 
878                         IF PG_DEBUG in ('Y', 'C') THEN
879                            msc_sch_wb.atp_debug('Move_PF_Bucketed_Demands: inside else');
880                         END IF;
881                 END IF;
882 
883                 IF PG_DEBUG in ('Y', 'C') THEN
884                         msc_sch_wb.atp_debug('*********  Bucketed Demands  ********');
885                         msc_sch_wb.atp_debug('*    Update member item bucketed demand = ' ||l_update_mem_bd);
886                         msc_sch_wb.atp_debug('*    l_mem_bd_date = ' ||to_char(l_mem_bd_date));
887                         msc_sch_wb.atp_debug('*    l_mem_bd_qty = ' ||to_char(l_mem_bd_qty));
888                         msc_sch_wb.atp_debug('*    l_mem_display_flag = ' ||to_char(l_mem_display_flag));
889                         msc_sch_wb.atp_debug('*    ');
890                         msc_sch_wb.atp_debug('*    Update family item bucketed demand = ' ||l_update_pf_bd);
891                         msc_sch_wb.atp_debug('*    l_pf_bd_date = ' ||to_char(l_pf_bd_date));
892                         msc_sch_wb.atp_debug('*    l_pf_bd_qty = ' ||to_char(l_pf_bd_qty));
893                         msc_sch_wb.atp_debug('*    l_pf_display_flag = ' ||to_char(l_pf_display_flag));
894                         msc_sch_wb.atp_debug('*************************************');
895                 END IF;
896 
897                 IF l_update_mem_bd = 'Y'  THEN
898                         update  msc_alloc_demands
899                                 --bug3697365 added timestamp also
900                         set     demand_date = trunc(l_mem_bd_date) + MSC_ATP_PVT.G_END_OF_DAY,
901                                 allocated_quantity = l_mem_bd_qty,
902                                 demand_quantity = p_demand_qty,
903                                 pf_display_flag = l_mem_display_flag,
904                                 --bug3697365 added timestamp also
905                                 original_demand_date = trunc(p_new_demand_date) + MSC_ATP_PVT.G_END_OF_DAY
906                         where   parent_demand_id = p_parent_demand_id
907                         --bug3693892 added trunc
908                         and     trunc(demand_date) <= p_atf_date
909                         and     plan_id = p_plan_id;
910 
911                         IF (SQL%NOTFOUND) and (nvl(l_mem_bd_qty, 0) > 0) and (l_atp_rec.inventory_item_id is NOT NULL) THEN
912                                 IF PG_DEBUG in ('Y', 'C') THEN
913                                         msc_sch_wb.atp_debug('Move_PF_Bucketed_Demands: Member item bucketed demand not found. Inserting now...');
914                                 END IF;
915                                 l_atp_rec.quantity_ordered := p_demand_qty;
916                                 l_atp_rec.requested_ship_date := p_new_demand_date;
917                                 Insert_Bucketed_Demand(
918                                         l_atp_rec,
919                                         p_plan_id,
920                                         l_mem_bd_date,
921                                         l_mem_bd_qty,
922                                         l_mem_display_flag,
923                                         p_parent_demand_id,
924                                         member, -- member item bd
925                                         l_atp_rec.refresh_number,
926                                         l_return_status
927                                 );
928                                 IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
929                                         IF PG_DEBUG in ('Y', 'C') THEN
930                                                 msc_sch_wb.atp_debug('Move_PF_Bucketed_Demands: ' || 'Error occured in procedure Insert_Bucketed_Demand');
931                                         END IF;
932                                         x_return_status := FND_API.G_RET_STS_ERROR;
933                                         return;
934                                 END IF;
935                         END IF;
936                 END IF;
937 
938                 IF l_update_pf_bd = 'Y' THEN
939                         update  msc_alloc_demands
940                                 --bug3697365 added timestamp also
941                         set     demand_date = trunc(l_pf_bd_date) + MSC_ATP_PVT.G_END_OF_DAY,
942                                 allocated_quantity = l_pf_bd_qty,
943                                 demand_quantity = p_demand_qty,
944                                 pf_display_flag = l_pf_display_flag,
945                                 --bug3697365 added timestamp also
946                                 original_demand_date = trunc(p_new_demand_date) + MSC_ATP_PVT.G_END_OF_DAY
947                         where   parent_demand_id = p_parent_demand_id
948                         --bug3693892 added trunc
949                         and     trunc(demand_date) > p_atf_date
950                         and     plan_id = p_plan_id;
951 
952                         IF (SQL%NOTFOUND) and (nvl(l_pf_bd_qty, 0) > 0) and (l_atp_rec.inventory_item_id is NOT NULL) THEN
953                                 IF PG_DEBUG in ('Y', 'C') THEN
954                                         msc_sch_wb.atp_debug('Move_PF_Bucketed_Demands: Family item bucketed demand not found. Inserting now...');
955                                 END IF;
956                                 l_atp_rec.quantity_ordered := p_demand_qty;
957                                 l_atp_rec.requested_ship_date := p_new_demand_date;
958                                 Insert_Bucketed_Demand(
959                                         l_atp_rec,
960                                         p_plan_id,
961                                         l_pf_bd_date,
962                                         l_pf_bd_qty,
963                                         l_pf_display_flag,
964                                         p_parent_demand_id,
965                                         family, -- family item bd
966                                         l_atp_rec.refresh_number,
967                                         l_return_status
968                                 );
969                                 IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
970                                         IF PG_DEBUG in ('Y', 'C') THEN
971                                                 msc_sch_wb.atp_debug('Move_PF_Bucketed_Demands: ' || 'Error occured in procedure Insert_Bucketed_Demand');
972                                         END IF;
973                                         x_return_status := FND_API.G_RET_STS_ERROR;
974                                         return;
975                                 END IF;
976                         END IF;
977                 END IF;
978                 --bug3555084 end
979         ELSIF (p_atf_date_qty is NULL) THEN
980                 Move_PF_Bd_Dates(
981                         p_plan_id,
982                         p_parent_demand_id,
983                         p_old_demand_date,
984                         p_new_demand_date,
985                         p_atf_date,
986                         l_return_status
987                 );
988                 IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
989                         IF PG_DEBUG in ('Y', 'C') THEN
990                                 msc_sch_wb.atp_debug('Move_PF_Bucketed_Demands: ' || 'Error occured in procedure Move_PF_Bd_Dates');
991                         END IF;
992                         x_return_status := FND_API.G_RET_STS_ERROR;
993                         return;
994                 END IF;
995         ELSE
996                 l_demand_qty := p_demand_qty - nvl(p_bkwd_pass_atf_date_qty,0); --bug3397904
997                 l_new_demand_date_qty := p_new_demand_date_qty - nvl(p_bkwd_pass_atf_date_qty,0); --bug3397904
998                 l_atf_date_qty := p_atf_date_qty - nvl(p_bkwd_pass_atf_date_qty,0); --bug3397904
999 
1000                 IF PG_DEBUG in ('Y', 'C') THEN  --bug3397904 start
1001                         msc_sch_wb.atp_debug('*********  Bucketed Demands  ********');
1002                         msc_sch_wb.atp_debug('*    Backward pass atf date qty = ' ||to_char(p_bkwd_pass_atf_date_qty));
1003                         msc_sch_wb.atp_debug('*    l_new_demand_date_qty = ' ||to_char(l_new_demand_date_qty));
1004                         msc_sch_wb.atp_debug('*    l_atf_date_qty = ' ||to_char(l_atf_date_qty));
1005                         msc_sch_wb.atp_debug('*    ');
1006                 END IF; --bug3397904 end
1007                 IF p_new_demand_date <= p_atf_date THEN
1008                         /* Move member item's bucketed demand*/
1009                         l_update_mem_bd         := 'Y';
1010                         l_mem_display_flag      := 1;
1011                         l_mem_bd_date           := p_new_demand_date;
1012                         l_mem_bd_qty            := l_demand_qty;
1013                 ELSIF (l_new_demand_date_qty - l_atf_date_qty >= l_demand_qty) THEN
1014                         /* Delete member item's bucketed demand*/
1015                         IF p_bkwd_pass_atf_date_qty <> 0 THEN --bug3397904 start
1016                          l_update_mem_bd         := 'Y';
1017                          l_mem_display_flag      := null;
1018                          l_mem_bd_date           := p_atf_date;
1019                          l_mem_bd_qty            := 0;
1020                         ELSE
1021                          l_update_mem_bd         := 'D';
1022                         END IF;                              --bug3397904 end
1023 
1024                         /* Move family item's bucketed demand*/
1025                         l_update_pf_bd          := 'Y';
1026                         l_pf_display_flag       := 1;
1027                         l_pf_bd_date            := p_new_demand_date;
1028                         l_pf_bd_qty             := l_demand_qty;
1029                 ELSE
1030                         /* Move member item's bucketed demand*/
1031                         l_update_mem_bd         := 'Y';
1032                         l_mem_display_flag      := null;
1033                         l_mem_bd_date           := p_atf_date;
1034                         l_mem_bd_qty            := l_demand_qty - (l_new_demand_date_qty - l_atf_date_qty);
1035 
1036                         /* Move family item's bucketed demand*/
1037                         l_update_pf_bd          := 'Y';
1038                         l_pf_display_flag       := 1;
1039                         l_pf_bd_date            := p_new_demand_date;
1040                         l_pf_bd_qty             := l_new_demand_date_qty - l_atf_date_qty;
1041                 END IF;
1042 
1043                 l_mem_bd_qty := l_mem_bd_qty + p_bkwd_pass_atf_date_qty; --bug3397904
1044 
1045                 IF PG_DEBUG in ('Y', 'C') THEN
1046                         msc_sch_wb.atp_debug('*********  Bucketed Demands  ********');
1047                         msc_sch_wb.atp_debug('*    Update member item bucketed demand = ' ||l_update_mem_bd);
1048                         msc_sch_wb.atp_debug('*    l_mem_bd_date = ' ||to_char(l_mem_bd_date));
1049                         msc_sch_wb.atp_debug('*    l_mem_bd_qty = ' ||to_char(l_mem_bd_qty));
1050                         msc_sch_wb.atp_debug('*    l_mem_display_flag = ' ||to_char(l_mem_display_flag));
1051                         msc_sch_wb.atp_debug('*    ');
1052                         msc_sch_wb.atp_debug('*    Update family item bucketed demand = ' ||l_update_pf_bd);
1053                         msc_sch_wb.atp_debug('*    l_pf_bd_date = ' ||to_char(l_pf_bd_date));
1054                         msc_sch_wb.atp_debug('*    l_pf_bd_qty = ' ||to_char(l_pf_bd_qty));
1055                         msc_sch_wb.atp_debug('*    l_pf_display_flag = ' ||to_char(l_pf_display_flag));
1056                         msc_sch_wb.atp_debug('*************************************');
1057                 END IF;
1058 
1059                 IF l_update_mem_bd = 'Y' THEN
1060                         update  msc_alloc_demands
1061                                 --bug3697365 added timestamp also
1062                         set     demand_date = trunc(l_mem_bd_date) + MSC_ATP_PVT.G_END_OF_DAY,
1063                                 allocated_quantity = l_mem_bd_qty,
1064                                 demand_quantity = p_demand_qty,
1065                                 pf_display_flag = l_mem_display_flag,
1066                                 --bug3697365 added timestamp also
1067                                 original_demand_date = trunc(p_new_demand_date) + MSC_ATP_PVT.G_END_OF_DAY
1068                         where   parent_demand_id = p_parent_demand_id
1069                         --bug3693892 added trunc
1070                         and     trunc(demand_date) <= p_atf_date
1071                         and     plan_id = p_plan_id;
1072 
1073                         IF (SQL%NOTFOUND) and (nvl(l_mem_bd_qty, 0) > 0) and (l_atp_rec.inventory_item_id is NOT NULL) THEN
1074                                 IF PG_DEBUG in ('Y', 'C') THEN
1075                                         msc_sch_wb.atp_debug('Move_PF_Bucketed_Demands: Member item bucketed demand not found. Inserting now...');
1076                                 END IF;
1077                                 l_atp_rec.quantity_ordered := p_demand_qty;
1078                                 l_atp_rec.requested_ship_date := p_new_demand_date;
1079                                 Insert_Bucketed_Demand(
1080                                         l_atp_rec,
1081                                         p_plan_id,
1082                                         l_mem_bd_date,
1083                                         l_mem_bd_qty,
1084                                         --l_pf_display_flag,
1085                                         l_mem_display_flag, -- Bug 3483954
1086                                         p_parent_demand_id,
1087                                         member, -- member item bd
1088                                         l_atp_rec.refresh_number,
1089                                         l_return_status
1090                                 );
1091                                 IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
1092                                         IF PG_DEBUG in ('Y', 'C') THEN
1093                                                 msc_sch_wb.atp_debug('Move_PF_Bucketed_Demands: ' || 'Error occured in procedure Insert_Bucketed_Demand');
1094                                         END IF;
1095                                         x_return_status := FND_API.G_RET_STS_ERROR;
1096                                         return;
1097                                 END IF;
1098                         END IF;
1099                 ELSIF l_update_mem_bd = 'D' THEN
1100                         delete  msc_alloc_demands
1101                         where   parent_demand_id = p_parent_demand_id
1102                         --bug3693892 added trunc
1103                         and     trunc(demand_date) <= p_atf_date
1104                         and     plan_id = p_plan_id;
1105                 END IF;
1106 
1107                 IF l_update_pf_bd = 'Y' THEN
1108                         update  msc_alloc_demands
1109                                 --bug3697365 added timestamp also
1110                         set     demand_date = trunc(l_pf_bd_date) + MSC_ATP_PVT.G_END_OF_DAY,
1111                                 allocated_quantity = l_pf_bd_qty,
1112                                 demand_quantity = p_demand_qty,
1113                                 pf_display_flag = l_pf_display_flag,
1114                                 --bug3697365 added timestamp also
1115                                 original_demand_date = trunc(p_new_demand_date) + MSC_ATP_PVT.G_END_OF_DAY
1116                         where   parent_demand_id = p_parent_demand_id
1117                         --bug3693892 added trunc
1118                         and     trunc(demand_date) > p_atf_date
1119                         and     plan_id = p_plan_id;
1120 
1121                         IF (SQL%NOTFOUND) and (nvl(l_pf_bd_qty, 0) > 0) and (l_atp_rec.inventory_item_id is NOT NULL) THEN
1122                                 IF PG_DEBUG in ('Y', 'C') THEN
1123                                         msc_sch_wb.atp_debug('Move_PF_Bucketed_Demands: Family item bucketed demand not found. Inserting now...');
1124                                 END IF;
1125                                 l_atp_rec.quantity_ordered := p_demand_qty;
1126                                 l_atp_rec.requested_ship_date := p_new_demand_date;
1127                                 Insert_Bucketed_Demand(
1128                                         l_atp_rec,
1129                                         p_plan_id,
1130                                         l_pf_bd_date,
1131                                         l_pf_bd_qty,
1132                                         l_pf_display_flag,
1133                                         p_parent_demand_id,
1134                                         family, -- family item bd
1135                                         l_atp_rec.refresh_number,
1136                                         l_return_status
1137                                 );
1138                                 IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
1139                                         IF PG_DEBUG in ('Y', 'C') THEN
1140                                                 msc_sch_wb.atp_debug('Move_PF_Bucketed_Demands: ' || 'Error occured in procedure Insert_Bucketed_Demand');
1141                                         END IF;
1142                                         x_return_status := FND_API.G_RET_STS_ERROR;
1143                                         return;
1144                                 END IF;
1145                         END IF;
1146                 END IF;
1147         END IF;
1148        END IF;
1149         IF PG_DEBUG in ('Y', 'C') THEN
1150                 msc_sch_wb.atp_debug('*********End of procedure Move_PF_Bucketed_Demands ********');
1151         END IF;
1152 
1153 EXCEPTION
1154         WHEN OTHERS THEN
1155                 IF PG_DEBUG in ('Y', 'C') THEN
1156                         msc_sch_wb.atp_debug('Move_PF_Bucketed_Demands: ' || 'Error occurred: ' || to_char(sqlcode) || ':' || SQLERRM);
1157                 END IF;
1158                 x_return_status := FND_API.G_RET_STS_ERROR;
1159 
1160 END Move_PF_Bucketed_Demands;
1161 
1162 /*--Move_PF_Bd_Dates--------------------------------------------------------
1163 |  o  This procedure moves bucketed demands dates.
1164 +-------------------------------------------------------------------------*/
1165 PROCEDURE Move_PF_Bd_Dates(
1166         p_plan_id               IN	NUMBER,
1167         p_parent_demand_id      IN	NUMBER,
1168         p_old_demand_date       IN	DATE,
1169         p_new_demand_date       IN	DATE,
1170         p_atf_date              IN      DATE,
1171         x_return_status         OUT     NOCOPY VARCHAR2
1172 ) IS
1173         -- local variables
1174 
1175 BEGIN
1176         IF PG_DEBUG in ('Y', 'C') THEN
1177                 msc_sch_wb.atp_debug('*********Begin procedure Move_PF_Bd_Dates ********');
1178         END IF;
1179 
1180         -- Initializing API return code
1181         x_return_status := FND_API.G_RET_STS_SUCCESS;
1182 
1183         IF (p_old_demand_date < p_atf_date) and (p_new_demand_date <= p_atf_date) THEN
1184                 update  msc_alloc_demands
1185                         --bug3697365 added timestamp also
1186                 set     demand_date = trunc(p_new_demand_date) + MSC_ATP_PVT.G_END_OF_DAY,
1187                         original_demand_date = trunc(p_new_demand_date) + MSC_ATP_PVT.G_END_OF_DAY
1188                 where   parent_demand_id = p_parent_demand_id
1189                 --bug3693892 added trunc
1190                 and     trunc(demand_date) <= p_atf_date
1191                 and     plan_id = p_plan_id;
1192         ELSIF (p_old_demand_date < p_atf_date) and (p_new_demand_date > p_atf_date) THEN
1193                 update  msc_alloc_demands
1194                         --bug3693892 added trunc
1195                 set     demand_date = trunc(p_atf_date) + MSC_ATP_PVT.G_END_OF_DAY,
1196                         original_demand_date = trunc(p_new_demand_date) + MSC_ATP_PVT.G_END_OF_DAY,
1197                         Pf_Display_Flag = null
1198                 where   parent_demand_id = p_parent_demand_id
1199                 --bug3693892 added trunc
1200                 and     trunc(demand_date) <= p_atf_date
1201                 and     plan_id = p_plan_id;
1202 
1203                 update  msc_alloc_demands
1204                         --bug3693892 added trunc
1205                 set     demand_date = trunc(p_new_demand_date) + MSC_ATP_PVT.G_END_OF_DAY,
1206                         original_demand_date = trunc(p_new_demand_date) + MSC_ATP_PVT.G_END_OF_DAY,
1207                         Pf_Display_Flag = 1
1208                 where   parent_demand_id = p_parent_demand_id
1209                 --bug3693892 added trunc
1210                 and     trunc(demand_date) > p_atf_date
1211                 and     plan_id = p_plan_id;
1212         ELSIF (p_old_demand_date > p_atf_date) and (p_new_demand_date > p_atf_date) THEN
1213                 update  msc_alloc_demands
1214                         --bug3693892 added trunc
1215                 set     demand_date = trunc(p_new_demand_date) + MSC_ATP_PVT.G_END_OF_DAY,
1216                         original_demand_date = trunc(p_new_demand_date) + MSC_ATP_PVT.G_END_OF_DAY
1217                 where   parent_demand_id = p_parent_demand_id
1218                 --bug3693892 added trunc
1219                 and     trunc(demand_date) > p_atf_date
1220                 and     plan_id = p_plan_id;
1221         END IF;
1222 
1223         IF PG_DEBUG in ('Y', 'C') THEN
1224                 msc_sch_wb.atp_debug('*********End of procedure Move_PF_Bd_Dates ********');
1225         END IF;
1226 
1227 EXCEPTION
1228         WHEN OTHERS THEN
1229                 IF PG_DEBUG in ('Y', 'C') THEN
1230                         msc_sch_wb.atp_debug('Move_PF_Bd_Dates: ' || 'Error occurred: ' || to_char(sqlcode) || ':' || SQLERRM);
1231                 END IF;
1232                 x_return_status := FND_API.G_RET_STS_ERROR;
1233 
1234 END Move_PF_Bd_Dates;
1235 
1236 /*--Insert_Bucketed_Demand--------------------------------------------------
1237 |  o  This procedure inserts bucketed demand in msc_alloc_demands table
1238 |       with origination type 51 (ATP Bucketed Demand).
1239 +-------------------------------------------------------------------------*/
1240 PROCEDURE Insert_Bucketed_Demand(
1241         p_atp_rec          		IN	MRP_ATP_PVT.AtpRec,
1242         p_plan_id          		IN	NUMBER,
1243         p_bucketed_demand_date          IN	DATE,
1244         p_bucketed_demand_qty           IN	NUMBER,
1245         p_display_flag                  IN	NUMBER,
1246         p_parent_demand_id 		IN	NUMBER,
1247         p_level                         IN      NUMBER,
1248         p_refresh_number                IN      NUMBER,
1249         x_return_status                 OUT     NOCOPY VARCHAR2
1250 ) IS
1251         -- local variables
1252         l_sysdate       date := sysdate;
1253 
1254 BEGIN
1255         IF PG_DEBUG in ('Y', 'C') THEN
1256                 msc_sch_wb.atp_debug('*********Begin procedure Insert_Bucketed_Demand ********');
1257         END IF;
1258 
1259         -- Initializing API return code
1260         x_return_status := FND_API.G_RET_STS_SUCCESS;
1261 
1262         INSERT INTO MSC_ALLOC_DEMANDS(
1263                 PLAN_ID,
1264                 INVENTORY_ITEM_ID,
1265                 ORIGINAL_ITEM_ID,
1266                 USING_ASSEMBLY_ITEM_ID,
1267                 ORGANIZATION_ID,
1268                 SR_INSTANCE_ID,
1269                 DEMAND_CLASS,
1270                 DEMAND_DATE,
1271                 ORIGINAL_DEMAND_DATE,
1272                 PARENT_DEMAND_ID,
1273                 ALLOCATED_QUANTITY,
1274                 DEMAND_QUANTITY,
1275                 ORIGINATION_TYPE,
1276                 ORIGINAL_ORIGINATION_TYPE,
1277                 ORDER_NUMBER,
1278                 SALES_ORDER_LINE_ID,
1279                 DEMAND_SOURCE_TYPE,--cmro
1280                 PF_DISPLAY_FLAG,
1281                 CUSTOMER_ID,
1282                 SHIP_TO_SITE_ID,
1283                 REFRESH_NUMBER,
1284                 CREATED_BY,
1285                 CREATION_DATE,
1286                 LAST_UPDATED_BY,
1287                 LAST_UPDATE_DATE
1288         )
1289         VALUES (
1290                 p_plan_id,
1291                 decode(p_level, member, p_atp_rec.request_item_id,
1292                                 p_atp_rec.inventory_item_id),
1293                 p_atp_rec.request_item_id,
1294                 p_atp_rec.request_item_id,
1295                 p_atp_rec.organization_id,
1296                 p_atp_rec.instance_id,
1297                 nvl(p_atp_rec.demand_class, -1),
1298                 --bug3697365 added timestamp also
1299                 TRUNC(p_bucketed_demand_date) + MSC_ATP_PVT.G_END_OF_DAY,
1300                 TRUNC(p_atp_rec.requested_ship_date) + MSC_ATP_PVT.G_END_OF_DAY,
1301                 p_parent_demand_id,
1302                 p_bucketed_demand_qty,
1303                 p_atp_rec.quantity_ordered,
1304                 51, -- ATP Bucketed Demand
1305                 p_atp_rec.origination_type,
1306                 decode(p_atp_rec.origination_type, 1, p_parent_demand_id,
1307                                                    p_atp_rec.order_number),
1308                 p_atp_rec.demand_source_line,
1309                 p_atp_rec.demand_source_type,--cmro
1310                 p_display_flag,
1311                 decode(p_atp_rec.origination_type, 6, MSC_ATP_PVT.G_PARTNER_ID,
1312                                                    30, MSC_ATP_PVT.G_PARTNER_ID,
1313                                                    null),
1314                 decode(p_atp_rec.origination_type, 6, MSC_ATP_PVT.G_PARTNER_SITE_ID,
1315                                                    30, MSC_ATP_PVT.G_PARTNER_SITE_ID,
1316                                                    null),
1317                 p_refresh_number,
1318                 G_USER_ID,
1319                 l_sysdate,
1320                 G_USER_ID,
1321                 l_sysdate
1322         );
1323 
1324 EXCEPTION
1325         WHEN OTHERS THEN
1326                 IF PG_DEBUG in ('Y', 'C') THEN
1327                         msc_sch_wb.atp_debug('Insert_Bucketed_Demand: ' || 'Error occurred: ' || to_char(sqlcode) || ':' || SQLERRM);
1328                 END IF;
1329                 x_return_status := FND_API.G_RET_STS_ERROR;
1330 
1331 END Insert_Bucketed_Demand;
1332 
1333 /*--Find_PF_Bucketed_Demands--------------------------------------------------
1334 |  o  This procedure returns information about bucketed demands for a demand.
1335 +---------------------------------------------------------------------------*/
1336 PROCEDURE Find_PF_Bucketed_Demands(
1337         p_plan_id               IN	NUMBER,
1338         p_parent_demand_id      IN	NUMBER,
1339         p_bucketed_demands_rec  IN OUT	NOCOPY MSC_ATP_PF.Bucketed_Demands_Rec,
1340         x_return_status         OUT     NOCOPY VARCHAR2
1341 ) IS
1342         -- local variables
1343 
1344 BEGIN
1345         IF PG_DEBUG in ('Y', 'C') THEN
1346                 msc_sch_wb.atp_debug('*********Begin procedure Find_PF_Bucketed_Demands ********');
1347                 msc_sch_wb.atp_debug('Find_PF_Bucketed_Demands: ' ||  'mem_item_id = ' ||to_char(p_bucketed_demands_rec.mem_item_id));
1348                 msc_sch_wb.atp_debug('Find_PF_Bucketed_Demands: ' ||  'p_plan_id = ' ||to_char(p_plan_id));
1349                 msc_sch_wb.atp_debug('Find_PF_Bucketed_Demands: ' ||  'p_parent_demand_id = ' ||to_char(p_parent_demand_id));
1350         END IF;
1351 
1352         -- Initializing API return code
1353         x_return_status := FND_API.G_RET_STS_SUCCESS;
1354 
1355         BEGIN
1356                 SELECT  allocated_quantity,
1357                         demand_date
1358                 INTO    p_bucketed_demands_rec.mem_bd_qty,
1359                         p_bucketed_demands_rec.mem_bd_date
1360                 FROM    msc_alloc_demands
1361                 WHERE   plan_id = p_plan_id
1362                 AND     parent_demand_id = p_parent_demand_id
1363                 AND     inventory_item_id = p_bucketed_demands_rec.mem_item_id
1364                 ;
1365         EXCEPTION
1366                 WHEN NO_DATA_FOUND THEN
1367                         p_bucketed_demands_rec.mem_bd_qty := 0;
1368                         p_bucketed_demands_rec.mem_bd_date := null;
1369         END;
1370         IF PG_DEBUG in ('Y', 'C') THEN
1371                 msc_sch_wb.atp_debug('Find_PF_Bucketed_Demands: ' ||  'pf_item_id = ' ||to_char(p_bucketed_demands_rec.pf_item_id));
1372                 msc_sch_wb.atp_debug('Find_PF_Bucketed_Demands: ' ||  'Member item BD Date = ' ||to_char(p_bucketed_demands_rec.mem_bd_date));
1373                 msc_sch_wb.atp_debug('Find_PF_Bucketed_Demands: ' ||  'Member item BD Qty = ' ||to_char(p_bucketed_demands_rec.mem_bd_qty));
1374         END IF;
1375 
1376         BEGIN
1377                 SELECT  allocated_quantity,
1378                         demand_date
1379                 INTO    p_bucketed_demands_rec.pf_bd_qty,
1380                         p_bucketed_demands_rec.pf_bd_date
1381                 FROM    msc_alloc_demands
1382                 WHERE   plan_id = p_plan_id
1383                 AND     parent_demand_id = p_parent_demand_id
1384                 AND     inventory_item_id = p_bucketed_demands_rec.pf_item_id
1385                 ;
1386         EXCEPTION
1387                 WHEN NO_DATA_FOUND THEN
1388                         p_bucketed_demands_rec.pf_bd_qty := 0;
1389                         p_bucketed_demands_rec.pf_bd_date := null;
1390         END;
1391         IF PG_DEBUG in ('Y', 'C') THEN
1392                 msc_sch_wb.atp_debug('Find_PF_Bucketed_Demands: ' ||  'Family item BD Date = ' ||to_char(p_bucketed_demands_rec.pf_bd_date));
1393                 msc_sch_wb.atp_debug('Find_PF_Bucketed_Demands: ' ||  'Family item BD Qty = ' ||to_char(p_bucketed_demands_rec.pf_bd_qty));
1394                 msc_sch_wb.atp_debug('*********End of procedure Find_PF_Bucketed_Demands ********');
1395         END IF;
1396 
1397 EXCEPTION
1398         WHEN OTHERS THEN
1399                 IF PG_DEBUG in ('Y', 'C') THEN
1400                         msc_sch_wb.atp_debug('Find_PF_Bucketed_Demands: ' || 'Error occurred: ' || to_char(sqlcode) || ':' || SQLERRM);
1401                 END IF;
1402                 x_return_status := FND_API.G_RET_STS_ERROR;
1403 
1404 END Find_PF_Bucketed_Demands;
1405 
1406 /*--Add_PF_Rollup_Supplies--------------------------------------------------
1407 |  o  This procedure adds rollup supplies in msc_alloc_supplies table.
1408 |  o  If the supply is after ATF then it adds rollup supplies to family,
1409 |       else to member item.
1410 +-------------------------------------------------------------------------*/
1411 PROCEDURE Add_PF_Rollup_Supplies(
1412         p_plan_id                       IN	NUMBER,
1413         p_member_item_id                IN	NUMBER,
1414         p_family_item_id                IN      NUMBER,
1415         p_organization_id               IN	NUMBER,
1416         p_instance_id                   IN	NUMBER,
1417         p_demand_class                  IN      VARCHAR2,
1418         p_schedule_date                 IN      DATE,
1419         p_orig_order_type               IN      NUMBER,
1420         p_order_quantity                IN	NUMBER,
1421         p_parent_transaction_id         IN	NUMBER,
1422         p_atf_date                      IN      DATE,
1423         p_refresh_number                IN      NUMBER,
1424         x_return_status                 OUT     NOCOPY VARCHAR2
1425 ) IS
1426         -- local variables
1427         l_sysdate               date := sysdate;
1428 
1429 BEGIN
1430         IF PG_DEBUG in ('Y', 'C') THEN
1431                 msc_sch_wb.atp_debug('*********Begin procedure Add_PF_Rollup_Supplies ********');
1432         END IF;
1433 
1434         -- Initializing API return code
1435         x_return_status := FND_API.G_RET_STS_SUCCESS;
1436 
1437         IF p_schedule_date <= p_atf_date THEN
1438                 INSERT INTO MSC_ALLOC_SUPPLIES(
1439                         PLAN_ID,
1440                         INVENTORY_ITEM_ID,
1441                         ORGANIZATION_ID,
1442                         SR_INSTANCE_ID,
1443                         DEMAND_CLASS,
1444                         SUPPLY_DATE,
1445                         PARENT_TRANSACTION_ID,
1446                         ALLOCATED_QUANTITY,
1447                         SUPPLY_QUANTITY,
1448                         ORDER_TYPE,
1449                         ORIGINAL_ORDER_TYPE,
1450                         ORIGINAL_ITEM_ID,
1451                         REFRESH_NUMBER,
1452                         CREATED_BY,
1453                         CREATION_DATE,
1454                         LAST_UPDATED_BY,
1455                         LAST_UPDATE_DATE,
1456                         CUSTOMER_ID,         -- Bug 3558125
1457                         SHIP_TO_SITE_ID      -- Bug 3558125
1458                 )
1459                 VALUES (
1460                         p_plan_id,
1461                         p_member_item_id,
1462                         p_organization_id,
1463                         p_instance_id,
1464                         nvl(p_demand_class, -1),
1465                         p_schedule_date,
1466                         p_parent_transaction_id,
1467                         p_order_quantity,
1468                         p_order_quantity,
1469                         50,
1470                         p_orig_order_type,
1471                         p_member_item_id,
1472                         p_refresh_number,
1473                         G_USER_ID,
1474                         l_sysdate,
1475                         G_USER_ID,
1476                         l_sysdate,
1477                         NVL(MSC_ATP_PVT.G_PARTNER_ID,-1),       -- Bug 3558125
1478                         NVL(MSC_ATP_PVT.G_PARTNER_SITE_ID,-1)   -- Bug 3558125
1479                 );
1480                 IF PG_DEBUG in ('Y', 'C') THEN
1481                         msc_sch_wb.atp_debug('***********  Rollup Supply  **********');
1482                         msc_sch_wb.atp_debug('*    Add rollup supply for member item ');
1483                         msc_sch_wb.atp_debug('*    Member Item Id = ' ||to_char(p_member_item_id));
1484                         msc_sch_wb.atp_debug('*    Qty = ' ||to_char(p_order_quantity));
1485                         msc_sch_wb.atp_debug('*    Date = ' ||to_char(p_schedule_date));
1486                         msc_sch_wb.atp_debug('**************************************');
1487                 END IF;
1488         ELSE
1489                 INSERT INTO MSC_ALLOC_SUPPLIES(
1490                         PLAN_ID,
1491                         INVENTORY_ITEM_ID,
1492                         ORGANIZATION_ID,
1493                         SR_INSTANCE_ID,
1494                         DEMAND_CLASS,
1495                         SUPPLY_DATE,
1496                         PARENT_TRANSACTION_ID,
1497                         ALLOCATED_QUANTITY,
1498                         SUPPLY_QUANTITY,
1499                         ORDER_TYPE,
1500                         ORIGINAL_ORDER_TYPE,
1501                         ORIGINAL_ITEM_ID,
1502                         REFRESH_NUMBER,
1503                         CREATED_BY,
1504                         CREATION_DATE,
1505                         LAST_UPDATED_BY,
1506                         LAST_UPDATE_DATE,
1507                         CUSTOMER_ID,         -- Bug 3558125
1508                         SHIP_TO_SITE_ID      -- Bug 3558125
1509                 )
1510                 VALUES (
1511                         p_plan_id,
1512                         p_family_item_id,
1513                         p_organization_id,
1514                         p_instance_id,
1515                         nvl(p_demand_class, -1),
1516                         p_schedule_date,
1517                         p_parent_transaction_id,
1518                         p_order_quantity,
1519                         p_order_quantity,
1520                         50,
1521                         p_orig_order_type,
1522                         p_member_item_id,
1523                         p_refresh_number,
1524                         G_USER_ID,
1525                         l_sysdate,
1526                         G_USER_ID,
1527                         l_sysdate,
1528                         NVL(MSC_ATP_PVT.G_PARTNER_ID,-1),       -- Bug 3558125
1529                         NVL(MSC_ATP_PVT.G_PARTNER_SITE_ID,-1)   -- Bug 3558125
1530                 );
1531                 IF PG_DEBUG in ('Y', 'C') THEN
1532                         msc_sch_wb.atp_debug('***********  Rollup Supply  **********');
1533                         msc_sch_wb.atp_debug('*    Add rollup supply for family item ');
1534                         msc_sch_wb.atp_debug('*    Family Item Id = ' ||to_char(p_family_item_id));
1535                         msc_sch_wb.atp_debug('*    Qty = ' ||to_char(p_order_quantity));
1536                         msc_sch_wb.atp_debug('*    Date = ' ||to_char(p_schedule_date));
1537                         msc_sch_wb.atp_debug('**************************************');
1538                 END IF;
1539         END IF;
1540 
1541         IF PG_DEBUG in ('Y', 'C') THEN
1542                 msc_sch_wb.atp_debug('*********End of procedure Add_PF_Rollup_Supplies ********');
1543         END IF;
1544 
1545 EXCEPTION
1546         WHEN OTHERS THEN
1547                 IF PG_DEBUG in ('Y', 'C') THEN
1548                         msc_sch_wb.atp_debug('Add_PF_Rollup_Supplies: ' || 'Error occurred: ' || to_char(sqlcode) || ':' || SQLERRM);
1549                 END IF;
1550                 x_return_status := FND_API.G_RET_STS_ERROR;
1551 
1552 END Add_PF_Rollup_Supplies;
1553 
1554 /*--Update_PF_Rollup_Supplies----------------------------------------------
1555 |  o  This procedure is called from update_planned_order procedure to
1556 |       update PF rollup supplies.
1557 |  o  Updates rollup supplies to passed date and quantity values.
1558 +-------------------------------------------------------------------------*/
1559 PROCEDURE Update_PF_Rollup_Supplies(
1560         p_plan_id          		IN	NUMBER,
1561         p_parent_transaction_id         IN	NUMBER,
1562         p_mem_item_id                   IN	NUMBER,
1563         p_pf_item_id                    IN	NUMBER,
1564         p_date                          IN      DATE,
1565         p_quantity                      IN      NUMBER,
1566         p_atf_date                      IN      DATE,
1567         x_return_status                 OUT     NOCOPY VARCHAR2
1568 ) IS
1569         -- local variables
1570         l_sysdate               date := sysdate;
1571 
1572 BEGIN
1573         IF PG_DEBUG in ('Y', 'C') THEN
1574                 msc_sch_wb.atp_debug('*********Begin procedure Update_PF_Rollup_Supplies ********');
1575                 msc_sch_wb.atp_debug('Update_PF_Rollup_Supplies: ' || 'p_plan_id ='||to_char(p_plan_id));
1576                 msc_sch_wb.atp_debug('Update_PF_Rollup_Supplies: ' || 'p_parent_transaction_id ='||to_char(p_parent_transaction_id));
1577                 msc_sch_wb.atp_debug('Update_PF_Rollup_Supplies: ' || 'p_mem_item_id ='||to_char(p_mem_item_id));
1578                 msc_sch_wb.atp_debug('Update_PF_Rollup_Supplies: ' || 'p_pf_item_id ='||to_char(p_pf_item_id));
1579                 msc_sch_wb.atp_debug('Update_PF_Rollup_Supplies: ' || 'p_date ='||to_char(p_date));
1580                 msc_sch_wb.atp_debug('Update_PF_Rollup_Supplies: ' || 'p_quantity ='||to_char(p_quantity));
1581                 msc_sch_wb.atp_debug('Update_PF_Rollup_Supplies: ' || 'p_atf_date ='||to_char(p_atf_date));
1582         END IF;
1583 
1584         -- Initializing API return code
1585         x_return_status := FND_API.G_RET_STS_SUCCESS;
1586 
1587         IF p_date is NULL THEN
1588                 UPDATE  msc_alloc_supplies
1589                 SET     old_supply_date = supply_date, -- why do we populate old_supply_date and qty??
1590                         old_allocated_quantity = allocated_quantity, --??
1591                         allocated_quantity = NVL(p_quantity, allocated_quantity),
1592                         supply_quantity = NVL(p_quantity, supply_quantity),     -- Bug 3779200
1593                         LAST_UPDATED_BY = G_USER_ID,
1594                         LAST_UPDATE_DATE = l_sysdate
1595                 WHERE   plan_id = p_plan_id
1596                 AND     parent_transaction_id = p_parent_transaction_id;
1597         ELSIF p_date <= p_atf_date THEN
1598                 UPDATE  msc_alloc_supplies
1599                 SET     old_supply_date = supply_date, -- why do we populate old_supply_date and qty??
1600                         old_allocated_quantity = allocated_quantity, --??
1601                         supply_date = NVL(p_date, supply_date),
1602                         allocated_quantity = NVL(p_quantity, allocated_quantity),
1603                         supply_quantity = NVL(p_quantity, supply_quantity),     -- Bug 3779200
1604                         inventory_item_id = p_mem_item_id,
1605                         LAST_UPDATED_BY = G_USER_ID,
1606                         LAST_UPDATE_DATE = l_sysdate
1607                 WHERE   plan_id = p_plan_id
1608                 AND     parent_transaction_id = p_parent_transaction_id;
1609         ELSE
1610                 UPDATE  msc_alloc_supplies
1611                 SET     old_supply_date = supply_date, -- why do we populate old_supply_date and qty??
1612                         old_allocated_quantity = allocated_quantity, --??
1613                         supply_date = NVL(p_date, supply_date),
1614                         allocated_quantity = NVL(p_quantity, allocated_quantity),
1615                         supply_quantity = NVL(p_quantity, supply_quantity),     -- Bug 3779200
1616                         inventory_item_id = p_pf_item_id,
1617                         LAST_UPDATED_BY = G_USER_ID,
1618                         LAST_UPDATE_DATE = l_sysdate
1619                 WHERE   plan_id = p_plan_id
1620                 AND     parent_transaction_id = p_parent_transaction_id;
1621         END IF;
1622 
1623         IF PG_DEBUG in ('Y', 'C') THEN
1624                 msc_sch_wb.atp_debug('*********End of procedure Update_PF_Rollup_Supplies ********');
1625         END IF;
1626 
1627 EXCEPTION
1628         WHEN OTHERS THEN
1629                 IF PG_DEBUG in ('Y', 'C') THEN
1630                         msc_sch_wb.atp_debug('Update_PF_Rollup_Supplies: ' || 'Error occurred: ' || to_char(sqlcode) || ':' || SQLERRM);
1631                 END IF;
1632                 x_return_status := FND_API.G_RET_STS_ERROR;
1633 
1634 END Update_PF_Rollup_Supplies;
1635 
1636 /*--Add_PF_Stealing_Supply_Details------------------------------------------
1637 |  o  This procedure is called from stealing procedure to add stealing
1638 |       supplies records for member item and family.
1639 +-------------------------------------------------------------------------*/
1640 PROCEDURE Add_PF_Stealing_Supply_Details (
1641         p_plan_id                       IN      NUMBER,
1642         p_identifier                    IN      NUMBER,
1643         p_mem_item_id                   IN      NUMBER,
1644         p_pf_item_id                    IN      NUMBER,
1645         p_organization_id               IN      NUMBER,
1646         p_sr_instance_id                IN      NUMBER,
1647         p_mem_stealing_quantity         IN      NUMBER,
1648         p_pf_stealing_quantity          IN      NUMBER,
1649         p_stealing_demand_class         IN      VARCHAR2,
1650         p_stolen_demand_class           IN      VARCHAR2,
1651         p_ship_date                     IN      DATE,
1652         p_atf_date                      IN      DATE,
1653         p_refresh_number                IN      NUMBER, -- for summary enhancement
1654         p_transaction_id                OUT     NOCOPY NUMBER,
1655         p_ato_model_line_id             IN      NUMBER,
1656         p_demand_source_type            IN      NUMBER,--cmro
1657         --bug3684383
1658         p_order_number                  IN      NUMBER,
1659         x_return_status                 OUT     NOCOPY VARCHAR2
1660 ) IS
1661         l_sysdate                       DATE := sysdate;
1662         l_mem_stealing_rec_date         DATE;
1663         l_pf_stealing_rec_date          DATE;
1664         l_rows_proc                     NUMBER := 0;
1665 
1666 BEGIN
1667         IF PG_DEBUG in ('Y', 'C') THEN
1668                 msc_sch_wb.atp_debug('*** Begin Add_PF_Stealing_Supply_Details Procedure ***');
1669                 msc_sch_wb.atp_debug('Add_PF_Stealing_Supply_Details: ' || 'p_plan_id ='||to_char(p_plan_id));
1670                 msc_sch_wb.atp_debug('Add_PF_Stealing_Supply_Details: ' || 'p_identifier ='||to_char(p_identifier));
1671                 msc_sch_wb.atp_debug('Add_PF_Stealing_Supply_Details: ' || 'p_demand_source_type ='||to_char(p_demand_source_type));--cmro
1672                 msc_sch_wb.atp_debug('Add_PF_Stealing_Supply_Details: ' || 'p_mem_item_id ='||to_char(p_mem_item_id));
1673                 msc_sch_wb.atp_debug('Add_PF_Stealing_Supply_Details: ' || 'p_pf_item_id ='||to_char(p_pf_item_id));
1674                 msc_sch_wb.atp_debug('Add_PF_Stealing_Supply_Details: ' || 'p_organization_id = ' ||to_char(p_organization_id));
1675                 msc_sch_wb.atp_debug('Add_PF_Stealing_Supply_Details: ' || 'p_instance_id = ' ||to_char(p_sr_instance_id));
1676                 msc_sch_wb.atp_debug('Add_PF_Stealing_Supply_Details: ' || 'p_mem_stealing_quantity ='||to_char(p_mem_stealing_quantity));
1677                 msc_sch_wb.atp_debug('Add_PF_Stealing_Supply_Details: ' || 'p_pf_stealing_quantity ='||to_char(p_pf_stealing_quantity));
1678                 msc_sch_wb.atp_debug('Add_PF_Stealing_Supply_Details: ' || 'p_stealing_demand_class = '||p_stealing_demand_class);
1679                 msc_sch_wb.atp_debug('Add_PF_Stealing_Supply_Details: ' || 'p_stolen_demand_class = ' ||p_stolen_demand_class);
1680                 msc_sch_wb.atp_debug('Add_PF_Stealing_Supply_Details: ' || 'p_ship_date = ' ||to_char(p_ship_date));
1681                 msc_sch_wb.atp_debug('Add_PF_Stealing_Supply_Details: ' || 'p_atf_date = ' ||to_char(p_atf_date));
1682         END IF;
1683 
1684         -- Initializing API return code
1685         x_return_status := FND_API.G_RET_STS_SUCCESS;
1686 
1687         IF (p_ship_date > p_atf_date) THEN
1688                 l_mem_stealing_rec_date := p_atf_date;
1689                 l_pf_stealing_rec_date  := p_ship_date;
1690         ELSE
1691                 l_mem_stealing_rec_date := p_ship_date;
1692         END IF;
1693 
1694         --bug3555084 using returning clause in place of select
1695         --SELECT msc_supplies_s.nextval into p_transaction_id from dual;
1696 
1697         IF p_mem_stealing_quantity > 0 THEN
1698                 IF PG_DEBUG in ('Y', 'C') THEN
1699                         msc_sch_wb.atp_debug('Add_PF_Stealing_Supply_Details: ' || 'before insert into msc_alloc_supplies-Stealing Info');
1700                 END IF;
1701 
1702                 -- Add Member item
1703                 INSERT INTO MSC_ALLOC_SUPPLIES
1704                         (plan_id, inventory_item_id, organization_id, sr_instance_id,
1705                          demand_class, supply_date, parent_transaction_id,
1706                          allocated_quantity, order_type, sales_order_line_id,demand_source_type,stealing_flag,--cmro
1707                          supply_quantity, original_item_id, original_order_type,
1708                          created_by, creation_date, last_updated_by, last_update_date, from_demand_class, ato_model_line_id, refresh_number, -- For summary enhancement
1709                          --bug3684383
1710                          order_number,customer_id,ship_to_site_id
1711                          )
1712                 VALUES
1713                         (p_plan_id, p_mem_item_id, p_organization_id,
1714                          p_sr_instance_id, p_stealing_demand_class, l_mem_stealing_rec_date,
1715                          --bug3555084 using msc_supplies_s.nextval in place of p_transaction_id
1716                          msc_supplies_s.nextval, p_mem_stealing_quantity, 50, p_identifier,p_demand_source_type, 1,--cmro
1717                          p_mem_stealing_quantity, p_mem_item_id, 46,
1718                          G_USER_ID, l_sysdate, G_USER_ID, l_sysdate, p_stolen_demand_class, p_ato_model_line_id, p_refresh_number,
1719                          --bug3684383
1720                          p_order_number,MSC_ATP_PVT.G_PARTNER_ID,MSC_ATP_PVT.G_PARTNER_SITE_ID) -- For summary enhancement
1721                          RETURNING parent_transaction_id INTO p_transaction_id; --bug3555084
1722 
1723                 l_rows_proc := SQL%ROWCOUNT;
1724 
1725                 -- Next add the Stolen Data.
1726                 IF PG_DEBUG in ('Y', 'C') THEN
1727                         msc_sch_wb.atp_debug('Add_PF_Stealing_Supply_Details: ' || 'before insert into msc_alloc_supplies-Stolen Info');
1728                 END IF;
1729 
1730                 INSERT INTO MSC_ALLOC_SUPPLIES
1731                         (plan_id, inventory_item_id, organization_id, sr_instance_id,
1732                          demand_class, supply_date, parent_transaction_id,
1733                          allocated_quantity, order_type, sales_order_line_id,demand_source_type, stealing_flag,--cmro
1734                          supply_quantity, original_item_id, original_order_type,
1735                          created_by, creation_date, last_updated_by, last_update_date, from_demand_class, ato_model_line_id,  refresh_number, -- For summary enhancement
1736                          --bug3684383
1737                          order_number,customer_id,ship_to_site_id)
1738                 VALUES
1739                         (p_plan_id, p_mem_item_id, p_organization_id,
1740                          p_sr_instance_id, p_stolen_demand_class, l_mem_stealing_rec_date,
1741                          p_transaction_id, -1 * p_mem_stealing_quantity, 50, p_identifier,p_demand_source_type, 1,---cmro
1742                          -1 * p_mem_stealing_quantity, p_mem_item_id, 47,
1743                          G_USER_ID, l_sysdate, G_USER_ID, l_sysdate, p_stealing_demand_class, p_ato_model_line_id, p_refresh_number,
1744                          --bug3684383
1745                          p_order_number,MSC_ATP_PVT.G_PARTNER_ID,MSC_ATP_PVT.G_PARTNER_SITE_ID); -- For summary enhancement
1746 
1747                 l_rows_proc := l_rows_proc + SQL%ROWCOUNT;
1748         END IF;
1749 
1750         IF (l_pf_stealing_rec_date is not null) and (p_pf_stealing_quantity > 0) THEN
1751             IF PG_DEBUG in ('Y', 'C') THEN
1752                msc_sch_wb.atp_debug('Add_PF_Stealing_Supply_Details: ' || 'before insert into msc_alloc_supplies-Stealing Info');
1753             END IF;
1754 
1755             IF p_transaction_id is not null THEN   --bug3555084
1756 
1757                 INSERT INTO MSC_ALLOC_SUPPLIES
1758                         (plan_id, inventory_item_id, organization_id, sr_instance_id,
1759                          demand_class, supply_date, parent_transaction_id,
1760                          allocated_quantity, order_type, sales_order_line_id,demand_source_type, stealing_flag,--cmro
1761                          supply_quantity, original_item_id, original_order_type,
1762                          created_by, creation_date, last_updated_by, last_update_date, from_demand_class, refresh_number, -- For summary enhancement
1763                          --bug3684383
1764                          order_number,customer_id,ship_to_site_id)
1765                 VALUES
1766                         (p_plan_id, p_pf_item_id, p_organization_id,
1767                          p_sr_instance_id, p_stealing_demand_class, l_pf_stealing_rec_date,
1768                          p_transaction_id, p_pf_stealing_quantity, 50, p_identifier,p_demand_source_type, 1,--cmro
1769                          p_pf_stealing_quantity, p_mem_item_id, 46,
1770                          G_USER_ID, l_sysdate, G_USER_ID, l_sysdate, p_stolen_demand_class, p_refresh_number, -- For summary enhancement
1771                          --bug3684383
1772                          p_order_number,MSC_ATP_PVT.G_PARTNER_ID,MSC_ATP_PVT.G_PARTNER_SITE_ID);
1773 
1774                 l_rows_proc := l_rows_proc + SQL%ROWCOUNT;
1775 
1776             ELSE    --bug3555084 start
1777                 INSERT INTO MSC_ALLOC_SUPPLIES
1778                         (plan_id, inventory_item_id, organization_id, sr_instance_id,
1779                          demand_class, supply_date, parent_transaction_id,
1780                          allocated_quantity, order_type, sales_order_line_id,demand_source_type, stealing_flag,--cmro
1781                          supply_quantity, original_item_id, original_order_type,
1782                          created_by, creation_date, last_updated_by, last_update_date, from_demand_class, refresh_number, -- For summary enhancement
1783                          --bug3684383
1784                          order_number,customer_id,ship_to_site_id)
1785                 VALUES
1786                         (p_plan_id, p_pf_item_id, p_organization_id,
1787                          p_sr_instance_id, p_stealing_demand_class, l_pf_stealing_rec_date,
1788                          msc_supplies_s.nextval, p_pf_stealing_quantity, 50, p_identifier,p_demand_source_type, 1,--cmro
1789                          p_pf_stealing_quantity, p_mem_item_id, 46,
1790                          G_USER_ID, l_sysdate, G_USER_ID, l_sysdate, p_stolen_demand_class, p_refresh_number, -- For summary enhancement
1791                          --bug3684383
1792                          p_order_number,MSC_ATP_PVT.G_PARTNER_ID,MSC_ATP_PVT.G_PARTNER_SITE_ID)
1793 
1794                          RETURNING parent_transaction_id INTO p_transaction_id;
1795 
1796                 l_rows_proc := l_rows_proc + SQL%ROWCOUNT;
1797             END IF;
1798             --bug3555084 end
1799                 -- Next add the Stolen Data.
1800             IF PG_DEBUG in ('Y', 'C') THEN
1801                         msc_sch_wb.atp_debug('Add_PF_Stealing_Supply_Details: ' || 'before insert into msc_alloc_supplies-Stolen Info');
1802             END IF;
1803 
1804             INSERT INTO MSC_ALLOC_SUPPLIES
1805                         (plan_id, inventory_item_id, organization_id, sr_instance_id,
1806                          demand_class, supply_date, parent_transaction_id,
1807                          allocated_quantity, order_type, sales_order_line_id,demand_source_type, stealing_flag,--cmro
1808                          supply_quantity, original_item_id, original_order_type,
1809                          created_by, creation_date, last_updated_by, last_update_date, from_demand_class, refresh_number, -- For summary enhancement
1810                          --bug3684383
1811                          order_number,customer_id,ship_to_site_id)
1812             VALUES
1813                         (p_plan_id, p_pf_item_id, p_organization_id,
1814                          p_sr_instance_id, p_stolen_demand_class, l_pf_stealing_rec_date,
1815                          p_transaction_id, -1 * p_pf_stealing_quantity, 50, p_identifier,p_demand_source_type, 1,--cmro
1816                          -1 * p_pf_stealing_quantity, p_mem_item_id, 47,
1817                          G_USER_ID, l_sysdate, G_USER_ID, l_sysdate, p_stealing_demand_class, p_refresh_number, -- For summary enhancement
1818                          --bug3684383
1819                          p_order_number,MSC_ATP_PVT.G_PARTNER_ID,MSC_ATP_PVT.G_PARTNER_SITE_ID);
1820 
1821             l_rows_proc := l_rows_proc + SQL%ROWCOUNT;
1822         END IF;
1823 
1824         IF PG_DEBUG in ('Y', 'C') THEN
1825                 msc_sch_wb.atp_debug('Add_PF_Stealing_Supply_Details: ' || 'Total Rows inserted ' || l_rows_proc);
1826         END IF;
1827 
1828 EXCEPTION
1829         WHEN OTHERS THEN
1830                 IF PG_DEBUG in ('Y', 'C') THEN
1831                         msc_sch_wb.atp_debug('Add_PF_Stealing_Supply_Details: ' || 'Error occurred: ' || to_char(sqlcode) || ':' || SQLERRM);
1832                 END IF;
1833                 x_return_status := FND_API.G_RET_STS_ERROR;
1834 
1835 END Add_PF_Stealing_Supply_Details;
1836 
1837 /*--Get_Mat_Avail_Pf--------------------------------------------------------
1838 |  o  Called from Get_Material_Atp_Info procedure.
1839 |  o  Calls these private procedures:
1840 |       -  Get_Mat_Avail_Pf_Ods - For PF ODS ATP
1841 |       -  Get_Mat_Avail_Pf_Ods_Summ - For PF ATP for ODS summary
1842 |       -  Get_Mat_Avail_Pf_Pds - For Unallocated Time Phased PF ATP
1843 |       -  Get_Mat_Avail_Pf_Pds_Summ - For Unallocated Time Phased PF ATP
1844 |            for PDS summary
1845 +-------------------------------------------------------------------------*/
1846 PROCEDURE Get_Mat_Avail_Pf(
1847         p_summary_flag                  IN      VARCHAR2,
1848         p_item_id                       IN      NUMBER,
1849         p_request_item_id               IN      NUMBER,
1850         p_org_id                        IN      NUMBER,
1851         p_instance_id                   IN      NUMBER,
1852         p_plan_id                       IN      NUMBER,
1853         p_cal_code                      IN      VARCHAR2,
1854         p_sysdate_seq_num               IN      NUMBER,
1855         p_sys_next_date                 IN      DATE,
1856         p_demand_class                  IN      VARCHAR2,
1857         p_default_atp_rule_id           IN      NUMBER,
1858         p_default_dmd_class             IN      VARCHAR2,
1859         p_itf                           IN      DATE,
1860         p_refresh_number                IN      NUMBER,
1861         x_atp_dates                     OUT     NOCOPY MRP_ATP_PUB.date_arr,
1862         x_atp_qtys                      OUT     NOCOPY MRP_ATP_PUB.number_arr,
1863         x_return_status                 OUT     NOCOPY VARCHAR2
1864 ) IS
1865         l_return_status                 VARCHAR2(1);
1866 
1867 BEGIN
1868         IF PG_DEBUG in ('Y', 'C') THEN
1869                 msc_sch_wb.atp_debug('Begin Get_Mat_Avail_Pf');
1870         END IF;
1871 
1872         -- Initializing API return code
1873         x_return_status := FND_API.G_RET_STS_SUCCESS;
1874 
1875         IF MSC_ATP_PVT.G_INV_CTP = 5 THEN
1876                 -- ODS atp
1877                 IF p_summary_flag = 'Y' THEN
1878                         -- summary ODS atp
1879                         Get_Mat_Avail_Pf_Ods_Summ(
1880                                 p_item_id,
1881                                 p_org_id,
1882                                 p_instance_id,
1883                                 p_plan_id,
1884                                 p_demand_class,
1885                                 p_default_atp_rule_id,
1886                                 p_default_dmd_class,
1887                                 p_itf,
1888                                 x_atp_dates,
1889                                 x_atp_qtys,
1890                                 l_return_status
1891                         );
1892                         IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
1893                                 IF PG_DEBUG in ('Y', 'C') THEN
1894                                         msc_sch_wb.atp_debug('Get_Mat_Avail_Pf: ' || 'Error occured in procedure Get_Mat_Avail_Pf_Ods_Summ');
1895                                 END IF;
1896                                 x_return_status := FND_API.G_RET_STS_ERROR;
1897                                 return;
1898                         END IF;
1899                 ELSE
1900                         -- ODS atp
1901                         Get_Mat_Avail_Pf_Ods(
1902                                 p_item_id,
1903                                 p_org_id,
1904                                 p_instance_id,
1905                                 p_plan_id,
1906                                 p_cal_code,
1907                                 p_sysdate_seq_num,
1908                                 p_sys_next_date,
1909                                 p_demand_class,
1910                                 p_default_atp_rule_id,
1911                                 p_default_dmd_class,
1912                                 p_itf,
1913                                 x_atp_dates,
1914                                 x_atp_qtys,
1915                                 l_return_status
1916                         );
1917                         IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
1918                                 IF PG_DEBUG in ('Y', 'C') THEN
1919                                         msc_sch_wb.atp_debug('Get_Mat_Avail_Pf: ' || 'Error occured in procedure Get_Mat_Avail_Pf_Ods');
1920                                 END IF;
1921                                 x_return_status := FND_API.G_RET_STS_ERROR;
1922                                 return;
1923                         END IF;
1924                 END IF;
1925         ELSE
1926                 -- PDS atp
1927                 IF p_summary_flag = 'Y' THEN
1928                         Get_Mat_Avail_Pf_Pds_Summ(
1929                                 p_request_item_id,
1930                                 p_item_id,
1931                                 p_org_id,
1932                                 p_instance_id,
1933                                 p_plan_id,
1934                                 p_itf,
1935                                 p_refresh_number,       -- For summary enhancement
1936                                 x_atp_dates,
1937                                 x_atp_qtys,
1938                                 l_return_status
1939                         );
1940                         IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
1941                                 IF PG_DEBUG in ('Y', 'C') THEN
1942                                         msc_sch_wb.atp_debug('Get_Mat_Avail_Pf: ' || 'Error occured in procedure Get_Mat_Avail_Pf_Pds_Summ');
1943                                 END IF;
1944                                 x_return_status := FND_API.G_RET_STS_ERROR;
1945                                 return;
1946                         END IF;
1947                 ELSE
1948                         Get_Mat_Avail_Pf_Pds(
1949                                 p_request_item_id,
1950                                 p_item_id,
1951                                 p_org_id,
1952                                 p_instance_id,
1953                                 p_plan_id,
1954                                 p_itf,
1955                                 x_atp_dates,
1956                                 x_atp_qtys,
1957                                 l_return_status
1958                         );
1959                         IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
1960                                 IF PG_DEBUG in ('Y', 'C') THEN
1961                                         msc_sch_wb.atp_debug('Get_Mat_Avail_Pf: ' || 'Error occured in procedure Get_Mat_Avail_Pf_Pds');
1962                                 END IF;
1963                                 x_return_status := FND_API.G_RET_STS_ERROR;
1964                                 return;
1965                         END IF;
1966                 END IF; -- summary atp
1967         END IF; -- ODS/PDS
1968 EXCEPTION
1969         WHEN OTHERS THEN
1970                 IF PG_DEBUG in ('Y', 'C') THEN
1971                         msc_sch_wb.atp_debug('Get_Mat_Avail_Pf: ' || 'Error occurred: ' || to_char(sqlcode) || ':' || SQLERRM);
1972                 END IF;
1973                 x_return_status := FND_API.G_RET_STS_ERROR;
1974 
1975 END Get_Mat_Avail_Pf;
1976 
1977 /*--Get_Mat_Avail_Pf_Dtls---------------------------------------------------
1978 |  o  Called from Insert_Details procedure.
1979 |  o  Calls these private procedures:
1980 |       -  Get_Mat_Avail_Pf_Ods_Dtls - For PF ODS ATP
1981 |       -  Get_Mat_Avail_Pf_Pds_Dtls - For Unallocated Time Phased PF ATP
1982 +-------------------------------------------------------------------------*/
1983 PROCEDURE Get_Mat_Avail_Pf_Dtls (
1984         p_item_id                       IN      NUMBER,
1985         p_request_item_id               IN      NUMBER,
1986         p_org_id                        IN      NUMBER,
1987         p_instance_id                   IN      NUMBER,
1988         p_plan_id                       IN      NUMBER,
1989         p_cal_code                      IN      VARCHAR2,
1990         p_sysdate_seq_num               IN      NUMBER,
1991         p_sys_next_date                 IN      DATE,
1992         p_demand_class                  IN      VARCHAR2,
1993         p_default_atp_rule_id           IN      NUMBER,
1994         p_default_dmd_class             IN      VARCHAR2,
1995         p_itf                           IN      DATE,
1996         p_level                         IN      NUMBER,
1997         p_scenario_id                   IN      NUMBER,
1998         p_identifier                    IN      NUMBER,
1999         x_return_status                 OUT     NOCOPY VARCHAR2
2000 ) IS
2001         l_return_status                 VARCHAR2(1);
2002 BEGIN
2003         IF PG_DEBUG in ('Y', 'C') THEN
2004                 msc_sch_wb.atp_debug('Begin Get_Mat_Avail_Pf_Dtls');
2005         END IF;
2006 
2007         -- Initializing API return code
2008         x_return_status := FND_API.G_RET_STS_SUCCESS;
2009 
2010         IF MSC_ATP_PVT.G_INV_CTP = 5 THEN
2011                 -- ODS atp
2012                 Get_Mat_Avail_Pf_Ods_Dtls(
2013                         p_item_id,
2014                         p_request_item_id,
2015                         p_org_id,
2016                         p_instance_id,
2017                         p_plan_id,
2018                         p_cal_code,
2019                         p_sysdate_seq_num,
2020                         p_sys_next_date,
2021                         p_demand_class,
2022                         p_default_atp_rule_id,
2023                         p_default_dmd_class,
2024                         p_itf,
2025                         p_level,
2026                         p_scenario_id,
2027                         p_identifier,
2028                         l_return_status
2029                 );
2030                 IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
2031                         IF PG_DEBUG in ('Y', 'C') THEN
2032                                 msc_sch_wb.atp_debug('Get_Mat_Avail_Pf_Dtls: ' || 'Error occured in procedure Get_Mat_Avail_Pf_Ods_Dtls');
2033                         END IF;
2034                         x_return_status := FND_API.G_RET_STS_ERROR;
2035                         return;
2036                 END IF;
2037         ELSE
2038                 Get_Mat_Avail_Pf_Pds_Dtls(
2039                         p_item_id,
2040                         p_request_item_id,
2041                         p_org_id,
2042                         p_instance_id,
2043                         p_plan_id,
2044                         p_itf,
2045                         p_level,
2046                         p_scenario_id,
2047                         p_identifier,
2048                         l_return_status
2049                 );
2050                 IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
2051                         IF PG_DEBUG in ('Y', 'C') THEN
2052                                 msc_sch_wb.atp_debug('Get_Mat_Avail_Pf_Dtls: ' || 'Error occured in procedure Get_Mat_Avail_Pf_Pds_Dtls');
2053                         END IF;
2054                         x_return_status := FND_API.G_RET_STS_ERROR;
2055                         return;
2056                 END IF;
2057         END IF; -- ODS/PDS
2058 EXCEPTION
2059         WHEN OTHERS THEN
2060                 IF PG_DEBUG in ('Y', 'C') THEN
2061                         msc_sch_wb.atp_debug('Get_Mat_Avail_Pf_Dtls: ' || 'Error occurred: ' || to_char(sqlcode) || ':' || SQLERRM);
2062                 END IF;
2063                 x_return_status := FND_API.G_RET_STS_ERROR;
2064 
2065 END Get_Mat_Avail_Pf_Dtls;
2066 
2067 /*--Get_Mat_Avail_Pf_Ods_Summ-----------------------------------------------
2068 |  o  Existing code for PF ODS summary moved to this procedure.
2069 +-------------------------------------------------------------------------*/
2070 PROCEDURE Get_Mat_Avail_Pf_Ods_Summ(
2071         p_item_id                       IN      NUMBER,
2072         p_org_id                        IN      NUMBER,
2073         p_instance_id                   IN      NUMBER,
2074         p_plan_id                       IN      NUMBER,
2075         p_demand_class                  IN      VARCHAR2,
2076         p_default_atp_rule_id           IN      NUMBER,
2077         p_default_dmd_class             IN      VARCHAR2,
2078         p_itf                           IN      DATE,
2079         x_atp_dates                     OUT     NOCOPY MRP_ATP_PUB.date_arr,
2080         x_atp_qtys                      OUT     NOCOPY MRP_ATP_PUB.number_arr,
2081         x_return_status                 OUT     NOCOPY VARCHAR2
2082 ) IS
2083 
2084 BEGIN
2085         IF PG_DEBUG in ('Y', 'C') THEN
2086                 msc_sch_wb.atp_debug('Begin Get_Mat_Avail_Pf_Ods_Summ');
2087         END IF;
2088 
2089         -- Initializing API return code
2090         x_return_status := FND_API.G_RET_STS_SUCCESS;
2091 
2092         -- in summary approach we store sales ordrers for requested item while
2093         -- demands and supplies are stored on PF level
2094         SELECT SD_DATE, sum(SD_QTY)
2095         BULK COLLECT INTO x_atp_dates, x_atp_qtys
2096         FROM
2097         (SELECT  /*+ INDEX(D MSC_ATP_SUMMARY_SO_U1) */
2098                  D.SD_DATE SD_DATE,
2099                  -1* D.SD_QTY SD_QTY
2100         FROM        MSC_ATP_SUMMARY_SO D,
2101                     MSC_ATP_RULES R,
2102                     MSC_SYSTEM_ITEMS I,
2103                     MSC_SYSTEM_ITEMS I0
2104         WHERE       I0.SR_INVENTORY_ITEM_ID = p_item_id
2105         AND         I0.ORGANIZATION_ID = p_org_id
2106         AND         I0.SR_INSTANCE_ID = p_instance_id
2107         AND         I0.PLAN_ID = p_plan_id
2108         AND         I.PRODUCT_FAMILY_ID = I0.INVENTORY_ITEM_ID
2109         AND         I.ORGANIZATION_ID = I0.ORGANIZATION_ID
2110         AND         I.SR_INSTANCE_ID = I0.SR_INSTANCE_ID
2111         AND         I.PLAN_ID = I0.PLAN_ID
2112         AND         R.RULE_ID (+) = NVL(I.ATP_RULE_ID, p_default_atp_rule_id)
2113         AND	       R.SR_INSTANCE_ID (+)= I.SR_INSTANCE_ID
2114         AND	       D.PLAN_ID = I.PLAN_ID
2115         AND	       D.SR_INSTANCE_ID = I.SR_INSTANCE_ID
2116         AND	       D.INVENTORY_ITEM_ID = I.INVENTORY_ITEM_ID
2117         AND 	       D.ORGANIZATION_ID = I.ORGANIZATION_ID
2118         AND         D.SD_DATE < NVL(p_itf,
2119                          D.SD_DATE + 1)
2120         AND         NVL(D.DEMAND_CLASS, NVL(p_default_dmd_class,'@@@')) =
2121                              DECODE(R.DEMAND_CLASS_ATP_FLAG,
2122                              1, NVL(P_DEMAND_CLASS, NVL(p_default_dmd_class,'@@@')),
2123                              NVL(D.DEMAND_CLASS, NVL(p_default_dmd_class,'@@@')))
2124         AND         D.sd_qty <> 0
2125         UNION ALL
2126 
2127         SELECT      /*+ INDEX(S MSC_ATP_SUMMARY_SD_U1) */
2128                     S.SD_DATE SD_DATE,
2129                     S.SD_QTY SD_QTY
2130         FROM        MSC_ATP_SUMMARY_SD S,
2131                     MSC_ATP_RULES R,
2132                     MSC_SYSTEM_ITEMS I
2133         WHERE       I.SR_INVENTORY_ITEM_ID = p_item_id
2134         AND         I.ORGANIZATION_ID = p_org_id
2135         AND         I.SR_INSTANCE_ID = p_instance_id
2136         AND         I.PLAN_ID = p_plan_id
2137         AND         R.RULE_ID (+) = NVL(I.ATP_RULE_ID, p_default_atp_rule_id)
2138         AND         R.SR_INSTANCE_ID (+)= I.SR_INSTANCE_ID
2139         AND	       S.PLAN_ID = I.PLAN_ID
2140         AND	       S.SR_INSTANCE_ID = I.SR_INSTANCE_ID
2141         AND	       S.INVENTORY_ITEM_ID = I.INVENTORY_ITEM_ID
2142         AND 	       S.ORGANIZATION_ID = I.ORGANIZATION_ID
2143         AND         S.SD_DATE < NVL(p_itf, S.SD_DATE + 1)
2144         AND         NVL(S.DEMAND_CLASS, NVL(p_default_dmd_class,'@@@')) =
2145                              DECODE(R.DEMAND_CLASS_ATP_FLAG,
2146                              1, NVL(P_DEMAND_CLASS, NVL(p_default_dmd_class,'@@@')),
2147                              NVL(S.DEMAND_CLASS, NVL(p_default_dmd_class,'@@@')))
2148         AND         S.SD_QTY <> 0
2149         )
2150         group by  SD_DATE
2151         order by SD_DATE; --4698199
2152 EXCEPTION
2153         WHEN OTHERS THEN
2154                 IF PG_DEBUG in ('Y', 'C') THEN
2155                         msc_sch_wb.atp_debug('Get_Mat_Avail_Pf_Ods_Summ: ' || 'Error occurred: ' || to_char(sqlcode) || ':' || SQLERRM);
2156                 END IF;
2157                 x_return_status := FND_API.G_RET_STS_ERROR;
2158 
2159 END Get_Mat_Avail_Pf_Ods_Summ;
2160 
2161 /*--Get_Mat_Avail_Pf_Ods----------------------------------------------------
2162 |  o  Existing code for PF ODS ATP moved to this procedure.
2163 +-------------------------------------------------------------------------*/
2164 PROCEDURE Get_Mat_Avail_Pf_Ods(
2165         p_item_id                       IN      NUMBER,
2166         p_org_id                        IN      NUMBER,
2167         p_instance_id                   IN      NUMBER,
2168         p_plan_id                       IN      NUMBER,
2169         p_cal_code                      IN      VARCHAR2,
2170         p_sysdate_seq_num               IN      NUMBER,
2171         p_sys_next_date                 IN      DATE,
2172         p_demand_class                  IN      VARCHAR2,
2173         p_default_atp_rule_id           IN      NUMBER,
2174         p_default_dmd_class             IN      VARCHAR2,
2175         p_itf                           IN      DATE,
2176         x_atp_dates                     OUT     NOCOPY MRP_ATP_PUB.date_arr,
2177         x_atp_qtys                      OUT     NOCOPY MRP_ATP_PUB.number_arr,
2178         x_return_status                 OUT     NOCOPY VARCHAR2
2179 ) IS
2180         -- local variables
2181         l_sysdate               date := sysdate;
2182 
2183 BEGIN
2184         IF PG_DEBUG in ('Y', 'C') THEN
2185            msc_sch_wb.atp_debug('Begin Get_Mat_Avail_Pf_Ods');
2186         END IF;
2187 
2188         -- Initializing API return code
2189         x_return_status := FND_API.G_RET_STS_SUCCESS;
2190 
2191         -- SQL Query changes Begin 2640489
2192         SELECT 	SD_DATE, SUM(SD_QTY)
2193         BULK COLLECT INTO x_atp_dates, x_atp_qtys
2194         FROM (
2195         SELECT  C.PRIOR_DATE SD_DATE,
2196                 -1* D.USING_REQUIREMENT_QUANTITY SD_QTY
2197     FROM        MSC_CALENDAR_DATES C,
2198 		MSC_DEMANDS D,
2199                 MSC_ATP_RULES R,
2200                 MSC_SYSTEM_ITEMS I,
2201                 MSC_SYSTEM_ITEMS I0
2202     WHERE       I0.SR_INVENTORY_ITEM_ID = p_item_id
2203     AND         I0.ORGANIZATION_ID = p_org_id
2204     AND         I0.SR_INSTANCE_ID = p_instance_id
2205     AND         I0.PLAN_ID = p_plan_id
2206     AND         I.PRODUCT_FAMILY_ID = I0.INVENTORY_ITEM_ID
2207     AND         I.ORGANIZATION_ID = I0.ORGANIZATION_ID
2208     AND		I.SR_INSTANCE_ID = I0.SR_INSTANCE_ID
2209     AND		I.PLAN_ID = I0.PLAN_ID
2210     AND         R.RULE_ID (+) = NVL(I.ATP_RULE_ID, p_default_atp_rule_id)
2211     AND		R.SR_INSTANCE_ID (+)= I.SR_INSTANCE_ID
2212     AND		D.PLAN_ID = I.PLAN_ID
2213     AND		D.SR_INSTANCE_ID = I.SR_INSTANCE_ID
2214     AND		D.INVENTORY_ITEM_ID = I.INVENTORY_ITEM_ID
2215     AND 	D.ORGANIZATION_ID = I.ORGANIZATION_ID
2216     AND         USING_REQUIREMENT_QUANTITY <> 0
2217     AND         D.ORIGINATION_TYPE in (
2218                 DECODE(R.INCLUDE_DISCRETE_WIP_DEMAND, 1, 3, -1),
2219                 DECODE(R.INCLUDE_FLOW_SCHEDULE_DEMAND, 1, 25, -1),
2220                 DECODE(R.INCLUDE_USER_DEFINED_DEMAND, 1, 42, -1),
2221                 DECODE(R.INCLUDE_NONSTD_WIP_RECEIPTS, 1, 2, -1),
2222                 DECODE(R.INCLUDE_REP_WIP_DEMAND, 1, 4, -1))
2223     AND		C.CALENDAR_CODE = p_cal_code
2224     AND		C.EXCEPTION_SET_ID = G_CAL_EXC_SET_ID
2225     AND         C.SR_INSTANCE_ID = I0.SR_INSTANCE_ID
2226     -- since we store repetitive schedule demand in different ways for
2227     -- ods (total quantity on start date) and pds  (daily quantity from
2228     -- start date to end date), we need to make sure we only select work day
2229     -- for pds's repetitive schedule demand.
2230     AND         C.CALENDAR_DATE BETWEEN TRUNC(D.USING_ASSEMBLY_DEMAND_DATE) AND
2231                 TRUNC(NVL(D.ASSEMBLY_DEMAND_COMP_DATE,
2232                           D.USING_ASSEMBLY_DEMAND_DATE))
2233                 -- new clause 2640489, DECODE is also OR, Explicit OR gives CBO choices
2234     AND         (R.PAST_DUE_DEMAND_CUTOFF_FENCE is NULL OR
2235                  C.PRIOR_SEQ_NUM >= p_sysdate_seq_num - R.PAST_DUE_DEMAND_CUTOFF_FENCE)
2236     AND         C.PRIOR_DATE < NVL(p_itf, C.PRIOR_DATE + 1)
2237                 -- new clause 2640489, DECODE is also OR, Explicit OR gives CBO choices
2238     AND         (R.DEMAND_CLASS_ATP_FLAG <> 1 OR
2239                  NVL(D.DEMAND_CLASS, NVL(p_default_dmd_class,'@@@')) =
2240                    NVL(P_DEMAND_CLASS, NVL(p_default_dmd_class,'@@@')) )
2241     UNION ALL
2242     -- bug 2461071 to_date and trunc
2243     SELECT      DECODE(D.RESERVATION_TYPE, 2, p_sys_next_date, TRUNC(D.REQUIREMENT_DATE)) SD_DATE, --bug 2287148
2244                 -1*(D.PRIMARY_UOM_QUANTITY-GREATEST(NVL(D.RESERVATION_QUANTITY,0),
2245                     D.COMPLETED_QUANTITY)) SD_QTY
2246     FROM
2247                 -- Bug 1756263, performance fix, use EXISTS subquery instead.
2248 		--MSC_CALENDAR_DATES C,
2249 		MSC_SALES_ORDERS D,
2250                 MSC_ATP_RULES R,
2251                 MSC_SYSTEM_ITEMS I,
2252                 MSC_SYSTEM_ITEMS I0,
2253                 MSC_CALENDAR_DATES C
2254     WHERE       I0.SR_INVENTORY_ITEM_ID = p_item_id
2255     AND         I0.ORGANIZATION_ID = p_org_id
2256     AND         I0.SR_INSTANCE_ID = p_instance_id
2257     AND         I0.PLAN_ID = p_plan_id
2258     AND         I.PRODUCT_FAMILY_ID = I0.INVENTORY_ITEM_ID
2259     AND         I.ORGANIZATION_ID = I0.ORGANIZATION_ID
2260     AND         I.SR_INSTANCE_ID = I0.SR_INSTANCE_ID
2261     AND         I.PLAN_ID = I0.PLAN_ID
2262     AND         R.RULE_ID (+) = NVL(I.ATP_RULE_ID, p_default_atp_rule_id)
2263     AND         R.SR_INSTANCE_ID (+)= I.SR_INSTANCE_ID
2264     AND		D.SR_INSTANCE_ID = I.SR_INSTANCE_ID
2265     AND		D.INVENTORY_ITEM_ID = I.INVENTORY_ITEM_ID
2266     AND 	D.ORGANIZATION_ID = I.ORGANIZATION_ID
2267     AND         D.DEMAND_SOURCE_TYPE <> DECODE(R.INCLUDE_SALES_ORDERS,2,2,-1)
2268     AND         D.DEMAND_SOURCE_TYPE <> DECODE(R.INCLUDE_INTERNAL_ORDERS,2,8,-1)
2269     AND         D.PRIMARY_UOM_QUANTITY > GREATEST(NVL(D.RESERVATION_QUANTITY,0),
2270                 D.COMPLETED_QUANTITY)
2271     AND         DECODE(MSC_ATP_PVT.G_APPS_VER,3,D.COMPLETED_QUANTITY,0) = 0 -- 2300767
2272     AND         (D.SUBINVENTORY IS NULL OR D.SUBINVENTORY IN
2273                    (SELECT S.SUB_INVENTORY_CODE
2274                     FROM   MSC_SUB_INVENTORIES S
2275                     WHERE  S.ORGANIZATION_ID=D.ORGANIZATION_ID
2276                     AND    S.PLAN_ID = I.PLAN_ID
2277                     AND    S.SR_INSTANCE_ID = D.SR_INSTANCE_ID
2278                     AND    S.INVENTORY_ATP_CODE =DECODE(R.DEFAULT_ATP_SOURCES,
2279                                    1, 1, NULL, 1, S.INVENTORY_ATP_CODE)
2280                     AND    S.NETTING_TYPE =DECODE(R.DEFAULT_ATP_SOURCES,
2281                                    2, 1, S.NETTING_TYPE)))
2282     AND         (D.RESERVATION_TYPE = 2
2283                  OR D.PARENT_DEMAND_ID IS NULL
2284                  OR (D.RESERVATION_TYPE = 3 AND
2285                      ((R.INCLUDE_DISCRETE_WIP_RECEIPTS = 1) or
2286                       (R.INCLUDE_NONSTD_WIP_RECEIPTS = 1))))
2287                 -- new clause, remove existing Exists Query 2640489
2288     AND      (R.PAST_DUE_DEMAND_CUTOFF_FENCE is NULL OR
2289                  C.PRIOR_SEQ_NUM >= p_sysdate_seq_num - R.PAST_DUE_DEMAND_CUTOFF_FENCE)
2290     AND      C.CALENDAR_CODE = p_cal_code
2291     AND      C.SR_INSTANCE_ID = I.SR_INSTANCE_ID
2292     AND      C.EXCEPTION_SET_ID = -1
2293     AND      C.CALENDAR_DATE = TRUNC(D.REQUIREMENT_DATE)
2294     AND      C.PRIOR_DATE < NVL(p_itf, C.PRIOR_DATE + 1)
2295                 -- new clause 2640489, DECODE is also OR, Explicit OR gives CBO choices
2296      AND        (R.DEMAND_CLASS_ATP_FLAG <> 1
2297                  OR NVL(D.DEMAND_CLASS, NVL(p_default_dmd_class,'@@@'))
2298                   = NVL(P_DEMAND_CLASS, NVL(p_default_dmd_class,'@@@')) )
2299     UNION ALL
2300     SELECT      -- C.NEXT_DATE SD_DATE, -- 2859130
2301                 C.CALENDAR_DATE SD_DATE,
2302                 --- bug 1843471, 2563139
2303                 Decode(order_type,
2304                 30, Decode(Sign(S.Daily_rate * (TRUNC(C.Calendar_date) -  TRUNC(S.FIRST_UNIT_START_DATE))- S.qty_completed),
2305                              -1,S.Daily_rate* (TRUNC(C.Calendar_date) - TRUNC(S.First_Unit_Start_date) +1)- S.qty_completed,
2306                               S.Daily_rate),
2307                 -- Bug 2132288, 2442009
2308                 5, NVL(S.DAILY_RATE, NVL(S.FIRM_QUANTITY,S.NEW_ORDER_QUANTITY)),
2309                 -- End Bug 2132288, 2442009
2310 
2311                  -- Bug 2439264, for OPM, lots with order_processing = "N" will be populated with
2312                  -- non_nettable_qty and need to be excluded from ATP calculations.
2313 
2314                     (NVL(S.FIRM_QUANTITY,S.NEW_ORDER_QUANTITY) - NVL(S.NON_NETTABLE_QTY, 0)) )SD_QTY
2315                 -- NVL(S.FIRM_QUANTITY,S.NEW_ORDER_QUANTITY) )SD_QTY
2316     FROM        MSC_CALENDAR_DATES C,
2317 		MSC_SUPPLIES S,
2318                 MSC_ATP_RULES R,
2319                 MSC_SYSTEM_ITEMS I,
2320                 MSC_SYSTEM_ITEMS I0,  --Bug 13072988
2321                 MSC_SUB_INVENTORIES MSI
2322     WHERE       I0.SR_INVENTORY_ITEM_ID = p_item_id  -- Bug 13072988, aggregate the supply of member-items
2323     AND         I0.ORGANIZATION_ID = p_org_id        -- as we are aggregating the demands also.
2324     AND         I0.SR_INSTANCE_ID = p_instance_id
2325     AND         I0.PLAN_ID = p_plan_id
2326     AND         I.PRODUCT_FAMILY_ID = I0.INVENTORY_ITEM_ID
2327     AND         I.ORGANIZATION_ID = I0.ORGANIZATION_ID
2328     AND         I.SR_INSTANCE_ID = I0.SR_INSTANCE_ID
2329     AND         I.PLAN_ID = I0.PLAN_ID
2330     AND         R.RULE_ID (+) = NVL(I.ATP_RULE_ID, p_default_atp_rule_id)
2331     AND         R.SR_INSTANCE_ID (+)= I.SR_INSTANCE_ID
2332     AND		S.PLAN_ID = I.PLAN_ID
2333     AND		S.SR_INSTANCE_ID = I.SR_INSTANCE_ID
2334     AND		S.INVENTORY_ITEM_ID = I.INVENTORY_ITEM_ID
2335     AND 	S.ORGANIZATION_ID = I.ORGANIZATION_ID
2336     ---bug 1843471
2337     --AND         NVL(S.FIRM_QUANTITY,S.NEW_ORDER_QUANTITY) <> 0 -- 1243985
2338                 -- Bug 2132288, 2442009, 2453938
2339                 -- Do not include supplies equal to 0 as per 1243985
2340                 -- However at the same time, support negative supplies as per Bug 2362079 use ABS.
2341                 -- Support Repetitive schedules as per 1843471
2342                 -- Support Repetitive MPS as per 2132288, 2442009
2343     AND         Decode(S.order_type, 30, S.Daily_rate* (TRUNC(C.Calendar_date) - TRUNC(S.First_Unit_Start_date) + 1),
2344                                      5, NVL(S.Daily_rate, ABS(NVL(S.FIRM_QUANTITY,S.NEW_ORDER_QUANTITY)) ),
2345                         ABS(NVL(S.FIRM_QUANTITY,S.NEW_ORDER_QUANTITY)) ) >
2346                       Decode(S.order_type, 30, S.qty_completed,0)
2347                 -- End Bug 2132288, 2442009, 2453938
2348     AND         (S.ORDER_TYPE IN (
2349                 DECODE(R.INCLUDE_PURCHASE_ORDERS, 1, 1, -1),
2350                 DECODE(R.INCLUDE_PURCHASE_ORDERS, 1, 8, -1), -- 1882898
2351                 DECODE(R.INCLUDE_DISCRETE_WIP_RECEIPTS, 1, 3, -1),
2352                 DECODE(R.INCLUDE_REP_WIP_RECEIPTS, 1, 30, -1),
2353                 DECODE(R.INCLUDE_NONSTD_WIP_RECEIPTS, 1, 7, -1),
2354                 DECODE(R.INCLUDE_NONSTD_WIP_RECEIPTS, 1, 15, -1),
2355                 DECODE(R.INCLUDE_INTERORG_TRANSFERS, 1, 11, -1),
2356                 DECODE(R.INCLUDE_INTERORG_TRANSFERS, 1, 12, -1),
2357                 DECODE(R.INCLUDE_ONHAND_AVAILABLE, 1, 18, -1),
2358                 DECODE(R.INCLUDE_INTERNAL_REQS, 1, 2, -1),
2359                 DECODE(R.INCLUDE_SUPPLIER_REQS, 1, 2, -1),
2360                 DECODE(R.INCLUDE_USER_DEFINED_SUPPLY, 1, 41, -1),
2361                 DECODE(R.INCLUDE_FLOW_SCHEDULE_RECEIPTS, 1, 27, -1),
2362                 DECODE(R.INCLUDE_FLOW_SCHEDULE_RECEIPTS, 1, 28, -1))
2363                 OR
2364                 ((R.INCLUDE_REP_MPS = 1 OR R.INCLUDE_DISCRETE_MPS = 1) AND
2365                 S.ORDER_TYPE = 5
2366 		-- bug 2461071
2367                 AND exists (SELECT '1'
2368                             FROM    MSC_DESIGNATORS
2369                             WHERE   INVENTORY_ATP_FLAG = 1
2370                             AND     DESIGNATOR_TYPE = 2
2371                             AND     DESIGNATOR_ID = S.SCHEDULE_DESIGNATOR_ID
2372                             AND     DECODE(R.demand_class_atp_flag,1,
2373                                     nvl(demand_class,
2374                                     nvl(p_default_dmd_class,'@@@')),'@@@') =
2375                                     DECODE(R.demand_class_atp_flag,1,
2376                                     nvl(p_demand_class,
2377                                     nvl(p_default_dmd_class,'@@@')),'@@@')
2378 )))
2379                 --AND MSC_ATP_FUNC.MPS_ATP(S.SCHEDULE_DESIGNATOR_ID) = 1))
2380     AND		C.CALENDAR_CODE = p_cal_code
2381     AND		C.EXCEPTION_SET_ID = G_CAL_EXC_SET_ID
2382     AND         C.SR_INSTANCE_ID = I.SR_INSTANCE_ID
2383                  -- Bug 2132288, 2442009
2384     AND         C.CALENDAR_DATE BETWEEN TRUNC(NVL(S.FIRM_DATE,S.NEW_SCHEDULE_DATE))
2385                     AND TRUNC(NVL(DECODE(S.ORDER_TYPE, 5, S.LAST_UNIT_START_DATE,
2386                                    S.LAST_UNIT_COMPLETION_DATE), NVL(S.FIRM_DATE,S.NEW_SCHEDULE_DATE)))
2387     AND         DECODE(DECODE(S.ORDER_TYPE, 5, S.LAST_UNIT_START_DATE,
2388                                    S.LAST_UNIT_COMPLETION_DATE),
2389                        NULL, C.NEXT_SEQ_NUM, C.SEQ_NUM) IS NOT NULL
2390                  -- End Bug 2132288, 2442009
2391                  -- new clause 2640489, SIMPLIFY FOR CBO
2392     AND         (S.ORDER_TYPE = 18
2393                  OR R.PAST_DUE_SUPPLY_CUTOFF_FENCE is NULL
2394                  OR C.NEXT_SEQ_NUM >= p_sysdate_seq_num - R.PAST_DUE_SUPPLY_CUTOFF_FENCE)
2395     AND         C.NEXT_DATE >= DECODE(S.ORDER_TYPE, 27, TRUNC(l_sysdate),
2396                                                 28, TRUNC(l_sysdate),
2397                                                     C.NEXT_DATE)
2398     AND         C.NEXT_DATE < NVL(p_itf, C.NEXT_DATE + 1)
2399     AND         (R.DEMAND_CLASS_ATP_FLAG <> 1
2400                  OR S.ORDER_TYPE = 5
2401                  OR NVL(S.DEMAND_CLASS, NVL(p_default_dmd_class,'@@@')) =
2402                     NVL(P_DEMAND_CLASS, NVL(p_default_dmd_class,'@@@')) )
2403 					 ---bug 1735580
2404                 --- filter out non-atpable sub-inventories
2405     AND          MSI.plan_id (+) =  p_plan_id
2406     AND          MSI.organization_id (+) = p_org_id
2407     AND          MSI.sr_instance_id (+) =  p_instance_id
2408     --aND          S.subinventory_code = (+) MSI.sub_inventory_code
2409     AND          MSI.sub_inventory_code (+) = S.subinventory_code
2410     AND          NVL(MSI.inventory_atp_code,1) <> 2 -- filter out non-atpable subinventories
2411     -- SQL Query changes End 2640489
2412 )
2413 GROUP BY SD_DATE
2414 order by SD_DATE; --4698199
2415 
2416 EXCEPTION
2417         WHEN OTHERS THEN
2418                 IF PG_DEBUG in ('Y', 'C') THEN
2419                         msc_sch_wb.atp_debug('Get_Mat_Avail_Pf_Ods: ' || 'Error occurred: ' || to_char(sqlcode) || ':' || SQLERRM);
2420                 END IF;
2421                 x_return_status := FND_API.G_RET_STS_ERROR;
2422 
2423 END Get_Mat_Avail_Pf_Ods;
2424 
2425 /*--Get_Mat_Avail_Pf_Pds_Summ----------------------------------------------------
2426 |  o Called for unallocated time phased PF atp for PDS summary
2427 |  o Differences from non summary SQL are :
2428 |    - Additional union with MSC_ATP_SUMMARY_SD
2429 |    - Decode in quantity in SQL on msc_alloc_demands to consider unscheduled
2430 |      orders as dummy supplies
2431 |    - Additional join with MSC_PLANS in the SQLs on supplies and demands to
2432 |      filter records based on refresh number
2433 |    - Filter on allocated_quantity=0 and origination_type=51 removed in the
2434 |      demands SQL so as to consider copy SOs and dummy supplies respectiviely.
2435 +-------------------------------------------------------------------------------*/
2436 PROCEDURE Get_Mat_Avail_Pf_Pds_Summ(
2437         p_sr_member_id                  IN      NUMBER,
2438         p_sr_family_id                  IN      NUMBER,
2439         p_org_id                        IN      NUMBER,
2440         p_instance_id                   IN      NUMBER,
2441         p_plan_id                       IN      NUMBER,
2442         p_itf                           IN      DATE,
2443         p_refresh_number                IN      NUMBER,     -- For summary enhancement
2444         x_atp_dates                     OUT     NOCOPY MRP_ATP_PUB.date_arr,
2445         x_atp_qtys                      OUT     NOCOPY MRP_ATP_PUB.number_arr,
2446         x_return_status                 OUT     NOCOPY VARCHAR2
2447 ) IS
2448 
2449 BEGIN
2450         IF PG_DEBUG in ('Y', 'C') THEN
2451            msc_sch_wb.atp_debug('Begin Get_Mat_Avail_Pf_Pds_Summ');
2452         END IF;
2453 
2454         -- Initializing API return code
2455         x_return_status := FND_API.G_RET_STS_SUCCESS;
2456 
2457         SELECT 	SD_DATE, SUM(SD_QTY)
2458         BULK COLLECT INTO x_atp_dates, x_atp_qtys
2459         FROM (
2460             SELECT      /*+ INDEX(S MSC_ATP_SUMMARY_SD_U1) */
2461                         SD_DATE, SD_QTY
2462             FROM        MSC_ATP_SUMMARY_SD S,
2463                         MSC_SYSTEM_ITEMS I
2464             WHERE       I.SR_INVENTORY_ITEM_ID in (p_sr_member_id, p_sr_family_id)
2465             AND         I.ORGANIZATION_ID = p_org_id
2466             AND         I.SR_INSTANCE_ID = p_instance_id
2467             AND         I.PLAN_ID = p_plan_id
2468             AND         S.PLAN_ID = I.PLAN_ID
2469             AND         S.SR_INSTANCE_ID = I.SR_INSTANCE_ID
2470             AND         S.INVENTORY_ITEM_ID = I.INVENTORY_ITEM_ID
2471             AND         S.ORGANIZATION_ID = I.ORGANIZATION_ID
2472             AND         S.SD_DATE < NVL(p_itf, S.SD_DATE + 1)
2473 
2474             UNION ALL
2475             --bug3700564 added trunc
2476             SELECT      TRUNC(AD.DEMAND_DATE) SD_DATE,
2477                         decode(AD.ALLOCATED_QUANTITY,           -- Consider unscheduled orders as dummy supplies
2478                                0, OLD_ALLOCATED_QUANTITY,       -- For summary enhancement
2479                                   -1 * AD.ALLOCATED_QUANTITY) SD_QTY
2480             FROM        MSC_ALLOC_DEMANDS AD,
2481                         MSC_SYSTEM_ITEMS I,
2482                         MSC_PLANS P                             -- For summary enhancement
2483             WHERE       I.SR_INVENTORY_ITEM_ID in (p_sr_member_id, p_sr_family_id)
2484             AND         I.ORGANIZATION_ID = p_org_id
2485             AND         I.SR_INSTANCE_ID = p_instance_id
2486             AND         I.PLAN_ID = p_plan_id
2487             AND         AD.PLAN_ID = I.PLAN_ID
2488             AND         AD.SR_INSTANCE_ID = I.SR_INSTANCE_ID
2489             AND         AD.INVENTORY_ITEM_ID = I.INVENTORY_ITEM_ID
2490             AND         AD.ORGANIZATION_ID = I.ORGANIZATION_ID
2491             --bug3700564 added trunc
2492             AND         TRUNC(AD.DEMAND_DATE) < NVL(p_itf, TRUNC(AD.DEMAND_DATE) + 1)
2493             AND         P.PLAN_ID = AD.PLAN_ID
2494             AND         (AD.REFRESH_NUMBER > P.LATEST_REFRESH_NUMBER
2495                         OR AD.REFRESH_NUMBER = p_refresh_number)
2496 
2497             UNION ALL
2498             --bug3700564 added trunc
2499             SELECT      TRUNC(SA.SUPPLY_DATE) SD_DATE,
2500                         SA.ALLOCATED_QUANTITY SD_QTY
2501             FROM        MSC_ALLOC_SUPPLIES SA,
2502                         MSC_SYSTEM_ITEMS I,
2503                         MSC_PLANS P                             -- For summary enhancement
2504             WHERE       I.SR_INVENTORY_ITEM_ID in (p_sr_member_id, p_sr_family_id)
2505             AND         I.ORGANIZATION_ID = p_org_id
2506             AND         I.SR_INSTANCE_ID = p_instance_id
2507             AND         I.PLAN_ID = p_plan_id
2508             AND         SA.PLAN_ID = I.PLAN_ID
2509             AND         SA.SR_INSTANCE_ID = I.SR_INSTANCE_ID
2510             AND         SA.INVENTORY_ITEM_ID = I.INVENTORY_ITEM_ID
2511             AND         SA.ORGANIZATION_ID = I.ORGANIZATION_ID
2512             AND         SA.ALLOCATED_QUANTITY <> 0
2513             --bug3700564 added trunc
2514             AND         TRUNC(SA.SUPPLY_DATE) < NVL(p_itf, TRUNC(SA.SUPPLY_DATE) + 1)
2515             AND         P.PLAN_ID = SA.PLAN_ID
2516             AND         (SA.REFRESH_NUMBER > P.LATEST_REFRESH_NUMBER
2517                         OR SA.REFRESH_NUMBER = p_refresh_number)
2518         )
2519         GROUP BY SD_DATE
2520         order by SD_DATE; --4698199
2521 
2522 EXCEPTION
2523         WHEN OTHERS THEN
2524                 IF PG_DEBUG in ('Y', 'C') THEN
2525                         msc_sch_wb.atp_debug('Get_Mat_Avail_Pf_Pds_Summ: ' || 'Error occurred: ' || to_char(sqlcode) || ':' || SQLERRM);
2526                 END IF;
2527                 x_return_status := FND_API.G_RET_STS_ERROR;
2528 
2529 END Get_Mat_Avail_Pf_Pds_Summ;
2530 
2531 /*--Get_Mat_Avail_Pf_Pds---------------------------------------------------------
2532 |  o  Called for unallocated Time Phased PF ATP
2533 |  o  The supply demand SQL in this procedure gets following:
2534 |       -  Bucketed demands (origination type 51) for member item upto ATF from
2535 |            msc_alloc_demands table.
2536 |       -  Bucketed demands for family after ATF from msc_alloc_demands table.
2537 |       -  Rollup supplies (order type 50) for member item upto ATF from
2538 |            msc_alloc_supplies table.
2539 |       -  Rollup supplies for family after ATF from msc_alloc_supplies table.
2540 +------------------------------------------------------------------------------*/
2541 PROCEDURE Get_Mat_Avail_Pf_Pds(
2542         p_sr_member_id                  IN      NUMBER,
2543         p_sr_family_id                  IN      NUMBER,
2544         p_org_id                        IN      NUMBER,
2545         p_instance_id                   IN      NUMBER,
2546         p_plan_id                       IN      NUMBER,
2547         p_itf                           IN      DATE,
2548         x_atp_dates                     OUT     NOCOPY MRP_ATP_PUB.date_arr,
2549         x_atp_qtys                      OUT     NOCOPY MRP_ATP_PUB.number_arr,
2550         x_return_status                 OUT     NOCOPY VARCHAR2
2551 ) IS
2552 
2553 BEGIN
2554         IF PG_DEBUG in ('Y', 'C') THEN
2555            msc_sch_wb.atp_debug('Begin Get_Mat_Avail_Pf_Pds');
2556         END IF;
2557 
2558         -- Initializing API return code
2559         x_return_status := FND_API.G_RET_STS_SUCCESS;
2560 
2561         SELECT 	SD_DATE, SUM(SD_QTY)
2562         BULK COLLECT INTO x_atp_dates, x_atp_qtys
2563         FROM (
2564             --bug3700564 added trunc
2565             SELECT      TRUNC(AD.DEMAND_DATE) SD_DATE,
2566                         -1 * AD.ALLOCATED_QUANTITY SD_QTY
2567             FROM        MSC_ALLOC_DEMANDS AD,
2568                         MSC_SYSTEM_ITEMS I
2569             WHERE       I.SR_INVENTORY_ITEM_ID in (p_sr_member_id, p_sr_family_id)
2570             AND         I.ORGANIZATION_ID = p_org_id
2571             AND         I.SR_INSTANCE_ID = p_instance_id
2572             AND         I.PLAN_ID = p_plan_id
2573             AND         AD.PLAN_ID = I.PLAN_ID
2574             AND         AD.SR_INSTANCE_ID = I.SR_INSTANCE_ID
2575             AND         AD.INVENTORY_ITEM_ID = I.INVENTORY_ITEM_ID
2576             AND         AD.ORGANIZATION_ID = I.ORGANIZATION_ID
2577             AND         AD.ORIGINATION_TYPE <> 52
2578             AND         AD.ALLOCATED_QUANTITY <> 0
2579             --bug3700564 added trunc
2580             AND         TRUNC(AD.DEMAND_DATE) < NVL(p_itf, TRUNC(AD.DEMAND_DATE) + 1)
2581             UNION ALL
2582             --bug3700564 added trunc
2583             SELECT      TRUNC(SA.SUPPLY_DATE) SD_DATE,
2584                         SA.ALLOCATED_QUANTITY SD_QTY
2585             FROM        MSC_ALLOC_SUPPLIES SA,
2586                         MSC_SYSTEM_ITEMS I
2587             WHERE       I.SR_INVENTORY_ITEM_ID in (p_sr_member_id, p_sr_family_id)
2588             AND         I.ORGANIZATION_ID = p_org_id
2589             AND         I.SR_INSTANCE_ID = p_instance_id
2590             AND         I.PLAN_ID = p_plan_id
2591             AND         SA.PLAN_ID = I.PLAN_ID
2592             AND         SA.SR_INSTANCE_ID = I.SR_INSTANCE_ID
2593             AND         SA.INVENTORY_ITEM_ID = I.INVENTORY_ITEM_ID
2594             AND         SA.ORGANIZATION_ID = I.ORGANIZATION_ID
2595             AND         SA.ALLOCATED_QUANTITY <> 0
2596             --bug3700564 added trunc
2597             AND         TRUNC(SA.SUPPLY_DATE) >= DECODE(SA.ORIGINAL_ORDER_TYPE,
2598                                                         27, TRUNC(SYSDATE),
2599                                                         28, TRUNC(SYSDATE),
2600                                                         TRUNC(SA.SUPPLY_DATE))
2601             AND         TRUNC(SA.SUPPLY_DATE) < NVL(p_itf, TRUNC(SA.SUPPLY_DATE) + 1)
2602         )
2603         GROUP BY SD_DATE
2604         order by SD_DATE; --4698199
2605 
2606 EXCEPTION
2607         WHEN OTHERS THEN
2608                 IF PG_DEBUG in ('Y', 'C') THEN
2609                         msc_sch_wb.atp_debug('Get_Mat_Avail_Pf_Pds: ' || 'Error occurred: ' || to_char(sqlcode) || ':' || SQLERRM);
2610                 END IF;
2611                 x_return_status := FND_API.G_RET_STS_ERROR;
2612 
2613 END Get_Mat_Avail_Pf_Pds;
2614 
2615 /*--Get_Mat_Avail_Pf_Ods_Dtls-----------------------------------------------
2616 |  o  Existing code for PF ODS details moved to this procedure.
2617 +-------------------------------------------------------------------------*/
2618 PROCEDURE Get_Mat_Avail_Pf_Ods_Dtls (
2619         p_item_id                       IN      NUMBER,
2620         p_request_item_id               IN      NUMBER,
2621         p_org_id                        IN      NUMBER,
2622         p_instance_id                   IN      NUMBER,
2623         p_plan_id                       IN      NUMBER,
2624         p_cal_code                      IN      VARCHAR2,
2625         p_sysdate_seq_num               IN      NUMBER,
2626         p_sys_next_date                 IN      DATE,
2627         p_demand_class                  IN      VARCHAR2,
2628         p_default_atp_rule_id           IN      NUMBER,
2629         p_default_dmd_class             IN      VARCHAR2,
2630         p_itf                           IN      DATE,
2631         p_level                         IN      NUMBER,
2632         p_scenario_id                   IN      NUMBER,
2633         p_identifier                    IN      NUMBER,
2634         x_return_status                 OUT     NOCOPY VARCHAR2
2635 ) IS
2636         l_null_num              NUMBER;
2637         l_null_char             VARCHAR2(1);
2638         l_null_date             DATE; --bug3814584
2639         l_sysdate               DATE := sysdate;
2640 
2641 BEGIN
2642         IF PG_DEBUG in ('Y', 'C') THEN
2643            msc_sch_wb.atp_debug('Begin Get_Mat_Avail_Pf_Ods_Dtls');
2644         END IF;
2645 
2646         -- Initializing API return code
2647         x_return_status := FND_API.G_RET_STS_SUCCESS;
2648 
2649         INSERT INTO msc_atp_sd_details_temp (
2650         	ATP_Level,
2651         	Order_line_id,
2652         	Scenario_Id,
2653         	Inventory_Item_Id,
2654         	Request_Item_Id,
2655         	Organization_Id,
2656         	Department_Id,
2657         	Resource_Id,
2658         	Supplier_Id,
2659         	Supplier_Site_Id,
2660         	From_Organization_Id,
2661         	From_Location_Id,
2662         	To_Organization_Id,
2663         	To_Location_Id,
2664         	Ship_Method,
2665         	UOM_code,
2666         	Supply_Demand_Type,
2667         	Supply_Demand_Source_Type,
2668         	Supply_Demand_Source_Type_Name,
2669         	Identifier1,
2670         	Identifier2,
2671         	Identifier3,
2672         	Identifier4,
2673         	Supply_Demand_Quantity,
2674         	Supply_Demand_Date,
2675         	Disposition_Type,
2676         	Disposition_Name,
2677         	Pegging_Id,
2678         	End_Pegging_Id,
2679         	creation_date,
2680         	created_by,
2681         	last_update_date,
2682         	last_updated_by,
2683         	last_update_login,
2684         	ORIG_CUSTOMER_SITE_NAME,--bug3263368
2685                 ORIG_CUSTOMER_NAME, --bug3263368
2686                 ORIG_DEMAND_CLASS, --bug3263368
2687                 ORIG_REQUEST_DATE --bug3263368
2688         )
2689 
2690         (        -- SQL Query changes Begin 2640489
2691         SELECT      p_level col1,
2692 		p_identifier col2,
2693                 p_scenario_id col3,
2694                 p_item_id col4 ,
2695                 p_request_item_id col5,
2696 		p_org_id col6,
2697                 l_null_num col7,
2698                 l_null_num col8,
2699                 l_null_num col9,
2700                 l_null_num col10,
2701                 l_null_num col11,
2702                 l_null_num col12,
2703                 l_null_num col13,
2704                 l_null_num col14,
2705 		l_null_char col15,
2706 		I.UOM_CODE col16,
2707 		1 col17, -- demand
2708 		D.ORIGINATION_TYPE col18,
2709                 l_null_char col19,
2710 		D.SR_INSTANCE_ID col20,
2711                 l_null_num col21,
2712 		D.DEMAND_ID col22,
2713 		l_null_num col23,
2714                 -1* D.USING_REQUIREMENT_QUANTITY col24,
2715 		C.PRIOR_DATE col25,
2716                 l_null_num col26,
2717                 DECODE(D.ORIGINATION_TYPE, 1, to_char(D.DISPOSITION_ID), D.ORDER_NUMBER) col27,
2718                        -- rajjain 04/25/2003 Bug 2771075
2719                        -- For Planned Order Demands We will populate disposition_id
2720                        -- in disposition_name column
2721                 l_null_num col28,
2722                 l_null_num col29,
2723 		l_sysdate,
2724 		G_USER_ID,
2725 		l_sysdate,
2726 		G_USER_ID,
2727 		G_USER_ID,
2728 		MTPS.LOCATION, --bug3263368
2729                 MTP.PARTNER_NAME, --bug3263368
2730                 D.DEMAND_CLASS, --bug3263368
2731                 DECODE(D.ORDER_DATE_TYPE_CODE,2,D.REQUEST_DATE,
2732                                                 D.REQUEST_SHIP_DATE) --bug3263368
2733     FROM        MSC_CALENDAR_DATES C,
2734 		MSC_DEMANDS D,
2735                 MSC_ATP_RULES R,
2736                 MSC_SYSTEM_ITEMS I,
2737                 MSC_SYSTEM_ITEMS I0,
2738                 MSC_TRADING_PARTNERS    MTP,--bug3263368
2739                 MSC_TRADING_PARTNER_SITES    MTPS --bug3263368
2740     WHERE       I0.SR_INVENTORY_ITEM_ID = p_item_id
2741     AND         I0.ORGANIZATION_ID = p_org_id
2742     AND		I0.SR_INSTANCE_ID = p_instance_id
2743     AND		I0.PLAN_ID = p_plan_id
2744     AND       	I.PRODUCT_FAMILY_ID = I0.INVENTORY_ITEM_ID
2745     AND         I.ORGANIZATION_ID = I0.ORGANIZATION_ID
2746     AND         I.SR_INSTANCE_ID = I0.SR_INSTANCE_ID
2747     AND         I.PLAN_ID = I0.PLAN_ID
2748     AND         R.RULE_ID (+) = NVL(I.ATP_RULE_ID, p_default_atp_rule_id)
2749     AND         R.SR_INSTANCE_ID (+) = I.SR_INSTANCE_ID
2750     AND		D.PLAN_ID = I.PLAN_ID
2751     AND		D.SR_INSTANCE_ID = I.SR_INSTANCE_ID
2752     AND		D.INVENTORY_ITEM_ID = I.INVENTORY_ITEM_ID
2753     AND 	D.ORGANIZATION_ID = I.ORGANIZATION_ID
2754     AND         USING_REQUIREMENT_QUANTITY <> 0
2755     AND	        D.ORIGINATION_TYPE in (
2756                 DECODE(R.INCLUDE_DISCRETE_WIP_DEMAND, 1, 3, -1),
2757                 DECODE(R.INCLUDE_FLOW_SCHEDULE_DEMAND, 1, 25, -1),
2758                 DECODE(R.INCLUDE_USER_DEFINED_DEMAND, 1, 42, -1),
2759                 DECODE(R.INCLUDE_NONSTD_WIP_RECEIPTS, 1, 2, -1),
2760                 DECODE(R.INCLUDE_REP_WIP_DEMAND, 1, 4, -1))
2761     AND         D.SHIP_TO_SITE_ID = MTPS.PARTNER_SITE_ID(+) --bug3263368
2762     AND         D.CUSTOMER_ID = MTP.PARTNER_ID(+)--bug3263368
2763     AND		C.CALENDAR_CODE=p_cal_code
2764     AND		C.EXCEPTION_SET_ID=G_CAL_EXC_SET_ID
2765     AND         C.SR_INSTANCE_ID = p_instance_id
2766     -- since we store repetitive schedule demand in different ways for
2767     -- ods (total quantity on start date) and pds  (daily quantity from
2768     -- start date to end date), we need to make sure we only select work day
2769     -- for pds's repetitive schedule demand.
2770     AND         C.CALENDAR_DATE BETWEEN TRUNC(D.USING_ASSEMBLY_DEMAND_DATE) AND
2771                 TRUNC(NVL(D.ASSEMBLY_DEMAND_COMP_DATE,
2772                           D.USING_ASSEMBLY_DEMAND_DATE))
2773     AND         (R.PAST_DUE_DEMAND_CUTOFF_FENCE is NULL OR
2774                  C.PRIOR_SEQ_NUM >= p_sysdate_seq_num - R.PAST_DUE_DEMAND_CUTOFF_FENCE)
2775     AND         C.PRIOR_DATE < NVL(p_itf, C.PRIOR_DATE + 1)
2776     AND         (R.DEMAND_CLASS_ATP_FLAG <> 1 OR
2777                  NVL(D.DEMAND_CLASS, NVL(p_default_dmd_class,'@@@')) =
2778                    NVL(P_DEMAND_CLASS, NVL(p_default_dmd_class,'@@@')) )
2779     UNION ALL
2780     SELECT      p_level col1,
2781                 p_identifier col2,
2782                 p_scenario_id col3,
2783                 p_item_id col4,
2784                 p_request_item_id col5,
2785                 p_org_id col6,
2786                 l_null_num col7,
2787                 l_null_num col8,
2788                 l_null_num col9,
2789                 l_null_num col10,
2790                 l_null_num col11,
2791                 l_null_num col12,
2792                 l_null_num col13,
2793                 l_null_num col14,
2794                 l_null_char col15,
2795                 I.UOM_CODE col16,
2796                 1 col17, -- demand
2797                 DECODE(D.RESERVATION_TYPE, 1, 6, 10)  col18,
2798                 l_null_char col19,
2799                 D.SR_INSTANCE_ID col20,
2800                 l_null_num col21,
2801                 to_number(D.DEMAND_SOURCE_LINE) col22,
2802                 l_null_num col23,
2803                 -1*(D.PRIMARY_UOM_QUANTITY-
2804                 GREATEST(NVL(D.RESERVATION_QUANTITY,0), D.COMPLETED_QUANTITY))
2805                 col24,
2806                 --C.PRIOR_DATE
2807                 -- bug 2461071 to_date
2808                 DECODE(D.RESERVATION_TYPE,2,p_sys_next_date, TRUNC(D.REQUIREMENT_DATE)) col25 ,
2809                 l_null_num col26,
2810                 D.SALES_ORDER_NUMBER col27,
2811                 l_null_num col28,
2812                 l_null_num col29,
2813 		l_sysdate,
2814 		G_USER_ID,
2815 		l_sysdate,
2816 		G_USER_ID,
2817 		G_USER_ID,
2818 	        MTPS.LOCATION, --bug3263368
2819                 MTP.PARTNER_NAME, --bug3263368
2820                 D.DEMAND_CLASS, --bug3263368
2821                 DECODE(D.ORDER_DATE_TYPE_CODE,2,D.REQUEST_DATE,
2822                                                 D.REQUEST_SHIP_DATE) --bug3263368
2823     FROM
2824 		MSC_SALES_ORDERS D,
2825                 MSC_ATP_RULES R,
2826                 MSC_SYSTEM_ITEMS I,
2827                 MSC_SYSTEM_ITEMS I0,
2828                 MSC_CALENDAR_DATES C,
2829                 MSC_TRADING_PARTNERS    MTP,--bug3263368
2830                 MSC_TRADING_PARTNER_SITES    MTPS --bug3263368
2831     WHERE       I0.SR_INVENTORY_ITEM_ID = p_item_id
2832     AND         I0.ORGANIZATION_ID = p_org_id
2833     AND         I0.SR_INSTANCE_ID = p_instance_id
2834     AND         I0.PLAN_ID = p_plan_id
2835     AND         I.PRODUCT_FAMILY_ID = I0.INVENTORY_ITEM_ID
2836     AND         I.ORGANIZATION_ID = I0.ORGANIZATION_ID
2837     AND         I.SR_INSTANCE_ID = I0.SR_INSTANCE_ID
2838     AND         I.PLAN_ID = I0.PLAN_ID
2839     AND         R.RULE_ID (+) = NVL(I.ATP_RULE_ID, p_default_atp_rule_id)
2840     AND         R.SR_INSTANCE_ID (+) = I.SR_INSTANCE_ID
2841     AND		D.SR_INSTANCE_ID = I.SR_INSTANCE_ID
2842     AND		D.INVENTORY_ITEM_ID = I.INVENTORY_ITEM_ID
2843     AND 	D.ORGANIZATION_ID = I.ORGANIZATION_ID
2844     AND         D.DEMAND_SOURCE_TYPE <> DECODE(R.INCLUDE_SALES_ORDERS,2,2,-1)
2845     AND         D.DEMAND_SOURCE_TYPE <> DECODE(R.INCLUDE_INTERNAL_ORDERS,2,8,-1)
2846     AND         D.PRIMARY_UOM_QUANTITY > GREATEST(NVL(D.RESERVATION_QUANTITY,0),
2847                 D.COMPLETED_QUANTITY)
2848     AND         DECODE(MSC_ATP_PVT.G_APPS_VER,3,D.COMPLETED_QUANTITY,0) = 0 -- 2300767
2849     AND         (D.SUBINVENTORY IS NULL OR D.SUBINVENTORY IN
2850                    (SELECT S.SUB_INVENTORY_CODE
2851                     FROM   MSC_SUB_INVENTORIES S
2852                     WHERE  S.ORGANIZATION_ID=D.ORGANIZATION_ID
2853                     AND    S.PLAN_ID = I.PLAN_ID
2854                     AND    S.SR_INSTANCE_ID = D.SR_INSTANCE_ID
2855                     AND    S.INVENTORY_ATP_CODE =DECODE(R.DEFAULT_ATP_SOURCES,
2856                                    1, 1, NULL, 1, S.INVENTORY_ATP_CODE)
2857                     AND    S.NETTING_TYPE =DECODE(R.DEFAULT_ATP_SOURCES,
2858                                    2, 1, S.NETTING_TYPE)))
2859     AND         (D.RESERVATION_TYPE = 2
2860                  OR D.PARENT_DEMAND_ID IS NULL
2861                  OR (D.RESERVATION_TYPE = 3 AND
2862                      ((R.INCLUDE_DISCRETE_WIP_RECEIPTS = 1) or
2863                       (R.INCLUDE_NONSTD_WIP_RECEIPTS = 1))))
2864                 -- new clause, remove existing Exists Query 2640489
2865     AND         D.SHIP_TO_SITE_USE_ID = MTPS.PARTNER_SITE_ID(+) --bug3263368
2866     AND         D.CUSTOMER_ID = MTP.PARTNER_ID(+) --bug3263368
2867     AND      (R.PAST_DUE_DEMAND_CUTOFF_FENCE is NULL OR
2868                  C.PRIOR_SEQ_NUM >= p_sysdate_seq_num - R.PAST_DUE_DEMAND_CUTOFF_FENCE)
2869     AND      C.CALENDAR_CODE = p_cal_code
2870     AND      C.SR_INSTANCE_ID = I.SR_INSTANCE_ID
2871     AND      C.EXCEPTION_SET_ID = -1
2872     AND      C.CALENDAR_DATE = TRUNC(D.REQUIREMENT_DATE)
2873     AND      C.PRIOR_DATE < NVL(p_itf, C.PRIOR_DATE + 1)
2874      AND        (R.DEMAND_CLASS_ATP_FLAG <> 1
2875                  OR NVL(D.DEMAND_CLASS, NVL(p_default_dmd_class,'@@@'))
2876                   = NVL(P_DEMAND_CLASS, NVL(p_default_dmd_class,'@@@')) )
2877     UNION ALL
2878     SELECT      p_level col1,
2879                 p_identifier col2,
2880                 p_scenario_id col3,
2881                 p_item_id col4 ,
2882                 p_request_item_id col5,
2883                 p_org_id col6,
2884                 l_null_num col7,
2885                 l_null_num col8,
2886                 l_null_num col9,
2887                 l_null_num col10,
2888                 l_null_num col11,
2889                 l_null_num col12,
2890                 l_null_num col13,
2891                 l_null_num col14,
2892                 l_null_char col15,
2893                 I.UOM_CODE col16,
2894                 2 col17, -- supply
2895                 S.ORDER_TYPE col18,
2896                 l_null_char col19,
2897                 S.SR_INSTANCE_ID col20,
2898                 l_null_num col21,
2899                 S.TRANSACTION_ID col22,
2900                 l_null_num col23,
2901                 ---bug 1843471
2902                 --NVL(S.FIRM_QUANTITY,S.NEW_ORDER_QUANTITY) col24,
2903                 Decode(order_type,
2904                 30, Decode(Sign(S.Daily_rate * (TRUNC(C.Calendar_date) -
2905 				TRUNC(S.FIRST_UNIT_START_DATE) )- S.qty_completed),
2906                              -1,S.Daily_rate* (TRUNC(C.Calendar_date) - TRUNC(S.First_Unit_Start_date) +1)- S.qty_completed,
2907                               S.Daily_rate),
2908                 -- Bug 2132288, 2442009, 2563139
2909                 5, NVL(S.DAILY_RATE, NVL(S.FIRM_QUANTITY,S.NEW_ORDER_QUANTITY)),
2910                 -- End Bug 2132288, 2442009
2911 
2912                 -- Bug 2439264, for OPM, lots with order_processing = "N" will be populated with
2913                 -- non_nettable_qty and need to be excluded from ATP calculations.
2914 
2915                 (NVL(S.FIRM_QUANTITY,S.NEW_ORDER_QUANTITY) - NVL(S.NON_NETTABLE_QTY, 0)) ) col24,
2916 
2917                 -- NVL(S.FIRM_QUANTITY,S.NEW_ORDER_QUANTITY) ) col24,
2918                 C.NEXT_DATE col25,
2919                 l_null_num col26,
2920                 DECODE(S.ORDER_TYPE,
2921                        1, S.ORDER_NUMBER,
2922 		       2, S.ORDER_NUMBER,
2923 		       3, S.ORDER_NUMBER,
2924                        7, S.ORDER_NUMBER,
2925                        8, S.ORDER_NUMBER,
2926                        5, MSC_ATP_FUNC.Get_Designator(S.SCHEDULE_DESIGNATOR_ID),
2927                       11, S.ORDER_NUMBER,
2928                       12, S.ORDER_NUMBER,
2929                       14, S.ORDER_NUMBER,
2930                       15, S.ORDER_NUMBER,
2931                       27, S.ORDER_NUMBER,
2932                       28, S.ORDER_NUMBER,
2933                       41, S.ORDER_NUMBER, -- bug 4085497 'User Defined Supply'
2934                       --NULL) col27,
2935                       l_null_char) col27, -- bug 4365873 fixed as a part of this bug
2936                 l_null_num col28,
2937 		l_null_num col29,
2938 		l_sysdate,
2939 		G_USER_ID,
2940 		l_sysdate,
2941 		G_USER_ID,
2942 		G_USER_ID,
2943 		--null,--bug3263368 ORIG_CUSTOMER_SITE_NAME
2944 		--null, --bug3263368 ORIG_CUSTOMER_NAME
2945 		--null, --bug3263368 ORIG_DEMAND_CLASS
2946 		--null  --bug3263368 ORIG_REQUEST_DATE
2947 		l_null_char, --bug3814584
2948                 l_null_char, --bug3814584
2949                 l_null_char, --bug3814584
2950                 l_null_date  --bug3814584
2951     FROM        MSC_CALENDAR_DATES C,
2952 		MSC_SUPPLIES S,
2953                 MSC_ATP_RULES R,
2954                 MSC_SYSTEM_ITEMS I,
2955                 MSC_SYSTEM_ITEMS I0,  --Bug 13072988
2956                 MSC_SUB_INVENTORIES MSI
2957     WHERE       I0.SR_INVENTORY_ITEM_ID = p_item_id  -- Bug 13072988, aggregate the supply of member-items
2958     AND         I0.ORGANIZATION_ID = p_org_id        -- as we are aggregating the demands also.
2959     AND         I0.SR_INSTANCE_ID = p_instance_id
2960     AND         I0.PLAN_ID = p_plan_id
2961     AND         I.PRODUCT_FAMILY_ID = I0.INVENTORY_ITEM_ID
2962     AND         I.ORGANIZATION_ID = I0.ORGANIZATION_ID
2963     AND         I.SR_INSTANCE_ID = I0.SR_INSTANCE_ID
2964     AND         I.PLAN_ID = I0.PLAN_ID
2965     AND         R.RULE_ID (+) = NVL(I.ATP_RULE_ID, p_default_atp_rule_id)
2966     AND         R.SR_INSTANCE_ID (+) = I.SR_INSTANCE_ID
2967     AND		S.PLAN_ID = I.PLAN_ID
2968     AND		S.SR_INSTANCE_ID = I.SR_INSTANCE_ID
2969     AND		S.INVENTORY_ITEM_ID = I.INVENTORY_ITEM_ID
2970     AND 	S.ORGANIZATION_ID = I.ORGANIZATION_ID
2971     --- bug 1843471
2972     --AND         NVL(S.FIRM_QUANTITY,S.NEW_ORDER_QUANTITY) <> 0 -- 1243985
2973                 -- Bug 2132288, 2442009, 2453938
2974                 -- Do not include supplies equal to 0 as per 1243985
2975                 -- However at the same time, support negative supplies as per Bug 2362079 use ABS.
2976                 -- Support Repetitive schedules as per 1843471
2977                 -- Support Repetitive MPS as per 2132288, 2442009
2978 		-- TRUNC dates 2563139
2979     AND         Decode(S.order_type, 30, S.Daily_rate* (TRUNC(C.Calendar_date)
2980 					- TRUNC(S.First_Unit_Start_date) + 1),
2981                                      5, NVL(S.Daily_rate, ABS(NVL(S.FIRM_QUANTITY,S.NEW_ORDER_QUANTITY)) ),
2982                         ABS(NVL(S.FIRM_QUANTITY,S.NEW_ORDER_QUANTITY)) ) >
2983                       Decode(S.order_type, 30, S.qty_completed,0)
2984                 -- End Bug 2132288, 2442009, 2453938
2985     AND		(S.ORDER_TYPE IN (
2986 		DECODE(R.INCLUDE_PURCHASE_ORDERS, 1, 1, -1),
2987 		DECODE(R.INCLUDE_PURCHASE_ORDERS, 1, 8, -1), -- 1882898
2988 		DECODE(R.INCLUDE_DISCRETE_WIP_RECEIPTS, 1, 3, -1),
2989 		DECODE(R.INCLUDE_REP_WIP_RECEIPTS, 1, 30, -1),
2990 		DECODE(R.INCLUDE_NONSTD_WIP_RECEIPTS, 1, 7, -1),
2991 		DECODE(R.INCLUDE_NONSTD_WIP_RECEIPTS, 1, 15, -1),
2992 		DECODE(R.INCLUDE_INTERORG_TRANSFERS, 1, 11, -1),
2993                 DECODE(R.INCLUDE_INTERORG_TRANSFERS, 1, 12, -1),
2994 		DECODE(R.INCLUDE_ONHAND_AVAILABLE, 1, 18, -1),
2995 		DECODE(R.INCLUDE_INTERNAL_REQS, 1, 2, -1),
2996 		DECODE(R.INCLUDE_SUPPLIER_REQS, 1, 2, -1),
2997                 DECODE(R.INCLUDE_USER_DEFINED_SUPPLY, 1, 41, -1),
2998 		DECODE(R.INCLUDE_FLOW_SCHEDULE_RECEIPTS, 1, 27, -1),
2999 		DECODE(R.INCLUDE_FLOW_SCHEDULE_RECEIPTS, 1, 28, -1))
3000                 OR
3001                 ((R.INCLUDE_REP_MPS = 1 OR R.INCLUDE_DISCRETE_MPS = 1) AND
3002                 S.ORDER_TYPE = 5
3003                  -- bug 2461071
3004                 AND exists (SELECT '1'
3005                             FROM    MSC_DESIGNATORS
3006                             WHERE   INVENTORY_ATP_FLAG = 1
3007                             AND     DESIGNATOR_TYPE = 2
3008                             AND     DESIGNATOR_ID = S.SCHEDULE_DESIGNATOR_ID
3009                             AND     DECODE(R.demand_class_atp_flag,1,
3010                                     nvl(demand_class,
3011                                     nvl(p_default_dmd_class,'@@@')),'@@@') =
3012                                     DECODE(R.demand_class_atp_flag,1,
3013                                     nvl(p_demand_class,
3014                                     nvl(p_default_dmd_class,'@@@')),'@@@')
3015 )))
3016                 --AND MSC_ATP_FUNC.MPS_ATP(S.SCHEDULE_DESIGNATOR_ID) = 1))
3017     AND		C.CALENDAR_CODE = p_cal_code
3018     AND		C.EXCEPTION_SET_ID = G_CAL_EXC_SET_ID
3019     AND         C.SR_INSTANCE_ID = p_instance_id
3020                  -- Bug 2132288, 2442009
3021     AND         C.CALENDAR_DATE BETWEEN TRUNC(NVL(S.FIRM_DATE,S.NEW_SCHEDULE_DATE))
3022                     AND TRUNC(NVL(DECODE(S.ORDER_TYPE, 5, S.LAST_UNIT_START_DATE,
3023                                    S.LAST_UNIT_COMPLETION_DATE), NVL(S.FIRM_DATE,S.NEW_SCHEDULE_DATE)))
3024     AND         DECODE(DECODE(S.ORDER_TYPE, 5, S.LAST_UNIT_START_DATE,
3025                                    S.LAST_UNIT_COMPLETION_DATE),
3026                        NULL, C.NEXT_SEQ_NUM, C.SEQ_NUM) IS NOT NULL
3027                  -- End Bug 2132288, 2442009
3028                  -- new clause 2640489, SIMPLIFY FOR CBO
3029     AND         (S.ORDER_TYPE = 18
3030                  OR R.PAST_DUE_SUPPLY_CUTOFF_FENCE is NULL
3031                  OR C.NEXT_SEQ_NUM >= p_sysdate_seq_num - R.PAST_DUE_SUPPLY_CUTOFF_FENCE)
3032     AND         C.NEXT_DATE >= DECODE(S.ORDER_TYPE, 27, TRUNC(l_sysdate),
3033                                                 28, TRUNC(l_sysdate),
3034                                                     C.NEXT_DATE)
3035     AND         C.NEXT_DATE < NVL(p_itf, C.NEXT_DATE + 1)
3036     AND         (R.DEMAND_CLASS_ATP_FLAG <> 1
3037                  OR S.ORDER_TYPE = 5
3038                  OR NVL(S.DEMAND_CLASS, NVL(p_default_dmd_class,'@@@')) =
3039                     NVL(P_DEMAND_CLASS, NVL(p_default_dmd_class,'@@@')) )
3040                 --- filter out non-atpable sub-inventories
3041     AND          MSI.plan_id (+) = p_plan_id
3042     AND          MSI.organization_id (+) = p_org_id
3043     AND          MSI.sr_instance_id (+) = p_instance_id
3044     -- AND          S.subinventory_code = MSI.sub_inventory_code
3045     AND          MSI.sub_inventory_code (+) = S.subinventory_code
3046     AND          NVL(MSI.inventory_atp_code,1)  <> 2  -- filter out non-atpable subinventories
3047     -- SQL Query changes End 2640489
3048 )
3049 ;
3050 
3051 EXCEPTION
3052         WHEN OTHERS THEN
3053                 IF PG_DEBUG in ('Y', 'C') THEN
3054                         msc_sch_wb.atp_debug('Get_Mat_Avail_Pf_Ods_Dtls: ' || 'Error occurred: ' || to_char(sqlcode) || ':' || SQLERRM);
3055                 END IF;
3056                 x_return_status := FND_API.G_RET_STS_ERROR;
3057 
3058 END Get_Mat_Avail_Pf_Ods_Dtls;
3059 
3060 /*--Get_Mat_Avail_Pf_Pds_Dtls-----------------------------------------------------------
3061 |  o  Called for unallocated Time Phased PF ATP with Details.
3062 |  o  The supply demand SQL inserts following in msc_atp_sd_details_temp table:
3063 |       -  Bucketed demands (origination type 51) for member item upto ATF from
3064 |            msc_alloc_demands table.
3065 |       -  Bucketed demands for family after ATF from msc_alloc_demands table.
3066 |       -  Rollup supplies (order type 50) for member item upto ATF from
3067 |            msc_alloc_supplies table.
3068 |       -  Rollup supplies for family after ATF from msc_alloc_supplies table.
3069 |  o  Other important differences from non PF SQLs are:
3070 |       -  Columns Pf_Display_Flag, Original_Demand_Quantity and Original_Demand_Date
3071 |            in msc_atp_sd_details_temp table are populated for demands.
3072 |       -  Column Original_Supply_Demand_Type is populated for demands and supplies
3073 |            and stores the supply demand type of parent supplies and demands.
3074 +-------------------------------------------------------------------------------------*/
3075 PROCEDURE Get_Mat_Avail_Pf_Pds_Dtls (
3076         p_sr_member_id                  IN      NUMBER,
3077         p_sr_family_id                  IN      NUMBER,
3078         p_org_id                        IN      NUMBER,
3079         p_instance_id                   IN      NUMBER,
3080         p_plan_id                       IN      NUMBER,
3081         p_itf                           IN      DATE,
3082         p_level                         IN      NUMBER,
3083         p_scenario_id                   IN      NUMBER,
3084         p_identifier                    IN      NUMBER,
3085         x_return_status                 OUT     NOCOPY VARCHAR2
3086 ) IS
3087         l_null_num              NUMBER;
3088         l_null_char             VARCHAR2(1);
3089         l_null_date             DATE; --bug3814584
3090         l_sysdate               DATE := sysdate;
3091 
3092 BEGIN
3093         IF PG_DEBUG in ('Y', 'C') THEN
3094            msc_sch_wb.atp_debug('Begin Get_Mat_Avail_Pf_Pds_Dtls');
3095         END IF;
3096 
3097         -- Initializing API return code
3098         x_return_status := FND_API.G_RET_STS_SUCCESS;
3099 
3100         INSERT INTO msc_atp_sd_details_temp (
3101         	ATP_Level,
3102         	Order_line_id,
3103         	Scenario_Id,
3104         	Inventory_Item_Id,
3105         	Request_Item_Id,
3106         	Organization_Id,
3107         	Department_Id,
3108         	Resource_Id,
3109         	Supplier_Id,
3110         	Supplier_Site_Id,
3111         	From_Organization_Id,
3112         	From_Location_Id,
3113         	To_Organization_Id,
3114         	To_Location_Id,
3115         	Ship_Method,
3116         	UOM_code,
3117         	Supply_Demand_Type,
3118         	Supply_Demand_Source_Type,
3119         	Supply_Demand_Source_Type_Name,
3120         	Identifier1,
3121         	Identifier2,
3122         	Identifier3,
3123         	Identifier4,
3124         	Allocated_Quantity,
3125         	Supply_Demand_Date,
3126         	Disposition_Type,
3127         	Disposition_Name,
3128         	Pegging_Id,
3129         	End_Pegging_Id,
3130         	Pf_Display_Flag,
3131         	Supply_Demand_Quantity,
3132         	Original_Demand_Quantity,
3133         	Original_Demand_Date,
3134         	Original_Item_Id,
3135         	Original_Supply_Demand_Type,
3136         	creation_date,
3137         	created_by,
3138         	last_update_date,
3139         	last_updated_by,
3140         	last_update_login,
3141         	ORIG_CUSTOMER_SITE_NAME,--bug3263368
3142                 ORIG_CUSTOMER_NAME, --bug3263368
3143                 ORIG_DEMAND_CLASS, --bug3263368
3144                 ORIG_REQUEST_DATE, --bug3263368
3145                 Inventory_Item_Name --bug3579625
3146         )
3147         (
3148             SELECT      p_level col1,
3149         		p_identifier col2,
3150                         p_scenario_id col3,
3151                         p_sr_family_id col4,
3152                         p_sr_member_id col5,
3153         		p_org_id col6,
3154                         l_null_num col7,
3155                         l_null_num col8,
3156                         l_null_num col9,
3157                         l_null_num col10,
3158                         l_null_num col11,
3159                         l_null_num col12,
3160                         l_null_num col13,
3161                         l_null_num col14,
3162         		l_null_char col15,
3163         		I.UOM_CODE col16,
3164         		1 col17, -- demand
3165         		AD.ORIGINATION_TYPE col18,
3166                         l_null_char col19,
3167         		AD.SR_INSTANCE_ID col20,
3168                         l_null_num col21,
3169         		AD.PARENT_DEMAND_ID col22,
3170         		l_null_num col23,
3171                         -1 * AD.ALLOCATED_QUANTITY col24,
3172                         TRUNC(AD.DEMAND_DATE) col25, --bug3693892 added trunc
3173                         l_null_num col26,
3174                         AD.ORDER_NUMBER col27,
3175                         l_null_num col28,
3176                         l_null_num col29,
3177                         AD.Pf_Display_Flag,
3178                         -1* NVL(AD.Demand_Quantity, AD.ALLOCATED_QUANTITY),
3179                         -1* NVL(AD.Demand_Quantity, AD.ALLOCATED_QUANTITY),
3180                         trunc(AD.Original_Demand_Date), --Bug_3693892 added trunc
3181                         AD.Original_Item_Id,
3182                         AD.Original_Origination_Type,
3183         		l_sysdate,
3184         		G_USER_ID,
3185         		l_sysdate,
3186         		G_USER_ID,
3187         		G_USER_ID,
3188         		MTPS.LOCATION,   --bug3263368
3189                         MTP.PARTNER_NAME, --bug3263368
3190                         AD.DEMAND_CLASS, --bug3263368
3191                         AD.REQUEST_DATE, --bug3263368
3192                         I2.Item_Name  --bug3579625
3193 
3194             FROM        MSC_SYSTEM_ITEMS I,
3195                         MSC_SYSTEM_ITEMS I2,  --bug3579625
3196         		MSC_ALLOC_DEMANDS AD,
3197         		MSC_TRADING_PARTNERS    MTP,--bug3263368
3198                         MSC_TRADING_PARTNER_SITES    MTPS --bug3263368
3199             WHERE       I.SR_INVENTORY_ITEM_ID in (p_sr_member_id, p_sr_family_id)
3200             AND         I.ORGANIZATION_ID = p_org_id
3201             AND         I.SR_INSTANCE_ID = p_instance_id
3202             AND         I.PLAN_ID = p_plan_id
3203             AND         AD.PLAN_ID = I.PLAN_ID
3204             AND         AD.SR_INSTANCE_ID = I.SR_INSTANCE_ID
3205             AND         AD.INVENTORY_ITEM_ID = I.INVENTORY_ITEM_ID
3206             AND         AD.ORGANIZATION_ID = I.ORGANIZATION_ID
3207             -- bug3579625 Addition join with MSC_SYSTEM_ITEMS (I2)
3208             AND         AD.PLAN_ID = I2.PLAN_ID
3209             AND         AD.SR_INSTANCE_ID = I2.SR_INSTANCE_ID
3210             AND         AD.ORIGINAL_ITEM_ID = I2.INVENTORY_ITEM_ID
3211             AND         AD.ORGANIZATION_ID = I2.ORGANIZATION_ID
3212             AND         AD.ORIGINATION_TYPE <> 52
3213             AND         AD.ALLOCATED_QUANTITY <> 0
3214             --bug3700564 added trunc
3215             AND         TRUNC(AD.DEMAND_DATE) < NVL(p_itf, TRUNC(AD.DEMAND_DATE) + 1)
3216             AND         AD.SHIP_TO_SITE_ID = MTPS.PARTNER_SITE_ID(+) --bug3263368
3217             AND         AD.CUSTOMER_ID = MTP.PARTNER_ID(+)--bug3263368
3218             UNION ALL
3219             SELECT      p_level col1,
3220                         p_identifier col2,
3221                         p_scenario_id col3,
3222                         p_sr_family_id col4 ,
3223                         p_sr_member_id col5,
3224                         p_org_id col6,
3225                         l_null_num col7,
3226                         l_null_num col8,
3227                         l_null_num col9,
3228                         l_null_num col10,
3229                         l_null_num col11,
3230                         l_null_num col12,
3231                         l_null_num col13,
3232                         l_null_num col14,
3233                         l_null_char col15,
3234                         I.UOM_CODE col16,
3235                         2 col17,
3236                         SA.ORDER_TYPE col18,
3237                         l_null_char col19,
3238                         SA.SR_INSTANCE_ID col20,
3239                         l_null_num col21,
3240                         SA.PARENT_TRANSACTION_ID col22,
3241                         l_null_num col23,
3242         		SA.ALLOCATED_QUANTITY col24,
3243                         trunc(SA.SUPPLY_DATE) col25,  --bug3693892 added trunc
3244                         l_null_num col26,
3245         		DECODE(SA.ORDER_TYPE, 5, to_char(SA.PARENT_TRANSACTION_ID), SA.ORDER_NUMBER) col27,
3246                         l_null_num col28,
3247         		l_null_num col29,
3248         		l_null_num,
3249         		NVL(SA.Supply_Quantity, SA.ALLOCATED_QUANTITY),
3250         		l_null_num,
3251         		to_date(null),
3252         		SA.Original_Item_Id,
3253         		SA.Original_Order_Type,
3254         		l_sysdate,
3255         		G_USER_ID,
3256         		l_sysdate,
3257         		G_USER_ID,
3258         		G_USER_ID,
3259         		--null, --bug3263368 ORIG_CUSTOMER_SITE_NAME
3260         		--null, --bug3263368 ORIG_CUSTOMER_NAME
3261         		--null, --bug3263368 ORIG_DEMAND_CLASS
3262         		--null, --bug3263368 ORIG_REQUEST_DATE
3263         		l_null_char, --bug3814584
3264                         l_null_char, --bug3814584
3265                         l_null_char, --bug3814584
3266                         l_null_date,  --bug3814584
3267                         I2.Item_Name  --bug3579625
3268             FROM        MSC_ALLOC_SUPPLIES SA,
3269                         MSC_SYSTEM_ITEMS I,
3270                         MSC_SYSTEM_ITEMS I2 --bug3579625
3271             WHERE       I.SR_INVENTORY_ITEM_ID in (p_sr_member_id, p_sr_family_id)
3272             AND         I.ORGANIZATION_ID = p_org_id
3273             AND         I.SR_INSTANCE_ID = p_instance_id
3274             AND         I.PLAN_ID = p_plan_id
3275             AND         SA.PLAN_ID = I.PLAN_ID
3276             AND         SA.SR_INSTANCE_ID = I.SR_INSTANCE_ID
3277             AND         SA.INVENTORY_ITEM_ID = I.INVENTORY_ITEM_ID
3278             AND         SA.ORGANIZATION_ID = I.ORGANIZATION_ID
3279             -- bug3579625 Addition join with MSC_SYSTEM_ITEMS (I2)
3280             AND         SA.PLAN_ID = I2.PLAN_ID
3281             AND         SA.SR_INSTANCE_ID = I2.SR_INSTANCE_ID
3282             AND         SA.ORIGINAL_ITEM_ID = I2.INVENTORY_ITEM_ID
3283             AND         SA.ORGANIZATION_ID = I2.ORGANIZATION_ID
3284             --bug3700564 added trunc
3285             AND         TRUNC(SA.SUPPLY_DATE) >= DECODE(SA.ORIGINAL_ORDER_TYPE,
3286                                                         27, TRUNC(SYSDATE),
3287                                                         28, TRUNC(SYSDATE),
3288                                                         TRUNC(SA.SUPPLY_DATE))
3289             AND         SA.ALLOCATED_QUANTITY <> 0
3290             AND         TRUNC(SA.SUPPLY_DATE) < NVL(p_itf, TRUNC(SA.SUPPLY_DATE) + 1)
3291         );
3292 
3293 EXCEPTION
3294         WHEN OTHERS THEN
3295                 IF PG_DEBUG in ('Y', 'C') THEN
3296                         msc_sch_wb.atp_debug('Get_Mat_Avail_Pf_Pds_Dtls: ' || 'Error occurred: ' || to_char(sqlcode) || ':' || SQLERRM);
3297                 END IF;
3298                 x_return_status := FND_API.G_RET_STS_ERROR;
3299 
3300 END Get_Mat_Avail_Pf_Pds_Dtls;
3301 
3302 /*--Set_Alloc_Rule_Variables------------------------------------------------------
3303 |  o  Called from Atp_Check procedure for Allocated Time Phased PF ATP.
3304 |  o  This procedure sets global variables that tells:
3305 |       -  Allocation rule to be used for member item inside ATF
3306 |       -  Allocation rule to be used for family item outside ATF
3307 +-------------------------------------------------------------------------------*/
3308 PROCEDURE Set_Alloc_Rule_Variables (
3309         p_member_id                     IN      NUMBER,
3310         p_family_id                     IN      NUMBER,
3311         p_org_id                        IN      NUMBER,
3312         p_instance_id                   IN      NUMBER,
3313         p_demand_class                  IN      VARCHAR2,
3314         p_atf_date                      IN      DATE,
3315         x_return_status                 OUT     NOCOPY VARCHAR2
3316 ) IS
3317         l_alloc_percent         NUMBER;
3318 BEGIN
3319         IF PG_DEBUG in ('Y', 'C') THEN
3320                 msc_sch_wb.atp_debug('******* Begin Set_Alloc_Rule_Variables **********');
3321                 msc_sch_wb.atp_debug('Set_Alloc_Rule_Variables: p_member_id: ' || p_member_id);
3322                 msc_sch_wb.atp_debug('Set_Alloc_Rule_Variables: p_family_id: ' || p_family_id);
3323                 msc_sch_wb.atp_debug('Set_Alloc_Rule_Variables: p_instance_id: ' || p_instance_id);
3324                 msc_sch_wb.atp_debug('Set_Alloc_Rule_Variables: p_org_id: ' || p_org_id);
3325                 msc_sch_wb.atp_debug('Set_Alloc_Rule_Variables: p_demand_class: ' || p_demand_class);
3326                 msc_sch_wb.atp_debug('Set_Alloc_Rule_Variables: p_atf_date: ' || p_atf_date);
3327                 msc_sch_wb.atp_debug('Set_Alloc_Rule_Variables: G_ALLOCATION_METHOD: ' || MSC_ATP_PVT.G_ALLOCATION_METHOD);
3328                 msc_sch_wb.atp_debug('Set_Alloc_Rule_Variables: G_HIERARCHY_PROFILE: ' || MSC_AATP_PVT.G_HIERARCHY_PROFILE);
3329         END IF;
3330 
3331         -- Initializing API return code
3332         x_return_status := FND_API.G_RET_STS_SUCCESS;
3333 
3334         IF MSC_ATP_PVT.G_ALLOCATION_METHOD = 1 THEN
3335                 /* Demand priority allocated ATP
3336                    Here we always use allocation rule from family inside/outside ATF
3337                 */
3338                 IF MSC_AATP_PVT.G_HIERARCHY_PROFILE = 1 THEN
3339                         MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF := 'N';
3340                         MSC_ATP_PVT.G_PF_RULE_OUTSIDE_ATF := 'Y';
3341                 END IF;
3342         ELSE
3343                 /* Rule based allocated ATP
3344                    Here we support following scenarios:
3345                      -  Allocation rule defined only at family item
3346                      -  Allocation rule defined for the member and PF item
3347 
3348                    ATP logic:
3349                      -  Check allocation rule on ATF date for member item.
3350                           o IF defined use allocation rule from member within ATF
3351                             ELSE use allocation rule from family within ATF
3352                      -  Always use allocation rule from family outside ATF
3353                 */
3354                 IF PG_DEBUG in ('Y', 'C') THEN
3355                     msc_sch_wb.atp_debug('Set_Alloc_Rule_Variables: ' || 'Determine whether rule exist for member item within ATF');
3356                 END IF;
3357 
3358                 IF MSC_AATP_PVT.G_HIERARCHY_PROFILE = 1 THEN
3359                         BEGIN
3360                                 SELECT allocation_percent
3361                                 INTO   l_alloc_percent
3362                                 FROM   msc_item_hierarchy_mv
3363                                 WHERE  inventory_item_id = p_member_id
3364                                 AND    organization_id = p_org_id
3365                                 AND    sr_instance_id = p_instance_id
3366                                 AND    p_atf_date BETWEEN effective_date AND disable_date
3367                                 AND    level_id = -1
3368                                 AND    rownum = 1;
3369 
3370                                 IF l_alloc_percent is not null THEN
3371                                     MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF := 'Y';
3372                                 ELSE
3373                                     MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF := 'N';
3374                                 END IF;
3375                         EXCEPTION
3376                                 WHEN NO_DATA_FOUND THEN
3377                                     IF PG_DEBUG in ('Y', 'C') THEN
3378                                         msc_sch_wb.atp_debug('Set_Alloc_Rule_Variables: ' || 'Alloc Rule not found at member level');
3379                                     END IF;
3380                                     MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF := 'N';
3381                         END;
3382                 ELSE
3383                         BEGIN
3384                                 SELECT allocation_percent
3385                                 INTO   l_alloc_percent
3386                                 FROM   msc_item_hierarchy_mv
3387                                 WHERE  inventory_item_id = p_member_id
3388                                 AND    organization_id = p_org_id
3389                                 AND    sr_instance_id = p_instance_id
3390                                 AND    p_atf_date BETWEEN effective_date AND disable_date
3391                                 AND    level_id <> -1
3392                                 AND    rownum = 1;
3393 
3394                                 IF l_alloc_percent is not null THEN
3395                                     MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF := 'Y';
3396                                 ELSE
3397                                     MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF := 'N';
3398                                 END IF;
3399                         EXCEPTION
3400                                 WHEN NO_DATA_FOUND THEN
3401                                     IF PG_DEBUG in ('Y', 'C') THEN
3402                                         msc_sch_wb.atp_debug('Set_Alloc_Rule_Variables: ' || 'Alloc Rule not found for member within ATF');
3403                                     END IF;
3404                                     MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF := 'N';
3405                         END;
3406                 END IF;
3407 
3408                 IF PG_DEBUG in ('Y', 'C') THEN
3409                     msc_sch_wb.atp_debug('Set_Alloc_Rule_Variables: ' || 'Always use rule for family item outside ATF');
3410                 END IF;
3411                 MSC_ATP_PVT.G_PF_RULE_OUTSIDE_ATF := 'Y';
3412         END IF;
3413 
3414         IF PG_DEBUG in ('Y', 'C') THEN
3415             msc_sch_wb.atp_debug('Set_Alloc_Rule_Variables: ' || 'G_MEM_RULE_WITHIN_ATF = ' || MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF);
3416             msc_sch_wb.atp_debug('Set_Alloc_Rule_Variables: ' || 'G_PF_RULE_OUTSIDE_ATF = ' || MSC_ATP_PVT.G_PF_RULE_OUTSIDE_ATF);
3417         END IF;
3418 
3419 EXCEPTION
3420         WHEN OTHERS THEN
3421                 IF PG_DEBUG in ('Y', 'C') THEN
3422                         msc_sch_wb.atp_debug('Set_Alloc_Rule_Variables: ' || 'Error occurred: ' || to_char(sqlcode) || ':' || SQLERRM);
3423                 END IF;
3424                 x_return_status := FND_API.G_RET_STS_ERROR;
3425 
3426 END Set_Alloc_Rule_Variables;
3427 
3428 /*--Item_Alloc_Avail_Pf-----------------------------------------------------------
3429 |  o  Called from Item_Alloc_Cum_Atp procedure for Rule based Allocated
3430 |       Time Phased PF ATP.
3431 |  o  The supply demand SQL in this procedure gets following:
3432 |       -  Allocated Bucketed demands (origination type 51) for member item
3433 |            upto ATF from msc_alloc_demands table.
3434 |       -  Allocated Bucketed demands for family after ATF from msc_alloc_demands
3435 |            table.
3436 |       -  Allocated Rollup supplies (order type 50) for member item upto ATF
3437 |            from msc_alloc_supplies table.
3438 |       -  Allocated Rollup supplies for family after ATF from msc_alloc_supplies
3439 |            table.
3440 +-------------------------------------------------------------------------------*/
3441 PROCEDURE Item_Alloc_Avail_Pf (
3442         p_member_id                     IN      NUMBER,
3443         p_family_id                     IN      NUMBER,
3444         p_org_id                        IN      NUMBER,
3445         p_instance_id                   IN      NUMBER,
3446         p_plan_id                       IN      NUMBER,
3447         p_demand_class                  IN      VARCHAR2,
3448         p_level_id                      IN      NUMBER,
3449         p_itf                           IN      DATE,
3450         p_sys_next_date			IN 	DATE, --bug3099066
3451         p_atf_date                      IN      DATE,
3452         x_atp_dates                     OUT     NOCOPY MRP_ATP_PUB.date_arr,
3453         x_atp_qtys                      OUT     NOCOPY MRP_ATP_PUB.number_arr,
3454         x_return_status                 OUT     NOCOPY VARCHAR2
3455 ) IS
3456 
3457 BEGIN
3458         IF PG_DEBUG in ('Y', 'C') THEN
3459                 msc_sch_wb.atp_debug('******* Begin Item_Alloc_Avail_Pf **********');
3460                 msc_sch_wb.atp_debug('Item_Alloc_Avail_Pf: p_member_id: ' || p_member_id);
3461                 msc_sch_wb.atp_debug('Item_Alloc_Avail_Pf: p_family_id: ' || p_family_id);
3462                 msc_sch_wb.atp_debug('Item_Alloc_Avail_Pf: p_instance_id: ' || p_instance_id);
3463                 msc_sch_wb.atp_debug('Item_Alloc_Avail_Pf: p_plan_id: ' || p_plan_id);
3464                 msc_sch_wb.atp_debug('Item_Alloc_Avail_Pf: p_demand_class: ' || p_demand_class);
3465                 msc_sch_wb.atp_debug('Item_Alloc_Avail_Pf: p_level_id: ' || p_level_id);
3466         END IF;
3467 
3468         -- Initializing API return code
3469         x_return_status := FND_API.G_RET_STS_SUCCESS;
3470 
3471              SELECT        SD_DATE,
3472                            SUM(SD_QTY)
3473              BULK COLLECT INTO
3474                            x_atp_dates,
3475                            x_atp_qtys
3476              FROM (
3477                    SELECT  --TRUNC(AD.DEMAND_DATE) SD_DATE, 	--bug3099066
3478                            GREATEST(TRUNC(AD.DEMAND_DATE),p_sys_next_date) SD_DATE,--3099066
3479                            --bug3333114 removed trunc from p_sys_next_date as it is already trucate
3480                            -1* AD.ALLOCATED_QUANTITY*
3481                             DECODE(DECODE(MSC_AATP_PVT.G_HIERARCHY_PROFILE,
3482                               1, decode(AD.Original_Origination_Type,
3483                                  6, decode(AD.SOURCE_ORGANIZATION_ID,
3484                                     NULL, DECODE(AD.DEMAND_CLASS, null, null,
3485                                        DECODE(p_demand_class, '-1',
3486                                           MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(
3487                                              null, null, Decode(sign(trunc(AD.Demand_Date) - p_atf_date),
3488                                                                 1, p_family_id,
3489                                                                 Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
3490                                                                         'Y', AD.Original_Item_Id,
3491                                                                         p_family_id)), p_org_id,
3492                                              p_instance_id, trunc(AD.Demand_Date),
3493                                              p_level_id, AD.DEMAND_CLASS),
3494                                              AD.DEMAND_CLASS)),
3495                                     -23453, DECODE(AD.DEMAND_CLASS, null, null,
3496                                        DECODE(p_demand_class, '-1',
3497                                           MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(
3498                                              null, null, Decode(sign(trunc(AD.Demand_Date) - p_atf_date),
3499                                                                 1, p_family_id,
3500                                                                 Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
3501                                                                         'Y', AD.Original_Item_Id,
3502                                                                         p_family_id)), p_org_id,
3503                                              p_instance_id, trunc(AD.Demand_Date),
3504                                              p_level_id, AD.DEMAND_CLASS),
3505                                              AD.DEMAND_CLASS)),
3506                                     AD.ORGANIZATION_ID, DECODE(AD.DEMAND_CLASS, null, null,
3507                                        DECODE(p_demand_class, '-1',
3508                                           MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(
3509                                              null, null, Decode(sign(trunc(AD.Demand_Date) - p_atf_date),
3510                                                                 1, p_family_id,
3511                                                                 Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
3512                                                                         'Y', AD.Original_Item_Id,
3513                                                                         p_family_id)), p_org_id,
3514                                              p_instance_id, trunc(AD.Demand_Date),
3515                                              p_level_id, AD.DEMAND_CLASS),
3516                                              AD.DEMAND_CLASS)), TO_CHAR(NULL)),
3517                                  30, decode(AD.SOURCE_ORGANIZATION_ID,
3518                                     NULL, DECODE(AD.DEMAND_CLASS, null, null,
3519                                        DECODE(p_demand_class, '-1',
3520                                           MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(
3521                                              null, null, Decode(sign(trunc(AD.Demand_Date) - p_atf_date),
3522                                                                 1, p_family_id,
3523                                                                 Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
3524                                                                         'Y', AD.Original_Item_Id,
3525                                                                         p_family_id)), p_org_id,
3526                                              p_instance_id, trunc(AD.Demand_Date),
3527                                              p_level_id, AD.DEMAND_CLASS),
3528                                              AD.DEMAND_CLASS)),
3529                                     -23453, DECODE(AD.DEMAND_CLASS, null, null,
3530                                        DECODE(p_demand_class, '-1',
3531                                           MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(
3532                                              null, null, Decode(sign(trunc(AD.Demand_Date) - p_atf_date),
3533                                                                 1, p_family_id,
3534                                                                 Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
3535                                                                         'Y', AD.Original_Item_Id,
3536                                                                         p_family_id)), p_org_id,
3537                                              p_instance_id, trunc(AD.Demand_Date),
3538                                              p_level_id, AD.DEMAND_CLASS),
3539                                              AD.DEMAND_CLASS)),
3540                                     AD.ORGANIZATION_ID, DECODE(AD.DEMAND_CLASS, null, null,
3541                                        DECODE(p_demand_class, '-1',
3542                                           MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(
3543                                              null, null, Decode(sign(trunc(AD.Demand_Date) - p_atf_date),
3544                                                                 1, p_family_id,
3545                                                                 Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
3546                                                                         'Y', AD.Original_Item_Id,
3547                                                                         p_family_id)), p_org_id,
3548                                              p_instance_id, trunc(AD.Demand_Date),
3549                                              p_level_id, AD.DEMAND_CLASS),
3550                                              AD.DEMAND_CLASS)), TO_CHAR(NULL)),
3551                                  DECODE(AD.DEMAND_CLASS, null, null,
3552                                     DECODE(p_demand_class, '-1',
3553                                        MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(
3554                                           null, null, Decode(sign(trunc(AD.Demand_Date) - p_atf_date),
3555                                                                 1, p_family_id,
3556                                                                 Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
3557                                                                         'Y', AD.Original_Item_Id,
3558                                                                         p_family_id)), p_org_id,
3559                                           p_instance_id, trunc(AD.Demand_Date),
3560                                           p_level_id, AD.DEMAND_CLASS),
3561                                           AD.DEMAND_CLASS))),
3562                               2, DECODE(AD.CUSTOMER_ID, NULL, TO_CHAR(NULL),
3563                                                    0, TO_CHAR(NULL),
3564                                  decode(AD.Original_Origination_Type,
3565                                     6, decode(AD.SOURCE_ORGANIZATION_ID,
3566                                        NULL, MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(
3567                                              AD.CUSTOMER_ID, AD.SHIP_TO_SITE_ID, Decode(sign(trunc(AD.Demand_Date) - p_atf_date),
3568                                                                                         1, p_family_id,
3569                                                                                         Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
3570                                                                                                 'Y', AD.Original_Item_Id,
3571                                                                                                 p_family_id)),
3572                                              p_org_id, p_instance_id, trunc(AD.Demand_Date),
3573                                              p_level_id, NULL),
3574                                        -23453, MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(
3575                                              AD.CUSTOMER_ID, AD.SHIP_TO_SITE_ID, Decode(sign(trunc(AD.Demand_Date) - p_atf_date),
3576                                                                                         1, p_family_id,
3577                                                                                         Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
3578                                                                                                 'Y', AD.Original_Item_Id,
3579                                                                                                 p_family_id)),
3580                                              p_org_id, p_instance_id, trunc(AD.Demand_Date),
3581                                              p_level_id, NULL),
3582                                        AD.ORGANIZATION_ID, MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(
3583                                              AD.CUSTOMER_ID, AD.SHIP_TO_SITE_ID, Decode(sign(trunc(AD.Demand_Date) - p_atf_date),
3584                                                                                         1, p_family_id,
3585                                                                                         Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
3586                                                                                                 'Y', AD.Original_Item_Id,
3587                                                                                                 p_family_id)),
3588                                              p_org_id, p_instance_id, trunc(AD.Demand_Date),
3589                                              p_level_id, NULL),
3590                                        TO_CHAR(NULL)),
3591                                     30, decode(AD.SOURCE_ORGANIZATION_ID,
3592                                        NULL, MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(
3593                                              AD.CUSTOMER_ID, AD.SHIP_TO_SITE_ID, Decode(sign(trunc(AD.Demand_Date) - p_atf_date),
3594                                                                                         1, p_family_id,
3595                                                                                         Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
3596                                                                                                 'Y', AD.Original_Item_Id,
3597                                                                                                 p_family_id)),
3598                                              p_org_id, p_instance_id, trunc(AD.Demand_Date),
3599                                              p_level_id, NULL),
3600                                        -23453, MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(
3601                                              AD.CUSTOMER_ID, AD.SHIP_TO_SITE_ID, Decode(sign(trunc(AD.Demand_Date) - p_atf_date),
3602                                                                                         1, p_family_id,
3603                                                                                         Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
3604                                                                                                 'Y', AD.Original_Item_Id,
3605                                                                                                 p_family_id)),
3606                                              p_org_id, p_instance_id, trunc(AD.Demand_Date),
3607                                              p_level_id, NULL),
3608                                        AD.ORGANIZATION_ID, MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(
3609                                              AD.CUSTOMER_ID, AD.SHIP_TO_SITE_ID, Decode(sign(trunc(AD.Demand_Date) - p_atf_date),
3610                                                                                         1, p_family_id,
3611                                                                                         Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
3612                                                                                                 'Y', AD.Original_Item_Id,
3613                                                                                                 p_family_id)),
3614                                              p_org_id, p_instance_id, trunc(AD.Demand_Date),
3615                                              p_level_id, NULL),
3616                                        TO_CHAR(NULL)),
3617                                     MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(
3618                                        AD.CUSTOMER_ID, AD.SHIP_TO_SITE_ID,
3619                                        Decode(sign(trunc(AD.Demand_Date) - p_atf_date),
3620                                                 1, p_family_id,
3621                                                 Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
3622                                                         'Y', AD.Original_Item_Id,
3623                                                         p_family_id)), p_org_id, p_instance_id,
3624                                        trunc(AD.Demand_Date),p_level_id, NULL)))),
3625                            p_demand_class, 1,
3626                               Decode(AD.Demand_Class, NULL, --4365873 If l_demand_class is not null and demand class is populated
3627                              -- on  supplies record then 0 should be allocated.
3628                               MSC_AATP_FUNC.Get_Item_Demand_Alloc_Percent(p_plan_id,
3629                                  AD.PARENT_DEMAND_ID,
3630                                  trunc(AD.Demand_Date),
3631                                  AD.USING_ASSEMBLY_ITEM_ID,
3632                                  DECODE(AD.SOURCE_ORGANIZATION_ID,
3633                                     -23453, null,
3634                                     AD.SOURCE_ORGANIZATION_ID),
3635                                  Decode(sign(trunc(AD.Demand_Date) - p_atf_date),
3636                                         1, p_family_id,
3637                                         Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
3638                                                 'Y', AD.Original_Item_Id,
3639                                                 p_family_id)),
3640                                  p_org_id,
3641                                  p_instance_id,
3642                                  AD.Original_Origination_Type,
3643                                  DECODE(MSC_AATP_PVT.G_HIERARCHY_PROFILE,
3644                                     1, decode(AD.Original_Origination_Type,
3645                                        6, decode(AD.SOURCE_ORGANIZATION_ID,
3646                                           NULL, DECODE(AD.DEMAND_CLASS, null, null,
3647                                              DECODE(p_demand_class, '-1',
3648                                                 MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(
3649                                                    null, null, Decode(sign(trunc(AD.Demand_Date) - p_atf_date),
3650                                                                         1, p_family_id,
3651                                                                         Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
3652                                                                                 'Y', AD.Original_Item_Id,
3653                                                                                 p_family_id)), p_org_id,
3654                                                    p_instance_id, trunc(AD.Demand_Date),
3655                                                    p_level_id, AD.DEMAND_CLASS),
3656                                                 AD.DEMAND_CLASS)),
3657                                           -23453, DECODE(AD.DEMAND_CLASS, null, null,
3658                                              DECODE(p_demand_class, '-1',
3659                                                 MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(
3660                                                    null, null, Decode(sign(trunc(AD.Demand_Date) - p_atf_date),
3661                                                                         1, p_family_id,
3662                                                                         Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
3663                                                                                 'Y', AD.Original_Item_Id,
3664                                                                                 p_family_id)), p_org_id,
3665                                                    p_instance_id, trunc(AD.Demand_Date),
3666                                                    p_level_id, AD.DEMAND_CLASS),
3667                                                 AD.DEMAND_CLASS)),
3668                                           AD.ORGANIZATION_ID, DECODE(AD.DEMAND_CLASS, null, null,
3669                                              DECODE(p_demand_class, '-1',
3670                                                 MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(
3671                                                    null, null, Decode(sign(trunc(AD.Demand_Date) - p_atf_date),
3672                                                                         1, p_family_id,
3673                                                                         Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
3674                                                                                 'Y', AD.Original_Item_Id,
3675                                                                                 p_family_id)), p_org_id,
3676                                                    p_instance_id, trunc(AD.Demand_Date),
3677                                                    p_level_id, AD.DEMAND_CLASS),
3678                                                 AD.DEMAND_CLASS)),
3679                                           p_demand_class),
3680                                     30, decode(AD.SOURCE_ORGANIZATION_ID,
3681                                        NULL, DECODE(AD.DEMAND_CLASS, null, null,
3682                                           DECODE(p_demand_class, '-1',
3683                                              MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(
3684                                                 null, null, Decode(sign(trunc(AD.Demand_Date) - p_atf_date),
3685                                                                         1, p_family_id,
3686                                                                         Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
3687                                                                                 'Y', AD.Original_Item_Id,
3688                                                                                 p_family_id)), p_org_id,
3689                                                 p_instance_id, trunc(AD.Demand_Date),
3690                                                 p_level_id, AD.DEMAND_CLASS),
3691                                              AD.DEMAND_CLASS)),
3692                                        -23453, DECODE(AD.DEMAND_CLASS, null, null,
3693                                           DECODE(p_demand_class, '-1',
3694                                              MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(
3695                                                 null, null, Decode(sign(trunc(AD.Demand_Date) - p_atf_date),
3696                                                                         1, p_family_id,
3697                                                                         Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
3698                                                                                 'Y', AD.Original_Item_Id,
3699                                                                                 p_family_id)), p_org_id,
3700                                                 p_instance_id, trunc(AD.Demand_Date),
3701                                                 p_level_id, AD.DEMAND_CLASS),
3702                                              AD.DEMAND_CLASS)),
3703                                        AD.ORGANIZATION_ID, DECODE(AD.DEMAND_CLASS, null, null,
3704                                           DECODE(p_demand_class, '-1',
3705                                              MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(
3706                                                 null, null, Decode(sign(trunc(AD.Demand_Date) - p_atf_date),
3707                                                                         1, p_family_id,
3708                                                                         Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
3709                                                                                 'Y', AD.Original_Item_Id,
3710                                                                                 p_family_id)), p_org_id,
3711                                                 p_instance_id, trunc(AD.Demand_Date),
3712                                                 p_level_id, AD.DEMAND_CLASS),
3713                                              AD.DEMAND_CLASS)),
3714                                        p_demand_class),
3715                                     DECODE(AD.DEMAND_CLASS, null, null,
3716                                        DECODE(p_demand_class, '-1',
3717                                           MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(
3718                                              null, null, Decode(sign(trunc(AD.Demand_Date) - p_atf_date),
3719                                                                 1, p_family_id,
3720                                                                 Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
3721                                                                         'Y', AD.Original_Item_Id,
3722                                                                         p_family_id)), p_org_id,
3723                                              p_instance_id, trunc(AD.Demand_Date),
3724                                              p_level_id, AD.DEMAND_CLASS),
3725                                           AD.DEMAND_CLASS))),
3726                                     2, DECODE(AD.CUSTOMER_ID, NULL, p_demand_class,
3727                                                    0, p_demand_class,
3728                                        decode(AD.Original_Origination_Type,
3729                                           6, decode(AD.SOURCE_ORGANIZATION_ID,
3730                                              NULL, MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(
3731                                                    AD.CUSTOMER_ID, AD.SHIP_TO_SITE_ID, Decode(sign(trunc(AD.Demand_Date) - p_atf_date),
3732                                                                                                 1, p_family_id,
3733                                                                                                 Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
3734                                                                                                         'Y', AD.Original_Item_Id,
3735                                                                                                         p_family_id)),
3736                                                    p_org_id, p_instance_id, trunc(AD.Demand_Date),
3737                                                    p_level_id, NULL),
3738                                              -23453, MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(
3739                                                    AD.CUSTOMER_ID, AD.SHIP_TO_SITE_ID, Decode(sign(trunc(AD.Demand_Date) - p_atf_date),
3740                                                                                                 1, p_family_id,
3741                                                                                                 Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
3742                                                                                                         'Y', AD.Original_Item_Id,
3743                                                                                                         p_family_id)),
3744                                                    p_org_id, p_instance_id, trunc(AD.Demand_Date),
3745                                                    p_level_id, NULL),
3746                                              AD.ORGANIZATION_ID, MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(
3747                                                    AD.CUSTOMER_ID, AD.SHIP_TO_SITE_ID, Decode(sign(trunc(AD.Demand_Date) - p_atf_date),
3748                                                                                                 1, p_family_id,
3749                                                                                                 Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
3750                                                                                                         'Y', AD.Original_Item_Id,
3751                                                                                                         p_family_id)),
3752                                                    p_org_id, p_instance_id, trunc(AD.Demand_Date),
3753                                                    p_level_id, NULL),
3754                                              p_demand_class),
3755                                           30, decode(AD.SOURCE_ORGANIZATION_ID,
3756                                              NULL, MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(
3757                                                    AD.CUSTOMER_ID, AD.SHIP_TO_SITE_ID, Decode(sign(trunc(AD.Demand_Date) - p_atf_date),
3758                                                                                                 1, p_family_id,
3759                                                                                                 Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
3760                                                                                                         'Y', AD.Original_Item_Id,
3761                                                                                                         p_family_id)),
3762                                                    p_org_id, p_instance_id, trunc(AD.Demand_Date),
3763                                                    p_level_id, NULL),
3764                                              -23453, MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(
3765                                                    AD.CUSTOMER_ID, AD.SHIP_TO_SITE_ID, Decode(sign(trunc(AD.Demand_Date) - p_atf_date),
3766                                                                                                 1, p_family_id,
3767                                                                                                 Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
3768                                                                                                         'Y', AD.Original_Item_Id,
3769                                                                                                         p_family_id)),
3770                                                    p_org_id, p_instance_id, trunc(AD.Demand_Date),
3771                                                    p_level_id, NULL),
3772                                              AD.ORGANIZATION_ID, MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(
3773                                                    AD.CUSTOMER_ID, AD.SHIP_TO_SITE_ID, Decode(sign(trunc(AD.Demand_Date) - p_atf_date),
3774                                                                                         1, p_family_id,
3775                                                                                         Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
3776                                                                                                 'Y', AD.Original_Item_Id,
3777                                                                                                 p_family_id)),
3778                                                    p_org_id, p_instance_id, trunc(AD.Demand_Date),
3779                                                    p_level_id, NULL),
3780                                              p_demand_class),
3781                                           MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(AD.CUSTOMER_ID, AD.SHIP_TO_SITE_ID,
3782                                              Decode(sign(trunc(AD.Demand_Date) - p_atf_date),
3783                                                         1, p_family_id,
3784                                                         Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
3785                                                                 'Y', AD.Original_Item_Id,
3786                                                                 p_family_id)), p_org_id, p_instance_id,
3787                                              trunc(AD.Demand_Date),p_level_id, NULL)))),
3788                                        p_demand_class,
3789                                        p_level_id),0)) SD_QTY --4365873
3790                    FROM        MSC_ALLOC_DEMANDS AD
3791                    WHERE       AD.PLAN_ID = p_plan_id
3792                    AND         AD.SR_INSTANCE_ID = p_instance_id
3793                    AND         AD.INVENTORY_ITEM_ID in (p_member_id,p_family_id)
3794                    AND         AD.ORGANIZATION_ID = p_org_id
3795                    AND         AD.ORIGINATION_TYPE <> 52
3796                    AND         AD.ALLOCATED_QUANTITY <> 0
3797                    --bug3700564 added trunc
3798                    AND         TRUNC(AD.DEMAND_DATE) < NVL(p_itf, TRUNC(AD.DEMAND_DATE) + 1)
3799                    UNION ALL
3800                    SELECT  --TRUNC(SA.SUPPLY_DATE) SD_DATE,			--bug3099066
3801                    	   GREATEST(TRUNC(SA.SUPPLY_DATE),p_sys_next_date) SD_DATE,--3099066
3802                            SA.ALLOCATED_QUANTITY*
3803                               DECODE(DECODE(MSC_AATP_PVT.G_HIERARCHY_PROFILE,
3804                                      1, DECODE(SA.DEMAND_CLASS, null, null,
3805                                         DECODE(p_demand_class, '-1',
3806                                            MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(
3807                                                          null,
3808                                                          null,
3809                                                          Decode(sign(trunc(SA.Supply_Date) - p_atf_date),
3810                                                                 1, p_family_id,
3811                                                                 Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
3812                                                                         'Y', SA.Original_Item_Id,
3813                                                                         p_family_id)),
3814                                                          p_org_id,
3815                                                          p_instance_id,
3816                                                          TRUNC(SA.SUPPLY_DATE),
3817                                                          p_level_id,
3818                                                          SA.DEMAND_CLASS),
3819                                            SA.DEMAND_CLASS)),
3820                                      2, DECODE(SA.CUSTOMER_ID, NULL, TO_CHAR(NULL),
3821                                                        0, TO_CHAR(NULL),
3822                                                        MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(
3823                                                          SA.CUSTOMER_ID,
3824                                                          SA.SHIP_TO_SITE_ID,
3825                                                          Decode(sign(trunc(SA.Supply_Date) - p_atf_date),
3826                                                                 1, p_family_id,
3827                                                                 Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
3828                                                                         'Y', SA.Original_Item_Id,
3829                                                                         p_family_id)),
3830                                                          p_org_id,
3831                                                          p_instance_id,
3832                                                          TRUNC(SA.SUPPLY_DATE),
3833                                                          p_level_id,
3834                                                          NULL))),
3835                                  p_demand_class, 1,
3836                                  NULL,  nvl(MIHM.allocation_percent/100,1), --4365873
3837                                  /*NVL(MSC_AATP_FUNC.Get_DC_Alloc_Percent(
3838                                            p_instance_id,
3839                                            Decode(sign(trunc(SA.Supply_Date) - p_atf_date),
3840                                                 1, p_family_id,
3841                                                 Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
3842                                                         'Y', SA.Original_Item_Id,
3843                                                         p_family_id)),
3844                                            p_org_id,
3845                                            null,
3846                                            null,
3847                                            p_demand_class,
3848                                            TRUNC(SA.SUPPLY_DATE)),
3849                                         1),*/
3850                                  DECODE(
3851                                   MIHM.allocation_percent/100, --4365873
3852                                  /*DECODE(MSC_AATP_FUNC.Get_DC_Alloc_Percent(
3853                                            p_instance_id,
3854                                            Decode(sign(trunc(SA.Supply_Date) - p_atf_date),
3855                                                 1, p_family_id,
3856                                                 Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
3857                                                         'Y', SA.Original_Item_Id,
3858                                                         p_family_id)),
3859                                            p_org_id,
3860                                            null,
3861                                            null,
3862                                            p_demand_class,
3863                                            TRUNC(SA.SUPPLY_DATE)),*/
3864                                    NULL, 1,
3865                                  0)) SD_QTY
3866                    FROM    MSC_ALLOC_SUPPLIES SA, MSC_ITEM_HIERARCHY_MV MIHM --4365873
3867                    WHERE   SA.PLAN_ID = p_plan_id
3868                    AND     SA.SR_INSTANCE_ID = p_instance_id
3869                    AND     SA.INVENTORY_ITEM_ID in (p_member_id, p_family_id)
3870                    AND     SA.ORGANIZATION_ID = p_org_id
3871                    AND     SA.ALLOCATED_QUANTITY <> 0
3872                    --bug3700564 added trunc
3873                    AND     TRUNC(SA.SUPPLY_DATE) >= DECODE(SA.ORIGINAL_ORDER_TYPE,
3874                                                         27, TRUNC(SYSDATE),
3875                                                         28, TRUNC(SYSDATE),
3876                                                         TRUNC(SA.SUPPLY_DATE))
3877                    AND     TRUNC(SA.SUPPLY_DATE) < NVL(p_itf, TRUNC(SA.SUPPLY_DATE) + 1)
3878 		   --4365874
3879 		   --5220274 if the rule is assigned to family only then use family id.
3880                    AND    Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
3881                           'N', p_family_id,
3882                           SA.INVENTORY_ITEM_ID) = MIHM.INVENTORY_ITEM_ID(+)
3883                    AND    SA.SR_INSTANCE_ID = MIHM.SR_INSTANCE_ID (+)
3884                    AND    SA.ORGANIZATION_ID = MIHM.ORGANIZATION_ID (+)
3885                 AND    decode(MIHM.level_id (+),-1,1,2) = decode(MSC_AATP_PVT.G_HIERARCHY_PROFILE,1,1,2)
3886                    AND    TRUNC(SA.SUPPLY_DATE) >= MIHM.effective_date (+)
3887                    AND    TRUNC(SA.SUPPLY_DATE) <= MIHM.disable_date (+)
3888                 AND    MIHM.demand_class (+) = p_demand_class
3889                    )
3890              GROUP BY SD_DATE
3891              order by SD_DATE; --4698199
3892 EXCEPTION
3893         WHEN OTHERS THEN
3894                 IF PG_DEBUG in ('Y', 'C') THEN
3895                         msc_sch_wb.atp_debug('Item_Alloc_Avail_Pf: ' || 'Error occurred: ' || to_char(sqlcode) || ':' || SQLERRM);
3896                 END IF;
3897                 x_return_status := FND_API.G_RET_STS_ERROR;
3898 
3899 END Item_Alloc_Avail_Pf;
3900 
3901 /*--Item_Alloc_Avail_Pf_Unalloc------------------------------------------------
3902 |  o  Called from Item_Alloc_Cum_Atp procedure for Rule based Allocated Time
3903 |       Phased PF ATP (AATP Forward Consumption Method 2).
3904 |  o  This is similar to previous procedure only difference being that we
3905 |       also return unallocated quantities.
3906 +----------------------------------------------------------------------------*/
3907 PROCEDURE Item_Alloc_Avail_Pf_Unalloc (
3908         p_member_id                     IN      NUMBER,
3909         p_family_id                     IN      NUMBER,
3910         p_org_id                        IN      NUMBER,
3911         p_instance_id                   IN      NUMBER,
3912         p_plan_id                       IN      NUMBER,
3913         p_demand_class                  IN      VARCHAR2,
3914         p_level_id                      IN      NUMBER,
3915         p_itf                           IN      DATE,
3916         p_sys_next_date			IN	DATE, --3099066
3917         p_atf_date                      IN      DATE,
3918         x_atp_dates                     OUT     NOCOPY MRP_ATP_PUB.date_arr,
3919         x_atp_qtys                      OUT     NOCOPY MRP_ATP_PUB.number_arr,
3920         x_atp_unalloc_qtys              OUT     NOCOPY MRP_ATP_PUB.number_arr,
3921         x_return_status                 OUT     NOCOPY VARCHAR2
3922 ) IS
3923 
3924 BEGIN
3925         IF PG_DEBUG in ('Y', 'C') THEN
3926                 msc_sch_wb.atp_debug('******* Begin Item_Alloc_Avail_Pf_Unalloc **********');
3927                 msc_sch_wb.atp_debug('Item_Alloc_Avail_Pf_Unalloc: p_member_id: ' || p_member_id);
3928                 msc_sch_wb.atp_debug('Item_Alloc_Avail_Pf_Unalloc: p_family_id: ' || p_family_id);
3929                 msc_sch_wb.atp_debug('Item_Alloc_Avail_Pf_Unalloc: p_instance_id: ' || p_instance_id);
3930                 msc_sch_wb.atp_debug('Item_Alloc_Avail_Pf_Unalloc: p_plan_id: ' || p_plan_id);
3931                 msc_sch_wb.atp_debug('Item_Alloc_Avail_Pf_Unalloc: p_demand_class: ' || p_demand_class);
3932                 msc_sch_wb.atp_debug('Item_Alloc_Avail_Pf_Unalloc: p_level_id: ' || p_level_id);
3933         END IF;
3934 
3935         -- Initializing API return code
3936         x_return_status := FND_API.G_RET_STS_SUCCESS;
3937 
3938              SELECT        SD_DATE,
3939                            SUM(UNALLOC_SD_QTY),
3940                            SUM(SD_QTY)
3941              BULK COLLECT INTO
3942                            x_atp_dates,
3943                            x_atp_unalloc_qtys,
3944                            x_atp_qtys
3945              FROM (
3946                    SELECT  --TRUNC(AD.DEMAND_DATE) SD_DATE,
3947                    	   GREATEST(TRUNC(AD.DEMAND_DATE),p_sys_next_date) SD_DATE,--3099066
3948                            -1* AD.ALLOCATED_QUANTITY UNALLOC_SD_QTY,
3949                            -1* AD.ALLOCATED_QUANTITY*
3950                             DECODE(DECODE(MSC_AATP_PVT.G_HIERARCHY_PROFILE,
3951                               1, decode(AD.Original_Origination_Type,
3952                                  6, decode(AD.SOURCE_ORGANIZATION_ID,
3953                                     NULL, DECODE(AD.DEMAND_CLASS, null, null,
3954                                        DECODE(p_demand_class, '-1',
3955                                           MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(
3956                                              null, null, Decode(sign(trunc(AD.Demand_Date) - p_atf_date),
3957                                                                 1, p_family_id,
3958                                                                 Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
3959                                                                         'Y', AD.Original_Item_Id,
3960                                                                         p_family_id)), p_org_id,
3961                                              p_instance_id, trunc(AD.Demand_Date),
3962                                              p_level_id, AD.DEMAND_CLASS),
3963                                              AD.DEMAND_CLASS)),
3964                                     -23453, DECODE(AD.DEMAND_CLASS, null, null,
3965                                        DECODE(p_demand_class, '-1',
3966                                           MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(
3967                                              null, null, Decode(sign(trunc(AD.Demand_Date) - p_atf_date),
3968                                                                 1, p_family_id,
3969                                                                 Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
3970                                                                         'Y', AD.Original_Item_Id,
3971                                                                         p_family_id)), p_org_id,
3972                                              p_instance_id, trunc(AD.Demand_Date),
3973                                              p_level_id, AD.DEMAND_CLASS),
3974                                              AD.DEMAND_CLASS)),
3975                                     AD.ORGANIZATION_ID, DECODE(AD.DEMAND_CLASS, null, null,
3976                                        DECODE(p_demand_class, '-1',
3977                                           MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(
3978                                              null, null, Decode(sign(trunc(AD.Demand_Date) - p_atf_date),
3979                                                                 1, p_family_id,
3980                                                                 Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
3981                                                                         'Y', AD.Original_Item_Id,
3982                                                                         p_family_id)), p_org_id,
3983                                              p_instance_id, trunc(AD.Demand_Date),
3984                                              p_level_id, AD.DEMAND_CLASS),
3985                                              AD.DEMAND_CLASS)), TO_CHAR(NULL)),
3986                                  30, decode(AD.SOURCE_ORGANIZATION_ID,
3987                                     NULL, DECODE(AD.DEMAND_CLASS, null, null,
3988                                        DECODE(p_demand_class, '-1',
3989                                           MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(
3990                                              null, null, Decode(sign(trunc(AD.Demand_Date) - p_atf_date),
3991                                                                 1, p_family_id,
3992                                                                 Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
3993                                                                         'Y', AD.Original_Item_Id,
3994                                                                         p_family_id)), p_org_id,
3995                                              p_instance_id, trunc(AD.Demand_Date),
3996                                              p_level_id, AD.DEMAND_CLASS),
3997                                              AD.DEMAND_CLASS)),
3998                                     -23453, DECODE(AD.DEMAND_CLASS, null, null,
3999                                        DECODE(p_demand_class, '-1',
4000                                           MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(
4001                                              null, null, Decode(sign(trunc(AD.Demand_Date) - p_atf_date),
4002                                                                 1, p_family_id,
4003                                                                 Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
4004                                                                         'Y', AD.Original_Item_Id,
4005                                                                         p_family_id)), p_org_id,
4006                                              p_instance_id, trunc(AD.Demand_Date),
4007                                              p_level_id, AD.DEMAND_CLASS),
4008                                              AD.DEMAND_CLASS)),
4009                                     AD.ORGANIZATION_ID, DECODE(AD.DEMAND_CLASS, null, null,
4010                                        DECODE(p_demand_class, '-1',
4011                                           MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(
4012                                              null, null, Decode(sign(trunc(AD.Demand_Date) - p_atf_date),
4013                                                                 1, p_family_id,
4014                                                                 Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
4015                                                                         'Y', AD.Original_Item_Id,
4016                                                                         p_family_id)), p_org_id,
4017                                              p_instance_id, trunc(AD.Demand_Date),
4018                                              p_level_id, AD.DEMAND_CLASS),
4019                                              AD.DEMAND_CLASS)), TO_CHAR(NULL)),
4020                                  DECODE(AD.DEMAND_CLASS, null, null,
4021                                     DECODE(p_demand_class, '-1',
4022                                        MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(
4023                                           null, null, Decode(sign(trunc(AD.Demand_Date) - p_atf_date),
4024                                                                 1, p_family_id,
4025                                                                 Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
4026                                                                         'Y', AD.Original_Item_Id,
4027                                                                         p_family_id)), p_org_id,
4028                                           p_instance_id, trunc(AD.Demand_Date),
4029                                           p_level_id, AD.DEMAND_CLASS),
4030                                           AD.DEMAND_CLASS))),
4031                               2, DECODE(AD.CUSTOMER_ID, NULL, TO_CHAR(NULL),
4032                                                    0, TO_CHAR(NULL),
4033                                  decode(AD.Original_Origination_Type,
4034                                     6, decode(AD.SOURCE_ORGANIZATION_ID,
4035                                        NULL, MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(
4036                                              AD.CUSTOMER_ID, AD.SHIP_TO_SITE_ID, Decode(sign(trunc(AD.Demand_Date) - p_atf_date),
4037                                                                                         1, p_family_id,
4038                                                                                         Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
4039                                                                                                 'Y', AD.Original_Item_Id,
4040                                                                                                 p_family_id)),
4041                                              p_org_id, p_instance_id, trunc(AD.Demand_Date),
4042                                              p_level_id, NULL),
4043                                        -23453, MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(
4044                                              AD.CUSTOMER_ID, AD.SHIP_TO_SITE_ID, Decode(sign(trunc(AD.Demand_Date) - p_atf_date),
4045                                                                                         1, p_family_id,
4046                                                                                         Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
4047                                                                                                 'Y', AD.Original_Item_Id,
4048                                                                                                 p_family_id)),
4049                                              p_org_id, p_instance_id, trunc(AD.Demand_Date),
4050                                              p_level_id, NULL),
4051                                        AD.ORGANIZATION_ID, MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(
4052                                              AD.CUSTOMER_ID, AD.SHIP_TO_SITE_ID, Decode(sign(trunc(AD.Demand_Date) - p_atf_date),
4053                                                                                         1, p_family_id,
4054                                                                                         Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
4055                                                                                                 'Y', AD.Original_Item_Id,
4056                                                                                                 p_family_id)),
4057                                              p_org_id, p_instance_id, trunc(AD.Demand_Date),
4058                                              p_level_id, NULL),
4059                                        TO_CHAR(NULL)),
4060                                     30, decode(AD.SOURCE_ORGANIZATION_ID,
4061                                        NULL, MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(
4062                                              AD.CUSTOMER_ID, AD.SHIP_TO_SITE_ID, Decode(sign(trunc(AD.Demand_Date) - p_atf_date),
4063                                                                                         1, p_family_id,
4064                                                                                         Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
4065                                                                                                 'Y', AD.Original_Item_Id,
4066                                                                                                 p_family_id)),
4067                                              p_org_id, p_instance_id, trunc(AD.Demand_Date),
4068                                              p_level_id, NULL),
4069                                        -23453, MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(
4070                                              AD.CUSTOMER_ID, AD.SHIP_TO_SITE_ID, Decode(sign(trunc(AD.Demand_Date) - p_atf_date),
4071                                                                                         1, p_family_id,
4072                                                                                         Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
4073                                                                                                 'Y', AD.Original_Item_Id,
4074                                                                                                 p_family_id)),
4075                                              p_org_id, p_instance_id, trunc(AD.Demand_Date),
4076                                              p_level_id, NULL),
4077                                        AD.ORGANIZATION_ID, MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(
4078                                              AD.CUSTOMER_ID, AD.SHIP_TO_SITE_ID, Decode(sign(trunc(AD.Demand_Date) - p_atf_date),
4079                                                                                         1, p_family_id,
4080                                                                                         Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
4081                                                                                                 'Y', AD.Original_Item_Id,
4082                                                                                                 p_family_id)),
4083                                              p_org_id, p_instance_id, trunc(AD.Demand_Date),
4084                                              p_level_id, NULL),
4085                                        TO_CHAR(NULL)),
4086                                     MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(
4087                                        AD.CUSTOMER_ID, AD.SHIP_TO_SITE_ID,
4088                                        Decode(sign(trunc(AD.Demand_Date) - p_atf_date),
4089                                                 1, p_family_id,
4090                                                 Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
4091                                                         'Y', AD.Original_Item_Id,
4092                                                         p_family_id)), p_org_id, p_instance_id,
4093                                        trunc(AD.Demand_Date),p_level_id, NULL)))),
4094                            p_demand_class, 1,
4095                            Decode(AD.Demand_Class, NULL, --4365873
4096                               MSC_AATP_FUNC.Get_Item_Demand_Alloc_Percent(p_plan_id,
4097                                  AD.PARENT_DEMAND_ID,
4098                                  trunc(AD.Demand_Date),
4099                                  AD.USING_ASSEMBLY_ITEM_ID,
4100                                  DECODE(AD.SOURCE_ORGANIZATION_ID,
4101                                     -23453, null,
4102                                     AD.SOURCE_ORGANIZATION_ID),
4103                                  Decode(sign(trunc(AD.Demand_Date) - p_atf_date),
4104                                         1, p_family_id,
4105                                         Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
4106                                                 'Y', AD.Original_Item_Id,
4107                                                 p_family_id)),
4108                                  p_org_id,
4109                                  p_instance_id,
4110                                  AD.Original_Origination_Type,
4111                                  DECODE(MSC_AATP_PVT.G_HIERARCHY_PROFILE,
4112                                     1, decode(AD.Original_Origination_Type,
4113                                        6, decode(AD.SOURCE_ORGANIZATION_ID,
4114                                           NULL, DECODE(AD.DEMAND_CLASS, null, null,
4115                                              DECODE(p_demand_class, '-1',
4116                                                 MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(
4117                                                    null, null, Decode(sign(trunc(AD.Demand_Date) - p_atf_date),
4118                                                                         1, p_family_id,
4119                                                                         Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
4120                                                                                 'Y', AD.Original_Item_Id,
4121                                                                                 p_family_id)), p_org_id,
4122                                                    p_instance_id, trunc(AD.Demand_Date),
4123                                                    p_level_id, AD.DEMAND_CLASS),
4124                                                 AD.DEMAND_CLASS)),
4125                                           -23453, DECODE(AD.DEMAND_CLASS, null, null,
4126                                              DECODE(p_demand_class, '-1',
4127                                                 MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(
4128                                                    null, null, Decode(sign(trunc(AD.Demand_Date) - p_atf_date),
4129                                                                         1, p_family_id,
4130                                                                         Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
4131                                                                                 'Y', AD.Original_Item_Id,
4132                                                                                 p_family_id)), p_org_id,
4133                                                    p_instance_id, trunc(AD.Demand_Date),
4134                                                    p_level_id, AD.DEMAND_CLASS),
4135                                                 AD.DEMAND_CLASS)),
4136                                           AD.ORGANIZATION_ID, DECODE(AD.DEMAND_CLASS, null, null,
4137                                              DECODE(p_demand_class, '-1',
4138                                                 MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(
4139                                                    null, null, Decode(sign(trunc(AD.Demand_Date) - p_atf_date),
4140                                                                         1, p_family_id,
4141                                                                         Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
4142                                                                                 'Y', AD.Original_Item_Id,
4143                                                                                 p_family_id)), p_org_id,
4144                                                    p_instance_id, trunc(AD.Demand_Date),
4145                                                    p_level_id, AD.DEMAND_CLASS),
4146                                                 AD.DEMAND_CLASS)),
4147                                           p_demand_class),
4148                                     30, decode(AD.SOURCE_ORGANIZATION_ID,
4149                                        NULL, DECODE(AD.DEMAND_CLASS, null, null,
4150                                           DECODE(p_demand_class, '-1',
4151                                              MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(
4152                                                 null, null, Decode(sign(trunc(AD.Demand_Date) - p_atf_date),
4153                                                                         1, p_family_id,
4154                                                                         Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
4155                                                                                 'Y', AD.Original_Item_Id,
4156                                                                                 p_family_id)), p_org_id,
4157                                                 p_instance_id, trunc(AD.Demand_Date),
4158                                                 p_level_id, AD.DEMAND_CLASS),
4159                                              AD.DEMAND_CLASS)),
4160                                        -23453, DECODE(AD.DEMAND_CLASS, null, null,
4161                                           DECODE(p_demand_class, '-1',
4162                                              MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(
4163                                                 null, null, Decode(sign(trunc(AD.Demand_Date) - p_atf_date),
4164                                                                         1, p_family_id,
4165                                                                         Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
4166                                                                                 'Y', AD.Original_Item_Id,
4167                                                                                 p_family_id)), p_org_id,
4168                                                 p_instance_id, trunc(AD.Demand_Date),
4169                                                 p_level_id, AD.DEMAND_CLASS),
4170                                              AD.DEMAND_CLASS)),
4171                                        AD.ORGANIZATION_ID, DECODE(AD.DEMAND_CLASS, null, null,
4172                                           DECODE(p_demand_class, '-1',
4173                                              MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(
4174                                                 null, null, Decode(sign(trunc(AD.Demand_Date) - p_atf_date),
4175                                                                         1, p_family_id,
4176                                                                         Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
4177                                                                                 'Y', AD.Original_Item_Id,
4178                                                                                 p_family_id)), p_org_id,
4179                                                 p_instance_id, trunc(AD.Demand_Date),
4180                                                 p_level_id, AD.DEMAND_CLASS),
4181                                              AD.DEMAND_CLASS)),
4182                                        p_demand_class),
4183                                     DECODE(AD.DEMAND_CLASS, null, null,
4184                                        DECODE(p_demand_class, '-1',
4185                                           MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(
4186                                              null, null, Decode(sign(trunc(AD.Demand_Date) - p_atf_date),
4187                                                                         1, p_family_id,
4188                                                                         Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
4189                                                                                 'Y', AD.Original_Item_Id,
4190                                                                                 p_family_id)), p_org_id,
4191                                              p_instance_id, trunc(AD.Demand_Date),
4192                                              p_level_id, AD.DEMAND_CLASS),
4193                                           AD.DEMAND_CLASS))),
4194                                     2, DECODE(AD.CUSTOMER_ID, NULL, p_demand_class,
4195                                                    0, p_demand_class,
4196                                        decode(AD.Original_Origination_Type,
4197                                           6, decode(AD.SOURCE_ORGANIZATION_ID,
4198                                              NULL, MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(
4199                                                    AD.CUSTOMER_ID, AD.SHIP_TO_SITE_ID, Decode(sign(trunc(AD.Demand_Date) - p_atf_date),
4200                                                                                                 1, p_family_id,
4201                                                                                                 Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
4202                                                                                                         'Y', AD.Original_Item_Id,
4203                                                                                                         p_family_id)),
4204                                                    p_org_id, p_instance_id, trunc(AD.Demand_Date),
4205                                                    p_level_id, NULL),
4206                                              -23453, MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(
4207                                                    AD.CUSTOMER_ID, AD.SHIP_TO_SITE_ID, Decode(sign(trunc(AD.Demand_Date) - p_atf_date),
4208                                                                                                 1, p_family_id,
4209                                                                                                 Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
4210                                                                                                         'Y', AD.Original_Item_Id,
4211                                                                                                         p_family_id)),
4212                                                    p_org_id, p_instance_id, trunc(AD.Demand_Date),
4213                                                    p_level_id, NULL),
4214                                              AD.ORGANIZATION_ID, MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(
4215                                                    AD.CUSTOMER_ID, AD.SHIP_TO_SITE_ID, Decode(sign(trunc(AD.Demand_Date) - p_atf_date),
4216                                                                                                 1, p_family_id,
4217                                                                                                 Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
4218                                                                                                         'Y', AD.Original_Item_Id,
4219                                                                                                         p_family_id)),
4220                                                    p_org_id, p_instance_id, trunc(AD.Demand_Date),
4221                                                    p_level_id, NULL),
4222                                              p_demand_class),
4223                                           30, decode(AD.SOURCE_ORGANIZATION_ID,
4224                                              NULL, MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(
4225                                                    AD.CUSTOMER_ID, AD.SHIP_TO_SITE_ID, Decode(sign(trunc(AD.Demand_Date) - p_atf_date),
4226                                                                                                 1, p_family_id,
4227                                                                                                 Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
4228                                                                                                         'Y', AD.Original_Item_Id,
4229                                                                                                         p_family_id)),
4230                                                    p_org_id, p_instance_id, trunc(AD.Demand_Date),
4231                                                    p_level_id, NULL),
4232                                              -23453, MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(
4233                                                    AD.CUSTOMER_ID, AD.SHIP_TO_SITE_ID, Decode(sign(trunc(AD.Demand_Date) - p_atf_date),
4234                                                                                                 1, p_family_id,
4235                                                                                                 Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
4236                                                                                                         'Y', AD.Original_Item_Id,
4237                                                                                                         p_family_id)),
4238                                                    p_org_id, p_instance_id, trunc(AD.Demand_Date),
4239                                                    p_level_id, NULL),
4240                                              AD.ORGANIZATION_ID, MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(
4241                                                    AD.CUSTOMER_ID, AD.SHIP_TO_SITE_ID, Decode(sign(trunc(AD.Demand_Date) - p_atf_date),
4242                                                                                                 1, p_family_id,
4243                                                                                                 Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
4244                                                                                                         'Y', AD.Original_Item_Id,
4245                                                                                                         p_family_id)),
4246                                                    p_org_id, p_instance_id, trunc(AD.Demand_Date),
4247                                                    p_level_id, NULL),
4248                                              p_demand_class),
4249                                           MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(
4250                                              AD.CUSTOMER_ID, AD.SHIP_TO_SITE_ID,
4251                                              Decode(sign(trunc(AD.Demand_Date) - p_atf_date),
4252                                                         1, p_family_id,
4253                                                         Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
4254                                                                 'Y', AD.Original_Item_Id,
4255                                                                 p_family_id)), p_org_id, p_instance_id,
4256                                              trunc(AD.Demand_Date),p_level_id, NULL)))),
4257                                        p_demand_class,
4258                                        p_level_id),0)) SD_QTY --4365873
4259                    FROM        MSC_ALLOC_DEMANDS AD
4260                    WHERE       AD.PLAN_ID = p_plan_id
4261                    AND         AD.SR_INSTANCE_ID = p_instance_id
4262                    AND         AD.INVENTORY_ITEM_ID in (p_member_id,p_family_id)
4263                    AND         AD.ORGANIZATION_ID = p_org_id
4264                    AND         AD.ORIGINATION_TYPE <> 52
4265                    AND         AD.ALLOCATED_QUANTITY <> 0
4266                    --bug3700564 added trunc
4267                    AND         TRUNC(AD.DEMAND_DATE) < NVL(p_itf, TRUNC(AD.DEMAND_DATE) + 1)
4268                    UNION ALL
4269                    SELECT  --TRUNC(SA.SUPPLY_DATE) SD_DATE,
4270                    	   GREATEST(TRUNC(SA.SUPPLY_DATE),p_sys_next_date) SD_DATE,--3099066
4271                            SA.ALLOCATED_QUANTITY UNALLOC_SD_QTY,
4272                            SA.ALLOCATED_QUANTITY*
4273                               DECODE(DECODE(MSC_AATP_PVT.G_HIERARCHY_PROFILE,
4274                                      1, DECODE(SA.DEMAND_CLASS, null, null,
4275                                         DECODE(p_demand_class, '-1',
4276                                            MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(
4277                                                          null,
4278                                                          null,
4279                                                          Decode(sign(trunc(SA.Supply_Date) - p_atf_date),
4280                                                                 1, p_family_id,
4281                                                                 Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
4282                                                                         'Y', SA.Original_Item_Id,
4283                                                                         p_family_id)),
4284                                                          p_org_id,
4285                                                          p_instance_id,
4286                                                          TRUNC(sa.SUPPLY_DATE),
4287                                                          p_level_id,
4288                                                          sa.DEMAND_CLASS),
4289                                            sa.DEMAND_CLASS)),
4290                                      2, DECODE(sa.CUSTOMER_ID, NULL, TO_CHAR(NULL),
4291                                                        0, TO_CHAR(NULL),
4292                                                        MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(
4293                                                          sa.CUSTOMER_ID,
4294                                                          sa.SHIP_TO_SITE_ID,
4295                                                          Decode(sign(trunc(sa.Supply_Date) - p_atf_date),
4296                                                                 1, p_family_id,
4297                                                                 Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
4298                                                                         'Y', sa.Original_Item_Id,
4299                                                                         p_family_id)),
4300                                                          p_org_id,
4301                                                          p_instance_id,
4302                                                          TRUNC(sa.SUPPLY_DATE),
4303                                                          p_level_id,
4304                                                          NULL))),
4305                                  p_demand_class, 1,
4306                                  NULL,  nvl(MIHM.allocation_percent/100,1), --4365873
4307                                  /*NVL(MSC_AATP_FUNC.Get_DC_Alloc_Percent(
4308                                            p_instance_id,
4309                                            Decode(sign(trunc(sa.Supply_Date) - p_atf_date),
4310                                                 1, p_family_id,
4311                                                 Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
4312                                                         'Y', sa.Original_Item_Id,
4313                                                         p_family_id)),
4314                                            p_org_id,
4315                                            null,
4316                                            null,
4317                                            p_demand_class,
4318                                            TRUNC(sa.SUPPLY_DATE)),
4319                                        1),*/
4320                                  DECODE(
4321                                   MIHM.allocation_percent/100, --4365873
4322                                  /*DECODE(MSC_AATP_FUNC.Get_DC_Alloc_Percent(
4323                                            p_instance_id,
4324                                            Decode(sign(trunc(sa.Supply_Date) - p_atf_date),
4325                                                 1, p_family_id,
4326                                                 Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
4327                                                         'Y', sa.Original_Item_Id,
4328                                                         p_family_id)),
4329                                            p_org_id,
4330                                            null,
4331                                            null,
4332                                            p_demand_class,
4333                                            TRUNC(sa.SUPPLY_DATE)),*/
4334                                    NULL, 1,
4335                                  0)) SD_QTY
4336                    FROM    MSC_ALLOC_SUPPLIES SA,MSC_ITEM_HIERARCHY_MV MIHM
4337                    WHERE   SA.PLAN_ID = p_plan_id
4338                    AND     SA.SR_INSTANCE_ID = p_instance_id
4339                    AND     SA.INVENTORY_ITEM_ID in (p_member_id, p_family_id)
4340                    AND     SA.ORGANIZATION_ID = p_org_id
4341                    AND     SA.ALLOCATED_QUANTITY <> 0
4342                    --bug3700564 added trunc
4343                    AND     TRUNC(SA.SUPPLY_DATE) >= DECODE(SA.ORIGINAL_ORDER_TYPE,
4344                                                         27, TRUNC(SYSDATE),
4345                                                         28, TRUNC(SYSDATE),
4346                                                         TRUNC(SA.SUPPLY_DATE))
4347                    AND     TRUNC(SA.SUPPLY_DATE) < NVL(p_itf, TRUNC(SA.SUPPLY_DATE) + 1)
4348 		   --4365874
4349 		   --5220274 if the rule is assigned to family only then use family id.
4350                   AND    Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
4351                              'N', p_family_id,
4352                          sa.INVENTORY_ITEM_ID) = MIHM.INVENTORY_ITEM_ID(+)
4353                   AND    sa.SR_INSTANCE_ID = MIHM.SR_INSTANCE_ID (+)
4354                   AND    sa.ORGANIZATION_ID = MIHM.ORGANIZATION_ID (+)
4355                 AND    decode(MIHM.level_id (+),-1,1,2) = decode(MSC_AATP_PVT.G_HIERARCHY_PROFILE,1,1,2)
4356                   AND    TRUNC(sa.SUPPLY_DATE) >= MIHM.effective_date (+)
4357                   AND    TRUNC(sa.SUPPLY_DATE) <= MIHM.disable_date (+)
4358                 AND    MIHM.demand_class (+) = p_demand_class
4359                    )
4360              GROUP BY SD_DATE
4361              order by SD_DATE; --4698199
4362 
4363 EXCEPTION
4364         WHEN OTHERS THEN
4365                 IF PG_DEBUG in ('Y', 'C') THEN
4366                         msc_sch_wb.atp_debug('Item_Alloc_Avail_Pf_Unalloc: ' || 'Error occurred: ' || to_char(sqlcode) || ':' || SQLERRM);
4367                 END IF;
4368                 x_return_status := FND_API.G_RET_STS_ERROR;
4369 
4370 END Item_Alloc_Avail_Pf_Unalloc;
4371 
4372 /*--Item_Alloc_Avail_Pf_Dtls-------------------------------------------------------------
4373 |  o  Called from Item_Alloc_Cum_Atp procedure for Time Phased Rule Based AATP
4374 |       scenarios.
4375 |  o  The supply demand SQL inserts following in msc_atp_sd_details_temp table:
4376 |       -  Allocated Bucketed demands (origination type 51) for member item upto ATF
4377 |            from msc_alloc_demands table.
4378 |       -  Allocated Bucketed demands for family after ATF from msc_alloc_demands table.
4379 |       -  Allocated Rollup supplies (order type 50) for member item upto ATF from
4380 |            msc_alloc_supplies table.
4381 |       -  Allocated Rollup supplies for family after ATF from msc_alloc_supplies table.
4382 |  o  Other important differences from non PF SQLs are:
4383 |       -  Columns Pf_Display_Flag, Original_Demand_Quantity and Original_Demand_Date
4384 |            in msc_atp_sd_details_temp table are populated for demands.
4385 |       -  Column Original_Supply_Demand_Type is populated for demands and supplies
4386 |            and stores the supply demand type of parent supplies and demands.
4387 +--------------------------------------------------------------------------------------*/
4388 PROCEDURE Item_Alloc_Avail_Pf_Dtls (
4389         p_member_id                     IN      NUMBER,
4390         p_family_id                     IN      NUMBER,
4391         p_sr_member_id                  IN      NUMBER,
4392         p_sr_family_id                  IN      NUMBER,
4393         p_org_id                        IN      NUMBER,
4394         p_instance_id                   IN      NUMBER,
4395         p_plan_id                       IN      NUMBER,
4396         p_demand_class                  IN      VARCHAR2,
4397         p_level_id                      IN      NUMBER,
4398         p_itf                           IN      DATE,
4399         p_level                         IN      NUMBER,
4400         p_identifier                    IN      NUMBER,
4401         p_scenario_id                   IN      NUMBER,
4402         p_uom_code                      IN      VARCHAR2,
4403         p_sys_next_date			IN 	DATE, --bug3099066
4404         p_atf_date                      IN      DATE,
4405         x_return_status                 OUT     NOCOPY VARCHAR2
4406 ) IS
4407         l_null_num              NUMBER;
4408         l_null_char             VARCHAR2(1);
4409         l_null_date             DATE; --bug3814584
4410         l_sysdate               DATE := sysdate;
4411 
4412 BEGIN
4413         IF PG_DEBUG in ('Y', 'C') THEN
4414                 msc_sch_wb.atp_debug('******* Begin Item_Alloc_Avail_Pf_Dtls **********');
4415                 msc_sch_wb.atp_debug('Item_Alloc_Avail_Pf_Dtls: p_member_id: ' || p_member_id);
4416                 msc_sch_wb.atp_debug('Item_Alloc_Avail_Pf_Dtls: p_family_id: ' || p_family_id);
4417                 msc_sch_wb.atp_debug('Item_Alloc_Avail_Pf_Dtls: p_sr_member_id: ' || p_sr_member_id);
4418                 msc_sch_wb.atp_debug('Item_Alloc_Avail_Pf_Dtls: p_sr_family_id: ' || p_sr_family_id);
4419                 msc_sch_wb.atp_debug('Item_Alloc_Avail_Pf_Dtls: p_instance_id: ' || p_instance_id);
4420                 msc_sch_wb.atp_debug('Item_Alloc_Avail_Pf_Dtls: p_plan_id: ' || p_plan_id);
4421                 msc_sch_wb.atp_debug('Item_Alloc_Avail_Pf_Dtls: p_demand_class: ' || p_demand_class);
4422                 msc_sch_wb.atp_debug('Item_Alloc_Avail_Pf_Dtls: p_level_id: ' || p_level_id);
4423                 msc_sch_wb.atp_debug('Item_Alloc_Avail_Pf_Dtls: p_identifier: ' || p_identifier);
4424                 msc_sch_wb.atp_debug('Item_Alloc_Avail_Pf_Dtls: p_scenario_id: ' || p_scenario_id);
4425                 msc_sch_wb.atp_debug('Item_Alloc_Avail_Pf_Dtls: p_uom_code: ' || p_uom_code);
4426         END IF;
4427 
4428         -- Initializing API return code
4429         x_return_status := FND_API.G_RET_STS_SUCCESS;
4430 
4431         INSERT INTO msc_atp_sd_details_temp (
4432                 ATP_Level,
4433                 Order_line_id,
4434                 Scenario_Id,
4435                 Inventory_Item_Id,
4436                 Request_Item_Id,
4437                 Organization_Id,
4438                 Department_Id,
4439                 Resource_Id,
4440                 Supplier_Id,
4441                 Supplier_Site_Id,
4442                 From_Organization_Id,
4443                 From_Location_Id,
4444                 To_Organization_Id,
4445                 To_Location_Id,
4446                 Ship_Method,
4447                 UOM_code,
4448                 Supply_Demand_Type,
4449                 Supply_Demand_Source_Type,
4450                 Supply_Demand_Source_Type_Name,
4451                 Identifier1,
4452                 Identifier2,
4453                 Identifier3,
4454                 Identifier4,
4455                 Allocated_Quantity,
4456                 Supply_Demand_Date,
4457                 Disposition_Type,
4458                 Disposition_Name,
4459                 Pegging_Id,
4460                 End_Pegging_Id,
4461         	Pf_Display_Flag,
4462                 Supply_Demand_Quantity,
4463         	Original_Demand_Quantity,
4464         	Original_Demand_Date,
4465         	Original_Item_Id,
4466         	Original_Supply_Demand_Type,
4467                 creation_date,
4468                 created_by,
4469                 last_update_date,
4470                 last_updated_by,
4471                 last_update_login,
4472                 Unallocated_Quantity,
4473                 ORIG_CUSTOMER_SITE_NAME,--bug3263368
4474                 ORIG_CUSTOMER_NAME, --bug3263368
4475                 ORIG_DEMAND_CLASS, --bug3263368
4476                 ORIG_REQUEST_DATE, --bug3263368
4477                 Inventory_Item_Name --bug3579625
4478                 )
4479            (
4480             SELECT      p_level col1,
4481                         p_identifier col2,
4482                         p_scenario_id col3,
4483                         p_sr_family_id col4,
4484                         p_sr_member_id col5,
4485                         p_org_id col6,
4486                         l_null_num col7,
4487                         l_null_num col8,
4488                         l_null_num col9,
4489                         l_null_num col10,
4490                         l_null_num col11,
4491                         l_null_num col12,
4492                         l_null_num col13,
4493                         l_null_num col14,
4494                         l_null_char col15,
4495                         p_uom_code col16,
4496                         1 col17,
4497                         AD.ORIGINATION_TYPE col18,
4498                         l_null_char col19,
4499                         AD.SR_INSTANCE_ID col20,
4500                         l_null_num col21,
4501                         AD.PARENT_DEMAND_ID col22,
4502                         l_null_num col23,
4503                         -1* AD.ALLOCATED_QUANTITY *
4504                             DECODE(DECODE(MSC_AATP_PVT.G_HIERARCHY_PROFILE,
4505                               1, decode(AD.Original_Origination_Type,
4506                                  6, decode(AD.SOURCE_ORGANIZATION_ID,
4507                                     NULL, DECODE(AD.DEMAND_CLASS, null, null,
4508                                        DECODE(p_demand_class, '-1',
4509                                           MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(
4510                                              null, null, Decode(sign(trunc(AD.Demand_Date) - p_atf_date),
4511                                                                 1, p_family_id,
4512                                                                 Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
4513                                                                         'Y', AD.Original_Item_Id,
4514                                                                         p_family_id)), p_org_id,
4515                                              p_instance_id, trunc(AD.Demand_Date),
4516                                              p_level_id, AD.DEMAND_CLASS),
4517                                              AD.DEMAND_CLASS)),
4518                                     -23453, DECODE(AD.DEMAND_CLASS, null, null,
4519                                        DECODE(p_demand_class, '-1',
4520                                           MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(
4521                                              null, null, Decode(sign(trunc(AD.Demand_Date) - p_atf_date),
4522                                                                 1, p_family_id,
4523                                                                 Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
4524                                                                         'Y', AD.Original_Item_Id,
4525                                                                         p_family_id)), p_org_id,
4526                                              p_instance_id, trunc(AD.Demand_Date),
4527                                              p_level_id, AD.DEMAND_CLASS),
4528                                              AD.DEMAND_CLASS)),
4529                                     AD.ORGANIZATION_ID, DECODE(AD.DEMAND_CLASS, null, null,
4530                                        DECODE(p_demand_class, '-1',
4531                                           MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(
4532                                              null, null, Decode(sign(trunc(AD.Demand_Date) - p_atf_date),
4533                                                                 1, p_family_id,
4534                                                                 Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
4535                                                                         'Y', AD.Original_Item_Id,
4536                                                                         p_family_id)), p_org_id,
4537                                              p_instance_id, trunc(AD.Demand_Date),
4538                                              p_level_id, AD.DEMAND_CLASS),
4539                                              AD.DEMAND_CLASS)), TO_CHAR(NULL)),
4540                                  30, decode(AD.SOURCE_ORGANIZATION_ID,
4541                                     NULL, DECODE(AD.DEMAND_CLASS, null, null,
4542                                        DECODE(p_demand_class, '-1',
4543                                           MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(
4544                                              null, null, Decode(sign(trunc(AD.Demand_Date) - p_atf_date),
4545                                                                 1, p_family_id,
4546                                                                 Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
4547                                                                         'Y', AD.Original_Item_Id,
4548                                                                         p_family_id)), p_org_id,
4549                                              p_instance_id, trunc(AD.Demand_Date),
4550                                              p_level_id, AD.DEMAND_CLASS),
4551                                              AD.DEMAND_CLASS)),
4552                                     -23453, DECODE(AD.DEMAND_CLASS, null, null,
4553                                        DECODE(p_demand_class, '-1',
4554                                           MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(
4555                                              null, null, Decode(sign(trunc(AD.Demand_Date) - p_atf_date),
4556                                                                 1, p_family_id,
4557                                                                 Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
4558                                                                         'Y', AD.Original_Item_Id,
4559                                                                         p_family_id)), p_org_id,
4560                                              p_instance_id, trunc(AD.Demand_Date),
4561                                              p_level_id, AD.DEMAND_CLASS),
4562                                              AD.DEMAND_CLASS)),
4563                                     AD.ORGANIZATION_ID, DECODE(AD.DEMAND_CLASS, null, null,
4564                                        DECODE(p_demand_class, '-1',
4565                                           MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(
4566                                              null, null, Decode(sign(trunc(AD.Demand_Date) - p_atf_date),
4567                                                                 1, p_family_id,
4568                                                                 Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
4569                                                                         'Y', AD.Original_Item_Id,
4570                                                                         p_family_id)), p_org_id,
4571                                              p_instance_id, trunc(AD.Demand_Date),
4572                                              p_level_id, AD.DEMAND_CLASS),
4573                                              AD.DEMAND_CLASS)), TO_CHAR(NULL)),
4574                                  DECODE(AD.DEMAND_CLASS, null, null,
4575                                     DECODE(p_demand_class, '-1',
4576                                        MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(
4577                                           null, null, Decode(sign(trunc(AD.Demand_Date) - p_atf_date),
4578                                                                 1, p_family_id,
4579                                                                 Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
4580                                                                         'Y', AD.Original_Item_Id,
4581                                                                         p_family_id)), p_org_id,
4582                                           p_instance_id, trunc(AD.Demand_Date),
4583                                           p_level_id, AD.DEMAND_CLASS),
4584                                           AD.DEMAND_CLASS))),
4585                               2, DECODE(AD.CUSTOMER_ID, NULL, TO_CHAR(NULL),
4586                                                    0, TO_CHAR(NULL),
4587                                  decode(AD.Original_Origination_Type,
4588                                     6, decode(AD.SOURCE_ORGANIZATION_ID,
4589                                        NULL, MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(
4590                                              AD.CUSTOMER_ID, AD.SHIP_TO_SITE_ID, Decode(sign(trunc(AD.Demand_Date) - p_atf_date),
4591                                                                                         1, p_family_id,
4592                                                                                         Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
4593                                                                                                 'Y', AD.Original_Item_Id,
4594                                                                                                 p_family_id)),
4595                                              p_org_id, p_instance_id, trunc(AD.Demand_Date),
4596                                              p_level_id, NULL),
4597                                        -23453, MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(
4598                                              AD.CUSTOMER_ID, AD.SHIP_TO_SITE_ID, Decode(sign(trunc(AD.Demand_Date) - p_atf_date),
4599                                                                                         1, p_family_id,
4600                                                                                         Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
4601                                                                                                 'Y', AD.Original_Item_Id,
4602                                                                                                 p_family_id)),
4603                                              p_org_id, p_instance_id, trunc(AD.Demand_Date),
4604                                              p_level_id, NULL),
4605                                        AD.ORGANIZATION_ID, MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(
4606                                              AD.CUSTOMER_ID, AD.SHIP_TO_SITE_ID, Decode(sign(trunc(AD.Demand_Date) - p_atf_date),
4607                                                                                         1, p_family_id,
4608                                                                                         Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
4609                                                                                                 'Y', AD.Original_Item_Id,
4610                                                                                                 p_family_id)),
4611                                              p_org_id, p_instance_id, trunc(AD.Demand_Date),
4612                                              p_level_id, NULL),
4613                                        TO_CHAR(NULL)),
4614                                     30, decode(AD.SOURCE_ORGANIZATION_ID,
4615                                        NULL, MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(
4616                                              AD.CUSTOMER_ID, AD.SHIP_TO_SITE_ID, Decode(sign(trunc(AD.Demand_Date) - p_atf_date),
4617                                                                                         1, p_family_id,
4618                                                                                         Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
4619                                                                                                 'Y', AD.Original_Item_Id,
4620                                                                                                 p_family_id)),
4621                                              p_org_id, p_instance_id, trunc(AD.Demand_Date),
4622                                              p_level_id, NULL),
4623                                        -23453, MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(
4624                                              AD.CUSTOMER_ID, AD.SHIP_TO_SITE_ID, Decode(sign(trunc(AD.Demand_Date) - p_atf_date),
4625                                                                                         1, p_family_id,
4626                                                                                         Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
4627                                                                                                 'Y', AD.Original_Item_Id,
4628                                                                                                 p_family_id)),
4629                                              p_org_id, p_instance_id, trunc(AD.Demand_Date),
4630                                              p_level_id, NULL),
4631                                        AD.ORGANIZATION_ID, MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(
4632                                              AD.CUSTOMER_ID, AD.SHIP_TO_SITE_ID, Decode(sign(trunc(AD.Demand_Date) - p_atf_date),
4633                                                                                         1, p_family_id,
4634                                                                                         Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
4635                                                                                                 'Y', AD.Original_Item_Id,
4636                                                                                                 p_family_id)),
4637                                              p_org_id, p_instance_id, trunc(AD.Demand_Date),
4638                                              p_level_id, NULL),
4639                                        TO_CHAR(NULL)),
4640                                     MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(
4641                                        AD.CUSTOMER_ID, AD.SHIP_TO_SITE_ID,
4642                                        Decode(sign(trunc(AD.Demand_Date) - p_atf_date),
4643                                                 1, p_family_id,
4644                                                 Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
4645                                                         'Y', AD.Original_Item_Id,
4646                                                         p_family_id)), p_org_id, p_instance_id,
4647                                        trunc(AD.Demand_Date),p_level_id, NULL)))),
4648                            p_demand_class, 1,
4649                              Decode(AD.Demand_Class, NULL, --4365873 If l_demand_class is not null and demand class is populated
4650                              -- on  supplies record then 0 should be allocated.
4651                               MSC_AATP_FUNC.Get_Item_Demand_Alloc_Percent(p_plan_id,
4652                                  AD.PARENT_DEMAND_ID,
4653                                  trunc(AD.Demand_Date),
4654                                  AD.USING_ASSEMBLY_ITEM_ID,
4655                                  DECODE(AD.SOURCE_ORGANIZATION_ID,
4656                                     -23453, null,
4657                                     AD.SOURCE_ORGANIZATION_ID),
4658                                  Decode(sign(trunc(AD.Demand_Date) - p_atf_date),
4659                                         1, p_family_id,
4660                                         Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
4661                                                 'Y', AD.Original_Item_Id,
4662                                                 p_family_id)),
4663                                  p_org_id,
4664                                  p_instance_id,
4665                                  AD.Original_Origination_Type,
4666                                  DECODE(MSC_AATP_PVT.G_HIERARCHY_PROFILE,
4667                                     1, decode(AD.Original_Origination_Type,
4668                                        6, decode(AD.SOURCE_ORGANIZATION_ID,
4669                                           NULL, DECODE(AD.DEMAND_CLASS, null, null,
4670                                              DECODE(p_demand_class, '-1',
4671                                                 MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(
4672                                                    null, null, Decode(sign(trunc(AD.Demand_Date) - p_atf_date),
4673                                                                         1, p_family_id,
4674                                                                         Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
4675                                                                                 'Y', AD.Original_Item_Id,
4676                                                                                 p_family_id)), p_org_id,
4677                                                    p_instance_id, trunc(AD.Demand_Date),
4678                                                    p_level_id, AD.DEMAND_CLASS),
4679                                                 AD.DEMAND_CLASS)),
4680                                           -23453, DECODE(AD.DEMAND_CLASS, null, null,
4681                                              DECODE(p_demand_class, '-1',
4682                                                 MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(
4683                                                    null, null, Decode(sign(trunc(AD.Demand_Date) - p_atf_date),
4684                                                                         1, p_family_id,
4685                                                                         Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
4686                                                                                 'Y', AD.Original_Item_Id,
4687                                                                                 p_family_id)), p_org_id,
4688                                                    p_instance_id, trunc(AD.Demand_Date),
4689                                                    p_level_id, AD.DEMAND_CLASS),
4690                                                 AD.DEMAND_CLASS)),
4691                                           AD.ORGANIZATION_ID, DECODE(AD.DEMAND_CLASS, null, null,
4692                                              DECODE(p_demand_class, '-1',
4693                                                 MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(
4694                                                    null, null, Decode(sign(trunc(AD.Demand_Date) - p_atf_date),
4695                                                                         1, p_family_id,
4696                                                                         Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
4697                                                                                 'Y', AD.Original_Item_Id,
4698                                                                                 p_family_id)), p_org_id,
4699                                                    p_instance_id, trunc(AD.Demand_Date),
4700                                                    p_level_id, AD.DEMAND_CLASS),
4701                                                 AD.DEMAND_CLASS)),
4702                                           p_demand_class),
4703                                     30, decode(AD.SOURCE_ORGANIZATION_ID,
4704                                        NULL, DECODE(AD.DEMAND_CLASS, null, null,
4705                                           DECODE(p_demand_class, '-1',
4706                                              MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(
4707                                                 null, null, Decode(sign(trunc(AD.Demand_Date) - p_atf_date),
4708                                                                         1, p_family_id,
4709                                                                         Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
4710                                                                                 'Y', AD.Original_Item_Id,
4711                                                                                 p_family_id)), p_org_id,
4712                                                 p_instance_id, trunc(AD.Demand_Date),
4713                                                    p_level_id, AD.DEMAND_CLASS),
4714                                              AD.DEMAND_CLASS)),
4715                                        -23453, DECODE(AD.DEMAND_CLASS, null, null,
4716                                           DECODE(p_demand_class, '-1',
4717                                              MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(
4718                                                 null, null, Decode(sign(trunc(AD.Demand_Date) - p_atf_date),
4719                                                                         1, p_family_id,
4720                                                                         Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
4721                                                                                 'Y', AD.Original_Item_Id,
4722                                                                                 p_family_id)), p_org_id,
4723                                                 p_instance_id, trunc(AD.Demand_Date),
4724                                                    p_level_id, AD.DEMAND_CLASS),
4725                                              AD.DEMAND_CLASS)),
4726                                        AD.ORGANIZATION_ID, DECODE(AD.DEMAND_CLASS, null, null,
4727                                           DECODE(p_demand_class, '-1',
4728                                              MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(
4729                                                 null, null, Decode(sign(trunc(AD.Demand_Date) - p_atf_date),
4730                                                                         1, p_family_id,
4731                                                                         Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
4732                                                                                 'Y', AD.Original_Item_Id,
4733                                                                                 p_family_id)), p_org_id,
4734                                                 p_instance_id, trunc(AD.Demand_Date),
4735                                                    p_level_id, AD.DEMAND_CLASS),
4736                                              AD.DEMAND_CLASS)),
4737                                        p_demand_class),
4738                                     DECODE(AD.DEMAND_CLASS, null, null,
4739                                        DECODE(p_demand_class, '-1',
4740                                           MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(
4741                                              null, null, Decode(sign(trunc(AD.Demand_Date) - p_atf_date),
4742                                                                         1, p_family_id,
4743                                                                         Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
4744                                                                                 'Y', AD.Original_Item_Id,
4745                                                                                 p_family_id)), p_org_id,
4746                                              p_instance_id, trunc(AD.Demand_Date),
4747                                                    p_level_id, AD.DEMAND_CLASS),
4748                                           AD.DEMAND_CLASS))),
4749                                     2, DECODE(AD.CUSTOMER_ID, NULL, p_demand_class,
4750                                                    0, p_demand_class,
4751                                        decode(AD.Original_Origination_Type,
4752                                           6, decode(AD.SOURCE_ORGANIZATION_ID,
4753                                              NULL, MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(
4754                                                    AD.CUSTOMER_ID, AD.SHIP_TO_SITE_ID, Decode(sign(trunc(AD.Demand_Date) - p_atf_date),
4755                                                                                                 1, p_family_id,
4756                                                                                                 Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
4757                                                                                                         'Y', AD.Original_Item_Id,
4758                                                                                                         p_family_id)),
4759                                                    p_org_id, p_instance_id, trunc(AD.Demand_Date),
4760                                                    p_level_id, NULL),
4761                                              -23453, MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(
4762                                                    AD.CUSTOMER_ID, AD.SHIP_TO_SITE_ID, Decode(sign(trunc(AD.Demand_Date) - p_atf_date),
4763                                                                                                 1, p_family_id,
4764                                                                                                 Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
4765                                                                                                         'Y', AD.Original_Item_Id,
4766                                                                                                         p_family_id)),
4767                                                    p_org_id, p_instance_id, trunc(AD.Demand_Date),
4768                                                    p_level_id, NULL),
4769                                              AD.ORGANIZATION_ID, MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(
4770                                                    AD.CUSTOMER_ID, AD.SHIP_TO_SITE_ID, Decode(sign(trunc(AD.Demand_Date) - p_atf_date),
4771                                                                                                 1, p_family_id,
4772                                                                                                 Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
4773                                                                                                         'Y', AD.Original_Item_Id,
4774                                                                                                         p_family_id)),
4775                                                    p_org_id, p_instance_id, trunc(AD.Demand_Date),
4776                                                    p_level_id, NULL),
4777                                              p_demand_class),
4778                                           30, decode(AD.SOURCE_ORGANIZATION_ID,
4779                                              NULL, MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(
4780                                                    AD.CUSTOMER_ID, AD.SHIP_TO_SITE_ID, Decode(sign(trunc(AD.Demand_Date) - p_atf_date),
4781                                                                                                 1, p_family_id,
4782                                                                                                 Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
4783                                                                                                         'Y', AD.Original_Item_Id,
4784                                                                                                         p_family_id)),
4785                                                    p_org_id, p_instance_id, trunc(AD.Demand_Date),
4786                                                    p_level_id, NULL),
4787                                              -23453, MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(
4788                                                    AD.CUSTOMER_ID, AD.SHIP_TO_SITE_ID, Decode(sign(trunc(AD.Demand_Date) - p_atf_date),
4789                                                                                                 1, p_family_id,
4790                                                                                                 Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
4791                                                                                                         'Y', AD.Original_Item_Id,
4792                                                                                                         p_family_id)),
4793                                                    p_org_id, p_instance_id, trunc(AD.Demand_Date),
4794                                                    p_level_id, NULL),
4795                                              AD.ORGANIZATION_ID, MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(
4796                                                    AD.CUSTOMER_ID, AD.SHIP_TO_SITE_ID, Decode(sign(trunc(AD.Demand_Date) - p_atf_date),
4797                                                                                                 1, p_family_id,
4798                                                                                                 Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
4799                                                                                                         'Y', AD.Original_Item_Id,
4800                                                                                                         p_family_id)),
4801                                                    p_org_id, p_instance_id, trunc(AD.Demand_Date),
4802                                                    p_level_id, NULL),
4803                                              p_demand_class),
4804                                           MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(
4805                                              AD.CUSTOMER_ID, AD.SHIP_TO_SITE_ID,
4806                                              Decode(sign(trunc(AD.Demand_Date) - p_atf_date),
4807                                                         1, p_family_id,
4808                                                         Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
4809                                                                 'Y', AD.Original_Item_Id,
4810                                                                 p_family_id)), p_org_id, p_instance_id,
4811                                              trunc(AD.Demand_Date),p_level_id, NULL)))),
4812                                        p_demand_class,
4813                                        p_level_id),0)) col24, --4365873
4814                         --TRUNC(AD.DEMAND_DATE) col25,
4815                         GREATEST(TRUNC(AD.DEMAND_DATE),p_sys_next_date) col25, --3099066
4816                         l_null_num col26,
4817                         AD.ORDER_NUMBER col27,
4818                         l_null_num col28,
4819                         l_null_num col29,
4820                 	Decode(AD.inventory_item_id, p_family_id,
4821                 	        Decode(AD.original_item_id, p_member_id,
4822                 	                AD.Pf_Display_Flag,
4823                 	                Decode(sign(trunc(AD.Original_Demand_Date) - p_atf_date),
4824                 	                        1, AD.Pf_Display_Flag,
4825                 	                        1)),
4826                 	        AD.Pf_Display_Flag),
4827                 	-1* NVL(AD.Demand_Quantity, AD.ALLOCATED_QUANTITY),
4828                         -1* NVL(AD.Demand_Quantity, AD.ALLOCATED_QUANTITY) *
4829                             DECODE(DECODE(MSC_AATP_PVT.G_HIERARCHY_PROFILE,
4830                               1, decode(AD.Original_Origination_Type,
4831                                  6, decode(AD.SOURCE_ORGANIZATION_ID,
4832                                     NULL, DECODE(AD.DEMAND_CLASS, null, null,
4833                                        DECODE(p_demand_class, '-1',
4834                                           MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(
4835                                              null, null, Decode(sign(trunc(AD.Demand_Date) - p_atf_date),
4836                                                                 1, p_family_id,
4837                                                                 Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
4838                                                                         'Y', AD.Original_Item_Id,
4839                                                                         p_family_id)), p_org_id,
4840                                              p_instance_id, trunc(AD.Demand_Date),
4841                                              p_level_id, AD.DEMAND_CLASS),
4842                                              AD.DEMAND_CLASS)),
4843                                     -23453, DECODE(AD.DEMAND_CLASS, null, null,
4844                                        DECODE(p_demand_class, '-1',
4845                                           MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(
4846                                              null, null, Decode(sign(trunc(AD.Demand_Date) - p_atf_date),
4847                                                                 1, p_family_id,
4848                                                                 Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
4849                                                                         'Y', AD.Original_Item_Id,
4850                                                                         p_family_id)), p_org_id,
4851                                              p_instance_id, trunc(AD.Demand_Date),
4852                                              p_level_id, AD.DEMAND_CLASS),
4853                                              AD.DEMAND_CLASS)),
4854                                     AD.ORGANIZATION_ID, DECODE(AD.DEMAND_CLASS, null, null,
4855                                        DECODE(p_demand_class, '-1',
4856                                           MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(
4857                                              null, null, Decode(sign(trunc(AD.Demand_Date) - p_atf_date),
4858                                                                 1, p_family_id,
4859                                                                 Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
4860                                                                         'Y', AD.Original_Item_Id,
4861                                                                         p_family_id)), p_org_id,
4862                                              p_instance_id, trunc(AD.Demand_Date),
4863                                              p_level_id, AD.DEMAND_CLASS),
4864                                              AD.DEMAND_CLASS)), TO_CHAR(NULL)),
4865                                  30, decode(AD.SOURCE_ORGANIZATION_ID,
4866                                     NULL, DECODE(AD.DEMAND_CLASS, null, null,
4867                                        DECODE(p_demand_class, '-1',
4868                                           MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(
4869                                              null, null, Decode(sign(trunc(AD.Demand_Date) - p_atf_date),
4870                                                                 1, p_family_id,
4871                                                                 Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
4872                                                                         'Y', AD.Original_Item_Id,
4873                                                                         p_family_id)), p_org_id,
4874                                              p_instance_id, trunc(AD.Demand_Date),
4875                                              p_level_id, AD.DEMAND_CLASS),
4876                                              AD.DEMAND_CLASS)),
4877                                     -23453, DECODE(AD.DEMAND_CLASS, null, null,
4878                                        DECODE(p_demand_class, '-1',
4879                                           MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(
4880                                              null, null, Decode(sign(trunc(AD.Demand_Date) - p_atf_date),
4881                                                                 1, p_family_id,
4882                                                                 Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
4883                                                                         'Y', AD.Original_Item_Id,
4884                                                                         p_family_id)), p_org_id,
4885                                              p_instance_id, trunc(AD.Demand_Date),
4886                                              p_level_id, AD.DEMAND_CLASS),
4887                                              AD.DEMAND_CLASS)),
4888                                     AD.ORGANIZATION_ID, DECODE(AD.DEMAND_CLASS, null, null,
4889                                        DECODE(p_demand_class, '-1',
4890                                           MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(
4891                                              null, null, Decode(sign(trunc(AD.Demand_Date) - p_atf_date),
4892                                                                 1, p_family_id,
4893                                                                 Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
4894                                                                         'Y', AD.Original_Item_Id,
4895                                                                         p_family_id)), p_org_id,
4896                                              p_instance_id, trunc(AD.Demand_Date),
4897                                              p_level_id, AD.DEMAND_CLASS),
4898                                              AD.DEMAND_CLASS)), TO_CHAR(NULL)),
4899                                  DECODE(AD.DEMAND_CLASS, null, null,
4900                                     DECODE(p_demand_class, '-1',
4901                                        MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(
4902                                           null, null, Decode(sign(trunc(AD.Demand_Date) - p_atf_date),
4903                                                                 1, p_family_id,
4904                                                                 Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
4905                                                                         'Y', AD.Original_Item_Id,
4906                                                                         p_family_id)), p_org_id,
4907                                           p_instance_id, trunc(AD.Demand_Date),
4908                                           p_level_id, AD.DEMAND_CLASS),
4909                                           AD.DEMAND_CLASS))),
4910                               2, DECODE(AD.CUSTOMER_ID, NULL, TO_CHAR(NULL),
4911                                                    0, TO_CHAR(NULL),
4912                                  decode(AD.Original_Origination_Type,
4913                                     6, decode(AD.SOURCE_ORGANIZATION_ID,
4914                                        NULL, MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(
4915                                              AD.CUSTOMER_ID, AD.SHIP_TO_SITE_ID, Decode(sign(trunc(AD.Demand_Date) - p_atf_date),
4916                                                                                         1, p_family_id,
4917                                                                                         Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
4918                                                                                                 'Y', AD.Original_Item_Id,
4919                                                                                                 p_family_id)),
4920                                              p_org_id, p_instance_id, trunc(AD.Demand_Date),
4921                                              p_level_id, NULL),
4922                                        -23453, MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(
4923                                              AD.CUSTOMER_ID, AD.SHIP_TO_SITE_ID, Decode(sign(trunc(AD.Demand_Date) - p_atf_date),
4924                                                                                         1, p_family_id,
4925                                                                                         Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
4926                                                                                                 'Y', AD.Original_Item_Id,
4927                                                                                                 p_family_id)),
4928                                              p_org_id, p_instance_id, trunc(AD.Demand_Date),
4929                                              p_level_id, NULL),
4930                                        AD.ORGANIZATION_ID, MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(
4931                                              AD.CUSTOMER_ID, AD.SHIP_TO_SITE_ID, Decode(sign(trunc(AD.Demand_Date) - p_atf_date),
4932                                                                                         1, p_family_id,
4933                                                                                         Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
4934                                                                                                 'Y', AD.Original_Item_Id,
4935                                                                                                 p_family_id)),
4936                                              p_org_id, p_instance_id, trunc(AD.Demand_Date),
4937                                              p_level_id, NULL),
4938                                        TO_CHAR(NULL)),
4939                                     30, decode(AD.SOURCE_ORGANIZATION_ID,
4940                                        NULL, MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(
4941                                              AD.CUSTOMER_ID, AD.SHIP_TO_SITE_ID, Decode(sign(trunc(AD.Demand_Date) - p_atf_date),
4942                                                                                         1, p_family_id,
4943                                                                                         Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
4944                                                                                                 'Y', AD.Original_Item_Id,
4945                                                                                                 p_family_id)),
4946                                              p_org_id, p_instance_id, trunc(AD.Demand_Date),
4947                                              p_level_id, NULL),
4948                                        -23453, MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(
4949                                              AD.CUSTOMER_ID, AD.SHIP_TO_SITE_ID, Decode(sign(trunc(AD.Demand_Date) - p_atf_date),
4950                                                                                         1, p_family_id,
4951                                                                                         Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
4952                                                                                                 'Y', AD.Original_Item_Id,
4953                                                                                                 p_family_id)),
4954                                              p_org_id, p_instance_id, trunc(AD.Demand_Date),
4955                                              p_level_id, NULL),
4956                                        AD.ORGANIZATION_ID, MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(
4957                                              AD.CUSTOMER_ID, AD.SHIP_TO_SITE_ID, Decode(sign(trunc(AD.Demand_Date) - p_atf_date),
4958                                                                                         1, p_family_id,
4959                                                                                         Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
4960                                                                                                 'Y', AD.Original_Item_Id,
4961                                                                                                 p_family_id)),
4962                                              p_org_id, p_instance_id, trunc(AD.Demand_Date),
4963                                              p_level_id, NULL),
4964                                        TO_CHAR(NULL)),
4965                                     MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(
4966                                        AD.CUSTOMER_ID, AD.SHIP_TO_SITE_ID,
4967                                        Decode(sign(trunc(AD.Demand_Date) - p_atf_date),
4968                                                 1, p_family_id,
4969                                                 Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
4970                                                         'Y', AD.Original_Item_Id,
4971                                                         p_family_id)), p_org_id, p_instance_id,
4972                                        trunc(AD.Demand_Date),p_level_id, NULL)))),
4973                            p_demand_class, 1,
4974                               MSC_AATP_FUNC.Get_Item_Demand_Alloc_Percent(p_plan_id,
4975                                  AD.PARENT_DEMAND_ID,
4976                                  trunc(AD.Demand_Date),
4977                                  AD.USING_ASSEMBLY_ITEM_ID,
4978                                  DECODE(AD.SOURCE_ORGANIZATION_ID,
4979                                     -23453, null,
4980                                     AD.SOURCE_ORGANIZATION_ID),
4981                                  Decode(sign(trunc(AD.Demand_Date) - p_atf_date),
4982                                         1, p_family_id,
4983                                         Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
4984                                                 'Y', AD.Original_Item_Id,
4985                                                 p_family_id)),
4986                                  p_org_id,
4987                                  p_instance_id,
4988                                  AD.Original_Origination_Type,
4989                                  DECODE(MSC_AATP_PVT.G_HIERARCHY_PROFILE,
4990                                     1, decode(AD.Original_Origination_Type,
4991                                        6, decode(AD.SOURCE_ORGANIZATION_ID,
4992                                           NULL, DECODE(AD.DEMAND_CLASS, null, null,
4993                                              DECODE(p_demand_class, '-1',
4994                                                 MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(
4995                                                    null, null, Decode(sign(trunc(AD.Demand_Date) - p_atf_date),
4996                                                                         1, p_family_id,
4997                                                                         Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
4998                                                                                 'Y', AD.Original_Item_Id,
4999                                                                                 p_family_id)), p_org_id,
5000                                                    p_instance_id, trunc(AD.Demand_Date),
5001                                                    p_level_id, AD.DEMAND_CLASS),
5002                                                 AD.DEMAND_CLASS)),
5003                                           -23453, DECODE(AD.DEMAND_CLASS, null, null,
5004                                              DECODE(p_demand_class, '-1',
5005                                                 MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(
5006                                                    null, null, Decode(sign(trunc(AD.Demand_Date) - p_atf_date),
5007                                                                         1, p_family_id,
5008                                                                         Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
5009                                                                                 'Y', AD.Original_Item_Id,
5010                                                                                 p_family_id)), p_org_id,
5011                                                    p_instance_id, trunc(AD.Demand_Date),
5012                                                    p_level_id, AD.DEMAND_CLASS),
5013                                                 AD.DEMAND_CLASS)),
5014                                           AD.ORGANIZATION_ID, DECODE(AD.DEMAND_CLASS, null, null,
5015                                              DECODE(p_demand_class, '-1',
5016                                                 MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(
5017                                                    null, null, Decode(sign(trunc(AD.Demand_Date) - p_atf_date),
5018                                                                         1, p_family_id,
5019                                                                         Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
5020                                                                                 'Y', AD.Original_Item_Id,
5021                                                                                 p_family_id)), p_org_id,
5022                                                    p_instance_id, trunc(AD.Demand_Date),
5023                                                    p_level_id, AD.DEMAND_CLASS),
5024                                                 AD.DEMAND_CLASS)),
5025                                           p_demand_class),
5026                                     30, decode(AD.SOURCE_ORGANIZATION_ID,
5027                                        NULL, DECODE(AD.DEMAND_CLASS, null, null,
5028                                           DECODE(p_demand_class, '-1',
5029                                              MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(
5030                                                 null, null, Decode(sign(trunc(AD.Demand_Date) - p_atf_date),
5031                                                                         1, p_family_id,
5032                                                                         Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
5033                                                                                 'Y', AD.Original_Item_Id,
5034                                                                                 p_family_id)), p_org_id,
5035                                                 p_instance_id, trunc(AD.Demand_Date),
5036                                                    p_level_id, AD.DEMAND_CLASS),
5037                                              AD.DEMAND_CLASS)),
5038                                        -23453, DECODE(AD.DEMAND_CLASS, null, null,
5039                                           DECODE(p_demand_class, '-1',
5040                                              MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(
5041                                                 null, null, Decode(sign(trunc(AD.Demand_Date) - p_atf_date),
5042                                                                         1, p_family_id,
5043                                                                         Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
5044                                                                                 'Y', AD.Original_Item_Id,
5045                                                                                 p_family_id)), p_org_id,
5046                                                 p_instance_id, trunc(AD.Demand_Date),
5047                                                    p_level_id, AD.DEMAND_CLASS),
5048                                              AD.DEMAND_CLASS)),
5049                                        AD.ORGANIZATION_ID, DECODE(AD.DEMAND_CLASS, null, null,
5050                                           DECODE(p_demand_class, '-1',
5051                                              MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(
5052                                                 null, null, Decode(sign(trunc(AD.Demand_Date) - p_atf_date),
5053                                                                         1, p_family_id,
5054                                                                         Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
5055                                                                                 'Y', AD.Original_Item_Id,
5056                                                                                 p_family_id)), p_org_id,
5057                                                 p_instance_id, trunc(AD.Demand_Date),
5058                                                    p_level_id, AD.DEMAND_CLASS),
5059                                              AD.DEMAND_CLASS)),
5060                                        p_demand_class),
5061                                     DECODE(AD.DEMAND_CLASS, null, null,
5062                                        DECODE(p_demand_class, '-1',
5063                                           MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(
5064                                              null, null, Decode(sign(trunc(AD.Demand_Date) - p_atf_date),
5065                                                                         1, p_family_id,
5066                                                                         Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
5067                                                                                 'Y', AD.Original_Item_Id,
5068                                                                                 p_family_id)), p_org_id,
5069                                              p_instance_id, trunc(AD.Demand_Date),
5070                                                    p_level_id, AD.DEMAND_CLASS),
5071                                           AD.DEMAND_CLASS))),
5072                                     2, DECODE(AD.CUSTOMER_ID, NULL, p_demand_class,
5073                                                    0, p_demand_class,
5074                                        decode(AD.Original_Origination_Type,
5075                                           6, decode(AD.SOURCE_ORGANIZATION_ID,
5076                                              NULL, MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(
5077                                                    AD.CUSTOMER_ID, AD.SHIP_TO_SITE_ID, Decode(sign(trunc(AD.Demand_Date) - p_atf_date),
5078                                                                                                 1, p_family_id,
5079                                                                                                 Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
5080                                                                                                         'Y', AD.Original_Item_Id,
5081                                                                                                         p_family_id)),
5082                                                    p_org_id, p_instance_id, trunc(AD.Demand_Date),
5083                                                    p_level_id, NULL),
5084                                              -23453, MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(
5085                                                    AD.CUSTOMER_ID, AD.SHIP_TO_SITE_ID, Decode(sign(trunc(AD.Demand_Date) - p_atf_date),
5086                                                                                                 1, p_family_id,
5087                                                                                                 Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
5088                                                                                                         'Y', AD.Original_Item_Id,
5089                                                                                                         p_family_id)),
5090                                                    p_org_id, p_instance_id, trunc(AD.Demand_Date),
5091                                                    p_level_id, NULL),
5092                                              AD.ORGANIZATION_ID, MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(
5093                                                    AD.CUSTOMER_ID, AD.SHIP_TO_SITE_ID, Decode(sign(trunc(AD.Demand_Date) - p_atf_date),
5094                                                                                                 1, p_family_id,
5095                                                                                                 Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
5096                                                                                                         'Y', AD.Original_Item_Id,
5097                                                                                                         p_family_id)),
5098                                                    p_org_id, p_instance_id, trunc(AD.Demand_Date),
5099                                                    p_level_id, NULL),
5100                                              p_demand_class),
5101                                           30, decode(AD.SOURCE_ORGANIZATION_ID,
5102                                              NULL, MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(
5103                                                    AD.CUSTOMER_ID, AD.SHIP_TO_SITE_ID, Decode(sign(trunc(AD.Demand_Date) - p_atf_date),
5104                                                                                                 1, p_family_id,
5105                                                                                                 Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
5106                                                                                                         'Y', AD.Original_Item_Id,
5107                                                                                                         p_family_id)),
5108                                                    p_org_id, p_instance_id, trunc(AD.Demand_Date),
5109                                                    p_level_id, NULL),
5110                                              -23453, MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(
5111                                                    AD.CUSTOMER_ID, AD.SHIP_TO_SITE_ID, Decode(sign(trunc(AD.Demand_Date) - p_atf_date),
5112                                                                                                 1, p_family_id,
5113                                                                                                 Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
5114                                                                                                         'Y', AD.Original_Item_Id,
5115                                                                                                         p_family_id)),
5116                                                    p_org_id, p_instance_id, trunc(AD.Demand_Date),
5117                                                    p_level_id, NULL),
5118                                              AD.ORGANIZATION_ID, MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(
5119                                                    AD.CUSTOMER_ID, AD.SHIP_TO_SITE_ID, Decode(sign(trunc(AD.Demand_Date) - p_atf_date),
5120                                                                                                 1, p_family_id,
5121                                                                                                 Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
5122                                                                                                         'Y', AD.Original_Item_Id,
5123                                                                                                         p_family_id)),
5124                                                    p_org_id, p_instance_id, trunc(AD.Demand_Date),
5125                                                    p_level_id, NULL),
5126                                              p_demand_class),
5127                                           MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(
5128                                              AD.CUSTOMER_ID, AD.SHIP_TO_SITE_ID,
5129                                              Decode(sign(trunc(AD.Demand_Date) - p_atf_date),
5130                                                         1, p_family_id,
5131                                                         Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
5132                                                                 'Y', AD.Original_Item_Id,
5133                                                                 p_family_id)), p_org_id, p_instance_id,
5134                                              trunc(AD.Demand_Date),p_level_id, NULL)))),
5135                                        p_demand_class,
5136                                        p_level_id)),
5137                 	trunc(AD.Original_Demand_Date),
5138                 	AD.Original_Item_Id,
5139                 	AD.Original_Origination_Type,
5140                         l_sysdate,
5141                         G_USER_ID,
5142                         l_sysdate,
5143                         G_USER_ID,
5144                         G_USER_ID,
5145                         -1* AD.ALLOCATED_QUANTITY, -- bug 3282426
5146                         MTPS.LOCATION,   --bug3263368
5147                         MTP.PARTNER_NAME, --bug3263368
5148                         AD.DEMAND_CLASS, --bug3263368
5149                         AD.REQUEST_DATE, --bug3263368
5150                         I.Item_Name -- bug3579625
5151             FROM        MSC_ALLOC_DEMANDS AD,
5152                         MSC_TRADING_PARTNERS    MTP,--bug3263368
5153                         MSC_TRADING_PARTNER_SITES    MTPS, --bug3263368
5154                         MSC_SYSTEM_ITEMS I --bug3579625
5155             WHERE       AD.PLAN_ID = p_plan_id
5156             AND         AD.SR_INSTANCE_ID = p_instance_id
5157             AND         AD.INVENTORY_ITEM_ID in (p_member_id,p_family_id)
5158             AND         AD.ORGANIZATION_ID = p_org_id
5159             AND         AD.ORIGINATION_TYPE <> 52
5160             AND         AD.ALLOCATED_QUANTITY <> 0
5161             --bug3700564 added trunc
5162             AND         TRUNC(AD.DEMAND_DATE) < NVL(p_itf, TRUNC(AD.DEMAND_DATE) + 1)
5163             AND         AD.SHIP_TO_SITE_ID = MTPS.PARTNER_SITE_ID(+) --bug3263368
5164             AND         AD.CUSTOMER_ID = MTP.PARTNER_ID(+)--bug3263368
5165             -- bug3579625 Addition join with MSC_SYSTEM_ITEMS (I)
5166             AND         AD.PLAN_ID = I.PLAN_ID
5167             AND         AD.SR_INSTANCE_ID = I.SR_INSTANCE_ID
5168             AND         AD.ORIGINAL_ITEM_ID = I.INVENTORY_ITEM_ID
5169             AND         AD.ORGANIZATION_ID = I.ORGANIZATION_ID
5170 
5171             UNION ALL
5172             SELECT      p_level col1,
5173                         p_identifier col2,
5174                         p_scenario_id col3,
5175                         p_sr_family_id col4 ,
5176                         p_sr_member_id col5,
5177                         p_org_id col6,
5178                         l_null_num col7,
5179                         l_null_num col8,
5180                         l_null_num col9,
5181                         l_null_num col10,
5182                         l_null_num col11,
5183                         l_null_num col12,
5184                         l_null_num col13,
5185                         l_null_num col14,
5186                         l_null_char col15,
5187                         p_uom_code col16,
5188                         2 col17,
5189                         CSA.ORDER_TYPE col18,
5190                         l_null_char col19,
5191                         CSA.SR_INSTANCE_ID col20,
5192                         l_null_num col21,
5193                         CSA.PARENT_TRANSACTION_ID col22,
5194                         l_null_num col23,
5195                         CSA.ALLOCATED_QUANTITY*
5196                               DECODE(DECODE(MSC_AATP_PVT.G_HIERARCHY_PROFILE,
5197                                      1, DECODE(CSA.DEMAND_CLASS, null, null,
5198                                         DECODE(p_demand_class, '-1',
5199                                            MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(
5200                                                          null,
5201                                                          null,
5202                                                          Decode(sign(trunc(CSA.Supply_Date) - p_atf_date),
5203                                                                 1, p_family_id,
5204                                                                 Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
5205                                                                         'Y', CSA.Original_Item_Id,
5206                                                                         p_family_id)),
5207                                                          p_org_id,
5208                                                          p_instance_id,
5209                                                          TRUNC(CSA.SUPPLY_DATE),
5210                                                          p_level_id,
5211                                                          CSA.DEMAND_CLASS),
5212                                            CSA.DEMAND_CLASS)),
5213                                      2, DECODE(CSA.CUSTOMER_ID, NULL, TO_CHAR(NULL),
5214                                                        0, TO_CHAR(NULL),
5215                                                        MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(
5216                                                          CSA.CUSTOMER_ID,
5217                                                          CSA.SHIP_TO_SITE_ID,
5218                                                          Decode(sign(trunc(CSA.Supply_Date) - p_atf_date),
5219                                                                 1, p_family_id,
5220                                                                 Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
5221                                                                         'Y', CSA.Original_Item_Id,
5222                                                                         p_family_id)),
5223                                                          p_org_id,
5224                                                          p_instance_id,
5225                                                          TRUNC(CSA.SUPPLY_DATE),
5226                                                          p_level_id,
5227                                                          NULL))),
5228                                  p_demand_class, 1,
5229                                  NULL,  nvl(MIHM.allocation_percent/100,1), --4365873
5230                                  /*NVL(MSC_AATP_FUNC.Get_DC_Alloc_Percent(
5231                                            p_instance_id,
5232                                            Decode(sign(trunc(CSA.Supply_Date) - p_atf_date),
5233                                                 1, p_family_id,
5234                                                 Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
5235                                                         'Y', CSA.Original_Item_Id,
5236                                                         p_family_id)),
5237                                            p_org_id,
5238                                            null,
5239                                            null,
5240                                            p_demand_class,
5241                                            TRUNC(CSA.SUPPLY_DATE)),
5242                                        1),*/
5243                                  DECODE(
5244                                  MIHM.allocation_percent/100, --4365873
5245                                  /*DECODE(MSC_AATP_FUNC.Get_DC_Alloc_Percent(
5246                                            p_instance_id,
5247                                            Decode(sign(trunc(CSA.Supply_Date) - p_atf_date),
5248                                                 1, p_family_id,
5249                                                 Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
5250                                                         'Y', CSA.Original_Item_Id,
5251                                                         p_family_id)),
5252                                            p_org_id,
5253                                            null,
5254                                            null,
5255                                            p_demand_class,
5256                                            TRUNC(CSA.SUPPLY_DATE)),*/
5257                                    NULL, 1,
5258                                  0)) col24,
5259                         --TRUNC(SA.SUPPLY_DATE) col25,
5260                         GREATEST(TRUNC(CSA.SUPPLY_DATE),p_sys_next_date) col25, --3099066
5261                         l_null_num col26,
5262                         CSA.ORDER_NUMBER col27,
5263                         l_null_num col28,
5264                         l_null_num col29,
5265         		l_null_num,
5266         		NVL(CSA.Supply_Quantity, CSA.ALLOCATED_QUANTITY),
5267         		l_null_num,
5268         		to_date(null),
5269         		CSA.Original_Item_Id,
5270         		CSA.Original_Order_Type,
5271                         l_sysdate,
5272                         G_USER_ID,
5273                         l_sysdate,
5274                         G_USER_ID,
5275                         G_USER_ID,
5276                         CSA.ALLOCATED_QUANTITY, -- bug 3282426
5277                         --null,
5278                         --null,
5279                         --null,
5280                         --null,
5281                         l_null_char, --bug3814584
5282                         l_null_char, --bug3814584
5283                         l_null_char, --bug3814584
5284                         l_null_date,  --bug3814584
5285                         CSA.Item_Name -- bug3579625
5286             FROM
5287                 (
5288                 select
5289                 	SA.SUPPLY_DATE,
5290 			SA.DEMAND_CLASS,
5291 			SA.Original_Item_Id,
5292 			SA.CUSTOMER_ID,
5293 			SA.SHIP_TO_SITE_ID,
5294 			SA.ORGANIZATION_ID,
5295 			SA.SR_INSTANCE_ID,
5296 			SA.INVENTORY_ITEM_ID,
5297 			SA.ORIGINAL_ORDER_TYPE,
5298 			SA.ORDER_NUMBER,
5299 			I.Item_Name,
5300 			SA.Supply_Quantity,
5301 			SA.ALLOCATED_QUANTITY,
5302 			SA.PARENT_TRANSACTION_ID,
5303 			SA.ORDER_TYPE
5304             FROM        MSC_ALLOC_SUPPLIES SA,
5305                         MSC_SYSTEM_ITEMS I
5306             WHERE       SA.PLAN_ID = p_plan_id
5307             AND         SA.SR_INSTANCE_ID = p_instance_id
5308             AND         SA.INVENTORY_ITEM_ID in (p_member_id, p_family_id)
5309             AND         SA.ORGANIZATION_ID = p_org_id
5310             AND         SA.ALLOCATED_QUANTITY <> 0
5311             AND         TRUNC(SA.SUPPLY_DATE) >= DECODE(SA.ORIGINAL_ORDER_TYPE,
5312                                                         27, TRUNC(SYSDATE),
5313                                                         28, TRUNC(SYSDATE),
5314                                                         TRUNC(SA.SUPPLY_DATE))
5315             --bug3700564 added trunc
5316             AND         TRUNC(SA.SUPPLY_DATE) < NVL(p_itf, TRUNC(SA.SUPPLY_DATE) + 1)
5317             -- bug3579625 Addition join with MSC_SYSTEM_ITEMS (I)
5318             AND         SA.PLAN_ID = I.PLAN_ID
5319             AND         SA.SR_INSTANCE_ID = I.SR_INSTANCE_ID
5320             AND         SA.ORIGINAL_ITEM_ID = I.INVENTORY_ITEM_ID
5321             AND         SA.ORGANIZATION_ID = I.ORGANIZATION_ID) CSA,
5322                    MSC_ITEM_HIERARCHY_MV MIHM
5323 	WHERE
5324 		--4365873
5325 		--5220274 if the rule is assigned to family only then use family id.
5326                Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
5327                            'N', p_family_id,
5328                   CSA.INVENTORY_ITEM_ID) = MIHM.INVENTORY_ITEM_ID(+)
5329         AND    CSA.SR_INSTANCE_ID = MIHM.SR_INSTANCE_ID (+)
5330         AND    CSA.ORGANIZATION_ID = MIHM.ORGANIZATION_ID (+)
5331         AND    decode(MIHM.level_id (+),-1,1,2) = decode(MSC_AATP_PVT.G_HIERARCHY_PROFILE,1,1,2)
5332         AND    TRUNC(CSA.SUPPLY_DATE) >= MIHM.effective_date (+)
5333         AND    TRUNC(CSA.SUPPLY_DATE) <= MIHM.disable_date (+)
5334         AND    MIHM.demand_class (+) = p_demand_class
5335            )
5336            ;
5337 EXCEPTION
5338         WHEN OTHERS THEN
5339                 IF PG_DEBUG in ('Y', 'C') THEN
5340                         msc_sch_wb.atp_debug('Item_Alloc_Avail_Pf_Dtls: ' || 'Error occurred: ' || to_char(sqlcode) || ':' || SQLERRM);
5341                 END IF;
5342                 x_return_status := FND_API.G_RET_STS_ERROR;
5343 
5344 END Item_Alloc_Avail_Pf_Dtls;
5345 
5346 /*--Item_Prealloc_Avail_Pf--------------------------------------------------------
5347 |  o  Called from Item_Pre_Allocated_Atp procedure for Demand Priority based
5348 |       Allocated Time Phased PF ATP.
5349 +-------------------------------------------------------------------------------*/
5350 PROCEDURE Item_Prealloc_Avail_Pf (
5351         p_member_id                     IN      NUMBER,
5352         p_family_id                     IN      NUMBER,
5353         p_org_id                        IN      NUMBER,
5354         p_instance_id                   IN      NUMBER,
5355         p_plan_id                       IN      NUMBER,
5356         p_demand_class                  IN      VARCHAR2,
5357         p_itf                           IN      DATE,
5358         x_atp_dates                     OUT     NOCOPY MRP_ATP_PUB.date_arr,
5359         x_atp_qtys                      OUT     NOCOPY MRP_ATP_PUB.number_arr,
5360         x_return_status                 OUT     NOCOPY VARCHAR2
5361 ) IS
5362 
5363 BEGIN
5364         IF PG_DEBUG in ('Y', 'C') THEN
5365                 msc_sch_wb.atp_debug('******* Begin Item_Prealloc_Avail_Pf **********');
5366                 msc_sch_wb.atp_debug('Item_Prealloc_Avail_Pf: p_member_id: ' || p_member_id);
5367                 msc_sch_wb.atp_debug('Item_Prealloc_Avail_Pf: p_family_id: ' || p_family_id);
5368                 msc_sch_wb.atp_debug('Item_Prealloc_Avail_Pf: p_instance_id: ' || p_instance_id);
5369                 msc_sch_wb.atp_debug('Item_Prealloc_Avail_Pf: p_plan_id: ' || p_plan_id);
5370                 msc_sch_wb.atp_debug('Item_Prealloc_Avail_Pf p_demand_class: ' || p_demand_class);
5371         END IF;
5372 
5373         -- Initializing API return code
5374         x_return_status := FND_API.G_RET_STS_SUCCESS;
5375 
5376         SELECT 	SD_DATE,
5377                 SUM(SD_QTY)
5378         BULK COLLECT INTO
5379                 x_atp_dates,
5380                 x_atp_qtys
5381         FROM (
5382                 SELECT  TRUNC(AD.DEMAND_DATE) SD_DATE,
5383                         -1 * AD.ALLOCATED_QUANTITY SD_QTY
5384                 FROM    MSC_ALLOC_DEMANDS AD
5385                 WHERE   AD.PLAN_ID = p_plan_id
5386                 AND     AD.SR_INSTANCE_ID = p_instance_id
5387                 AND     AD.INVENTORY_ITEM_ID in (p_member_id, p_family_id)
5388                 AND     AD.ORIGINATION_TYPE <> 52 -- ATP Bucketed Demand
5389                 AND     AD.ORGANIZATION_ID = p_org_id
5390                 AND     AD.DEMAND_CLASS = NVL(p_demand_class, AD.DEMAND_CLASS)
5391                 AND     AD.ALLOCATED_QUANTITY  <> 0 --4501434
5392                 AND     TRUNC(AD.DEMAND_DATE) < p_itf
5393                 UNION ALL
5394                 SELECT  TRUNC(SA.SUPPLY_DATE) SD_DATE,
5395                         SA.ALLOCATED_QUANTITY SD_QTY
5396                 FROM    MSC_ALLOC_SUPPLIES SA
5397                 WHERE   SA.PLAN_ID = p_plan_id
5398                 AND     SA.SR_INSTANCE_ID = p_instance_id
5399                 AND     SA.INVENTORY_ITEM_ID in (p_member_id, p_family_id)
5400                 AND     TRUNC(SA.SUPPLY_DATE) >= DECODE(SA.ORIGINAL_ORDER_TYPE,
5401                                                         27, TRUNC(SYSDATE),
5402                                                         28, TRUNC(SYSDATE),
5403                                                         TRUNC(SA.SUPPLY_DATE))
5404                 AND     SA.ORGANIZATION_ID = p_org_id
5405                 AND     SA.ALLOCATED_QUANTITY <> 0
5406                 AND     SA.DEMAND_CLASS = NVL(p_demand_class, SA.DEMAND_CLASS)
5407                 AND     TRUNC(SA.SUPPLY_DATE) < p_itf
5408         )
5409         GROUP BY SD_DATE
5410         order by SD_DATE; --4698199
5411 
5412 EXCEPTION
5413         WHEN OTHERS THEN
5414                 IF PG_DEBUG in ('Y', 'C') THEN
5415                         msc_sch_wb.atp_debug('Item_Prealloc_Avail_Pf: ' || 'Error occurred: ' || to_char(sqlcode) || ':' || SQLERRM);
5416                 END IF;
5417                 x_return_status := FND_API.G_RET_STS_ERROR;
5418 
5419 END Item_Prealloc_Avail_Pf;
5420 
5421 /*--Item_Prealloc_Avail_Pf_Summ---------------------------------------------------
5422 |  o  Called from Item_Pre_Allocated_Atp procedure for Demand Priority based
5423 |       Allocated Time Phased PF ATP.
5424 +-------------------------------------------------------------------------------*/
5425 PROCEDURE Item_Prealloc_Avail_Pf_Summ (
5426         p_member_id                     IN      NUMBER,
5427         p_family_id                     IN      NUMBER,
5428         p_org_id                        IN      NUMBER,
5429         p_instance_id                   IN      NUMBER,
5430         p_plan_id                       IN      NUMBER,
5431         p_demand_class                  IN      VARCHAR2,
5432         p_itf                           IN      DATE,
5433         p_refresh_number                IN      NUMBER,
5434         x_atp_dates                     OUT     NOCOPY MRP_ATP_PUB.date_arr,
5435         x_atp_qtys                      OUT     NOCOPY MRP_ATP_PUB.number_arr,
5436         x_return_status                 OUT     NOCOPY VARCHAR2
5437 ) IS
5438 
5439 BEGIN
5440         IF PG_DEBUG in ('Y', 'C') THEN
5441                 msc_sch_wb.atp_debug('******* Begin Item_Prealloc_Avail_Pf_Summ **********');
5442                 msc_sch_wb.atp_debug('Item_Prealloc_Avail_Pf_Summ: p_member_id: ' || p_member_id);
5443                 msc_sch_wb.atp_debug('Item_Prealloc_Avail_Pf_Summ: p_family_id: ' || p_family_id);
5444                 msc_sch_wb.atp_debug('Item_Prealloc_Avail_Pf_Summ: p_instance_id: ' || p_instance_id);
5445                 msc_sch_wb.atp_debug('Item_Prealloc_Avail_Pf_Summ: p_plan_id: ' || p_plan_id);
5446                 msc_sch_wb.atp_debug('Item_Prealloc_Avail_Pf_Summ p_demand_class: ' || p_demand_class);
5447         END IF;
5448 
5449         -- Initializing API return code
5450         x_return_status := FND_API.G_RET_STS_SUCCESS;
5451 
5452         -- SQL changed for summary enhancement
5453         SELECT  SD_DATE,
5454                 SUM(SD_QTY)
5455         BULK COLLECT INTO
5456                 x_atp_dates,
5457                 x_atp_qtys
5458         FROM
5459             (
5460                 SELECT  /*+ INDEX(S MSC_ATP_SUMMARY_SD_U1) */
5461                         SD_DATE, SD_QTY
5462                 FROM    MSC_ATP_SUMMARY_SD S
5463                 WHERE   S.PLAN_ID = p_plan_id
5464                 AND     S.SR_INSTANCE_ID = p_instance_id
5465                 AND     S.INVENTORY_ITEM_ID in (p_member_id, p_family_id)
5466                 AND     S.ORGANIZATION_ID = p_org_id
5467                 AND     S.DEMAND_CLASS = NVL(p_demand_class, S.DEMAND_CLASS)
5468                 AND     S.SD_DATE < p_itf
5469 
5470                 UNION ALL
5471 
5472                 SELECT  TRUNC(AD.DEMAND_DATE) SD_DATE,
5473                         decode(AD.ALLOCATED_QUANTITY,           -- Consider unscheduled orders as dummy supplies
5474                                0, OLD_ALLOCATED_QUANTITY,-- For summary enhancement
5475                                   -1 * AD.ALLOCATED_QUANTITY) SD_QTY
5476                 FROM    MSC_ALLOC_DEMANDS AD,
5477                         MSC_PLANS P                             -- For summary enhancement
5478                 WHERE   AD.PLAN_ID = p_plan_id
5479                 AND     AD.SR_INSTANCE_ID = p_instance_id
5480                 AND     AD.INVENTORY_ITEM_ID in (p_member_id, p_family_id)
5481                 AND     AD.ORGANIZATION_ID = p_org_id
5482                 AND     AD.DEMAND_CLASS = NVL(p_demand_class, AD.DEMAND_CLASS)
5483                 AND     TRUNC(AD.DEMAND_DATE) < p_itf
5484                 AND     P.PLAN_ID = AD.PLAN_ID
5485                 AND     (AD.REFRESH_NUMBER > P.LATEST_REFRESH_NUMBER
5486                         OR AD.REFRESH_NUMBER = p_refresh_number)
5487                 -- since repetitive schedule demand is not supported in this case
5488                 -- join to msc_calendar_dates is not needed.
5489 
5490                 UNION ALL
5491 
5492                 SELECT  TRUNC(SA.SUPPLY_DATE) SD_DATE,
5493                         decode(SA.ALLOCATED_QUANTITY,           -- Consider deleted stealing records as dummy demands
5494                                0, -1 * OLD_ALLOCATED_QUANTITY,   -- For summary enhancement
5495                                   SA.ALLOCATED_QUANTITY) SD_QTY
5496                 FROM    MSC_ALLOC_SUPPLIES SA,
5497                         MSC_PLANS P                                     -- For summary enhancement
5498                 WHERE   SA.PLAN_ID = p_plan_id
5499                 AND	    SA.SR_INSTANCE_ID = p_instance_id
5500                 AND	    SA.INVENTORY_ITEM_ID in (p_member_id, p_family_id)
5501                 AND     SA.ORGANIZATION_ID = p_org_id
5502                 AND     SA.DEMAND_CLASS = NVL(p_demand_class, SA.DEMAND_CLASS)
5503                 AND     TRUNC(SA.SUPPLY_DATE) < p_itf
5504                 AND     P.PLAN_ID = SA.PLAN_ID
5505                 AND     TRUNC(SA.SUPPLY_DATE) >= DECODE(SA.ORIGINAL_ORDER_TYPE,
5506                                                         27, TRUNC(SYSDATE),
5507                                                         28, TRUNC(SYSDATE),
5508                                                         TRUNC(SA.SUPPLY_DATE))
5509                 AND     (SA.REFRESH_NUMBER > P.LATEST_REFRESH_NUMBER
5510                         OR SA.REFRESH_NUMBER = p_refresh_number)
5511             )
5512         GROUP BY SD_DATE
5513         order by SD_DATE; --4698199
5514 
5515 EXCEPTION
5516         WHEN OTHERS THEN
5517                 IF PG_DEBUG in ('Y', 'C') THEN
5518                         msc_sch_wb.atp_debug('Item_Prealloc_Avail_Pf_Summ: ' || 'Error occurred: ' || to_char(sqlcode) || ':' || SQLERRM);
5519                 END IF;
5520                 x_return_status := FND_API.G_RET_STS_ERROR;
5521 
5522 END Item_Prealloc_Avail_Pf_Summ;
5523 
5524 /*--Item_Prealloc_Avail_Pf_Dtls---------------------------------------------------
5525 |  o  Called from Item_Pre_Allocated_Atp procedure for Demand Priority based
5526 |       Allocated Time Phased PF ATP.
5527 +-------------------------------------------------------------------------------*/
5528 PROCEDURE Item_Prealloc_Avail_Pf_Dtls (
5529         p_member_id                     IN      NUMBER,
5530         p_family_id                     IN      NUMBER,
5531         p_sr_member_id                  IN      NUMBER,
5532         p_sr_family_id                  IN      NUMBER,
5533         p_org_id                        IN      NUMBER,
5534         p_instance_id                   IN      NUMBER,
5535         p_plan_id                       IN      NUMBER,
5536         p_demand_class                  IN      VARCHAR2,
5537         p_itf                           IN      DATE,
5538         p_atf_date                      IN      DATE,
5539         p_level                         IN      NUMBER,
5540         p_identifier                    IN      NUMBER,
5541         p_scenario_id                   IN      NUMBER,
5542         p_uom_code                      IN      VARCHAR2,
5543         x_return_status                 OUT     NOCOPY VARCHAR2
5544 ) IS
5545         l_sysdate               DATE := sysdate;
5546         l_null_num              NUMBER;
5547         l_null_char             VARCHAR2(1);
5548         l_null_date             DATE; --bug3814584
5549         l_return_status         VARCHAR2(1);
5550 BEGIN
5551         IF PG_DEBUG in ('Y', 'C') THEN
5552                 msc_sch_wb.atp_debug('******* Begin Item_Prealloc_Avail_Pf_Dtls **********');
5553                 msc_sch_wb.atp_debug('Item_Prealloc_Avail_Pf_Dtls: p_member_id: ' || p_member_id);
5554                 msc_sch_wb.atp_debug('Item_Prealloc_Avail_Pf_Dtls: p_family_id: ' || p_family_id);
5555                 msc_sch_wb.atp_debug('Item_Prealloc_Avail_Pf_Dtls: p_instance_id: ' || p_instance_id);
5556                 msc_sch_wb.atp_debug('Item_Prealloc_Avail_Pf_Dtls: p_plan_id: ' || p_plan_id);
5557                 msc_sch_wb.atp_debug('Item_Prealloc_Avail_Pf_Dtls p_demand_class: ' || p_demand_class);
5558         END IF;
5559 
5560         -- Initializing API return code
5561         x_return_status := FND_API.G_RET_STS_SUCCESS;
5562 
5563 	INSERT INTO msc_atp_sd_details_temp (
5564 		ATP_Level,
5565 		Order_line_id,
5566 		Scenario_Id,
5567 		Inventory_Item_Id,
5568 		Request_Item_Id,
5569 		Organization_Id,
5570 		Department_Id,
5571 		Resource_Id,
5572 		Supplier_Id,
5573 		Supplier_Site_Id,
5574 		From_Organization_Id,
5575 		From_Location_Id,
5576 		To_Organization_Id,
5577 		To_Location_Id,
5578 		Ship_Method,
5579 		UOM_code,
5580 		Supply_Demand_Type,
5581 		Supply_Demand_Source_Type,
5582 		Supply_Demand_Source_Type_Name,
5583 		Identifier1,
5584 		Identifier2,
5585 		Identifier3,
5586 		Identifier4,
5587 		Allocated_Quantity,
5588 		Supply_Demand_Date,
5589 		Disposition_Type,
5590 		Disposition_Name,
5591 		Pegging_Id,
5592 		End_Pegging_Id,
5593         	Pf_Display_Flag,
5594                 Supply_Demand_Quantity,
5595         	Original_Demand_Quantity,
5596         	Original_Demand_Date,
5597         	Original_Item_Id,
5598         	Original_Supply_Demand_Type,
5599 		creation_date,
5600 		created_by,
5601 		last_update_date,
5602 		last_updated_by,
5603 		last_update_login,
5604                 ORIG_CUSTOMER_SITE_NAME,--bug3263368
5605                 ORIG_CUSTOMER_NAME, --bug3263368
5606                 ORIG_DEMAND_CLASS, --bug3263368
5607                 ORIG_REQUEST_DATE, --bug3263368
5608                 Inventory_Item_Name --bug3579625
5609 	)
5610         (
5611            SELECT   p_level col1,
5612 		    p_identifier col2,
5613                     p_scenario_id col3,
5614                     p_sr_family_id col4 ,
5615                     p_sr_member_id col5,
5616 		    p_org_id col6,
5617                     l_null_num col7,
5618                     l_null_num col8,
5619                     l_null_num col9,
5620                     l_null_num col10,
5621                     l_null_num col11,
5622                     l_null_num col12,
5623                     l_null_num col13,
5624                     l_null_num col14,
5625 		    l_null_char col15,
5626 		    p_uom_code col16,
5627 		    1 col17, -- demand
5628 		    AD.ORIGINATION_TYPE col18,
5629                     l_null_char col19,
5630 		    AD.SR_INSTANCE_ID col20,
5631                     l_null_num col21,
5632 		    AD.PARENT_DEMAND_ID col22,
5633 		    l_null_num col23,
5634                     -1 * AD.ALLOCATED_QUANTITY col24,
5635 		    TRUNC(AD.DEMAND_DATE) col25,
5636                     l_null_num col26,
5637                     AD.ORDER_NUMBER col27,
5638                     l_null_num col28,
5639                     l_null_num col29,
5640                     Decode(AD.inventory_item_id, p_family_id,
5641                         Decode(AD.original_item_id, p_member_id,
5642                                 AD.Pf_Display_Flag,
5643                                 Decode(sign(trunc(AD.Original_Demand_Date) - p_atf_date),
5644                                         1, AD.Pf_Display_Flag,
5645                                         1)),
5646                         AD.Pf_Display_Flag),
5647                     -1* NVL(AD.Demand_Quantity, AD.ALLOCATED_QUANTITY),
5648                     -1* NVL(AD.Demand_Quantity, AD.ALLOCATED_QUANTITY),
5649 		    TRUNC(AD.Original_Demand_Date),
5650                     AD.Original_Item_Id,
5651                     AD.Original_Origination_Type,
5652                     l_sysdate,
5653 		    G_USER_ID,
5654 		    l_sysdate,
5655 		    G_USER_ID,
5656 		    G_USER_ID,
5657 		    MTPS.LOCATION,   --bug3263368
5658                     MTP.PARTNER_NAME, --bug3263368
5659                     AD.DEMAND_CLASS, --bug3263368
5660                     AD.REQUEST_DATE, --bug3263368
5661                     I.Item_Name  --bug3579625
5662            FROM     MSC_ALLOC_DEMANDS AD,
5663                     MSC_TRADING_PARTNERS    MTP,--bug3263368
5664                     MSC_TRADING_PARTNER_SITES    MTPS, --bug3263368
5665                     MSC_SYSTEM_ITEMS I  --bug3579625
5666            WHERE    AD.PLAN_ID = p_plan_id
5667            AND      AD.SR_INSTANCE_ID = p_instance_id
5668            AND      AD.INVENTORY_ITEM_ID in (p_member_id, p_family_id)
5669            AND      AD.ORIGINATION_TYPE <> 52
5670            AND      AD.ORGANIZATION_ID = p_org_id
5671            AND      AD.ALLOCATED_QUANTITY  <> 0 --4501434
5672            AND      AD.DEMAND_CLASS = NVL(p_demand_class, AD.DEMAND_CLASS)
5673            AND      TRUNC(AD.DEMAND_DATE) < p_itf
5674            AND      AD.SHIP_TO_SITE_ID = MTPS.PARTNER_SITE_ID(+) --bug3263368
5675            AND      AD.CUSTOMER_ID = MTP.PARTNER_ID(+)--bug3263368
5676            -- bug3579625 Addition join with MSC_SYSTEM_ITEMS (I)
5677            AND       AD.PLAN_ID = I.PLAN_ID
5678            AND       AD.SR_INSTANCE_ID = I.SR_INSTANCE_ID
5679            AND       AD.ORIGINAL_ITEM_ID = I.INVENTORY_ITEM_ID
5680            AND       AD.ORGANIZATION_ID = I.ORGANIZATION_ID
5681 
5682       UNION ALL
5683            SELECT   p_level col1,
5684                     p_identifier col2,
5685                     p_scenario_id col3,
5686                     p_sr_family_id col4 ,
5687                     p_sr_member_id col5,
5688                     p_org_id col6,
5689                     l_null_num col7,
5690                     l_null_num col8,
5691                     l_null_num col9,
5692                     l_null_num col10,
5693                     l_null_num col11,
5694                     l_null_num col12,
5695                     l_null_num col13,
5696                     l_null_num col14,
5697                     l_null_char col15,
5698                     p_uom_code col16,
5699                     2 col17, -- supply
5700                     SA.ORDER_TYPE col18,
5701                     l_null_char col19,
5702                     SA.SR_INSTANCE_ID col20,
5703                     l_null_num col21,
5704                     SA.PARENT_TRANSACTION_ID col22,
5705                     l_null_num col23,
5706                     SA.ALLOCATED_QUANTITY col24,
5707                     TRUNC(SA.SUPPLY_DATE) col25,
5708                     l_null_num col26,
5709                     DECODE(SA.ORDER_TYPE, 5, to_char(SA.PARENT_TRANSACTION_ID), SA.ORDER_NUMBER) col27,
5710                     l_null_num col28,
5711 		    l_null_num col29,
5712 		    l_null_num,
5713         	    NVL(SA.Supply_Quantity, SA.ALLOCATED_QUANTITY),
5714         	    l_null_num,
5715         	    to_date(null),
5716         	    SA.Original_Item_Id,
5717                     DECODE(SA.ORIGINAL_ORDER_TYPE,
5718                                 46, 48,                 -- Change Supply due to Stealing to Supply Adjustment
5719                                 47, 48,                 -- Change Demand due to Stealing to Supply Adjustment
5720                         SA.ORIGINAL_ORDER_TYPE),
5721         	    l_sysdate,
5722 		    G_USER_ID,
5723 		    l_sysdate,
5724 		    G_USER_ID,
5725 		    G_USER_ID,
5726 		    MTPS.LOCATION,   --bug3684383
5727                     MTP.PARTNER_NAME, --bug3684383
5728                     SA.DEMAND_CLASS, --bug3684383
5729                     --null,         --bug3684383
5730                     l_null_date,  --bug3814584
5731                     I.Item_Name --bug3579625
5732 
5733            FROM     MSC_ALLOC_SUPPLIES SA,
5734                     MSC_SYSTEM_ITEMS I,  --bug3579625
5735                     MSC_TRADING_PARTNERS    MTP,--bug3684383
5736                     MSC_TRADING_PARTNER_SITES    MTPS --bug3684383
5737 
5738            WHERE    SA.PLAN_ID = p_plan_id
5739            AND      SA.SR_INSTANCE_ID = p_instance_id
5740            AND      SA.INVENTORY_ITEM_ID in (p_member_id, p_family_id)
5741            AND      TRUNC(SA.SUPPLY_DATE) >= DECODE(SA.ORIGINAL_ORDER_TYPE,
5742                                                         27, TRUNC(SYSDATE),
5743                                                         28, TRUNC(SYSDATE),
5744                                                         TRUNC(SA.SUPPLY_DATE))
5745            AND      SA.ORGANIZATION_ID = p_org_id
5746            AND      SA.ALLOCATED_QUANTITY <> 0
5747            AND      SA.DEMAND_CLASS = NVL(p_demand_class, SA.DEMAND_CLASS )
5748            AND      TRUNC(SA.SUPPLY_DATE) < p_itf
5749            -- bug3579625 Addition join with MSC_SYSTEM_ITEMS (I)
5750            AND         SA.PLAN_ID = I.PLAN_ID
5751            AND         SA.SR_INSTANCE_ID = I.SR_INSTANCE_ID
5752            AND         SA.ORIGINAL_ITEM_ID = I.INVENTORY_ITEM_ID
5753            AND         SA.ORGANIZATION_ID = I.ORGANIZATION_ID
5754            AND      SA.SHIP_TO_SITE_ID = MTPS.PARTNER_SITE_ID(+) --bug3684383
5755            AND      SA.CUSTOMER_ID = MTP.PARTNER_ID(+)--bug3684383
5756           );
5757 
5758           /* Now populate Original_Demand_Qty*/
5759           Populate_Original_Demand_Qty(
5760         	MASDDT,
5761         	NULL,
5762         	p_plan_id,
5763         	p_demand_class,
5764                 l_return_status
5765           );
5766 
5767           IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
5768                 IF PG_DEBUG in ('Y', 'C') THEN
5769                         msc_sch_wb.atp_debug('Item_Prealloc_Avail_Pf_Dtls: ' || 'Error occured in procedure Populate_Original_Demand_Qty');
5770                 END IF;
5771                 x_return_status := FND_API.G_RET_STS_ERROR;
5772                 return;
5773           END IF;
5774 
5775 EXCEPTION
5776         WHEN OTHERS THEN
5777                 IF PG_DEBUG in ('Y', 'C') THEN
5778                         msc_sch_wb.atp_debug('Item_Prealloc_Avail_Pf_Dtls: ' || 'Error occurred: ' || to_char(sqlcode) || ':' || SQLERRM);
5779                 END IF;
5780                 x_return_status := FND_API.G_RET_STS_ERROR;
5781 
5782 END Item_Prealloc_Avail_Pf_Dtls;
5783 
5784 /*--Get_Forward_Mat_Pf------------------------------------------------------------
5785 |  o  Called from Item_Pre_Allocated_Atp procedure for Demand Priority based
5786 |       Allocated Time Phased PF ATP.
5787 +-------------------------------------------------------------------------------*/
5788 PROCEDURE Get_Forward_Mat_Pf (
5789         p_member_id                     IN      NUMBER,
5790         p_family_id                     IN      NUMBER,
5791         p_org_id                        IN      NUMBER,
5792         p_instance_id                   IN      NUMBER,
5793         p_plan_id                       IN      NUMBER,
5794         p_itf                           IN      DATE,
5795         x_atp_dates                     OUT     NOCOPY MRP_ATP_PUB.date_arr,
5796         x_atp_qtys                      OUT     NOCOPY MRP_ATP_PUB.number_arr,
5797         x_atp_dcs                       OUT     NOCOPY MRP_ATP_PUB.char80_arr,
5798         x_return_status                 OUT     NOCOPY VARCHAR2
5799 ) IS
5800 
5801 BEGIN
5802         IF PG_DEBUG in ('Y', 'C') THEN
5803                 msc_sch_wb.atp_debug('******* Begin Get_Forward_Mat_Pf **********');
5804                 msc_sch_wb.atp_debug('Get_Forward_Mat_Pf: p_member_id: ' || p_member_id);
5805                 msc_sch_wb.atp_debug('Get_Forward_Mat_Pf: p_family_id: ' || p_family_id);
5806                 msc_sch_wb.atp_debug('Get_Forward_Mat_Pf: p_instance_id: ' || p_instance_id);
5807                 msc_sch_wb.atp_debug('Get_Forward_Mat_Pf: p_plan_id: ' || p_plan_id);
5808         END IF;
5809 
5810         -- Initializing API return code
5811         x_return_status := FND_API.G_RET_STS_SUCCESS;
5812 
5813         SELECT 	SD_DATE,
5814                 SUM(SD_QTY),
5815                 DEMAND_CLASS
5816         BULK COLLECT INTO
5817                 x_atp_dates,
5818                 x_atp_qtys,
5819                 x_atp_dcs
5820         FROM
5821             (
5822                 SELECT  TRUNC(AD.DEMAND_DATE) SD_DATE,
5823                         -1 * AD.ALLOCATED_QUANTITY SD_QTY,
5824                         AD.DEMAND_CLASS
5825                 FROM    MSC_ALLOC_DEMANDS AD
5826                 WHERE   AD.PLAN_ID = p_plan_id
5827                 AND     AD.SR_INSTANCE_ID = p_instance_id
5828                 AND     AD.INVENTORY_ITEM_ID in (p_member_id, p_family_id)
5829                 AND     AD.ORGANIZATION_ID = p_org_id
5830                 AND     AD.ALLOCATED_QUANTITY  <> 0 --4501434
5831                 AND     AD.ORIGINATION_TYPE <> 52   -- Ignore copy SO and copy stealing records for summary enhancement
5832                 AND     AD.DEMAND_CLASS IN (
5833                         SELECT  demand_class
5834                         FROM    msc_alloc_temp
5835                         WHERE   demand_class IS NOT NULL)
5836                 --bug3700564 added trunc
5837                 AND     TRUNC(AD.DEMAND_DATE) < p_itf
5838 
5839                 UNION ALL
5840 
5841                 SELECT  TRUNC(SA.SUPPLY_DATE) SD_DATE,
5842                         SA.ALLOCATED_QUANTITY SD_QTY,
5843                         SA.DEMAND_CLASS
5844                 FROM    MSC_ALLOC_SUPPLIES SA
5845                 WHERE   SA.PLAN_ID = p_plan_id
5846                 AND     SA.SR_INSTANCE_ID = p_instance_id
5847                 AND     SA.INVENTORY_ITEM_ID in (p_member_id, p_family_id)
5848                 AND     SA.ORGANIZATION_ID = p_org_id
5849                 AND     SA.ALLOCATED_QUANTITY <> 0
5850                 -- fixed as part of time_phased_atp chagnes
5851                 AND     TRUNC(SA.SUPPLY_DATE) >= DECODE(SA.ORIGINAL_ORDER_TYPE,
5852                                                         27, TRUNC(SYSDATE),
5853                                                         28, TRUNC(SYSDATE),
5854                                                         TRUNC(SA.SUPPLY_DATE))
5855                 AND     SA.DEMAND_CLASS IN (
5856                         SELECT  demand_class
5857                         FROM    msc_alloc_temp
5858                         WHERE   demand_class IS NOT NULL)
5859                 --bug3700564 added trunc
5860                 AND     TRUNC(SA.SUPPLY_DATE) < p_itf
5861             )
5862         GROUP BY DEMAND_CLASS, SD_DATE
5863         order by DEMAND_CLASS, SD_DATE; --4698199 --5353882
5864 
5865 EXCEPTION
5866         WHEN OTHERS THEN
5867                 IF PG_DEBUG in ('Y', 'C') THEN
5868                         msc_sch_wb.atp_debug('Get_Forward_Mat_Pf: ' || 'Error occurred: ' || to_char(sqlcode) || ':' || SQLERRM);
5869                 END IF;
5870                 x_return_status := FND_API.G_RET_STS_ERROR;
5871 
5872 END Get_Forward_Mat_Pf;
5873 
5874 /*--Get_Forward_Mat_Pf_Summ---------------------------------------------------
5875 |  o  Called from Item_Pre_Allocated_Atp procedure for Demand Priority based
5876 |       Allocated Time Phased PF ATP.
5877 +-------------------------------------------------------------------------------*/
5878 PROCEDURE Get_Forward_Mat_Pf_Summ (
5879         p_member_id                     IN      NUMBER,
5880         p_family_id                     IN      NUMBER,
5881         p_org_id                        IN      NUMBER,
5882         p_instance_id                   IN      NUMBER,
5883         p_plan_id                       IN      NUMBER,
5884         p_itf                           IN      DATE,
5885         p_refresh_number                IN      NUMBER,
5886         x_atp_dates                     OUT     NOCOPY MRP_ATP_PUB.date_arr,
5887         x_atp_qtys                      OUT     NOCOPY MRP_ATP_PUB.number_arr,
5888         x_atp_dcs                       OUT     NOCOPY MRP_ATP_PUB.char80_arr,
5889         x_return_status                 OUT     NOCOPY VARCHAR2
5890 ) IS
5891 
5892 BEGIN
5893         IF PG_DEBUG in ('Y', 'C') THEN
5894                 msc_sch_wb.atp_debug('******* Begin Get_Forward_Mat_Pf_Summ **********');
5895                 msc_sch_wb.atp_debug('Get_Forward_Mat_Pf_Summ: p_member_id: ' || p_member_id);
5896                 msc_sch_wb.atp_debug('Get_Forward_Mat_Pf_Summ: p_family_id: ' || p_family_id);
5897                 msc_sch_wb.atp_debug('Get_Forward_Mat_Pf_Summ: p_instance_id: ' || p_instance_id);
5898                 msc_sch_wb.atp_debug('Get_Forward_Mat_Pf_Summ: p_plan_id: ' || p_plan_id);
5899         END IF;
5900 
5901         -- Initializing API return code
5902         x_return_status := FND_API.G_RET_STS_SUCCESS;
5903 
5904         -- Summary SQL can be used
5905         SELECT 	SD_DATE,
5906                 SUM(SD_QTY),
5907                 DEMAND_CLASS
5908         BULK COLLECT INTO
5909                 x_atp_dates,
5910                 x_atp_qtys,
5911                 x_atp_dcs
5912         FROM
5913             (
5914                 SELECT  /*+ INDEX(S MSC_ATP_SUMMARY_SD_U1) */
5915                         SD_DATE, SD_QTY, DEMAND_CLASS
5916                 FROM    MSC_ATP_SUMMARY_SD S
5917                 WHERE   S.PLAN_ID = p_plan_id
5918                 AND     S.SR_INSTANCE_ID = p_instance_id
5919                 AND     S.INVENTORY_ITEM_ID in (p_member_id, p_family_id)
5920                 AND     S.ORGANIZATION_ID = p_org_id
5921                 AND     S.DEMAND_CLASS IN (
5922                         SELECT  demand_class
5923                         FROM    msc_alloc_temp
5924                         WHERE   demand_class IS NOT NULL)
5925                 AND     S.SD_DATE < p_itf
5926 
5927                 UNION ALL
5928 
5929                 SELECT  TRUNC(AD.DEMAND_DATE) SD_DATE,
5930                         decode(AD.ALLOCATED_QUANTITY,           -- Consider unscheduled orders as dummy supplies
5931                                0, nvl(OLD_ALLOCATED_QUANTITY,0), --4658238        -- For summary enhancement
5932                                   -1 * AD.ALLOCATED_QUANTITY) SD_QTY,
5933                         AD.DEMAND_CLASS
5934                 FROM    MSC_ALLOC_DEMANDS AD,
5935                         MSC_PLANS P                                     -- For summary enhancement
5936                 WHERE   AD.PLAN_ID = p_plan_id
5937                 AND     AD.SR_INSTANCE_ID = p_instance_id
5938                 AND     AD.INVENTORY_ITEM_ID in (p_member_id, p_family_id)
5939                 AND     AD.ORGANIZATION_ID = p_org_id
5940                 AND     AD.DEMAND_CLASS IN (
5941                         SELECT  demand_class
5942                         FROM    msc_alloc_temp
5943                         WHERE   demand_class IS NOT NULL)
5944                 --bug3700564 added trunc
5945                 AND     TRUNC(AD.DEMAND_DATE) < p_itf
5946                         AND     P.PLAN_ID = AD.PLAN_ID
5947                         AND     (AD.REFRESH_NUMBER > P.LATEST_REFRESH_NUMBER
5948                                 OR AD.REFRESH_NUMBER = p_refresh_number)
5949 
5950                 UNION ALL
5951 
5952                 SELECT  TRUNC(SA.SUPPLY_DATE) SD_DATE,
5953                         decode(SA.ALLOCATED_QUANTITY,           -- Consider deleted stealing records as dummy demands
5954                                0, -1 * OLD_ALLOCATED_QUANTITY,   -- For summary enhancement
5955                                   SA.ALLOCATED_QUANTITY) SD_QTY ,
5956                         SA.DEMAND_CLASS
5957                 FROM    MSC_ALLOC_SUPPLIES SA,
5958                         MSC_PLANS P                                     -- For summary enhancement
5959                 WHERE   SA.PLAN_ID = p_plan_id
5960                 AND     SA.SR_INSTANCE_ID = p_instance_id
5961                 AND     SA.INVENTORY_ITEM_ID in (p_member_id, p_family_id)
5962                 AND     SA.ORGANIZATION_ID = p_org_id
5963                 AND     SA.DEMAND_CLASS IN (
5964                         SELECT  demand_class
5965                         FROM    msc_alloc_temp
5966                         WHERE   demand_class IS NOT NULL)
5967                 --bug3700564 added trunc
5968                 AND     TRUNC(SA.SUPPLY_DATE) < p_itf
5969                 AND     P.PLAN_ID = SA.PLAN_ID
5970                 AND     (SA.REFRESH_NUMBER > P.LATEST_REFRESH_NUMBER
5971                         OR SA.REFRESH_NUMBER = p_refresh_number)
5972             )
5973         GROUP BY DEMAND_CLASS, SD_DATE
5974         order by DEMAND_CLASS, SD_DATE; --4698199;
5975 
5976 EXCEPTION
5977         WHEN OTHERS THEN
5978                 IF PG_DEBUG in ('Y', 'C') THEN
5979                         msc_sch_wb.atp_debug('Get_Forward_Mat_Pf_Summ: ' || 'Error occurred: ' || to_char(sqlcode) || ':' || SQLERRM);
5980                 END IF;
5981                 x_return_status := FND_API.G_RET_STS_ERROR;
5982 
5983 END Get_Forward_Mat_Pf_Summ;
5984 
5985 /*--Insert_SD_Into_Details_Temp-----------------------------------------------
5986 |  o  Called from Item_Alloc_Cum_Atp procedure for Rule based Allocated Time
5987 |  o  This is similar to previous procedure only difference being that we
5988 +---------------------------------------------------------------------------*/
5989 PROCEDURE Insert_SD_Into_Details_Temp(
5990         p_type                          IN      INTEGER,
5991         p_member_id                     IN      NUMBER,
5992         p_family_id                     IN      NUMBER,
5993         p_sr_member_id                  IN      NUMBER,
5994         p_sr_family_id                  IN      NUMBER,
5995         p_org_id                        IN      NUMBER,
5996         --bug3671294 now we donot need this as we will join with msc_system_items
5997         --p_inv_item_name                 IN      VARCHAR2,
5998         p_org_code                      IN      VARCHAR2,
5999         p_instance_id                   IN      NUMBER,
6000         p_plan_id                       IN      NUMBER,
6001         p_itf                           IN      DATE,
6002         p_level_id                      IN      PLS_INTEGER,
6003         p_session_id                    IN      NUMBER,
6004         p_record_type                   IN      PLS_INTEGER,
6005         p_scenario_id                   IN      NUMBER,
6006         p_uom_code                      IN      VARCHAR2,
6007         x_insert_count                  OUT     NOCOPY NUMBER,
6008         x_return_status                 OUT     NOCOPY VARCHAR2
6009 ) IS
6010         l_null_num                      NUMBER;
6011         l_null_date                     DATE;   -- Bug 3875786
6012         l_null_char                     VARCHAR(1); -- Bug 3875786
6013         l_return_status                 VARCHAR2(1);
6014 BEGIN
6015 
6016         IF PG_DEBUG in ('Y', 'C') THEN
6017                 msc_sch_wb.atp_debug('******* Begin Insert_SD_Into_Details_Temp **********');
6018                 msc_sch_wb.atp_debug('Insert_SD_Into_Details_Temp: p_type: ' || p_type);
6019                 msc_sch_wb.atp_debug('Insert_SD_Into_Details_Temp: p_member_id: ' || p_member_id);
6020                 msc_sch_wb.atp_debug('Insert_SD_Into_Details_Temp: p_family_id: ' || p_family_id);
6021                 msc_sch_wb.atp_debug('Insert_SD_Into_Details_Temp: p_sr_member_id: ' || p_sr_member_id);
6022                 msc_sch_wb.atp_debug('Insert_SD_Into_Details_Temp: p_sr_family_id: ' || p_sr_family_id);
6023                 msc_sch_wb.atp_debug('Insert_SD_Into_Details_Temp: p_org_id: ' || p_org_id);
6024                 --bug3671294
6025                 --msc_sch_wb.atp_debug('Insert_SD_Into_Details_Temp: p_inv_item_name: ' || p_inv_item_name);
6026                 msc_sch_wb.atp_debug('Insert_SD_Into_Details_Temp: p_org_code: ' || p_org_code);
6027                 msc_sch_wb.atp_debug('Insert_SD_Into_Details_Temp: p_instance_id: ' || p_instance_id);
6028                 msc_sch_wb.atp_debug('Insert_SD_Into_Details_Temp: p_plan_id: ' || p_plan_id);
6029                 msc_sch_wb.atp_debug('Insert_SD_Into_Details_Temp: p_itf: ' || p_itf);
6030                 msc_sch_wb.atp_debug('Insert_SD_Into_Details_Temp: p_level_id: ' || p_level_id);
6031                 msc_sch_wb.atp_debug('Insert_SD_Into_Details_Temp: p_session_id: ' || p_session_id);
6032                 msc_sch_wb.atp_debug('Insert_SD_Into_Details_Temp: p_record_type: ' || p_record_type);
6033                 msc_sch_wb.atp_debug('Insert_SD_Into_Details_Temp: p_scenario_id: ' || p_scenario_id);
6034                 msc_sch_wb.atp_debug('Insert_SD_Into_Details_Temp: p_uom_code: ' || p_uom_code);
6035         END IF;
6036 
6037         -- initialize API return status to success
6038         x_return_status := FND_API.G_RET_STS_SUCCESS;
6039 
6040         IF p_type = Demand_Priority THEN
6041                 INSERT INTO MRP_ATP_DETAILS_TEMP
6042                 (session_id, atp_level, inventory_item_id, organization_id, identifier1, identifier3,
6043                 supply_demand_type, supply_demand_date, supply_demand_quantity, supply_demand_source_type,
6044                 allocated_quantity, record_type, scenario_id, disposition_name, demand_class, char1,
6045                 uom_code, plan_id, inventory_item_name, organization_code,
6046                 pf_display_flag, original_demand_quantity, original_demand_date,
6047                 original_item_id, original_supply_demand_type, request_item_id,
6048                 ORIG_CUSTOMER_SITE_NAME,ORIG_CUSTOMER_NAME,ORIG_DEMAND_CLASS,ORIG_REQUEST_DATE )--bug3263368
6049                 SELECT col1, col2, col3, col4, col5, col6, col7, col8, col9, col10,
6050                 col11, col12, col13, col14, col15, col16, col17, col18, col19, col20,
6051                 col21, col22, col23, col24, col25, col26,col27,col28,col29,col30
6052                 FROM
6053                 (SELECT p_session_id                    col1, -- session_id
6054                         p_level_id                      col2, -- level_id
6055                         p_sr_family_id                  col3, -- inventory_item_id
6056                         p_org_id                        col4, -- organization_id
6057                         p_instance_id                   col5, -- Identifier1
6058                         AD.PARENT_DEMAND_ID             col6, -- Identifier3
6059                         1                               col7, -- supply_demand_type
6060                         TRUNC(AD.DEMAND_DATE)           col8, -- supply_demand_date
6061                         -1 * NVL(AD.DEMAND_QUANTITY,
6062                         AD.ALLOCATED_QUANTITY)          col9, -- supply_demand_quantity
6063                         AD.ORIGINATION_TYPE             col10, -- supply_demand_source_type
6064                         -1 * AD.ALLOCATED_QUANTITY      col11, -- allocated_quantity
6065                         p_record_type                   col12, -- record_type
6066                         p_scenario_id                   col13, -- scenario_id
6067                         AD.ORDER_NUMBER                 col14, -- disposition_name
6068                         AD.DEMAND_CLASS                 col15, -- demand_class
6069                         l_null_char                     col16, -- from_demand_class  --Bug 3875786
6070                         p_uom_code                      col17, -- UOM Code
6071                         p_plan_id                       col18, -- Plan id
6072                         --bug3671294
6073                         msi.item_name                   col19, -- Item name
6074                         --p_inv_item_name                 col19, -- Item name
6075                         p_org_code                      col20,  -- Organization code
6076                 	Decode(AD.inventory_item_id, p_family_id,
6077                 	        Decode(AD.original_item_id, p_member_id,
6078                 	                AD.Pf_Display_Flag,
6079                 	                Decode(sign(trunc(AD.Original_Demand_Date) - MSC_ATP_ALLOC.G_Atf_Date),
6080                 	                        1, AD.Pf_Display_Flag,
6081                 	                        1)),
6082                 	        AD.Pf_Display_Flag)     col21,
6083                         -1 * NVL(AD.DEMAND_QUANTITY,
6084                                  AD.ALLOCATED_QUANTITY) col22,
6085                         trunc(AD.original_demand_date)  col23, --Bug_3693892 added trunc
6086                         AD.original_item_id             col24,
6087                         AD.original_origination_type    col25,
6088                         p_sr_member_id                  col26,
6089                         MTPS.LOCATION                   col27, --bug3263368
6090                         MTP.PARTNER_NAME                col28, --bug3263368
6091                         AD.DEMAND_CLASS                 col29, --bug3263368
6092                         AD.REQUEST_DATE                 col30  --bug3263368
6093                 FROM
6094                         MSC_ALLOC_DEMANDS AD,
6095                         MSC_ALLOC_TEMP TEMP,
6096                         MSC_TRADING_PARTNERS    MTP,--bug3263368
6097                         MSC_TRADING_PARTNER_SITES    MTPS, --bug3263368
6098                         MSC_SYSTEM_ITEMS    msi --bug3671294
6099                 WHERE
6100                         AD.PLAN_ID = p_plan_id
6101                         AND      AD.SR_INSTANCE_ID = p_instance_id
6102                         AND      AD.INVENTORY_ITEM_ID in (p_member_id, p_family_id)
6103                         AND      AD.ORGANIZATION_ID = p_org_id
6104                         AND      AD.ALLOCATED_QUANTITY <> 0
6105                         AND      AD.DEMAND_CLASS = TEMP.DEMAND_CLASS
6106                         --bug3671294 start
6107                         AND      msi.PLAN_ID = AD.PLAN_ID
6108                         AND      msi.SR_INSTANCE_ID = AD.SR_INSTANCE_ID
6109                         AND      msi.ORGANIZATION_ID = AD.ORGANIZATION_ID
6110                         AND      msi.INVENTORY_ITEM_ID = AD.ORIGINAL_ITEM_ID
6111                         --bug3671294 end
6112                         --bug3700564 added trunc
6113                         AND      TRUNC(AD.DEMAND_DATE) < NVL(p_itf, TRUNC(AD.DEMAND_DATE) + 1)
6114                         AND      AD.ORIGINATION_TYPE <> 52  -- Ignore copy SO and copy stealing records for allocation WB - summary enhancement
6115                         AND      AD.SHIP_TO_SITE_ID = MTPS.PARTNER_SITE_ID(+) --bug3263368
6116                         AND      AD.CUSTOMER_ID = MTP.PARTNER_ID(+) --bug3263368
6117                 UNION ALL
6118                 SELECT  p_session_id                    col1,
6119                         p_level_id                      col2,
6120                         p_sr_family_id                  col3 ,
6121                         p_org_id                        col4,
6122                         p_instance_id                   col5,
6123                         SA.PARENT_TRANSACTION_ID        col6,
6124                         2                               col7, -- supply
6125                         TRUNC(SA.SUPPLY_DATE)           col8,
6126                         NVL(SA.SUPPLY_QUANTITY,
6127                         SA.ALLOCATED_QUANTITY)          col9,
6128                         SA.ORDER_TYPE                   col10,
6129                         SA.ALLOCATED_QUANTITY           col11,
6130                         p_record_type                   col12, -- record_type
6131                         p_scenario_id                   col13, -- scenario_id
6132                         DECODE(SA.ORIGINAL_ORDER_TYPE, -- SA.ORDER_TYPE, /*bug 3229032*/
6133                                 5, to_char(SA.PARENT_TRANSACTION_ID),
6134                                 SA.ORDER_NUMBER)        col14,
6135                         SA.DEMAND_CLASS                 col15,
6136                         SA.FROM_DEMAND_CLASS            col16,
6137                         p_uom_code                      col17,
6138                         p_plan_id                       col18,
6139                         --bug3671294
6140                         msi.item_name                   col19, -- Item name
6141                         --p_inv_item_name                 col19, -- Item name
6142                         p_org_code                      col20,  -- Organization code
6143                         l_null_num                      col21, -- Bug 3875786 - local variable used for NULL
6144                         l_null_num                      col22, -- Bug 3875786 - local variable used for NULL
6145                         l_null_date                     col23, -- Bug 3875786 - local variable used for NULL
6146                         SA.original_item_id             col24,
6147                         /*bug 3229032*/
6148                         DECODE(SA.ORIGINAL_ORDER_TYPE,
6149                                 46, 48,                 -- Change Supply due to Stealing to Supply Adjustment
6150                                 47, 48,                 -- Change Demand due to Stealing to Supply Adjustment
6151                                 SA.ORIGINAL_ORDER_TYPE
6152                                )                        col25,
6153                         p_sr_member_id                  col26,
6154                         MTPS.LOCATION                  col27, --bug3684383
6155                         MTP.PARTNER_NAME               col28, --bug3684383
6156                         SA.DEMAND_CLASS                col29, --bug3684383
6157                         l_null_date                     col30  --bug3684383 -- Bug 3875786 - local variable used for NULL
6158                 FROM
6159                         MSC_ALLOC_SUPPLIES SA,
6160                         MSC_ALLOC_TEMP TEMP,
6161                         MSC_SYSTEM_ITEMS    msi, --bug3671294
6162                         MSC_TRADING_PARTNER_SITES    MTPS, --bug3684383
6163                         MSC_TRADING_PARTNERS    MTP --bug3684383
6164                 WHERE
6165                         SA.PLAN_ID = p_plan_id
6166                         AND      SA.SR_INSTANCE_ID = p_instance_id
6167                         AND      SA.INVENTORY_ITEM_ID in (p_member_id, p_family_id)
6168                         AND      SA.ORGANIZATION_ID = p_org_id
6169                         AND      SA.ALLOCATED_QUANTITY <> 0
6170                         --bug3671294 start
6171                         AND      msi.PLAN_ID = SA.PLAN_ID
6172                         AND      msi.SR_INSTANCE_ID = SA.SR_INSTANCE_ID
6173                         AND      msi.ORGANIZATION_ID = SA.ORGANIZATION_ID
6174                         AND      msi.INVENTORY_ITEM_ID = SA.ORIGINAL_ITEM_ID
6175                         --bug3671294 end
6176                         AND      TRUNC(SA.SUPPLY_DATE) >= DECODE(SA.ORIGINAL_ORDER_TYPE,
6177                                                         27, TRUNC(SYSDATE),
6178                                                         28, TRUNC(SYSDATE),
6179                                                         TRUNC(SA.SUPPLY_DATE))
6180                         AND      SA.DEMAND_CLASS = TEMP.DEMAND_CLASS
6181                         AND      TRUNC(SA.SUPPLY_DATE) < NVL(p_itf, TRUNC(SA.SUPPLY_DATE) + 1)
6182                         AND      SA.SHIP_TO_SITE_ID = MTPS.PARTNER_SITE_ID(+) --bug3684383
6183                         AND      SA.CUSTOMER_ID = MTP.PARTNER_ID(+) --bug3684383
6184                 );
6185 
6186         ELSIF p_type = User_Defined_DC THEN
6187                 INSERT INTO MRP_ATP_DETAILS_TEMP
6188                 (session_id, atp_level, inventory_item_id, organization_id, identifier1, identifier3,
6189                 supply_demand_type, supply_demand_date, supply_demand_quantity, supply_demand_source_type,
6190                 allocated_quantity, record_type, scenario_id, disposition_name, demand_class, uom_code,
6191                 inventory_item_name, organization_code, identifier2, identifier4, request_item_id,
6192                 pf_display_flag, original_demand_quantity, original_demand_date, original_item_id,
6193                 original_supply_demand_type, unallocated_quantity,
6194                 ORIG_CUSTOMER_SITE_NAME,ORIG_CUSTOMER_NAME,ORIG_DEMAND_CLASS,ORIG_REQUEST_DATE )--bug3263368
6195                 SELECT col1, col2, col3, col4, col5, col6, col7, col8, col9, col10,
6196                 col11, col12, col13, col14, col15, col16, col17, col18, col19, col20,
6197                 col21, col22, col23, col24, col25, col26, col27,col28,col29,col30,col31
6198                 FROM
6199                 (SELECT p_session_id                    col1, -- session_id
6200                         p_level_id                      col2, -- level_id
6201                         p_sr_family_id                  col3, -- inventory_item_id
6202                         p_org_id                        col4, -- organization_id
6203                         p_instance_id                   col5, -- Identifier1
6204                         AD.PARENT_DEMAND_ID             col6, -- Identifier3
6205                         1                               col7, -- supply_demand_type
6206                         TRUNC(AD.DEMAND_DATE)           col8, -- supply_demand_date
6207                         -1 * NVL(AD.DEMAND_QUANTITY,
6208                                  AD.ALLOCATED_QUANTITY) col9, -- supply_demand_quantity
6209                         AD.ORIGINAL_ORIGINATION_TYPE    col10,-- supply_demand_source_type
6210                         -1 * AD.ALLOCATED_QUANTITY*
6211                           DECODE(decode(AD.ORIGINAL_ORIGINATION_TYPE,
6212                                 6, decode(AD.source_organization_id,
6213                                         NULL, DECODE(AD.DEMAND_CLASS, null, null,
6214                                                 DECODE(TEMP.DEMAND_CLASS, '-1',
6215                                                         MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(
6216                                                                 null, null,
6217                                                                 Decode(sign(trunc(AD.Demand_Date) - MSC_ATP_ALLOC.G_Atf_Date),
6218                                                                         1, p_family_id,
6219                                                                         Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
6220                                                                                 'Y', AD.Original_Item_Id,
6221                                                                                 p_family_id)),
6222                                                                 p_org_id,
6223                                                                 p_instance_id, trunc(AD.DEMAND_DATE),
6224                                                                 p_level_id, AD.DEMAND_CLASS),
6225                                                         AD.DEMAND_CLASS)),
6226                                         -23453, DECODE(AD.DEMAND_CLASS, null, null,
6227                                                 DECODE(TEMP.DEMAND_CLASS, '-1',
6228                                                         MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(
6229                                                                 null, null,
6230                                                                 Decode(sign(trunc(AD.Demand_Date) - MSC_ATP_ALLOC.G_Atf_Date),
6231                                                                         1, p_family_id,
6232                                                                         Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
6233                                                                                 'Y', AD.Original_Item_Id,
6234                                                                                 p_family_id)),
6235                                                                 p_org_id,
6236                                                                 p_instance_id, trunc(AD.DEMAND_DATE),
6237                                                                 p_level_id, AD.DEMAND_CLASS),
6238                                                         AD.DEMAND_CLASS)),
6239                                         AD.organization_id, DECODE(AD.DEMAND_CLASS, null, null,
6240                                                 DECODE(TEMP.DEMAND_CLASS, '-1',
6241                                                         MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(
6242                                                                 null, null,
6243                                                                 Decode(sign(trunc(AD.Demand_Date) - MSC_ATP_ALLOC.G_Atf_Date),
6244                                                                         1, p_family_id,
6245                                                                         Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
6246                                                                                 'Y', AD.Original_Item_Id,
6247                                                                                 p_family_id)),
6248                                                                 p_org_id,
6249                                                                 p_instance_id, trunc(AD.DEMAND_DATE),
6250                                                                 p_level_id, AD.DEMAND_CLASS),
6251                                                         AD.DEMAND_CLASS)), NULL),
6252                                 30, decode(AD.source_organization_id,
6253                                         NULL, DECODE(AD.DEMAND_CLASS, null, null,
6254                                                 DECODE(TEMP.DEMAND_CLASS, '-1',
6255                                                         MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(
6256                                                                 null, null,
6257                                                                 Decode(sign(trunc(AD.Demand_Date) - MSC_ATP_ALLOC.G_Atf_Date),
6258                                                                         1, p_family_id,
6259                                                                         Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
6260                                                                                 'Y', AD.Original_Item_Id,
6261                                                                                 p_family_id)),
6262                                                                 p_org_id,
6263                                                                 p_instance_id, trunc(AD.DEMAND_DATE),
6264                                                                 p_level_id, AD.DEMAND_CLASS),
6265                                                         AD.DEMAND_CLASS)),
6266                                         -23453, DECODE(AD.DEMAND_CLASS, null, null,
6267                                                 DECODE(TEMP.DEMAND_CLASS, '-1',
6268                                                         MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(
6269                                                                 null, null,
6270                                                                 Decode(sign(trunc(AD.Demand_Date) - MSC_ATP_ALLOC.G_Atf_Date),
6271                                                                         1, p_family_id,
6272                                                                         Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
6273                                                                                 'Y', AD.Original_Item_Id,
6274                                                                                 p_family_id)),
6275                                                                 p_org_id,
6276                                                                 p_instance_id, trunc(AD.DEMAND_DATE),
6277                                                                 p_level_id, AD.DEMAND_CLASS),
6278                                                         AD.DEMAND_CLASS)),
6279                                         AD.organization_id, DECODE(AD.DEMAND_CLASS, null, null,
6280                                                 DECODE(TEMP.DEMAND_CLASS, '-1',
6281                                                         MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(
6282                                                                 null, null,
6283                                                                 Decode(sign(trunc(AD.Demand_Date) - MSC_ATP_ALLOC.G_Atf_Date),
6284                                                                         1, p_family_id,
6285                                                                         Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
6286                                                                                 'Y', AD.Original_Item_Id,
6287                                                                                 p_family_id)),
6288                                                                 p_org_id,
6289                                                                 p_instance_id, trunc(AD.DEMAND_DATE),
6290                                                                 p_level_id, AD.DEMAND_CLASS),
6291                                                         AD.DEMAND_CLASS)), NULL),
6292                                 DECODE(AD.DEMAND_CLASS, null, null,
6293                                         DECODE(TEMP.DEMAND_CLASS, '-1',
6294                                                 MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(
6295                                                         null, null,
6296                                                         Decode(sign(trunc(AD.Demand_Date) - MSC_ATP_ALLOC.G_Atf_Date),
6297                                                                 1, p_family_id,
6298                                                                 Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
6299                                                                         'Y', AD.Original_Item_Id,
6300                                                                         p_family_id)),
6301                                                         p_org_id,
6302                                                         p_instance_id, trunc(AD.DEMAND_DATE),
6303                                                         p_level_id, AD.DEMAND_CLASS),
6304                                                 AD.DEMAND_CLASS))),
6305                                 TEMP.DEMAND_CLASS, 1,
6306                                 MSC_AATP_FUNC.Get_Item_Demand_Alloc_Percent(p_plan_id,
6307                                         AD.PARENT_DEMAND_ID,
6308                                         trunc(AD.DEMAND_DATE),
6309                                         AD.USING_ASSEMBLY_ITEM_ID,
6310                                         DECODE(AD.SOURCE_ORGANIZATION_ID,
6311                                         -23453, null,
6312                                         AD.SOURCE_ORGANIZATION_ID),
6313                                         Decode(sign(trunc(AD.Demand_Date) - MSC_ATP_ALLOC.G_Atf_Date),
6314                                                 1, p_family_id,
6315                                                 Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
6316                                                         'Y', AD.Original_Item_Id,
6317                                                         p_family_id)),
6318                                         p_org_id,
6319                                         p_instance_id,
6320                                         AD.ORIGINAL_ORIGINATION_TYPE,
6321                                         decode(AD.ORIGINAL_ORIGINATION_TYPE,
6322                                                 6, decode(AD.source_organization_id,
6323                                                         NULL, DECODE(AD.DEMAND_CLASS, null, null,
6324                                                                 DECODE(TEMP.DEMAND_CLASS, '-1',
6325                                                                         MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(
6326                                                                                 null, null,
6327                                                                                 Decode(sign(trunc(AD.Demand_Date) - MSC_ATP_ALLOC.G_Atf_Date),
6328                                                                                         1, p_family_id,
6329                                                                                         Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
6330                                                                                                 'Y', AD.Original_Item_Id,
6331                                                                                                 p_family_id)),
6332                                                                                 p_org_id,
6333                                                                                 p_instance_id, trunc(AD.DEMAND_DATE),
6334                                                                                 p_level_id, AD.DEMAND_CLASS),
6335                                                                                 AD.DEMAND_CLASS)),
6336                                                         -23453, DECODE(AD.DEMAND_CLASS, null, null,
6337                                                                 DECODE(TEMP.DEMAND_CLASS, '-1',
6338                                                                         MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(
6339                                                                                 null, null,
6340                                                                                 Decode(sign(trunc(AD.Demand_Date) - MSC_ATP_ALLOC.G_Atf_Date),
6341                                                                                         1, p_family_id,
6342                                                                                         Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
6343                                                                                                 'Y', AD.Original_Item_Id,
6344                                                                                                 p_family_id)),
6345                                                                                 p_org_id,
6346                                                                                 p_instance_id, trunc(AD.DEMAND_DATE),
6347                                                                                 p_level_id, AD.DEMAND_CLASS),
6348                                                                                 AD.DEMAND_CLASS)),
6349                                                         AD.organization_id, DECODE(AD.DEMAND_CLASS, null, null,
6350                                                                 DECODE(TEMP.DEMAND_CLASS, '-1',
6351                                                                         MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(
6352                                                                                 null, null,
6353                                                                                 Decode(sign(trunc(AD.Demand_Date) - MSC_ATP_ALLOC.G_Atf_Date),
6354                                                                                         1, p_family_id,
6355                                                                                         Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
6356                                                                                                 'Y', AD.Original_Item_Id,
6357                                                                                                 p_family_id)),
6358                                                                                 p_org_id,
6359                                                                                 p_instance_id, trunc(AD.DEMAND_DATE),
6360                                                                                 p_level_id, AD.DEMAND_CLASS),
6361                                                                                 AD.DEMAND_CLASS)), TEMP.DEMAND_CLASS),
6362                                                 30, decode(AD.source_organization_id,
6363                                                         NULL, DECODE(AD.DEMAND_CLASS, null, null,
6364                                                                 DECODE(TEMP.DEMAND_CLASS, '-1',
6365                                                                         MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(
6366                                                                                 null, null,
6367                                                                                 Decode(sign(trunc(AD.Demand_Date) - MSC_ATP_ALLOC.G_Atf_Date),
6368                                                                                         1, p_family_id,
6369                                                                                         Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
6370                                                                                                 'Y', AD.Original_Item_Id,
6371                                                                                                 p_family_id)),
6372                                                                                 p_org_id,
6373                                                                                 p_instance_id, trunc(AD.DEMAND_DATE),
6374                                                                                 p_level_id, AD.DEMAND_CLASS),
6375                                                                                 AD.DEMAND_CLASS)),
6376                                                         -23453, DECODE(AD.DEMAND_CLASS, null, null,
6377                                                                 DECODE(TEMP.DEMAND_CLASS, '-1',
6378                                                                         MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(
6379                                                                                 null, null,
6380                                                                                 Decode(sign(trunc(AD.Demand_Date) - MSC_ATP_ALLOC.G_Atf_Date),
6381                                                                                         1, p_family_id,
6382                                                                                         Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
6383                                                                                                 'Y', AD.Original_Item_Id,
6384                                                                                                 p_family_id)),
6385                                                                                 p_org_id,
6386                                                                                 p_instance_id, trunc(AD.DEMAND_DATE),
6387                                                                                 p_level_id, AD.DEMAND_CLASS),
6388                                                                                 AD.DEMAND_CLASS)),
6389                                                         AD.organization_id, DECODE(AD.DEMAND_CLASS, null, null,
6390                                                                 DECODE(TEMP.DEMAND_CLASS, '-1',
6391                                                                         MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(
6392                                                                                 null, null,
6393                                                                                 Decode(sign(trunc(AD.Demand_Date) - MSC_ATP_ALLOC.G_Atf_Date),
6394                                                                                         1, p_family_id,
6395                                                                                         Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
6396                                                                                                 'Y', AD.Original_Item_Id,
6397                                                                                                 p_family_id)),
6398                                                                                 p_org_id,
6399                                                                                 p_instance_id, trunc(AD.DEMAND_DATE),
6400                                                                                 p_level_id, AD.DEMAND_CLASS),
6401                                                                                 AD.DEMAND_CLASS)), TEMP.DEMAND_CLASS),
6402                                                 DECODE(AD.DEMAND_CLASS, null, null,
6403                                                         DECODE(TEMP.DEMAND_CLASS, '-1',
6404                                                                 MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(
6405                                                                         null, null,
6406                                                                         Decode(sign(trunc(AD.Demand_Date) - MSC_ATP_ALLOC.G_Atf_Date),
6407                                                                                 1, p_family_id,
6408                                                                                 Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
6409                                                                                         'Y', AD.Original_Item_Id,
6410                                                                                         p_family_id)),
6411                                                                         p_org_id,
6412                                                                         p_instance_id, trunc(AD.DEMAND_DATE),
6413                                                                         p_level_id, AD.DEMAND_CLASS),
6414                                                                         AD.DEMAND_CLASS))),
6415                                         TEMP.DEMAND_CLASS,
6416                                         p_level_id))   col11, -- allocated_quantity
6417                         p_record_type                   col12, -- record_type
6418                         p_scenario_id                   col13, -- scenario_id
6419                         AD.ORDER_NUMBER                 col14, -- disposition_name
6420                         TEMP.DEMAND_CLASS               col15, -- demand_class
6421                         p_uom_code                      col16, -- UOM Code
6422                         --bug3671294
6423                         msi.item_name                   col17, -- Item name
6424                         --p_inv_item_name                 col17, -- Item name
6425                         p_org_code                      col18, -- Organization code
6426                         TEMP.PRIORITY                   col19, -- sysdate priroty
6427                         TEMP.ALLOCATION_PERCENT         col20, -- sysdate allocation percent
6428                         -- time_phased_atp
6429                         p_sr_member_id                  col21, -- request_item_id
6430                 	Decode(AD.inventory_item_id, p_family_id,
6431                 	        Decode(AD.original_item_id, p_member_id,
6432                 	                AD.Pf_Display_Flag,
6433                 	                Decode(sign(trunc(AD.Original_Demand_Date) - MSC_ATP_ALLOC.G_Atf_Date),
6434                 	                        1, AD.Pf_Display_Flag,
6435                 	                        1)),
6436                 	        AD.Pf_Display_Flag)     col22,
6437                         -1 * NVL(AD.DEMAND_QUANTITY,
6438                                  AD.ALLOCATED_QUANTITY)*
6439                         DECODE(decode(AD.ORIGINAL_ORIGINATION_TYPE,
6440                                 6, decode(AD.source_organization_id,
6441                                         NULL, DECODE(AD.DEMAND_CLASS, null, null,
6442                                                 DECODE(TEMP.DEMAND_CLASS, '-1',
6443                                                         MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(
6444                                                                 null, null,
6445                                                                 Decode(sign(trunc(AD.Demand_Date) - MSC_ATP_ALLOC.G_Atf_Date),
6446                                                                         1, p_family_id,
6447                                                                         Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
6448                                                                                 'Y', AD.Original_Item_Id,
6449                                                                                 p_family_id)),
6450                                                                 p_org_id,
6451                                                                 p_instance_id, trunc(AD.DEMAND_DATE),
6452                                                                 p_level_id, AD.DEMAND_CLASS),
6453                                                         AD.DEMAND_CLASS)),
6454                                         -23453, DECODE(AD.DEMAND_CLASS, null, null,
6455                                                 DECODE(TEMP.DEMAND_CLASS, '-1',
6456                                                         MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(
6457                                                                 null, null,
6458                                                                 Decode(sign(trunc(AD.Demand_Date) - MSC_ATP_ALLOC.G_Atf_Date),
6459                                                                         1, p_family_id,
6460                                                                         Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
6461                                                                                 'Y', AD.Original_Item_Id,
6462                                                                                 p_family_id)),
6463                                                                 p_org_id,
6464                                                                 p_instance_id, trunc(AD.DEMAND_DATE),
6465                                                                 p_level_id, AD.DEMAND_CLASS),
6466                                                         AD.DEMAND_CLASS)),
6467                                         AD.organization_id, DECODE(AD.DEMAND_CLASS, null, null,
6468                                                 DECODE(TEMP.DEMAND_CLASS, '-1',
6469                                                         MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(
6470                                                                 null, null,
6471                                                                 Decode(sign(trunc(AD.Demand_Date) - MSC_ATP_ALLOC.G_Atf_Date),
6472                                                                         1, p_family_id,
6473                                                                         Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
6474                                                                                 'Y', AD.Original_Item_Id,
6475                                                                                 p_family_id)),
6476                                                                 p_org_id,
6477                                                                 p_instance_id, trunc(AD.DEMAND_DATE),
6478                                                                 p_level_id, AD.DEMAND_CLASS),
6479                                                         AD.DEMAND_CLASS)), NULL),
6480                                 30, decode(AD.source_organization_id,
6481                                         NULL, DECODE(AD.DEMAND_CLASS, null, null,
6482                                                 DECODE(TEMP.DEMAND_CLASS, '-1',
6483                                                         MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(
6484                                                                 null, null,
6485                                                                 Decode(sign(trunc(AD.Demand_Date) - MSC_ATP_ALLOC.G_Atf_Date),
6486                                                                         1, p_family_id,
6487                                                                         Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
6488                                                                                 'Y', AD.Original_Item_Id,
6489                                                                                 p_family_id)),
6490                                                                 p_org_id,
6491                                                                 p_instance_id, trunc(AD.DEMAND_DATE),
6492                                                                 p_level_id, AD.DEMAND_CLASS),
6493                                                         AD.DEMAND_CLASS)),
6494                                         -23453, DECODE(AD.DEMAND_CLASS, null, null,
6495                                                 DECODE(TEMP.DEMAND_CLASS, '-1',
6496                                                         MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(
6497                                                                 null, null,
6498                                                                 Decode(sign(trunc(AD.Demand_Date) - MSC_ATP_ALLOC.G_Atf_Date),
6499                                                                         1, p_family_id,
6500                                                                         Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
6501                                                                                 'Y', AD.Original_Item_Id,
6502                                                                                 p_family_id)),
6503                                                                 p_org_id,
6504                                                                 p_instance_id, trunc(AD.DEMAND_DATE),
6505                                                                 p_level_id, AD.DEMAND_CLASS),
6506                                                         AD.DEMAND_CLASS)),
6507                                         AD.organization_id, DECODE(AD.DEMAND_CLASS, null, null,
6508                                                 DECODE(TEMP.DEMAND_CLASS, '-1',
6509                                                         MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(
6510                                                                 null, null,
6511                                                                 Decode(sign(trunc(AD.Demand_Date) - MSC_ATP_ALLOC.G_Atf_Date),
6512                                                                         1, p_family_id,
6513                                                                         Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
6514                                                                                 'Y', AD.Original_Item_Id,
6515                                                                                 p_family_id)),
6516                                                                 p_org_id,
6517                                                                 p_instance_id, trunc(AD.DEMAND_DATE),
6518                                                                 p_level_id, AD.DEMAND_CLASS),
6519                                                         AD.DEMAND_CLASS)), NULL),
6520                                 DECODE(AD.DEMAND_CLASS, null, null,
6521                                         DECODE(TEMP.DEMAND_CLASS, '-1',
6522                                                 MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(
6523                                                         null, null,
6524                                                         Decode(sign(trunc(AD.Demand_Date) - MSC_ATP_ALLOC.G_Atf_Date),
6525                                                                 1, p_family_id,
6526                                                                 Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
6527                                                                         'Y', AD.Original_Item_Id,
6528                                                                         p_family_id)),
6529                                                         p_org_id,
6530                                                         p_instance_id, trunc(AD.DEMAND_DATE),
6531                                                         p_level_id, AD.DEMAND_CLASS),
6532                                                 AD.DEMAND_CLASS))),
6533                                 TEMP.DEMAND_CLASS, 1,
6534                                 MSC_AATP_FUNC.Get_Item_Demand_Alloc_Percent(p_plan_id,
6535                                         AD.PARENT_DEMAND_ID,
6536                                         trunc(AD.DEMAND_DATE),
6537                                         AD.USING_ASSEMBLY_ITEM_ID,
6538                                         DECODE(AD.SOURCE_ORGANIZATION_ID,
6539                                         -23453, null,
6540                                         AD.SOURCE_ORGANIZATION_ID),
6541                                         Decode(sign(trunc(AD.Demand_Date) - MSC_ATP_ALLOC.G_Atf_Date),
6542                                                 1, p_family_id,
6543                                                 Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
6544                                                         'Y', AD.Original_Item_Id,
6545                                                         p_family_id)),
6546                                         p_org_id,
6547                                         p_instance_id,
6548                                         AD.ORIGINAL_ORIGINATION_TYPE,
6549                                         decode(AD.ORIGINAL_ORIGINATION_TYPE,
6550                                                 6, decode(AD.source_organization_id,
6551                                                         NULL, DECODE(AD.DEMAND_CLASS, null, null,
6552                                                                 DECODE(TEMP.DEMAND_CLASS, '-1',
6553                                                                         MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(
6554                                                                                 null, null,
6555                                                                                 Decode(sign(trunc(AD.Demand_Date) - MSC_ATP_ALLOC.G_Atf_Date),
6556                                                                                         1, p_family_id,
6557                                                                                         Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
6558                                                                                                 'Y', AD.Original_Item_Id,
6559                                                                                                 p_family_id)),
6560                                                                                 p_org_id,
6561                                                                                 p_instance_id, trunc(AD.DEMAND_DATE),
6562                                                                                 p_level_id, AD.DEMAND_CLASS),
6563                                                                                 AD.DEMAND_CLASS)),
6564                                                         -23453, DECODE(AD.DEMAND_CLASS, null, null,
6565                                                                 DECODE(TEMP.DEMAND_CLASS, '-1',
6566                                                                         MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(
6567                                                                                 null, null,
6568                                                                                 Decode(sign(trunc(AD.Demand_Date) - MSC_ATP_ALLOC.G_Atf_Date),
6569                                                                                         1, p_family_id,
6570                                                                                         Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
6571                                                                                                 'Y', AD.Original_Item_Id,
6572                                                                                                 p_family_id)),
6573                                                                                 p_org_id,
6574                                                                                 p_instance_id, trunc(AD.DEMAND_DATE),
6575                                                                                 p_level_id, AD.DEMAND_CLASS),
6576                                                                                 AD.DEMAND_CLASS)),
6577                                                         AD.organization_id, DECODE(AD.DEMAND_CLASS, null, null,
6578                                                                 DECODE(TEMP.DEMAND_CLASS, '-1',
6579                                                                         MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(
6580                                                                                 null, null,
6581                                                                                 Decode(sign(trunc(AD.Demand_Date) - MSC_ATP_ALLOC.G_Atf_Date),
6582                                                                                         1, p_family_id,
6583                                                                                         Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
6584                                                                                                 'Y', AD.Original_Item_Id,
6585                                                                                                 p_family_id)),
6586                                                                                 p_org_id,
6587                                                                                 p_instance_id, trunc(AD.DEMAND_DATE),
6588                                                                                 p_level_id, AD.DEMAND_CLASS),
6589                                                                                 AD.DEMAND_CLASS)), TEMP.DEMAND_CLASS),
6590                                                 30, decode(AD.source_organization_id,
6591                                                         NULL, DECODE(AD.DEMAND_CLASS, null, null,
6592                                                                 DECODE(TEMP.DEMAND_CLASS, '-1',
6593                                                                         MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(
6594                                                                                 null, null,
6595                                                                                 Decode(sign(trunc(AD.Demand_Date) - MSC_ATP_ALLOC.G_Atf_Date),
6596                                                                                         1, p_family_id,
6597                                                                                         Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
6598                                                                                                 'Y', AD.Original_Item_Id,
6599                                                                                                 p_family_id)),
6600                                                                                 p_org_id,
6601                                                                                 p_instance_id, trunc(AD.DEMAND_DATE),
6602                                                                                 p_level_id, AD.DEMAND_CLASS),
6603                                                                                 AD.DEMAND_CLASS)),
6604                                                         -23453, DECODE(AD.DEMAND_CLASS, null, null,
6605                                                                 DECODE(TEMP.DEMAND_CLASS, '-1',
6606                                                                         MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(
6607                                                                                 null, null,
6608                                                                                 Decode(sign(trunc(AD.Demand_Date) - MSC_ATP_ALLOC.G_Atf_Date),
6609                                                                                         1, p_family_id,
6610                                                                                         Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
6611                                                                                                 'Y', AD.Original_Item_Id,
6612                                                                                                 p_family_id)),
6613                                                                                 p_org_id,
6614                                                                                 p_instance_id, trunc(AD.DEMAND_DATE),
6615                                                                                 p_level_id, AD.DEMAND_CLASS),
6616                                                                                 AD.DEMAND_CLASS)),
6617                                                         AD.organization_id, DECODE(AD.DEMAND_CLASS, null, null,
6618                                                                 DECODE(TEMP.DEMAND_CLASS, '-1',
6619                                                                         MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(
6620                                                                                 null, null,
6621                                                                                 Decode(sign(trunc(AD.Demand_Date) - MSC_ATP_ALLOC.G_Atf_Date),
6622                                                                                         1, p_family_id,
6623                                                                                         Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
6624                                                                                                 'Y', AD.Original_Item_Id,
6625                                                                                                 p_family_id)),
6626                                                                                 p_org_id,
6627                                                                                 p_instance_id, trunc(AD.DEMAND_DATE),
6628                                                                                 p_level_id, AD.DEMAND_CLASS),
6629                                                                                 AD.DEMAND_CLASS)), TEMP.DEMAND_CLASS),
6630                                                 DECODE(AD.DEMAND_CLASS, null, null,
6631                                                         DECODE(TEMP.DEMAND_CLASS, '-1',
6632                                                                 MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(
6633                                                                         null, null,
6634                                                                         Decode(sign(trunc(AD.Demand_Date) - MSC_ATP_ALLOC.G_Atf_Date),
6635                                                                                 1, p_family_id,
6636                                                                                 Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
6637                                                                                         'Y', AD.Original_Item_Id,
6638                                                                                         p_family_id)),
6639                                                                         p_org_id,
6640                                                                         p_instance_id, trunc(AD.DEMAND_DATE),
6641                                                                         p_level_id, AD.DEMAND_CLASS),
6642                                                                         AD.DEMAND_CLASS))),
6643                                         TEMP.DEMAND_CLASS,
6644                                         p_level_id))    col23, -- original demand quantity
6645                         trunc(AD.original_demand_date)  col24, --Bug_3693892 added trunc
6646                         AD.original_item_id             col25,
6647                         AD.original_origination_type    col26,
6648                         -1 * AD.ALLOCATED_QUANTITY      col27,  -- unallocated quantity
6649                         MTPS.LOCATION                   col28, --bug3263368
6650                         MTP.PARTNER_NAME                col29, --bug3263368
6651                         AD.DEMAND_CLASS                 col30, --bug3263368
6652                         AD.REQUEST_DATE                 col31  --bug3263368
6653                 FROM
6654                         MSC_ALLOC_DEMANDS AD,
6655                         MSC_ALLOC_TEMP TEMP,
6656                         MSC_TRADING_PARTNERS    MTP,--bug3263368
6657                         MSC_TRADING_PARTNER_SITES    MTPS, --bug3263368
6658                         MSC_SYSTEM_ITEMS    msi --bug3671294
6659                 WHERE
6660                          AD.PLAN_ID = p_plan_id
6661                 AND      AD.SR_INSTANCE_ID = p_instance_id
6662                 AND      AD.INVENTORY_ITEM_ID in (p_member_id, p_family_id)
6663                 AND      AD.ORGANIZATION_ID = p_org_id
6664                 AND      AD.ALLOCATED_QUANTITY <> 0
6665                 --bug3671294 start
6666                 AND      msi.PLAN_ID = AD.PLAN_ID
6667                 AND      msi.SR_INSTANCE_ID = AD.SR_INSTANCE_ID
6668                 AND      msi.ORGANIZATION_ID = AD.ORGANIZATION_ID
6669                 AND      msi.INVENTORY_ITEM_ID = AD.ORIGINAL_ITEM_ID
6670                 --bug3671294 end
6671                 AND      TRUNC(AD.DEMAND_DATE) < NVL(p_itf, TRUNC(AD.DEMAND_DATE) + 1)
6672                 AND      AD.ORIGINATION_TYPE <> 52  -- Ignore copy SO and copy stealing records for allocation WB
6673                 AND      AD.SHIP_TO_SITE_ID  = MTPS.PARTNER_SITE_ID(+) --bug3263368
6674                 AND      AD.CUSTOMER_ID = MTP.PARTNER_ID(+) --bug3263368
6675 
6676                 UNION ALL
6677 
6678                 SELECT  p_session_id                    col1,
6679                         p_level_id                      col2,
6680                         p_sr_member_id                  col3 ,
6681                         p_org_id                        col4,
6682                         p_instance_id                   col5,
6683                         SA.PARENT_TRANSACTION_ID        col6,
6684                         2                               col7, -- supply
6685                         TRUNC(SA.SUPPLY_DATE)           col8,
6686                         NVL(SA.SUPPLY_QUANTITY,
6687                           SA.ALLOCATED_QUANTITY)        col9,
6688                         SA.ORDER_TYPE                   col10,
6689                         SA.ALLOCATED_QUANTITY
6690                          * DECODE(DECODE(SA.DEMAND_CLASS, null, null,
6691                                      DECODE(TEMP.DEMAND_CLASS,'-1',
6692                                         MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(
6693                                           null,
6694                                           null,
6695                                           Decode(sign(trunc(SA.Supply_Date) - MSC_ATP_ALLOC.G_Atf_Date),
6696                                                 1, p_family_id,
6697                                                 Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
6698                                                         'Y', SA.Original_Item_Id,
6699                                                         p_family_id)),
6700                                           p_org_id,
6701                                           p_instance_id,
6702                                           TRUNC(SA.SUPPLY_DATE),
6703                                           p_level_id,
6704                                           SA.DEMAND_CLASS),
6705                                         SA.DEMAND_CLASS)),
6706                                 TEMP.DEMAND_CLASS,
6707                                         1,
6708                                 NULL,
6709                                         NVL(MSC_AATP_FUNC.Get_DC_Alloc_Percent(
6710                                         p_instance_id,
6711                                         Decode(sign(trunc(SA.Supply_Date) - MSC_ATP_ALLOC.G_Atf_Date),
6712                                                 1, p_family_id,
6713                                                 Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
6714                                                         'Y', SA.Original_Item_Id,
6715                                                         p_family_id)),
6716                                         p_org_id,
6717                                         null,
6718                                         null,
6719                                         TEMP.DEMAND_CLASS,
6720                                         TRUNC(SA.SUPPLY_DATE)),
6721                                         1),
6722                                 DECODE(MSC_AATP_FUNC.Get_DC_Alloc_Percent(
6723                                         p_instance_id,
6724                                         Decode(sign(trunc(SA.Supply_Date) - MSC_ATP_ALLOC.G_Atf_Date),
6725                                                 1, p_family_id,
6726                                                 Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
6727                                                         'Y', SA.Original_Item_Id,
6728                                                         p_family_id)),
6729                                         p_org_id,
6730                                         null,
6731                                         null,
6732                                         TEMP.DEMAND_CLASS,
6733                                         TRUNC(SA.SUPPLY_DATE)),
6734                                         NULL,
6735                                         1,
6736                                         0)
6737                                 )                       col11, -- allocated_quantity
6738                         p_record_type                   col12, -- record_type
6739                         p_scenario_id                   col13, -- scenario_id
6740                         DECODE(SA.ORIGINAL_ORDER_TYPE,
6741                                 5, to_char(SA.PARENT_TRANSACTION_ID),
6742                                 SA.ORDER_NUMBER)        col14, -- disposition_name
6743                         TEMP.DEMAND_CLASS               col15, -- demand_class
6744                         p_uom_code                      col16, -- UOM Code
6745                         --bug3671294
6746                         msi.item_name                   col17, -- Item name
6747                         --p_inv_item_name                 col17, -- Item name
6748                         p_org_code                      col18, -- Org code
6749                         TEMP.PRIORITY                   col19, -- sysdate priroty
6750                         TEMP.ALLOCATION_PERCENT         col20,  -- sysdate allocation percent
6751                         p_sr_family_id                  col21,
6752                         l_null_num                      col22, -- Bug 3875786 - local variable used for NULL
6753                         l_null_num                      col23, -- Bug 3875786 - local variable used for NULL
6754                         l_null_date                     col24, -- Bug 3875786 - local variable used for NULL
6755                         SA.original_item_id             col25,
6756                         SA.ORIGINAL_ORDER_TYPE          col26,
6757                         SA.ALLOCATED_QUANTITY           col27,  -- unallocated quantity
6758                         l_null_char                     col28, --bug3263368 ORIG_CUSTOMER_SITE_NAME --Bug 3875786
6759                         l_null_char                     col29, --bug3263368 ORIG_CUSTOMER_NAME --Bug 3875786
6760                         l_null_char                     col30, --bug3263368 ORIG_DEMAND_CLASS --Bug 3875786
6761                         l_null_date                     col31  --bug3263368 ORIG_REQUEST_DATE -- Bug 3875786 - local variable used for NULL
6762 
6763                 FROM
6764                         MSC_ALLOC_SUPPLIES SA,
6765                         MSC_ALLOC_TEMP TEMP,
6766                         MSC_SYSTEM_ITEMS    msi --bug3671294
6767                 WHERE
6768                          SA.PLAN_ID = p_plan_id
6769                 AND      SA.SR_INSTANCE_ID = p_instance_id
6770                 AND      SA.INVENTORY_ITEM_ID in (p_member_id, p_family_id)
6771                 AND      SA.ORGANIZATION_ID = p_org_id
6772                 AND      SA.ALLOCATED_QUANTITY <> 0
6773                 --bug3671294 start
6774                 AND      msi.PLAN_ID = SA.PLAN_ID
6775                 AND      msi.SR_INSTANCE_ID = SA.SR_INSTANCE_ID
6776                 AND      msi.ORGANIZATION_ID = SA.ORGANIZATION_ID
6777                 AND      msi.INVENTORY_ITEM_ID = SA.ORIGINAL_ITEM_ID
6778                 --bug3671294 end
6779                 AND      TRUNC(SA.SUPPLY_DATE) >= DECODE(SA.ORIGINAL_ORDER_TYPE,
6780                                                         27, TRUNC(SYSDATE),
6781                                                         28, TRUNC(SYSDATE),
6782                                                         TRUNC(SA.SUPPLY_DATE))
6783                 AND      TRUNC(SA.SUPPLY_DATE) < NVL(p_itf, TRUNC(SA.SUPPLY_DATE) + 1)
6784                 );
6785         ELSIF p_type = User_Defined_CC THEN
6786                 INSERT INTO MRP_ATP_DETAILS_TEMP
6787                 (session_id, atp_level, inventory_item_id, organization_id, identifier1, identifier3,
6788                 supply_demand_type, supply_demand_date, supply_demand_quantity, supply_demand_source_type,
6789                 allocated_quantity, record_type, scenario_id, disposition_name, demand_class, class, customer_id,
6790                 customer_site_id, uom_code, inventory_item_name, organization_code, identifier2, identifier4,
6791                 Customer_Name, Customer_Site_Name, request_item_id, pf_display_flag, original_demand_quantity,
6792                 original_demand_date, original_item_id, original_supply_demand_type, unallocated_quantity,
6793                 ORIG_CUSTOMER_SITE_NAME,ORIG_CUSTOMER_NAME,ORIG_DEMAND_CLASS,ORIG_REQUEST_DATE ) --bug3263368
6794                 SELECT col1, col2, col3, col4, col5, col6, col7, col8, col9, col10,
6795                 col11, col12, col13, col14, col15, col16, col17, col18, col19, col20, col21, col22, col23, col24, col25,
6796                 col26, col27, col28, col29, col30, col31, col32,col33,col34,col35,col36
6797                 FROM
6798                 (SELECT p_session_id                            col1, -- session_id
6799                         p_level_id                              col2, -- level_id
6800                         p_sr_member_id                          col3, -- inventory_item_id
6801                         p_org_id                                col4, -- organization_id
6802                         p_instance_id                           col5, -- Identifier1
6803                         AD.PARENT_DEMAND_ID                     col6, -- Identifier3
6804                         1                                       col7, -- supply_demand_type
6805                         TRUNC(AD.DEMAND_DATE)                   col8, -- supply_demand_date
6806                         -1 * NVL(AD.DEMAND_QUANTITY,
6807                              AD.ALLOCATED_QUANTITY)             col9, -- supply_demand_quantity
6808                         AD.ORIGINATION_TYPE                     col10,-- supply_demand_source_type
6809                         -1 * AD.ALLOCATED_QUANTITY *
6810                                 DECODE(DECODE(AD.CUSTOMER_ID, NULL, NULL,
6811                                         0, NULL,
6812                                         decode(AD.origination_type,
6813                                                 6, decode(AD.source_organization_id,
6814                                                         NULL, MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(
6815                                                                 AD.CUSTOMER_ID, AD.SHIP_TO_SITE_ID,
6816                                                                 Decode(sign(trunc(AD.Demand_Date) - MSC_ATP_ALLOC.G_Atf_Date),
6817                                                                         1, p_family_id,
6818                                                                         Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
6819                                                                                 'Y', AD.Original_Item_Id,
6820                                                                                 p_family_id)),
6821                                                                 p_org_id, p_instance_id, TRUNC(AD.ORIGINAL_DEMAND_DATE),
6822                                                                 p_level_id, NULL),
6823                                                         -23453, MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(
6824                                                                 AD.CUSTOMER_ID, AD.SHIP_TO_SITE_ID,
6825                                                                 Decode(sign(trunc(AD.Demand_Date) - MSC_ATP_ALLOC.G_Atf_Date),
6826                                                                         1, p_family_id,
6827                                                                         Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
6828                                                                                 'Y', AD.Original_Item_Id,
6829                                                                                 p_family_id)),
6830                                                                 p_org_id, p_instance_id, TRUNC(AD.ORIGINAL_DEMAND_DATE),
6831                                                                 p_level_id, NULL),
6832                                                         AD.organization_id, MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(
6833                                                                 AD.CUSTOMER_ID, AD.SHIP_TO_SITE_ID,
6834                                                                 Decode(sign(trunc(AD.Demand_Date) - MSC_ATP_ALLOC.G_Atf_Date),
6835                                                                         1, p_family_id,
6836                                                                         Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
6837                                                                                 'Y', AD.Original_Item_Id,
6838                                                                                 p_family_id)),
6839                                                                 p_org_id, p_instance_id, TRUNC(AD.ORIGINAL_DEMAND_DATE),
6840                                                                 p_level_id, NULL),
6841                                                         NULL),
6842                                                 30, decode(AD.source_organization_id,
6843                                                         NULL, MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(
6844                                                                 AD.CUSTOMER_ID, AD.SHIP_TO_SITE_ID,
6845                                                                 Decode(sign(trunc(AD.Demand_Date) - MSC_ATP_ALLOC.G_Atf_Date),
6846                                                                         1, p_family_id,
6847                                                                         Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
6848                                                                                 'Y', AD.Original_Item_Id,
6849                                                                                 p_family_id)),
6850                                                                 p_org_id, p_instance_id, TRUNC(AD.ORIGINAL_DEMAND_DATE),
6851                                                                 p_level_id, NULL),
6852                                                         -23453, MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(
6853                                                                 AD.CUSTOMER_ID, AD.SHIP_TO_SITE_ID,
6854                                                                 Decode(sign(trunc(AD.Demand_Date) - MSC_ATP_ALLOC.G_Atf_Date),
6855                                                                         1, p_family_id,
6856                                                                         Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
6857                                                                                 'Y', AD.Original_Item_Id,
6858                                                                                 p_family_id)),
6859                                                                 p_org_id, p_instance_id, TRUNC(AD.ORIGINAL_DEMAND_DATE),
6860                                                                 p_level_id, NULL),
6861                                                         AD.organization_id, MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(
6862                                                                 AD.CUSTOMER_ID, AD.SHIP_TO_SITE_ID,
6863                                                                 Decode(sign(trunc(AD.Demand_Date) - MSC_ATP_ALLOC.G_Atf_Date),
6864                                                                         1, p_family_id,
6865                                                                         Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
6866                                                                                 'Y', AD.Original_Item_Id,
6867                                                                                 p_family_id)),
6868                                                                 p_org_id, p_instance_id, TRUNC(AD.ORIGINAL_DEMAND_DATE),
6869                                                                 p_level_id, NULL),
6870                                                         NULL),
6871                                                 MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(
6872                                                         AD.CUSTOMER_ID, AD.SHIP_TO_SITE_ID,
6873                                                         Decode(sign(trunc(AD.Demand_Date) - MSC_ATP_ALLOC.G_Atf_Date),
6874                                                                 1, p_family_id,
6875                                                                 Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
6876                                                                         'Y', AD.Original_Item_Id,
6877                                                                         p_family_id)),
6878                                                         p_org_id, p_instance_id,
6879                                                         TRUNC(AD.ORIGINAL_DEMAND_DATE),
6880                                                         p_level_id, NULL))),
6881                                         TEMP.LEVEL_3_DEMAND_CLASS, 1,
6882                                         MSC_AATP_FUNC.Get_Item_Demand_Alloc_Percent(p_plan_id,
6883                                                 AD.PARENT_DEMAND_ID,
6884                                                 TRUNC(AD.ORIGINAL_DEMAND_DATE),
6885                                                 AD.USING_ASSEMBLY_ITEM_ID,
6886                                                 DECODE(AD.SOURCE_ORGANIZATION_ID,
6887                                                 -23453, null,
6888                                                 AD.SOURCE_ORGANIZATION_ID),
6889                                                 Decode(sign(trunc(AD.Demand_Date) - MSC_ATP_ALLOC.G_Atf_Date),
6890                                                         1, p_family_id,
6891                                                         Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
6892                                                                 'Y', AD.Original_Item_Id,
6893                                                                 p_family_id)),
6894                                                 p_org_id,
6895                                                 p_instance_id,
6896                                                 AD.ORIGINATION_TYPE,
6897                                                 DECODE(AD.CUSTOMER_ID, NULL, TEMP.LEVEL_3_DEMAND_CLASS,
6898                                                         0, TEMP.LEVEL_3_DEMAND_CLASS,
6899                                                         decode(AD.origination_type,
6900                                                                 6, decode(AD.source_organization_id,
6901                                                                         NULL, MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(
6902                                                                                 AD.CUSTOMER_ID, AD.SHIP_TO_SITE_ID,
6903                                                                                 Decode(sign(trunc(AD.Demand_Date) - MSC_ATP_ALLOC.G_Atf_Date),
6904                                                                                         1, p_family_id,
6905                                                                                         Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
6906                                                                                                 'Y', AD.Original_Item_Id,
6907                                                                                                 p_family_id)),
6908                                                                                 p_org_id, p_instance_id, TRUNC(AD.ORIGINAL_DEMAND_DATE),
6909                                                                                 p_level_id, NULL),
6910                                                                         -23453, MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(
6911                                                                                 AD.CUSTOMER_ID, AD.SHIP_TO_SITE_ID,
6912                                                                                 Decode(sign(trunc(AD.Demand_Date) - MSC_ATP_ALLOC.G_Atf_Date),
6913                                                                                         1, p_family_id,
6914                                                                                         Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
6915                                                                                                 'Y', AD.Original_Item_Id,
6916                                                                                                 p_family_id)),
6917                                                                                 p_org_id, p_instance_id, TRUNC(AD.ORIGINAL_DEMAND_DATE),
6918                                                                                 p_level_id, NULL),
6919                                                                         AD.organization_id, MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(
6920                                                                                 AD.CUSTOMER_ID, AD.SHIP_TO_SITE_ID,
6921                                                                                 Decode(sign(trunc(AD.Demand_Date) - MSC_ATP_ALLOC.G_Atf_Date),
6922                                                                                         1, p_family_id,
6923                                                                                         Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
6924                                                                                                 'Y', AD.Original_Item_Id,
6925                                                                                                 p_family_id)),
6926                                                                                 p_org_id, p_instance_id, TRUNC(AD.ORIGINAL_DEMAND_DATE),
6927                                                                                 p_level_id, NULL),
6928                                                                         TEMP.LEVEL_3_DEMAND_CLASS),
6929                                                                 30, decode(AD.source_organization_id,
6930                                                                         NULL, MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(
6931                                                                                 AD.CUSTOMER_ID, AD.SHIP_TO_SITE_ID,
6932                                                                                 Decode(sign(trunc(AD.Demand_Date) - MSC_ATP_ALLOC.G_Atf_Date),
6933                                                                                         1, p_family_id,
6934                                                                                         Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
6935                                                                                                 'Y', AD.Original_Item_Id,
6936                                                                                                 p_family_id)),
6937                                                                                 p_org_id, p_instance_id, TRUNC(AD.ORIGINAL_DEMAND_DATE),
6938                                                                                 p_level_id, NULL),
6939                                                                         -23453, MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(
6940                                                                                 AD.CUSTOMER_ID, AD.SHIP_TO_SITE_ID,
6941                                                                                 Decode(sign(trunc(AD.Demand_Date) - MSC_ATP_ALLOC.G_Atf_Date),
6942                                                                                         1, p_family_id,
6943                                                                                         Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
6944                                                                                                 'Y', AD.Original_Item_Id,
6945                                                                                                 p_family_id)),
6946                                                                                 p_org_id, p_instance_id, TRUNC(AD.ORIGINAL_DEMAND_DATE),
6947                                                                                 p_level_id, NULL),
6948                                                                         AD.organization_id, MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(
6949                                                                                 AD.CUSTOMER_ID, AD.SHIP_TO_SITE_ID,
6950                                                                                 Decode(sign(trunc(AD.Demand_Date) - MSC_ATP_ALLOC.G_Atf_Date),
6951                                                                                         1, p_family_id,
6952                                                                                         Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
6953                                                                                                 'Y', AD.Original_Item_Id,
6954                                                                                                 p_family_id)),
6955                                                                                 p_org_id, p_instance_id, TRUNC(AD.ORIGINAL_DEMAND_DATE),
6956                                                                                 p_level_id, NULL),
6957                                                                         TEMP.LEVEL_3_DEMAND_CLASS),
6958                                                                 MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(
6959                                                                         AD.CUSTOMER_ID, AD.SHIP_TO_SITE_ID,
6960                                                                         Decode(sign(trunc(AD.Demand_Date) - MSC_ATP_ALLOC.G_Atf_Date),
6961                                                                                 1, p_family_id,
6962                                                                                 Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
6963                                                                                         'Y', AD.Original_Item_Id,
6964                                                                                         p_family_id)),
6965                                                                         p_org_id, p_instance_id,
6966                                                                         TRUNC(AD.ORIGINAL_DEMAND_DATE),
6967                                                                         p_level_id, NULL))),
6968                                                 TEMP.LEVEL_3_DEMAND_CLASS,
6969                                                 p_level_id))    col11, -- allocated_quantity
6970                         p_record_type                           col12, -- record_type
6971                         p_scenario_id                           col13, -- scenario_id
6972                         AD.ORDER_NUMBER                         col14, -- disposition_name
6973                         TEMP.LEVEL_3_DEMAND_CLASS               col15, -- demand_class
6974                         TEMP.LEVEL_1_DEMAND_CLASS               col16, -- class
6975                         TEMP.PARTNER_ID                         col17, -- partner_id
6976                         TEMP.PARTNER_SITE_ID                    col18, -- partner_site_id
6977                         p_uom_code                              col19, -- UOM Code
6978                         --bug3671294
6979                         msi.item_name                           col20, -- Item name
6980                         --p_inv_item_name                         col20, -- Item name
6981                         p_org_code                              col21, -- Org code
6982                         TEMP.LEVEL_3_DEMAND_CLASS_PRIORITY      col22, -- Level 3 priority
6983                         TEMP.ALLOCATION_PERCENT                 col23, -- Sysdate allocation percent
6984                         TEMP.customer_name                      col24, -- Customer Name
6985                         TEMP.customer_site_name                 col25, -- Customer Site Name
6986                         p_sr_member_id                          col26, -- request_item_id
6987                 	Decode(AD.inventory_item_id, p_family_id,
6988                 	        Decode(AD.original_item_id, p_member_id,
6989                 	                AD.Pf_Display_Flag,
6990                 	                Decode(sign(trunc(AD.Original_Demand_Date) - MSC_ATP_ALLOC.G_Atf_Date),
6991                 	                        1, AD.Pf_Display_Flag,
6992                 	                        1)),
6993                 	        AD.Pf_Display_Flag)             col27,
6994                         -1 * NVL(AD.DEMAND_QUANTITY,
6995                              AD.ALLOCATED_QUANTITY)*
6996                                 DECODE(DECODE(AD.CUSTOMER_ID, NULL, NULL,
6997                                         0, NULL,
6998                                         decode(AD.origination_type,
6999                                                 6, decode(AD.source_organization_id,
7000                                                         NULL, MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(
7001                                                                 AD.CUSTOMER_ID, AD.SHIP_TO_SITE_ID,
7002                                                                 Decode(sign(trunc(AD.Demand_Date) - MSC_ATP_ALLOC.G_Atf_Date),
7003                                                                         1, p_family_id,
7004                                                                         Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
7005                                                                                 'Y', AD.Original_Item_Id,
7006                                                                                 p_family_id)),
7007                                                                 p_org_id, p_instance_id, TRUNC(AD.ORIGINAL_DEMAND_DATE),
7008                                                                 p_level_id, NULL),
7009                                                         -23453, MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(
7010                                                                 AD.CUSTOMER_ID, AD.SHIP_TO_SITE_ID,
7011                                                                 Decode(sign(trunc(AD.Demand_Date) - MSC_ATP_ALLOC.G_Atf_Date),
7012                                                                         1, p_family_id,
7013                                                                         Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
7014                                                                                 'Y', AD.Original_Item_Id,
7015                                                                                 p_family_id)),
7016                                                                 p_org_id, p_instance_id, TRUNC(AD.ORIGINAL_DEMAND_DATE),
7017                                                                 p_level_id, NULL),
7018                                                         AD.organization_id, MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(
7019                                                                 AD.CUSTOMER_ID, AD.SHIP_TO_SITE_ID,
7020                                                                 Decode(sign(trunc(AD.Demand_Date) - MSC_ATP_ALLOC.G_Atf_Date),
7021                                                                         1, p_family_id,
7022                                                                         Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
7023                                                                                 'Y', AD.Original_Item_Id,
7024                                                                                 p_family_id)),
7025                                                                 p_org_id, p_instance_id, TRUNC(AD.ORIGINAL_DEMAND_DATE),
7026                                                                 p_level_id, NULL),
7027                                                         NULL),
7028                                                 30, decode(AD.source_organization_id,
7029                                                         NULL, MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(
7030                                                                 AD.CUSTOMER_ID, AD.SHIP_TO_SITE_ID,
7031                                                                 Decode(sign(trunc(AD.Demand_Date) - MSC_ATP_ALLOC.G_Atf_Date),
7032                                                                         1, p_family_id,
7033                                                                         Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
7034                                                                                 'Y', AD.Original_Item_Id,
7035                                                                                 p_family_id)),
7036                                                                 p_org_id, p_instance_id, TRUNC(AD.ORIGINAL_DEMAND_DATE),
7037                                                                 p_level_id, NULL),
7038                                                         -23453, MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(
7039                                                                 AD.CUSTOMER_ID, AD.SHIP_TO_SITE_ID,
7040                                                                 Decode(sign(trunc(AD.Demand_Date) - MSC_ATP_ALLOC.G_Atf_Date),
7041                                                                         1, p_family_id,
7042                                                                         Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
7043                                                                                 'Y', AD.Original_Item_Id,
7044                                                                                 p_family_id)),
7045                                                                 p_org_id, p_instance_id, TRUNC(AD.ORIGINAL_DEMAND_DATE),
7046                                                                 p_level_id, NULL),
7047                                                         AD.organization_id, MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(
7048                                                                 AD.CUSTOMER_ID, AD.SHIP_TO_SITE_ID,
7049                                                                 Decode(sign(trunc(AD.Demand_Date) - MSC_ATP_ALLOC.G_Atf_Date),
7050                                                                         1, p_family_id,
7051                                                                         Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
7052                                                                                 'Y', AD.Original_Item_Id,
7053                                                                                 p_family_id)),
7054                                                                 p_org_id, p_instance_id, TRUNC(AD.ORIGINAL_DEMAND_DATE),
7055                                                                 p_level_id, NULL),
7056                                                         NULL),
7057                                                 MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(
7058                                                         AD.CUSTOMER_ID, AD.SHIP_TO_SITE_ID,
7059                                                         Decode(sign(trunc(AD.Demand_Date) - MSC_ATP_ALLOC.G_Atf_Date),
7060                                                                 1, p_family_id,
7061                                                                 Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
7062                                                                         'Y', AD.Original_Item_Id,
7063                                                                         p_family_id)),
7064                                                         p_org_id, p_instance_id,
7065                                                         TRUNC(AD.ORIGINAL_DEMAND_DATE),
7066                                                         p_level_id, NULL))),
7067                                         TEMP.LEVEL_3_DEMAND_CLASS, 1,
7068                                         MSC_AATP_FUNC.Get_Item_Demand_Alloc_Percent(p_plan_id,
7069                                                 AD.PARENT_DEMAND_ID,
7070                                                 TRUNC(AD.ORIGINAL_DEMAND_DATE),
7071                                                 AD.USING_ASSEMBLY_ITEM_ID,
7072                                                 DECODE(AD.SOURCE_ORGANIZATION_ID,
7073                                                 -23453, null,
7074                                                 AD.SOURCE_ORGANIZATION_ID),
7075                                                 Decode(sign(trunc(AD.Demand_Date) - MSC_ATP_ALLOC.G_Atf_Date),
7076                                                         1, p_family_id,
7077                                                         Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
7078                                                                 'Y', AD.Original_Item_Id,
7079                                                                 p_family_id)),
7080                                                 p_org_id,
7081                                                 p_instance_id,
7082                                                 AD.ORIGINATION_TYPE,
7083                                                 DECODE(AD.CUSTOMER_ID, NULL, TEMP.LEVEL_3_DEMAND_CLASS,
7084                                                         0, TEMP.LEVEL_3_DEMAND_CLASS,
7085                                                         decode(AD.origination_type,
7086                                                                 6, decode(AD.source_organization_id,
7087                                                                         NULL, MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(
7088                                                                                 AD.CUSTOMER_ID, AD.SHIP_TO_SITE_ID,
7089                                                                                 Decode(sign(trunc(AD.Demand_Date) - MSC_ATP_ALLOC.G_Atf_Date),
7090                                                                                         1, p_family_id,
7091                                                                                         Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
7092                                                                                                 'Y', AD.Original_Item_Id,
7093                                                                                                 p_family_id)),
7094                                                                                 p_org_id, p_instance_id, TRUNC(AD.ORIGINAL_DEMAND_DATE),
7095                                                                                 p_level_id, NULL),
7096                                                                         -23453, MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(
7097                                                                                 AD.CUSTOMER_ID, AD.SHIP_TO_SITE_ID,
7098                                                                                 Decode(sign(trunc(AD.Demand_Date) - MSC_ATP_ALLOC.G_Atf_Date),
7099                                                                                         1, p_family_id,
7100                                                                                         Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
7101                                                                                                 'Y', AD.Original_Item_Id,
7102                                                                                                 p_family_id)),
7103                                                                                 p_org_id, p_instance_id, TRUNC(AD.ORIGINAL_DEMAND_DATE),
7104                                                                                 p_level_id, NULL),
7105                                                                         AD.organization_id, MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(
7106                                                                                 AD.CUSTOMER_ID, AD.SHIP_TO_SITE_ID,
7107                                                                                 Decode(sign(trunc(AD.Demand_Date) - MSC_ATP_ALLOC.G_Atf_Date),
7108                                                                                         1, p_family_id,
7109                                                                                         Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
7110                                                                                                 'Y', AD.Original_Item_Id,
7111                                                                                                 p_family_id)),
7112                                                                                 p_org_id, p_instance_id, TRUNC(AD.ORIGINAL_DEMAND_DATE),
7113                                                                                 p_level_id, NULL),
7114                                                                         TEMP.LEVEL_3_DEMAND_CLASS),
7115                                                                 30, decode(AD.source_organization_id,
7116                                                                         NULL, MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(
7117                                                                                 AD.CUSTOMER_ID, AD.SHIP_TO_SITE_ID,
7118                                                                                 Decode(sign(trunc(AD.Demand_Date) - MSC_ATP_ALLOC.G_Atf_Date),
7119                                                                                         1, p_family_id,
7120                                                                                         Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
7121                                                                                                 'Y', AD.Original_Item_Id,
7122                                                                                                 p_family_id)),
7123                                                                                 p_org_id, p_instance_id, TRUNC(AD.ORIGINAL_DEMAND_DATE),
7124                                                                                 p_level_id, NULL),
7125                                                                         -23453, MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(
7126                                                                                 AD.CUSTOMER_ID, AD.SHIP_TO_SITE_ID,
7127                                                                                 Decode(sign(trunc(AD.Demand_Date) - MSC_ATP_ALLOC.G_Atf_Date),
7128                                                                                         1, p_family_id,
7129                                                                                         Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
7130                                                                                                 'Y', AD.Original_Item_Id,
7131                                                                                                 p_family_id)),
7132                                                                                 p_org_id, p_instance_id, TRUNC(AD.ORIGINAL_DEMAND_DATE),
7133                                                                                 p_level_id, NULL),
7134                                                                         AD.organization_id, MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(
7135                                                                                 AD.CUSTOMER_ID, AD.SHIP_TO_SITE_ID,
7136                                                                                 Decode(sign(trunc(AD.Demand_Date) - MSC_ATP_ALLOC.G_Atf_Date),
7137                                                                                         1, p_family_id,
7138                                                                                         Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
7139                                                                                                 'Y', AD.Original_Item_Id,
7140                                                                                                 p_family_id)),
7141                                                                                 p_org_id, p_instance_id, TRUNC(AD.ORIGINAL_DEMAND_DATE),
7142                                                                                 p_level_id, NULL),
7143                                                                         TEMP.LEVEL_3_DEMAND_CLASS),
7144                                                                 MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(
7145                                                                         AD.CUSTOMER_ID, AD.SHIP_TO_SITE_ID,
7146                                                                         Decode(sign(trunc(AD.Demand_Date) - MSC_ATP_ALLOC.G_Atf_Date),
7147                                                                                 1, p_family_id,
7148                                                                                 Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
7149                                                                                         'Y', AD.Original_Item_Id,
7150                                                                                         p_family_id)),
7151                                                                         p_org_id, p_instance_id,
7152                                                                         TRUNC(AD.ORIGINAL_DEMAND_DATE),
7153                                                                         p_level_id, NULL))),
7154                                                 TEMP.LEVEL_3_DEMAND_CLASS,
7155                                                 p_level_id))    col28, -- original demand quantity
7156                         trunc(AD.original_demand_date)          col29, --Bug_3693892 added trunc
7157                         AD.original_item_id                     col30,
7158                         AD.original_origination_type            col31,
7159                         -1 * AD.ALLOCATED_QUANTITY              col32,  -- unallocated quantity
7160                         MTPS.LOCATION                           col33, --bug3263368
7161                         MTP.PARTNER_NAME                        col34, --bug3263368
7162                         AD.DEMAND_CLASS                         col35, --bug3263368
7163                         AD.REQUEST_DATE                         col36  --bug3263368
7164                 FROM
7165                         MSC_ALLOC_DEMANDS        AD,
7166                         MSC_ALLOC_HIERARCHY_TEMP TEMP,
7167                         MSC_TRADING_PARTNERS    MTP,--bug3263368
7168                         MSC_TRADING_PARTNER_SITES    MTPS, --bug3263368
7169                         MSC_SYSTEM_ITEMS    msi --bug3671294
7170                 WHERE
7171                         AD.PLAN_ID = p_plan_id
7172                         AND AD.SR_INSTANCE_ID = p_instance_id
7173                         AND AD.INVENTORY_ITEM_ID in (p_member_id, p_family_id)
7174                         AND AD.ORGANIZATION_ID = p_org_id
7175                         AND AD.ORIGINATION_TYPE <> 52 -- For summary enhancement
7176                         AND TRUNC(AD.DEMAND_DATE) < NVL(p_itf, TRUNC(AD.DEMAND_DATE) + 1)
7177                         AND AD.ALLOCATED_QUANTITY <> 0
7178                         --bug3671294 start
7179                         AND      msi.PLAN_ID = AD.PLAN_ID
7180                         AND      msi.SR_INSTANCE_ID = AD.SR_INSTANCE_ID
7181                         AND      msi.ORGANIZATION_ID = AD.ORGANIZATION_ID
7182                         AND      msi.INVENTORY_ITEM_ID = AD.ORIGINAL_ITEM_ID
7183                         --bug3671294 end
7184                         AND AD.SHIP_TO_SITE_ID  = MTPS.PARTNER_SITE_ID(+) --bug3263368
7185                         AND AD.CUSTOMER_ID = MTP.PARTNER_ID(+)--bug3263368
7186                 UNION ALL
7187                 SELECT  p_session_id                            col1, -- session_id
7188                         p_level_id                              col2, -- level_id
7189                         p_sr_member_id                          col3, -- inventory_item_id
7190                         p_org_id                                col4, -- organization_id
7191                         p_instance_id                           col5, -- Identifier1
7192                         SA.PARENT_TRANSACTION_ID                col6, -- Identifier3
7193                         2                                       col7, -- supply_demand_type
7194                         TRUNC(SA.SUPPLY_DATE)                   col8, -- supply_demand_date
7195                         NVL(SA.SUPPLY_QUANTITY,
7196                                 SA.ALLOCATED_QUANTITY)          col9, -- supply_demand_source_quantity
7197                         SA.ORDER_TYPE                           col10, -- supply_demand_source_type
7198                         SA.ALLOCATED_QUANTITY
7199                                 * DECODE(DECODE(SA.CUSTOMER_ID, NULL, NULL,
7200                                                 MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(
7201                                                   SA.CUSTOMER_ID,
7202                                                   SA.SHIP_TO_SITE_ID,
7203                                                   Decode(sign(trunc(SA.Supply_Date) - MSC_ATP_ALLOC.G_Atf_Date),
7204                                                         1, p_family_id,
7205                                                         Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
7206                                                                 'Y', SA.Original_Item_Id,
7207                                                                 p_family_id)),
7208                                                   p_org_id,
7209                                                   p_instance_id,
7210                                                   TRUNC(SA.SUPPLY_DATE),
7211                                                   p_level_id,
7212                                                   NULL)),
7213                                         TEMP.LEVEL_3_DEMAND_CLASS,
7214                                                 1,
7215                                         NULL,
7216                                                 NVL(MSC_AATP_FUNC.Get_DC_Alloc_Percent(
7217                                                 p_instance_id,
7218                                                 Decode(sign(trunc(SA.Supply_Date) - MSC_ATP_ALLOC.G_Atf_Date),
7219                                                         1, p_family_id,
7220                                                         Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
7221                                                                 'Y', SA.Original_Item_Id,
7222                                                                 p_family_id)),
7223                                                 p_org_id,
7224                                                 null,
7225                                                 null,
7226                                                 TEMP.LEVEL_3_DEMAND_CLASS,
7227                                                 TRUNC(SA.SUPPLY_DATE)), 1),
7228                                         DECODE(MSC_AATP_FUNC.Get_DC_Alloc_Percent(
7229                                                 p_instance_id,
7230                                                 Decode(sign(trunc(SA.Supply_Date) - MSC_ATP_ALLOC.G_Atf_Date),
7231                                                         1, p_family_id,
7232                                                         Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
7233                                                                 'Y', SA.Original_Item_Id,
7234                                                                 p_family_id)),
7235                                                 p_org_id,
7236                                                 null,
7237                                                 null,
7238                                                 TEMP.LEVEL_3_DEMAND_CLASS,
7239                                                 TRUNC(SA.SUPPLY_DATE)),
7240                                                 NULL, 1, 0)
7241                                         )                       col11, -- allocated_quantity
7242                         p_record_type                           col12, -- record_type
7243                         p_scenario_id                           col13, -- scenario_id
7244                         DECODE(SA.ORIGINAL_ORDER_TYPE,
7245                                 5, to_char(SA.PARENT_TRANSACTION_ID),
7246                                 SA.ORDER_NUMBER)                col14, -- disposition_name
7247                         TEMP.LEVEL_3_DEMAND_CLASS               col15, -- demand_class
7248                         TEMP.LEVEL_1_DEMAND_CLASS               col16, -- class
7249                         TEMP.PARTNER_ID                         col17, -- partner_id
7250                         TEMP.PARTNER_SITE_ID                    col18, -- partner_site_id
7251                         p_uom_code                              col19, -- UOM Code
7252                         --bug3671294
7253                         msi.item_name                           col20, -- Item name
7254                         --p_inv_item_name                         col20, -- Item name
7255                         p_org_code                              col21, -- Org code
7256                         TEMP.LEVEL_3_DEMAND_CLASS_PRIORITY      col22, -- Level 3 priority
7257                         TEMP.ALLOCATION_PERCENT                 col23, -- Sysdate allocation percent
7258                         TEMP.customer_name                      col24, -- Customer Name
7259                         TEMP.customer_site_name                 col25, -- Customer Site Name
7260                         p_sr_member_id                          col26, -- request_item_id
7261 		        l_null_num                              col27,
7262         	        l_null_num                              col28,
7263         	        l_null_date                             col29, -- Bug 3875786 - local variable used for NULL
7264         	        SA.Original_Item_Id                     col30,
7265         	        SA.ORIGINAL_ORDER_TYPE                  col31,
7266         	        SA.ALLOCATED_QUANTITY                   col32,  -- unallocated quantity
7267         	        l_null_char                             col33, --bug3263368 ORIG_CUSTOMER_SITE_NAME --Bug 3875786
7268         	        l_null_char                             col34, --bug3263368 ORIG_CUSTOMER_NAME --Bug 3875786
7269         	        l_null_char                             col35, --bug3263368 ORIG_DEMAND_CLASS --Bug 3875786
7270         	        l_null_date                             col36  --bug3263368 ORIG_REQUEST_DATE -- Bug 3875786 - local variable used for NULL
7271         	FROM
7272                         MSC_ALLOC_SUPPLIES       SA,
7273                         MSC_ALLOC_HIERARCHY_TEMP TEMP,
7274                         MSC_SYSTEM_ITEMS    msi --bug3671294
7275                 WHERE
7276                         SA.PLAN_ID = p_plan_id
7277                         AND SA.SR_INSTANCE_ID = p_instance_id
7278                         AND SA.INVENTORY_ITEM_ID in (p_member_id, p_family_id)
7279                         AND SA.ORGANIZATION_ID = p_org_id
7280                         AND SA.ALLOCATED_QUANTITY <> 0
7281                         --bug3671294 start
7282                         AND      msi.PLAN_ID = SA.PLAN_ID
7283                         AND      msi.SR_INSTANCE_ID = SA.SR_INSTANCE_ID
7284                         AND      msi.ORGANIZATION_ID = SA.ORGANIZATION_ID
7285                         AND      msi.INVENTORY_ITEM_ID = SA.ORIGINAL_ITEM_ID
7286                         --bug3671294 end
7287                         AND TRUNC(SA.SUPPLY_DATE) >= DECODE(SA.ORIGINAL_ORDER_TYPE,
7288                                                         27, TRUNC(SYSDATE),
7289                                                         28, TRUNC(SYSDATE),
7290                                                         TRUNC(SA.SUPPLY_DATE))
7291                         AND TRUNC(SA.SUPPLY_DATE) < NVL(p_itf, TRUNC(SA.SUPPLY_DATE) + 1)
7292                 );
7293         END IF;
7294 
7295         x_insert_count := SQL%ROWCOUNT;
7296 
7297 EXCEPTION
7298         WHEN OTHERS THEN
7299                 IF PG_DEBUG in ('Y', 'C') THEN
7300                         msc_sch_wb.atp_debug('Insert_SD_Into_Details_Temp: ' || 'Error code:' || to_char(sqlcode));
7301                 END IF;
7302                 x_return_status := FND_API.G_RET_STS_ERROR;
7303 
7304 END Insert_SD_Into_Details_Temp;
7305 
7306 /*--Populate_Original_Demand_Qty--------------------------------------------
7307 |  o  Called for population of original_demand_quantity column in
7308 |       demand priority AATP scenarios
7309 +-------------------------------------------------------------------------*/
7310 PROCEDURE Populate_Original_Demand_Qty(
7311 	p_table                         IN      NUMBER,
7312 	p_session_id                    IN      NUMBER,
7313         p_plan_id                       IN      NUMBER,
7314         p_demand_class                  IN      VARCHAR2,
7315         x_return_status                 OUT     NOCOPY VARCHAR2
7316 )
7317 IS
7318         -- local variables
7319 BEGIN
7320 
7321         IF PG_DEBUG in ('Y', 'C') THEN
7322                 msc_sch_wb.atp_debug('********** Begin Populate_Original_Demand_Qty Procedure **********');
7323                 msc_sch_wb.atp_debug('Populate_Original_Demand_Qty: ' || 'p_table: '|| to_char(p_table));
7324                 msc_sch_wb.atp_debug('Populate_Original_Demand_Qty: ' || 'p_session_id: '|| to_char(p_session_id));
7325         END IF;
7326 
7327         -- Initializing API return code
7328         x_return_status := FND_API.G_RET_STS_SUCCESS;
7329 
7330         /* Clear msc_alloc_temp before use */
7331         DELETE msc_alloc_temp;
7332 
7333         IF p_table = MADT THEN
7334 
7335                 /* Do netting in SQL and insert original demand qtys in alloc temp table*/
7336                 INSERT INTO MSC_ALLOC_TEMP(
7337                         demand_class,
7338                         demand_id,
7339                         supply_demand_quantity
7340                 )
7341                 (SELECT demand_class,
7342                         parent_demand_id,
7343                         sum(allocated_quantity)
7344                  FROM   msc_alloc_demands
7345                  WHERE  (demand_class, parent_demand_id) in
7346                                 (SELECT  demand_class,
7347                                          identifier3
7348                                  FROM    mrp_atp_details_temp
7349                                  WHERE   session_id = p_session_id
7350                                  AND     supply_demand_type = 1
7351                                  AND     record_type = 2)
7352                  AND    plan_id = p_plan_id
7353                  GROUP BY
7354                         demand_class,
7355                         parent_demand_id
7356                 );
7357 
7358                 /* Now update original demand qtys in mrp_atp_details_temp table*/
7359                 UPDATE  mrp_atp_details_temp madt
7360                 SET     madt.original_demand_quantity =
7361                                (select  -1*mat.supply_demand_quantity
7362                                 from    msc_alloc_temp mat
7363                                 where   mat.demand_class = madt.demand_class
7364                                 and     mat.demand_id = madt.identifier3)
7365                 WHERE   madt.session_id = p_session_id
7366                 AND     madt.supply_demand_type = 1
7367                 AND     madt.record_type = 2;
7368 
7369         ELSIF p_table = MASDDT THEN
7370 
7371                 /* Do netting in SQL and insert original demand qtys in alloc temp table*/
7372                 INSERT INTO MSC_ALLOC_TEMP(
7373                         demand_id,
7374                         supply_demand_quantity
7375                 )
7376                 SELECT  parent_demand_id,
7377                         sum(allocated_quantity)
7378                 FROM    msc_alloc_demands
7379                 WHERE   parent_demand_id in
7380                                 (SELECT  identifier3
7381                                  FROM    msc_atp_sd_details_temp
7382                                  WHERE   supply_demand_type = 1)
7383                 AND     plan_id = p_plan_id
7384                 AND     demand_class = nvl(p_demand_class, demand_class)
7385                 GROUP BY
7386                         parent_demand_id;
7387 
7388                 /* Now update original demand qtys in msc_atp_sd_details_temp table*/
7389                 UPDATE  msc_atp_sd_details_temp masddt
7390                 SET     masddt.original_demand_quantity =
7391                                (select  -1*mat.supply_demand_quantity
7392                                 from    msc_alloc_temp mat
7393                                 where   mat.demand_id = masddt.identifier3)
7394                 WHERE   masddt.supply_demand_type = 1;
7395 
7396         END IF;
7397 
7398         IF PG_DEBUG in ('Y', 'C') THEN
7399                 msc_sch_wb.atp_debug('**********End Populate_Original_Demand_Qty Procedure************');
7400         END IF;
7401 
7402 EXCEPTION
7403         WHEN OTHERS THEN
7404                 IF PG_DEBUG in ('Y', 'C') THEN
7405                         msc_sch_wb.atp_debug('Populate_Original_Demand_Qty: ' || 'Error occurred: ' || to_char(sqlcode) || ':' || SQLERRM);
7406                 END IF;
7407                 x_return_status := FND_API.G_RET_STS_ERROR;
7408 
7409 END Populate_Original_Demand_Qty;
7410 
7411 /*--PF_Atp_Consume----------------------------------------------------------
7412 |  o  Called for consumption in product family scenarios.
7413 |  o  This procedure combines various procedures for consumption we have in
7414 |       one procedure.
7415 |  o  Logic is similar only difference being that we do not do b/w and f/w
7416 |       consumption across aggregate time fence. So for a negative bucket
7417 |       we exit from inner loop during backward consumption when crossing
7418 |       aggregate time fence.
7419 |  o  Also this procedure incorporates better algorithm for consumption.
7420 |  o  This procedure does following depending on the value of input variable
7421 |       p_consumption_type:
7422 |       - Backward(1) : Backward consumption
7423 |       - Forward(2) : Forward consumption
7424 |       - Cum(3) : Accumulation
7425 |       - Bw_Fw_Cum(4) : Backward consumption, forward consumption and accumulation
7426 |       - Bw_Fw(5) : Backward consumption and forward consumption
7427 +-------------------------------------------------------------------------*/
7428 PROCEDURE PF_Atp_Consume(
7429         p_atp_qty                       IN OUT  NOCOPY MRP_ATP_PUB.number_arr,
7430         x_return_status                 OUT     NOCOPY VARCHAR2,
7431         p_atp_period                    IN      MRP_ATP_PUB.date_arr  :=NULL,
7432         p_consumption_type              IN      NUMBER := Bw_Fw_Cum,
7433         p_atf_date                      IN      DATE := NULL
7434 )
7435 IS
7436         -- local variables
7437         i                               NUMBER;
7438         j                               NUMBER;
7439         l_fw_nullifying_bucket_index    NUMBER := 1;
7440 
7441 
7442 BEGIN
7443 
7444         IF PG_DEBUG in ('Y', 'C') THEN
7445                 msc_sch_wb.atp_debug('********** Begin PF_Atp_Consume Procedure **********');
7446                 msc_sch_wb.atp_debug('PF_Atp_Consume: ' || 'p_consumption_type: '|| to_char(p_consumption_type));
7447                 msc_sch_wb.atp_debug('PF_Atp_Consume: ' || 'p_atf_date: '|| to_char(p_atf_date));
7448         END IF;
7449 
7450         -- Initializing API return code
7451         x_return_status := FND_API.G_RET_STS_SUCCESS;
7452 
7453         /* p_consumption_type
7454          * 1 = b/w consumption
7455          * 2 = f/w consumption
7456          * 3 = accumulation
7457          * 4 = b/w, f/w consumption and accumulation
7458          * 5 = b/w and f/w consumption
7459          */
7460         IF p_consumption_type = Backward THEN
7461                 -- this for loop will do backward consumption
7462                 FOR i in 2..p_atp_qty.COUNT LOOP
7463                         -- backward consumption when neg atp quantity occurs
7464                         IF (p_atp_qty(i) < 0 ) THEN
7465                                 j := i - 1;
7466                                 WHILE ((j>0) and (p_atp_qty(j)>=0))  LOOP
7467                                         IF ((p_atp_period(i)>p_atf_date) and (p_atp_period(j)<=p_atf_date)) THEN
7468                                                 -- exit loop when crossing time fence
7469                                                 j := 0;
7470                                         ELSIF (p_atp_qty(j) = 0) THEN
7471                                                 --  backward one more period
7472                                                 j := j-1 ;
7473                                         ELSE
7474                                                 IF (p_atp_qty(j) + p_atp_qty(i) < 0) THEN
7475                                                         -- not enough to cover the shortage
7476                                                         p_atp_qty(i) := p_atp_qty(i) + p_atp_qty(j);
7477                                                         p_atp_qty(j) := 0;
7478                                                         j := j-1;
7479                                                 ELSE
7480                                                         -- enough to cover the shortage
7481                                                         p_atp_qty(j) := p_atp_qty(j) + p_atp_qty(i);
7482                                                         p_atp_qty(i) := 0;
7483                                                         j := -1;
7484                                                 END IF;
7485                                         END IF;
7486                                 END LOOP;
7487                         END IF;
7488                 END LOOP;
7489         ELSIF p_consumption_type = Forward THEN
7490                 -- this for loop will do forward consumption
7491                 FOR i in 1..p_atp_qty.COUNT LOOP
7492                         -- forward consumption when neg atp quantity occurs
7493                         IF (p_atp_qty(i) < 0 ) THEN
7494                                 j := i + 1;
7495                                 WHILE (j <= p_atp_qty.COUNT)  LOOP
7496                                         IF ((p_atp_period(i)<=p_atf_date) and (p_atp_period(j)>p_atf_date)) THEN
7497                                                 -- exit loop when crossing time fence
7498                                                 j := p_atp_qty.COUNT+1;
7499                                         ELSIF (p_atp_qty(j) <= 0 OR j < l_fw_nullifying_bucket_index) THEN
7500                                                 --  forward one more period if next period is negative or
7501                                                 -- less than nullifying bucket index
7502                                                 j := j+1 ;
7503                                         ELSE
7504                                                 -- You can get something from here. So set the nullifying bucket index
7505                                                 l_fw_nullifying_bucket_index := j;
7506                                                 IF (p_atp_qty(j) + p_atp_qty(i) < 0) THEN
7507                                                         -- not enough to cover the shortage
7508                                                         p_atp_qty(i) := p_atp_qty(i) + p_atp_qty(j);
7509                                                         p_atp_qty(j) := 0;
7510                                                         j := j+1;
7511                                                 ELSE
7512                                                         -- enough to cover the shortage
7513                                                         p_atp_qty(j) := p_atp_qty(j) + p_atp_qty(i);
7514                                                         p_atp_qty(i) := 0;
7515                                                         j := p_atp_qty.COUNT + 1;
7516                                                 END IF;
7517                                         END IF;
7518                                 END LOOP;
7519                         END IF;
7520                 END LOOP;
7521         ELSIF (p_consumption_type = Bw_Fw_Cum) OR (p_consumption_type = Bw_Fw) THEN
7522                 -- this for loop will do backward consumption
7523                 FOR i in 1..p_atp_qty.COUNT LOOP
7524                         -- Do backward consumption only when neg bucket and current index
7525                         -- greater l_fw_nullifying_bucket_index.
7526                         IF (p_atp_qty(i) < 0 AND i > l_fw_nullifying_bucket_index) THEN
7527                                 j := i - 1;
7528                                 WHILE ((j >= l_fw_nullifying_bucket_index) and (p_atp_qty(j)>=0))  LOOP
7529                                         IF ((p_atp_period(i)>p_atf_date) and (p_atp_period(j)<=p_atf_date)) THEN
7530                                                 -- exit loop when crossing time fence
7531                                                 j := 0;
7532                                         ELSIF (p_atp_qty(j) = 0) THEN
7533                                                 --  backward one more period
7534                                                 j := j-1 ;
7535                                         ELSE
7536                                                 IF (p_atp_qty(j) + p_atp_qty(i) < 0) THEN
7537                                                         -- not enough to cover the shortage
7538                                                         p_atp_qty(i) := p_atp_qty(i) + p_atp_qty(j);
7539                                                         p_atp_qty(j) := 0;
7540                                                         j := j-1;
7541                                                 ELSE
7542                                                         -- enough to cover the shortage
7543                                                         p_atp_qty(j) := p_atp_qty(j) + p_atp_qty(i);
7544                                                         p_atp_qty(i) := 0;
7545                                                         j := -1;
7546                                                 END IF;
7547                                         END IF;
7548                                 END LOOP;
7549                         END IF;
7550 
7551                         -- forward consumption when neg atp quantity occurs
7552                         IF (p_atp_qty(i) < 0 ) THEN
7553                                 j := i + 1;
7554                                 WHILE (j <= p_atp_qty.COUNT)  LOOP
7555                                         IF ((p_atp_period(i)<=p_atf_date) and (p_atp_period(j)>p_atf_date)) THEN
7556                                                 -- exit loop when crossing time fence
7557                                                 j := p_atp_qty.COUNT+1;
7558                                         ELSIF (p_atp_qty(j) <= 0 OR j < l_fw_nullifying_bucket_index) THEN
7559                                                 --  forward one more period if next period is negative or
7560                                                 -- less than nullifying bucket index
7561                                                 j := j+1 ;
7562                                         ELSE
7563                                                 -- You can get something from here. So set the nullifying bucket index
7564                                                 l_fw_nullifying_bucket_index := j;
7565                                                 IF (p_atp_qty(j) + p_atp_qty(i) < 0) THEN
7566                                                         -- not enough to cover the shortage
7567                                                         p_atp_qty(i) := p_atp_qty(i) + p_atp_qty(j);
7568                                                         p_atp_qty(j) := 0;
7569                                                         j := j+1;
7570                                                 ELSE
7571                                                         -- enough to cover the shortage
7572                                                         p_atp_qty(j) := p_atp_qty(j) + p_atp_qty(i);
7573                                                         p_atp_qty(i) := 0;
7574                                                         j := p_atp_qty.COUNT + 1;
7575                                                 END IF;
7576                                         END IF;
7577                                 END LOOP;
7578                         END IF;
7579                 END LOOP;
7580         END IF;
7581 
7582         IF (p_consumption_type = Cum) or (p_consumption_type = Bw_Fw_Cum) THEN
7583         --Bug 3919388 (Cum is decreasing)
7584           IF ( p_atp_qty.count > 0 ) THEN
7585              IF ( p_atp_qty(1) < 0) THEN
7586                  p_atp_qty(1) := 0;
7587              END IF;
7588           END IF;
7589            -- this for loop will do the acculumation
7590           FOR i in 2..p_atp_qty.COUNT LOOP
7591              p_atp_qty(i) := GREATEST(p_atp_qty(i), 0) + GREATEST(p_atp_qty(i-1), 0); --Bug 3919388 (Cum is decreasing)
7592           END LOOP;
7593        END IF;
7594 
7595         IF PG_DEBUG in ('Y', 'C') THEN
7596                 msc_sch_wb.atp_debug('**********End PF_Atp_Consume Procedure************');
7597         END IF;
7598 
7599 EXCEPTION
7600         WHEN OTHERS THEN
7601                 IF PG_DEBUG in ('Y', 'C') THEN
7602                         msc_sch_wb.atp_debug('PF_Atp_Consume: ' || 'Error occurred: ' || to_char(sqlcode) || ':' || SQLERRM);
7603                 END IF;
7604                 x_return_status := FND_API.G_RET_STS_ERROR;
7605 
7606 END PF_Atp_Consume;
7607 
7608 /*--PF_Atp_Alloc_Consume-------------------------------------------------------
7609 |  o  Called for consumption in demand priority AATP scenario.
7610 |  o  Differences from Atp_Alloc_Consume:
7611 |       -  We do not do b/w and f/w consumption across aggregate time fence.
7612 |            So for a negative bucket we exit from inner loop during backward
7613 |            consumption when crossing aggregate time fence.
7614 |       -  Incorporates better algorithm for consumption.
7615 +----------------------------------------------------------------------------*/
7616 PROCEDURE PF_Atp_Alloc_Consume(
7617         p_atp_qty               IN OUT  NOCOPY MRP_ATP_PUB.number_arr,
7618         p_atp_period            IN      MRP_ATP_PUB.date_arr,
7619         p_atp_dc_tab	        IN      MRP_ATP_PUB.char80_arr,
7620         p_atf_date              IN      DATE,
7621         x_dc_list_tab	        OUT     NOCOPY MRP_ATP_PUB.char80_arr,
7622         x_dc_start_index        OUT     NOCOPY MRP_ATP_PUB.number_arr,
7623         x_dc_end_index          OUT     NOCOPY MRP_ATP_PUB.number_arr,
7624         x_return_status         OUT     NOCOPY VARCHAR2
7625 )
7626 IS
7627         i                               NUMBER;
7628         j                               NUMBER;
7629         l_fw_nullifying_bucket_index    NUMBER := 1;
7630 
7631 
7632 BEGIN
7633         IF PG_DEBUG in ('Y', 'C') THEN
7634                 msc_sch_wb.atp_debug('**********Begin PF_Atp_Alloc_Consume Procedure************');
7635         END IF;
7636 
7637         -- Initializing API return code
7638         x_return_status := FND_API.G_RET_STS_SUCCESS;
7639 
7640         x_dc_list_tab := MRP_ATP_PUB.Char80_Arr();
7641         x_dc_start_index := MRP_ATP_PUB.Number_Arr();
7642         x_dc_end_index := MRP_ATP_PUB.Number_Arr();
7643 
7644         x_dc_list_tab.EXTEND;
7645         x_dc_start_index.EXTEND;
7646         x_dc_end_index.EXTEND;
7647 
7648         IF PG_DEBUG in ('Y', 'C') THEN
7649                 msc_sch_wb.atp_debug('PF_Atp_Alloc_Consume: ' || 'after extend : ' || p_atp_dc_tab(p_atp_dc_tab.FIRST));
7650         END IF;
7651 
7652         x_dc_list_tab(1) := p_atp_dc_tab(p_atp_dc_tab.FIRST);
7653         x_dc_start_index(1) := 1;
7654         IF PG_DEBUG in ('Y', 'C') THEN
7655                 msc_sch_wb.atp_debug('PF_Atp_Alloc_Consume: ' || 'after assign : ' || x_dc_list_tab(1));
7656                 msc_sch_wb.atp_debug('PF_Atp_Alloc_Consume: ' || 'start index : ' || x_dc_start_index(1));
7657         END IF;
7658 
7659         FOR i in 1..p_atp_dc_tab.COUNT LOOP
7660                 IF PG_DEBUG in ('Y', 'C') THEN
7661                         msc_sch_wb.atp_debug('PF_Atp_Alloc_Consume: ' || 'index : ' || i);
7662                         msc_sch_wb.atp_debug('PF_Atp_Alloc_Consume: ' || 'x_dc_list_tab : ' || x_dc_list_tab(x_dc_list_tab.COUNT));
7663                         msc_sch_wb.atp_debug('PF_Atp_Alloc_Consume: ' || 'p_atp_dc_tab : ' || p_atp_dc_tab(i));
7664                 END IF;
7665 
7666                 -- If demand class changes, re-initialize these variables.
7667                 IF p_atp_dc_tab(i) <> x_dc_list_tab(x_dc_list_tab.COUNT) THEN
7668                         x_dc_end_index(x_dc_end_index.COUNT) := i - 1;
7669                         IF PG_DEBUG in ('Y', 'C') THEN
7670                                 msc_sch_wb.atp_debug('PF_Atp_Alloc_Consume: ' || 'inside IF');
7671                                 msc_sch_wb.atp_debug('PF_Atp_Alloc_Consume: ' || 'end index : ' || x_dc_end_index(x_dc_end_index.COUNT));
7672                         END IF;
7673                         x_dc_list_tab.EXTEND;
7674                         x_dc_start_index.EXTEND;
7675                         x_dc_end_index.EXTEND;
7676                         x_dc_list_tab(x_dc_list_tab.COUNT) := p_atp_dc_tab(i);
7677                         x_dc_start_index(x_dc_start_index.COUNT) := i;
7678                 ELSE
7679                         x_dc_end_index(x_dc_end_index.COUNT) := i;
7680                 END IF;
7681 
7682                 IF PG_DEBUG in ('Y', 'C') THEN
7683                         msc_sch_wb.atp_debug('PF_Atp_Alloc_Consume: ' || 'start index : ' || x_dc_start_index(x_dc_start_index.COUNT));
7684                         msc_sch_wb.atp_debug('PF_Atp_Alloc_Consume: ' || 'end index : ' || x_dc_end_index(x_dc_end_index.COUNT));
7685                 END IF;
7686                 -- Do backward consumption only when neg bucket and current index
7687                 -- greater l_fw_nullifying_bucket_index.
7688                 IF (p_atp_qty(i) < 0 AND i > l_fw_nullifying_bucket_index) THEN
7689                         j := i - 1;
7690                         WHILE ((j >= x_dc_start_index(x_dc_start_index.COUNT)) and (p_atp_qty(j) >= 0))  LOOP
7691                                 IF ((p_atp_period(i) > p_atf_date) and (p_atp_period(j) <= p_atf_date)) THEN
7692                                         -- exit loop when crossing time fence
7693                                         j := 0;
7694                                 ELSIF (p_atp_qty(j) = 0) THEN
7695                                         --  backward one more period
7696                                         j := j-1 ;
7697                                 ELSE
7698                                         IF (p_atp_qty(j) + p_atp_qty(i) < 0) THEN
7699                                                 -- not enough to cover the shortage
7700                                                 p_atp_qty(i) := p_atp_qty(i) + p_atp_qty(j);
7701                                                 p_atp_qty(j) := 0;
7702                                                 j := j-1;
7703                                         ELSE
7704                                                 -- enough to cover the shortage
7705                                                 p_atp_qty(j) := p_atp_qty(j) + p_atp_qty(i);
7706                                                 p_atp_qty(i) := 0;
7707                                                 j := -1;
7708                                         END IF;
7709                                 END IF;
7710                         END LOOP;
7711                 END IF;
7712 
7713                 IF PG_DEBUG in ('Y', 'C') THEN
7714                         msc_sch_wb.atp_debug('PF_Atp_Alloc_Consume: ' || 'before forward consumption');
7715                 END IF;
7716 
7717                 -- forward consumption when neg atp quantity occurs
7718                 IF (p_atp_qty(i) < 0 ) THEN
7719                         j := i + 1;
7720                         IF PG_DEBUG in ('Y', 'C') THEN
7721                                 msc_sch_wb.atp_debug('PF_Atp_Alloc_Consume: ' || 'in forward consumption : '  || i || ':' || j);
7722                                 msc_sch_wb.atp_debug('PF_Atp_Alloc_Consume: ' || 'in forward : '  || p_atp_dc_tab.COUNT);
7723                         END IF;
7724 
7725                         IF j < p_atp_dc_tab.COUNT THEN
7726                                 IF PG_DEBUG in ('Y', 'C') THEN
7727                                         msc_sch_wb.atp_debug('PF_Atp_Alloc_Consume: ' || 'in j : '  || p_atp_dc_tab.COUNT);
7728                                 END IF;
7729                                 WHILE (p_atp_dc_tab(j) = x_dc_list_tab(x_dc_list_tab.COUNT))  LOOP
7730                                         IF ((p_atp_period(i) <= p_atf_date) and (p_atp_period(j) > p_atf_date)) THEN
7731                                                 -- exit loop when crossing time fence
7732                                                 EXIT;
7733                                         ELSIF (p_atp_qty(j) <= 0 OR j < l_fw_nullifying_bucket_index) THEN
7734                                                 --  forward one more period
7735                                                 j := j+1 ;
7736                                         ELSE
7737                                                 -- You can get something from here. So set the nullifying bucket index
7738                                                 l_fw_nullifying_bucket_index := j;
7739                                                 IF (p_atp_qty(j) + p_atp_qty(i) < 0) THEN
7740                                                         -- not enough to cover the shortage
7741                                                         p_atp_qty(i) := p_atp_qty(i) + p_atp_qty(j);
7742                                                         p_atp_qty(j) := 0;
7743                                                         j := j + 1;
7744                                                 ELSE
7745                                                         -- enough to cover the shortage
7746                                                         p_atp_qty(j) := p_atp_qty(j) + p_atp_qty(i);
7747                                                         p_atp_qty(i) := 0;
7748                                                         EXIT;
7749                                                 END IF;
7750                                         END IF;
7751                                         IF j > p_atp_dc_tab.COUNT THEN
7752                                                 EXIT;
7753                                         END IF;
7754                                 END LOOP;
7755                         END IF;
7756                 END IF;
7757         END LOOP;
7758 
7759         x_dc_end_index(x_dc_end_index.count) := p_atp_dc_tab.count;
7760 
7761         IF PG_DEBUG in ('Y', 'C') THEN
7762                 FOR i in 1..x_dc_list_tab.COUNT LOOP
7763                         msc_sch_wb.atp_debug('PF_Atp_Alloc_Consume: ' ||  'DC:start:end - ' || x_dc_list_tab(i) || ':' ||
7764                                 x_dc_start_index(i) || ':' ||
7765                                 x_dc_end_index(i));
7766                 END LOOP;
7767 
7768                 msc_sch_wb.atp_debug('PF_Atp_Alloc_Consume: ' || 'x_dc_list_tab : ' || x_dc_list_tab.COUNT);
7769         END IF;
7770 
7771         -- this for loop will do atp consume on each dc
7772         FOR j in 1..x_dc_list_tab.COUNT LOOP
7773         --Bug 3919388 (Cum is decreasing)
7774                 IF ( p_atp_qty(x_dc_start_index(j)) < 0) THEN
7775                      p_atp_qty(x_dc_start_index(j)) := 0;
7776                 END IF;
7777                 FOR i in (x_dc_start_index(j) + 1)..x_dc_end_index(j) LOOP
7778                         IF PG_DEBUG in ('Y', 'C') THEN
7779                                 msc_sch_wb.atp_debug('PF_Atp_Alloc_Consume: ' || 'inside accumulation : ' || i);
7780                         END IF;
7781                         --Bug 3919388 (Cum is decreasing)
7782                         p_atp_qty(i) := GREATEST(p_atp_qty(i), 0) + GREATEST(p_atp_qty(i-1),0);
7783                 END LOOP;
7784         END LOOP; 	--FOR i in 1..x_dc_list_tab.COUNT LOOP
7785 
7786         IF PG_DEBUG in ('Y', 'C') THEN
7787                 msc_sch_wb.atp_debug('**********End PF_Atp_Alloc_Consume Procedure************');
7788         END IF;
7789 
7790 EXCEPTION
7791         WHEN OTHERS THEN
7792                 IF PG_DEBUG in ('Y', 'C') THEN
7793                         msc_sch_wb.atp_debug('PF_Atp_Alloc_Consume: ' || 'Error occurred: ' || to_char(sqlcode) || ':' || SQLERRM);
7794                 END IF;
7795                 x_return_status := FND_API.G_RET_STS_ERROR;
7796 
7797 END PF_Atp_Alloc_Consume;
7798 
7799 /*--Get_Period_Data_From_Sd_Temp--------------------------------------------
7800 |  o  This procedure is called from Item_Alloc_Cum_Atp and
7801 |       Item_Pre_Allocated_Atp procedures to get the period data from
7802 |       msc_atp_sd_details_temp table.
7803 |  o  Differences from the one in MSC_ATP_PROC:
7804 |       -  For Total_Demand_Quantity only demands with Pf_Display_Flag equal
7805 |            to 1 are looked at. Demand quantity is picked from
7806 |            Original_Demand_Quantity column.
7807 |  o  For Total_Bucketed_Demand_Quantity all demands are looked at.
7808 +-------------------------------------------------------------------------*/
7809 PROCEDURE Get_Period_Data_From_Sd_Temp(
7810         x_atp_period                    OUT     NOCOPY MRP_ATP_PUB.ATP_Period_Typ,
7811         x_return_status                 OUT     NOCOPY VARCHAR2
7812 ) IS
7813         i			NUMBER;
7814         j			NUMBER;
7815 
7816 BEGIN
7817 
7818         IF PG_DEBUG in ('Y', 'C') THEN
7819            msc_sch_wb.atp_debug('PROCEDURE Get_Period_Data_From_Sd_Temp');
7820         END IF;
7821 
7822         -- Initializing API return code
7823         x_return_status := FND_API.G_RET_STS_SUCCESS;
7824 
7825         SELECT  SD_View.ATP_level
7826                 ,SD_View.scenario_id
7827                 ,SD_View.inventory_item_id
7828                 ,SD_View.request_item_id
7829                 ,SD_View.organization_id
7830                 ,SD_View.supplier_id
7831                 ,SD_View.supplier_site_id
7832                 ,SD_View.department_id
7833                 ,SD_View.resource_id
7834                 ,SD_View.supply_demand_date
7835                 ,SD_View.identifier1
7836                 ,SD_View.identifier2
7837                 ,SUM(SD_View.demand_quantity)
7838                 ,SUM(SD_View.bucketed_demand_quantity)
7839                 ,SUM(SD_View.supply_quantity)
7840                 ,SUM(SD_View.period_quantity)
7841         BULK COLLECT INTO
7842                 x_atp_period.Level,
7843                 x_atp_period.Scenario_Id,
7844                 x_atp_period.Inventory_Item_Id,
7845                 x_atp_period.Request_Item_Id,
7846                 x_atp_period.Organization_id,
7847                 x_atp_period.Supplier_ID,
7848                 x_atp_period.Supplier_Site_ID,
7849                 x_atp_period.Department_id,
7850                 x_atp_period.Resource_id,
7851                 x_atp_period.Period_Start_Date,
7852                 x_atp_period.Identifier1,
7853                 x_atp_period.Identifier2,
7854                 x_atp_period.Total_Demand_Quantity,
7855                 x_atp_period.Total_Bucketed_Demand_Quantity,
7856                 x_atp_period.Total_Supply_Quantity,
7857                 x_atp_period.Period_Quantity
7858         FROM (
7859                 SELECT  ATP_level
7860                         ,scenario_id
7861                         ,inventory_item_id
7862                         ,request_item_id
7863                         ,organization_id
7864                         ,supplier_id
7865                         ,supplier_site_id
7866                         ,department_id
7867                         ,resource_id
7868                         ,trunc(supply_demand_date) supply_demand_date --Bug_3693892 added trunc
7869                         ,identifier1
7870                         ,identifier2
7871                         ,(DECODE(supply_demand_type, 1,
7872                                  DECODE(pf_display_flag, 1,
7873                                         --Bug_3693892 added trunc
7874                                         DECODE(trunc(original_demand_date), trunc(supply_demand_date),
7875                                                original_demand_quantity, 0),
7876                                         0),
7877                                  0)) demand_quantity
7878                         ,(DECODE(supply_demand_type, 1,
7879                                  allocated_quantity,
7880                                  0)) bucketed_demand_quantity
7881                         ,(DECODE(supply_demand_type, 2,
7882                                  allocated_quantity,
7883                                  0)) supply_quantity
7884                         ,allocated_quantity period_quantity
7885                 FROM    msc_atp_sd_details_temp
7886 
7887                 UNION ALL
7888 
7889                 SELECT
7890                         ATP_level
7891                         ,scenario_id
7892                         ,inventory_item_id
7893                         ,request_item_id
7894                         ,organization_id
7895                         ,supplier_id
7896                         ,supplier_site_id
7897                         ,department_id
7898                         ,resource_id
7899                         ,trunc(original_demand_date) supply_demand_date --Bug_3693892 added trunc
7900                         ,identifier1
7901                         ,identifier2
7902                         ,original_demand_quantity demand_quantity
7903                         ,0 bucketed_demand_quantity
7904                         ,0 supply_quantity
7905                         ,0 period_quantity
7906                 FROM    msc_atp_sd_details_temp
7907                 WHERE   supply_demand_type = 1
7908                 AND     pf_display_flag = 1
7909                 AND     trunc(supply_demand_date) <> trunc(original_demand_date) --Bug_3693892 added trunc
7910         ) SD_View
7911         GROUP BY
7912                 SD_View.supply_demand_date
7913                 ,SD_View.ATP_level
7914                 ,SD_View.scenario_id
7915                 ,SD_View.inventory_item_id
7916                 ,SD_View.request_item_id
7917                 ,SD_View.organization_id
7918                 ,SD_View.supplier_id
7919                 ,SD_View.supplier_site_id
7920                 ,SD_View.department_id
7921                 ,SD_View.resource_id
7922                 ,SD_View.identifier1
7923                 ,SD_View.identifier2
7924         ORDER BY
7925                 SD_View.supply_demand_date;
7926 
7927      -- set the period end dates and
7928      -- extend the remaining fields to ensure same behaviour as before
7929      i := x_atp_period.Period_Start_Date.COUNT;
7930 
7931      x_atp_period.Identifier.EXTEND(i);
7932      x_atp_period.Pegging_Id.EXTEND(i);
7933      x_atp_period.End_Pegging_Id.EXTEND(i);
7934      x_atp_period.Period_End_Date.EXTEND(i);
7935      x_atp_period.From_Location_Id.EXTEND(i);
7936      x_atp_period.From_Organization_Id.EXTEND(i);
7937      x_atp_period.Ship_Method.EXTEND(i);
7938      x_atp_period.To_Location_Id.EXTEND(i);
7939      x_atp_period.To_Organization_Id.EXTEND(i);
7940      x_atp_period.Uom.EXTEND(i);
7941 
7942      FOR j IN 1..(i-1) LOOP
7943 	x_atp_period.Period_End_Date(j) :=
7944 		x_atp_period.Period_Start_Date(j+1) - 1;
7945      END LOOP;
7946 
7947 EXCEPTION
7948         WHEN OTHERS THEN
7949                 IF PG_DEBUG in ('Y', 'C') THEN
7950                         msc_sch_wb.atp_debug('Get_Period_Data_From_Sd_Temp: ' || 'Error occurred: ' || to_char(sqlcode) || ':' || SQLERRM);
7951                 END IF;
7952                 x_return_status := FND_API.G_RET_STS_ERROR;
7953 
7954 END Get_Period_Data_From_Sd_Temp;
7955 
7956 /*--Get_Unalloc_Data_From_Sd_Temp-------------------------------------------
7957 |  o  Called from Item_Alloc_Cum_Atp procedure for Rule based Allocated Time
7958 |       Phased PF ATP (AATP Forward Consumption Method 2).
7959 |  o  This is similar to previous procedure only difference being that we
7960 |       also return unallocated quantities.
7961 +-------------------------------------------------------------------------*/
7962 PROCEDURE Get_Unalloc_Data_From_Sd_Temp(
7963         x_atp_period                    OUT     NOCOPY MRP_ATP_PUB.ATP_Period_Typ,
7964         p_unallocated_atp		IN      OUT NOCOPY MRP_ATP_PVT.ATP_Info,
7965         x_return_status 		OUT     NOCOPY VARCHAR2
7966 ) IS
7967         i			NUMBER;
7968         j			NUMBER;
7969 
7970 BEGIN
7971 
7972         IF PG_DEBUG in ('Y', 'C') THEN
7973                 msc_sch_wb.atp_debug('PROCEDURE Get_Unalloc_Data_From_Sd_Temp');
7974         END IF;
7975 
7976         -- initialize API return status to success
7977         x_return_status := FND_API.G_RET_STS_SUCCESS;
7978 
7979         -- do netting for unallocated qty also
7980         SELECT  SD_View.ATP_level
7981                 ,SD_View.scenario_id
7982                 ,SD_View.inventory_item_id
7983                 ,SD_View.request_item_id
7984                 ,SD_View.organization_id
7985                 ,SD_View.supplier_id
7986                 ,SD_View.supplier_site_id
7987                 ,SD_View.department_id
7988                 ,SD_View.resource_id
7989                 ,SD_View.supply_demand_date
7990                 ,SD_View.identifier1
7991                 ,SD_View.identifier2
7992                 ,SUM(SD_View.demand_quantity)
7993                 ,SUM(SD_View.bucketed_demand_quantity)
7994                 ,SUM(SD_View.supply_quantity)
7995                 ,SUM(SD_View.period_quantity)
7996                 ,SUM(SD_View.unallocated_quantity)
7997         BULK COLLECT INTO
7998                 x_atp_period.Level,
7999                 x_atp_period.Scenario_Id,
8000                 x_atp_period.Inventory_Item_Id,
8001                 x_atp_period.Request_Item_Id,
8002                 x_atp_period.Organization_id,
8003                 x_atp_period.Supplier_ID,
8004                 x_atp_period.Supplier_Site_ID,
8005                 x_atp_period.Department_id,
8006                 x_atp_period.Resource_id,
8007                 x_atp_period.Period_Start_Date,
8008                 x_atp_period.Identifier1,
8009                 x_atp_period.Identifier2,
8010                 x_atp_period.Total_Demand_Quantity,
8011                 x_atp_period.Total_Bucketed_Demand_Quantity,
8012                 x_atp_period.Total_Supply_Quantity,
8013                 x_atp_period.Period_Quantity,
8014                 p_unallocated_atp.atp_qty
8015         FROM (
8016                 SELECT  ATP_level
8017                         ,scenario_id
8018                         ,inventory_item_id
8019                         ,request_item_id
8020                         ,organization_id
8021                         ,supplier_id
8022                         ,supplier_site_id
8023                         ,department_id
8024                         ,resource_id
8025                         ,trunc(supply_demand_date) supply_demand_date --Bug_3693892 added trunc
8026                         ,identifier1
8027                         ,identifier2
8028                         ,DECODE(supply_demand_type, 1,
8029                                  DECODE(pf_display_flag, 1,
8030                                         --Bug_3693892 added trunc
8031                                         DECODE(trunc(original_demand_date), trunc(supply_demand_date),
8032                                                original_demand_quantity, 0),
8033                                         0),
8034                                  0) demand_quantity
8035                         ,DECODE(supply_demand_type, 1,
8036                                  allocated_quantity,
8037                                  0) bucketed_demand_quantity
8038                         ,DECODE(supply_demand_type, 2,
8039                                  allocated_quantity,
8040                                  0) supply_quantity
8041                         ,allocated_quantity period_quantity
8042                         ,unallocated_quantity
8043                 FROM    msc_atp_sd_details_temp
8044 
8045                 UNION ALL
8046 
8047                 SELECT
8048                         ATP_level
8049                         ,scenario_id
8050                         ,inventory_item_id
8051                         ,request_item_id
8052                         ,organization_id
8053                         ,supplier_id
8054                         ,supplier_site_id
8055                         ,department_id
8056                         ,resource_id
8057                         ,trunc(original_demand_date) supply_demand_date --Bug_3693892 added trunc
8058                         ,identifier1
8059                         ,identifier2
8060                         ,original_demand_quantity demand_quantity
8061                         ,0 bucketed_demand_quantity
8062                         ,0 supply_quantity
8063                         ,0 period_quantity
8064                         ,0 unallocated_quantity
8065                 FROM    msc_atp_sd_details_temp
8066                 WHERE   supply_demand_type = 1
8067                 AND     pf_display_flag = 1
8068                 AND     trunc(supply_demand_date) <> trunc(original_demand_date) --Bug_3693892 added trunc
8069         ) SD_View
8070         GROUP BY
8071                 SD_View.supply_demand_date
8072                 ,SD_View.ATP_level
8073                 ,SD_View.scenario_id
8074                 ,SD_View.inventory_item_id
8075                 ,SD_View.request_item_id
8076                 ,SD_View.organization_id
8077                 ,SD_View.supplier_id
8078                 ,SD_View.supplier_site_id
8079                 ,SD_View.department_id
8080                 ,SD_View.resource_id
8081                 ,SD_View.identifier1
8082                 ,SD_View.identifier2
8083         ORDER BY
8084                 SD_View.supply_demand_date;
8085 
8086 
8087      -- set the period end dates and
8088      -- extend the remaining fields to ensure same behaviour as before
8089      i := x_atp_period.Period_Start_Date.COUNT;
8090 
8091      x_atp_period.Identifier.EXTEND(i);
8092      x_atp_period.Pegging_Id.EXTEND(i);
8093      x_atp_period.End_Pegging_Id.EXTEND(i);
8094      x_atp_period.Period_End_Date.EXTEND(i);
8095      x_atp_period.From_Location_Id.EXTEND(i);
8096      x_atp_period.From_Organization_Id.EXTEND(i);
8097      x_atp_period.Ship_Method.EXTEND(i);
8098      x_atp_period.To_Location_Id.EXTEND(i);
8099      x_atp_period.To_Organization_Id.EXTEND(i);
8100      x_atp_period.Uom.EXTEND(i);
8101 
8102      FOR j IN 1..(i-1) LOOP
8103 	x_atp_period.Period_End_Date(j) :=
8104 		x_atp_period.Period_Start_Date(j+1) - 1;
8105      END LOOP;
8106 
8107 EXCEPTION
8108         WHEN OTHERS THEN
8109                 IF PG_DEBUG in ('Y', 'C') THEN
8110                         msc_sch_wb.atp_debug('Get_Unalloc_Data_From_Sd_Temp: ' || 'Error code:' || to_char(sqlcode));
8111                 END IF;
8112                 x_return_status := FND_API.G_RET_STS_ERROR;
8113 
8114 END Get_Unalloc_Data_From_Sd_Temp;
8115 
8116 /*--Get_Period_From_Details_Temp--------------------------------------------
8117 |  o  Called from Compute_Allocation_Details in time phased pf scenarios.
8118 |  o  This function returns the period data from mrp_atp_details_temp.
8119 +-------------------------------------------------------------------------*/
8120 PROCEDURE Get_Period_From_Details_Temp(
8121         p_type                          IN      INTEGER,
8122         p_inv_item_id                   IN      NUMBER,
8123         p_org_id                        IN      NUMBER,
8124         p_instance_id                   IN      NUMBER,
8125         p_scenario_id                   IN      NUMBER,
8126         p_level_id                      IN      NUMBER,
8127         p_record_type                   IN      PLS_INTEGER,
8128         p_session_id                    IN      NUMBER,
8129         x_atp_period                    OUT     NOCOPY MRP_ATP_PUB.ATP_Period_Typ,
8130         x_return_status                 OUT     NOCOPY VARCHAR2
8131 ) IS
8132 
8133 BEGIN
8134 
8135         IF PG_DEBUG in ('Y', 'C') THEN
8136                 msc_sch_wb.atp_debug('PROCEDURE Get_Period_From_Details_Temp');
8137         END IF;
8138 
8139         -- initialize API return status to success
8140         x_return_status := FND_API.G_RET_STS_SUCCESS;
8141 
8142         IF p_type = Demand_Priority THEN
8143                 SELECT
8144                         final.col1,
8145                         final.col2,
8146                         SUM(final.col3),
8147                         SUM(final.col4),
8148                         SUM(final.col5),
8149                         SUM(final.col6),
8150                         SUM(final.col7),
8151                         SUM(final.col8),
8152                         p_inv_item_id,
8153                         p_org_id,
8154                         p_instance_id,
8155                         p_scenario_id,
8156                         p_level_id,
8157                         null,           -- Initialize period end date with null
8158                         0,              -- Initialize backward_forward_quantity with 0
8159                         0               -- Initialize cumulative quantity with 0
8160                 BULK COLLECT INTO
8161                         x_atp_period.Demand_Class,
8162                         x_atp_period.Period_Start_Date,
8163                         x_atp_period.Allocated_Supply_Quantity,
8164                         x_atp_period.Supply_Adjustment_Quantity,
8165                         x_atp_period.Total_Supply_Quantity,
8166                         x_atp_period.Total_Demand_Quantity,
8167                         x_atp_period.Total_Bucketed_Demand_Quantity,
8168                         x_atp_period.Period_Quantity,
8169                         x_atp_period.Inventory_Item_Id,
8170                         x_atp_period.Organization_Id,
8171                         x_atp_period.Identifier1,
8172                         x_atp_period.Scenario_Id,
8173                         x_atp_period.Level,
8174                         x_atp_period.Period_End_Date,
8175                         x_atp_period.Backward_Forward_Quantity,
8176                         x_atp_period.Cumulative_Quantity
8177                 FROM
8178                 (
8179                 SELECT DEMAND_CLASS                                                     col1, --Bug_3693892 added trunc
8180                         trunc(SUPPLY_DEMAND_DATE)                                              col2,
8181                         DECODE(SUPPLY_DEMAND_TYPE, 2,
8182                                 DECODE(ORIGINAL_SUPPLY_DEMAND_TYPE,
8183                                                 48, 0,
8184                                                 ALLOCATED_QUANTITY),
8185                                 0)                                                      col3, -- Allocated Supply Quantity
8186                         DECODE(SUPPLY_DEMAND_TYPE, 2,
8187                                 DECODE(ORIGINAL_SUPPLY_DEMAND_TYPE,
8188                                                 48,  ALLOCATED_QUANTITY,
8189                                                 0),
8190                                 0)                                                      col4, -- Supply Adjustment Quantity
8191                         DECODE(SUPPLY_DEMAND_TYPE, 2, ALLOCATED_QUANTITY, 0)            col5, -- Total Supply
8192                         DECODE(SUPPLY_DEMAND_TYPE, 1,
8193                                   DECODE(PF_DISPLAY_FLAG, 1,
8194                                     --Bug_3693892 added trunc
8195                                     DECODE(trunc(ORIGINAL_DEMAND_DATE), trunc(SUPPLY_DEMAND_DATE),
8196                                        ORIGINAL_DEMAND_QUANTITY, 0),
8197                                   0),
8198                                0)                                                       col6, -- Total Demand
8199                         DECODE(SUPPLY_DEMAND_TYPE, 1, ALLOCATED_QUANTITY, 0)            col7, -- Total Bucketed Demand
8200                         ALLOCATED_QUANTITY                                              col8  -- Period Quantity
8201                 FROM
8202                         MRP_ATP_DETAILS_TEMP
8203                 WHERE
8204                         SESSION_ID = p_session_id
8205                         AND RECORD_TYPE = p_record_type
8206 
8207                 UNION ALL
8208 
8209                 SELECT DEMAND_CLASS                                                     col1,
8210                        trunc(ORIGINAL_DEMAND_DATE)                                      col2, --Bug_3693892 added trunc
8211                         0                                                               col3, -- Allocated Supply Quantity
8212                         0                                                               col4, -- Supply Adjustment Quantity
8213                         0                                                               col5, -- Total Supply
8214                         ORIGINAL_DEMAND_QUANTITY                                        col6, -- Total Demand
8215                         0                                                               col7, -- Total Bucketed Demand
8216                         0                                                               col8  -- Period Quantity
8217                 FROM
8218                         MRP_ATP_DETAILS_TEMP
8219                 WHERE
8220                         SESSION_ID = p_session_id
8221                         AND RECORD_TYPE = p_record_type
8222                         AND SUPPLY_DEMAND_TYPE = 1
8223                         AND PF_DISPLAY_FLAG = 1
8224                         AND trunc(SUPPLY_DEMAND_DATE) <> trunc(ORIGINAL_DEMAND_DATE) --Bug_3693892 added trunc
8225                 ) final
8226                 GROUP BY
8227                         final.col1,
8228                         final.col2,
8229                         p_inv_item_id,
8230                         p_org_id,
8231                         p_instance_id,
8232                         p_scenario_id,
8233                         p_level_id
8234                 ORDER BY
8235                         final.col1,
8236                         final.col2
8237                         ;
8238         ELSIF p_type = User_Defined_DC THEN
8239                 SELECT
8240                         final.col1,
8241                         final.col2,
8242                         SUM(final.col3),
8243                         SUM(final.col4),
8244                         SUM(final.col5),
8245                         SUM(final.col6),
8246                         p_inv_item_id,
8247                         p_org_id,
8248                         p_instance_id,
8249                         p_scenario_id,
8250                         p_level_id,
8251                         null,
8252                         0,
8253                         0,
8254                         final.col7,
8255                         SUM(final.col8),
8256                         SUM(final.col9),
8257                         SUM(final.col10),
8258                         SUM(final.col11),
8259                         final.col12
8260                 BULK COLLECT INTO
8261                         x_atp_period.Demand_Class,
8262                         x_atp_period.Period_Start_Date,
8263                         x_atp_period.Total_Supply_Quantity,
8264                         x_atp_period.Total_Demand_Quantity,
8265                         x_atp_period.Total_Bucketed_Demand_Quantity,
8266                         x_atp_period.Period_Quantity,
8267                         x_atp_period.Inventory_Item_Id,
8268                         x_atp_period.Organization_Id,
8269                         x_atp_period.Identifier1,
8270                         x_atp_period.Scenario_Id,
8271                         x_atp_period.Level,
8272                         x_atp_period.Period_End_Date,
8273                         x_atp_period.Cumulative_Quantity,
8274                         x_atp_period.Demand_Adjustment_Quantity,
8275                         x_atp_period.Identifier2,
8276                         x_atp_period.Unallocated_Supply_Quantity,
8277                         x_atp_period.Unallocated_Demand_Quantity,
8278                         x_atp_period.Unalloc_Bucketed_Demand_Qty,
8279                         x_atp_period.Unallocated_Net_Quantity,
8280                         x_atp_period.Identifier4
8281                 FROM
8282                 (
8283                 SELECT  DEMAND_CLASS                                                    col1,
8284                         trunc(SUPPLY_DEMAND_DATE)                                       col2, --Bug_3693892 added trunc
8285                         DECODE(SUPPLY_DEMAND_TYPE, 2, ALLOCATED_QUANTITY, 0)            col3,
8286                         DECODE(SUPPLY_DEMAND_TYPE, 1,
8287                                   DECODE(PF_DISPLAY_FLAG, 1,
8288                                     --Bug_3693892 added trunc
8289                                     DECODE(trunc(ORIGINAL_DEMAND_DATE), trunc(SUPPLY_DEMAND_DATE),
8290                                        ORIGINAL_DEMAND_QUANTITY, 0),
8291                                   0),
8292                                0)                                                       col4, -- Total Demand
8293                         DECODE(SUPPLY_DEMAND_TYPE, 1, ALLOCATED_QUANTITY, 0)            col5, -- Total Bucketed Demand
8294                         ALLOCATED_QUANTITY                                              col6,
8295                         IDENTIFIER2                                                     col7,
8296                         DECODE(SUPPLY_DEMAND_TYPE, 2, UNALLOCATED_QUANTITY, 0)          col8,
8297                         DECODE(SUPPLY_DEMAND_TYPE, 1,
8298                                   DECODE(PF_DISPLAY_FLAG, 1,
8299                                     --Bug_3693892 added trunc
8300                                     DECODE(trunc(ORIGINAL_DEMAND_DATE), trunc(SUPPLY_DEMAND_DATE),
8301                                        SUPPLY_DEMAND_QUANTITY, 0),
8302                                   0),
8303                                0)                                                       col9,  -- Unallocated Demand
8304                         DECODE(SUPPLY_DEMAND_TYPE, 1, UNALLOCATED_QUANTITY, 0)          col10, -- Unallocated Bucketed Demand
8305                         UNALLOCATED_QUANTITY                                            col11, -- Unallocated Net
8306                         IDENTIFIER4                                                     col12
8307                 FROM    MRP_ATP_DETAILS_TEMP
8308                 WHERE   SESSION_ID = p_session_id
8309                 AND     RECORD_TYPE = p_record_type
8310 
8311                 UNION ALL
8312 
8313                 SELECT  DEMAND_CLASS                                                    col1,
8314                         trunc(ORIGINAL_DEMAND_DATE)                                     col2, --Bug_3693892 added trunc
8315                         0                                                               col3,
8316                         ORIGINAL_DEMAND_QUANTITY                                        col4,  -- Total Demand
8317                         0                                                               col5,
8318                         0                                                               col6,
8319                         IDENTIFIER2                                                     col7,
8320                         0                                                               col8,  -- Period Quantity
8321                         SUPPLY_DEMAND_QUANTITY                                          col9,
8322                         0                                                               col10,
8323                         0                                                               col11,
8324                         IDENTIFIER4                                                     col12
8325                 FROM
8326                         MRP_ATP_DETAILS_TEMP
8327                 WHERE
8328                         SESSION_ID = p_session_id
8329                         AND RECORD_TYPE = p_record_type
8330                         AND SUPPLY_DEMAND_TYPE = 1
8331                         AND PF_DISPLAY_FLAG = 1
8332                         AND trunc(SUPPLY_DEMAND_DATE) <> trunc(ORIGINAL_DEMAND_DATE) --Bug_3693892 added trunc
8333                 ) final
8334                 GROUP BY
8335                         final.col1,
8336                         final.col2,
8337                         p_inv_item_id,
8338                         p_org_id,
8339                         p_instance_id,
8340                         p_scenario_id,
8341                         p_level_id,
8342                         final.col7,
8343                         final.col12
8344                 ORDER BY
8345                         final.col7 asc,
8346                         final.col12 desc,
8347                         final.col1 asc,
8348                         final.col2
8349                         ;
8350         ELSIF p_type = User_Defined_CC THEN
8351                 SELECT
8352                         final.col1,
8353                         final.col2,
8354                         SUM(final.col3),
8355                         SUM(final.col4),
8356                         SUM(final.col5),
8357                         SUM(final.col6),
8358                         p_inv_item_id,
8359                         p_org_id,
8360                         p_instance_id,
8361                         p_scenario_id,
8362                         p_level_id,
8363                         null,
8364                         0,
8365                         0,
8366                         final.col7,
8367                         final.col8,
8368                         final.col9,
8369                         final.col10,
8370                         SUM(final.col11),
8371                         SUM(final.col12),
8372                         SUM(final.col13),
8373                         SUM(final.col14),
8374                         final.col15
8375                 BULK COLLECT INTO
8376                         x_atp_period.Demand_Class,
8377                         x_atp_period.Period_Start_Date,
8378                         x_atp_period.Total_Supply_Quantity,
8379                         x_atp_period.Total_Demand_Quantity,
8380                         x_atp_period.Total_Bucketed_Demand_Quantity,
8381                         x_atp_period.Period_Quantity,
8382                         x_atp_period.Inventory_Item_Id,
8383                         x_atp_period.Organization_Id,
8384                         x_atp_period.Identifier1,
8385                         x_atp_period.Scenario_Id,
8386                         x_atp_period.Level,
8387                         x_atp_period.Period_End_Date,
8388                         x_atp_period.Cumulative_Quantity,
8389                         x_atp_period.Demand_Adjustment_Quantity,
8390                         x_atp_period.Identifier2,
8391                         x_atp_period.Identifier4,
8392                         x_atp_period.Class,
8393                         x_atp_period.Customer_Id,
8394                         x_atp_period.Unallocated_Supply_Quantity,
8395                         x_atp_period.Unallocated_Demand_Quantity,
8396                         x_atp_period.Unalloc_Bucketed_Demand_Qty,
8397                         x_atp_period.Unallocated_Net_Quantity,
8398                         x_atp_period.Customer_Site_Id
8399                 FROM
8400                 (
8401                 SELECT  DEMAND_CLASS                                                    col1,  --Bug_3693892 added trunc
8402                         trunc(SUPPLY_DEMAND_DATE)                                              col2,
8403                         DECODE(SUPPLY_DEMAND_TYPE, 2, ALLOCATED_QUANTITY, 0)            col3,
8404                         DECODE(SUPPLY_DEMAND_TYPE, 1,
8405                                   DECODE(PF_DISPLAY_FLAG, 1,
8406                                     --Bug_3693892 added trunc
8407                                     DECODE(trunc(ORIGINAL_DEMAND_DATE), trunc(SUPPLY_DEMAND_DATE),
8408                                        ORIGINAL_DEMAND_QUANTITY, 0),
8409                                   0),
8410                                0)                                                       col4, -- Total Demand
8411                         DECODE(SUPPLY_DEMAND_TYPE, 1, ALLOCATED_QUANTITY, 0)            col5, -- Total Bucketed Demand
8412                         ALLOCATED_QUANTITY                                              col6,
8413                         IDENTIFIER2                                                     col7,
8414                         IDENTIFIER4                                                     col8,
8415                         CLASS                                                           col9,
8416                         CUSTOMER_ID                                                     col10,
8417                         DECODE(SUPPLY_DEMAND_TYPE, 2, UNALLOCATED_QUANTITY, 0)          col11,
8418                         DECODE(SUPPLY_DEMAND_TYPE, 1,
8419                                   DECODE(PF_DISPLAY_FLAG, 1,
8420                                     --Bug_3693892 added trunc
8421                                     DECODE(trunc(ORIGINAL_DEMAND_DATE), trunc(SUPPLY_DEMAND_DATE),
8422                                        SUPPLY_DEMAND_QUANTITY, 0),
8423                                   0),
8424                                0)                                                       col12, -- Unallocated Demand
8425                         DECODE(SUPPLY_DEMAND_TYPE, 1, UNALLOCATED_QUANTITY, 0)          col13, -- Unallocated Bucketed Demand
8426                         UNALLOCATED_QUANTITY                                            col14, -- Unallocated Net
8427                         CUSTOMER_SITE_ID                                                col15
8428                 FROM    MRP_ATP_DETAILS_TEMP
8429                 WHERE   SESSION_ID = p_session_id
8430                 AND     RECORD_TYPE = p_record_type
8431 
8432                 UNION ALL
8433 
8434                 SELECT  DEMAND_CLASS                                                    col1,
8435                         trunc(ORIGINAL_DEMAND_DATE)                                     col2, --Bug_3693892 added trunc
8436                         0                                                               col3,
8437                         ORIGINAL_DEMAND_QUANTITY                                        col4,  -- Total Demand
8438                         0                                                               col5,
8439                         0                                                               col6,
8440                         IDENTIFIER2                                                     col7,
8441                         IDENTIFIER4                                                     col8,
8442                         CLASS                                                           col9,
8443                         CUSTOMER_ID                                                     col10,
8444                         0                                                               col11,
8445                         SUPPLY_DEMAND_QUANTITY                                          col12,
8446                         0                                                               col13,
8447                         0                                                               col14,
8448                         CUSTOMER_SITE_ID                                                col15
8449                 FROM
8450                         MRP_ATP_DETAILS_TEMP
8451                 WHERE
8452                         SESSION_ID = p_session_id
8453                         AND RECORD_TYPE = p_record_type
8454                         AND SUPPLY_DEMAND_TYPE = 1
8455                         AND PF_DISPLAY_FLAG = 1
8456                         AND trunc(SUPPLY_DEMAND_DATE) <> trunc(ORIGINAL_DEMAND_DATE)  --Bug_3693892 added trunc
8457                 ) final
8458                 GROUP BY
8459                         final.col1,
8460                         final.col2,
8461                         p_inv_item_id,
8462                         p_org_id,
8463                         p_instance_id,
8464                         p_scenario_id,
8465                         p_level_id,
8466                         final.col7,
8467                         final.col8,
8468                         final.col9,
8469                         final.col10,
8470                         final.col15
8471                 ORDER BY
8472                         trunc(final.col7,-3),        -- Customer class priority
8473                         final.col9,                  -- Customer class
8474                         trunc(final.col7,-2),        -- Customer priority
8475                         final.col10,                 -- Customer
8476                         final.col7,                  -- Customer site priority
8477                         final.col15,
8478                         final.col2
8479                         ;
8480         END IF;
8481 
8482 EXCEPTION
8483         WHEN OTHERS THEN
8484                 IF PG_DEBUG in ('Y', 'C') THEN
8485                         msc_sch_wb.atp_debug('Get_Period_From_Details_Temp: ' || 'Error code:' || to_char(sqlcode));
8486                 END IF;
8487                 x_return_status := FND_API.G_RET_STS_ERROR;
8488 
8489 END Get_Period_From_Details_Temp;
8490 
8491 /*--Get_Pf_Atp_Item_Id------------------------------------------------------
8492 |  o  This function returns the source id of the family item if the item
8493 |       passed belongs to an atpable family.
8494 |  o  Otherwise it returns the same item id.
8495 +-------------------------------------------------------------------------*/
8496 FUNCTION Get_Pf_Atp_Item_Id(
8497         p_instance_id            IN  NUMBER,
8498         p_plan_id                IN  NUMBER,
8499         p_inventory_item_id      IN  NUMBER,
8500         p_organization_id        IN  NUMBER
8501 )
8502 RETURN NUMBER
8503 IS
8504         l_pf_atp_item_id      NUMBER;
8505 
8506 BEGIN
8507         IF PG_DEBUG in ('Y', 'C') THEN
8508                 msc_sch_wb.atp_debug('*********Begin function Get_Pf_Atp_Item_Id ********');
8509                 msc_sch_wb.atp_debug('Get_Pf_Atp_Item_Id: ' ||  'p_instance_id = ' ||to_char(p_instance_id));
8510                 msc_sch_wb.atp_debug('Get_Pf_Atp_Item_Id: ' ||  'p_plan_id = ' ||to_char(p_plan_id));
8511                 msc_sch_wb.atp_debug('Get_Pf_Atp_Item_Id: ' ||  'p_inventory_item_id = ' ||to_char(p_inventory_item_id));
8512                 msc_sch_wb.atp_debug('Get_Pf_Atp_Item_Id: ' ||  'p_organization_id = ' ||to_char(p_organization_id));
8513         END IF;
8514 
8515         SELECT  DECODE(i2.bom_item_type,
8516                   5, DECODE(i2.atp_flag,
8517                      'N', i1.sr_inventory_item_id,
8518                      i2.sr_inventory_item_id),
8519                   i1.sr_inventory_item_id
8520                 )
8521         INTO    l_pf_atp_item_id
8522         FROM    msc_system_items i2,
8523                 msc_system_items i1
8524         WHERE   i1.sr_inventory_item_id = p_inventory_item_id
8525         AND     i1.organization_id = p_organization_id
8526         AND     i1.plan_id = p_plan_id
8527         AND     i1.sr_instance_id = p_instance_id
8528         AND     i2.inventory_item_id = DECODE(i1.product_family_id,
8529                                               NULL, i1.inventory_item_id,
8530                                               -23453, i1.inventory_item_id,
8531                                               i1.product_family_id)
8532         AND     i2.organization_id = i1.organization_id
8533         AND     i2.sr_instance_id = i1.sr_instance_id
8534         AND     i2.plan_id = i1.plan_id;
8535 
8536         IF PG_DEBUG in ('Y', 'C') THEN
8537                 msc_sch_wb.atp_debug('Get_Pf_Atp_Item_Id: ' ||  'PF Item Id = ' ||to_char(l_pf_atp_item_id));
8538                 msc_sch_wb.atp_debug('*********End function Get_Pf_Atp_Item_Id ********');
8539         END IF;
8540 
8541         return l_pf_atp_item_id;
8542 
8543 EXCEPTION WHEN NO_DATA_FOUND THEN
8544         return p_inventory_item_id;
8545 
8546 END Get_Pf_Atp_Item_Id;
8547 
8548 /*--Get_Atf_Date------------------------------------------------------------
8549 |  o  This function returns the ATF date for item-org-instance-plan
8550 |       combination passed.
8551 +-------------------------------------------------------------------------*/
8552 FUNCTION Get_Atf_Date(
8553         p_instance_id        IN NUMBER,
8554         p_inventory_item_id  IN NUMBER,
8555         p_organization_id    IN NUMBER,
8556         p_plan_id            IN NUMBER
8557 )
8558 RETURN DATE
8559 IS
8560         l_atf_date      DATE;
8561 
8562 BEGIN
8563         IF PG_DEBUG in ('Y', 'C') THEN
8564                 msc_sch_wb.atp_debug('Begin Get_Atf_Date');
8565                 msc_sch_wb.atp_debug('Get_Atf_Date : p_instance_id = ' || p_instance_id);
8566                 msc_sch_wb.atp_debug('Get_Atf_Date : p_inventory_item_id = ' || p_inventory_item_id);
8567                 msc_sch_wb.atp_debug('Get_Atf_Date : p_organization_id = ' || p_organization_id);
8568                 msc_sch_wb.atp_debug('Get_Atf_Date : p_plan_id = ' || p_plan_id);
8569         END IF;
8570 
8571         SELECT i.aggregate_time_fence_date
8572         INTO   l_atf_date
8573         FROM   msc_system_items i
8574         WHERE  i.plan_id = p_plan_id
8575         AND    i.sr_instance_id = p_instance_id
8576         AND    i.organization_id = p_organization_id
8577         AND    i.sr_inventory_item_id = p_inventory_item_id;
8578 
8579         IF PG_DEBUG in ('Y', 'C') THEN
8580                 msc_sch_wb.atp_debug('Get_Atf_Date : ATF Date = ' || l_atf_date);
8581         END IF;
8582 
8583         return l_atf_date;
8584 
8585 EXCEPTION
8586         WHEN NO_DATA_FOUND THEN
8587                 return null;
8588 
8589 END Get_Atf_Date;
8590 
8591 /*--Get_Atf_Days------------------------------------------------------------
8592 |  o  This function returns the ATF days for item-org-instance-plan
8593 |       combination passed.
8594 +-------------------------------------------------------------------------*/
8595 FUNCTION Get_Atf_Days(
8596         p_instance_id        IN NUMBER,
8597         p_inventory_item_id  IN NUMBER,
8598         p_organization_id    IN NUMBER
8599 )
8600 RETURN NUMBER
8601 IS
8602         l_atf_days      NUMBER;
8603 
8604 BEGIN
8605         IF PG_DEBUG in ('Y', 'C') THEN
8606                 msc_sch_wb.atp_debug('Begin Get_Atf_Days');
8607                 msc_sch_wb.atp_debug('Get_Atf_Days : p_instance_id = ' || p_instance_id);
8608                 msc_sch_wb.atp_debug('Get_Atf_Days : p_inventory_item_id = ' || p_inventory_item_id);
8609                 msc_sch_wb.atp_debug('Get_Atf_Days : p_organization_id = ' || p_organization_id);
8610         END IF;
8611 
8612         SELECT  DECODE(r.aggregate_time_fence_code,
8613                         1, NULL,
8614                         2, i2.demand_time_fence_days,
8615                         3, i2.planning_time_fence_days,
8616                         4, r.aggregate_time_fence
8617                       )
8618         INTO    l_atf_days
8619         FROM    msc_system_items i2,
8620                 msc_system_items i1,
8621                 msc_atp_rules r,
8622                 msc_trading_partners tp
8623         WHERE   i1.inventory_item_id = p_inventory_item_id
8624         AND     i1.organization_id = p_organization_id
8625         AND     i1.plan_id = -1
8626         AND     i1.sr_instance_id = p_instance_id
8627         AND     i2.inventory_item_id = NVL(i1.product_family_id,
8628                                               i1.inventory_item_id)
8629         AND     i2.organization_id = i1.organization_id
8630         AND     i2.sr_instance_id = i1.sr_instance_id
8631         AND     i2.plan_id = i1.plan_id
8632         AND     i2.bom_item_type = 5
8633         AND     i2.atp_flag = 'Y'
8634         AND     tp.sr_tp_id = i2.organization_id
8635         AND     tp.sr_instance_id = i2.sr_instance_id
8636         AND     tp.partner_type = 3
8637         AND     r.sr_instance_id = tp.sr_instance_id
8638         AND     r.rule_id = NVL(i2.atp_rule_id, tp.default_atp_rule_id);
8639 
8640         IF PG_DEBUG in ('Y', 'C') THEN
8641                 msc_sch_wb.atp_debug('Get_Atf_Days : ATF Days = ' || l_atf_days);
8642         END IF;
8643 
8644         return l_atf_days;
8645 
8646 EXCEPTION
8647         WHEN NO_DATA_FOUND THEN
8648                 IF PG_DEBUG in ('Y', 'C') THEN
8649                         msc_sch_wb.atp_debug('Get_Atf_Days : ATF Days = ' || l_atf_days);
8650                 END IF;
8651                 return null;
8652 
8653 END Get_Atf_Days;
8654 
8655 /*--Get_Family_Item_Info----------------------------------------------------
8656 |  o  This procedure returns the source id, destination id and ATF date
8657 |       of the family item if the item passed belongs to an atpable family.
8658 +-------------------------------------------------------------------------*/
8659 PROCEDURE Get_Family_Item_Info(
8660         p_instance_id	        IN      NUMBER,
8661         p_plan_id               IN      NUMBER,
8662         p_inventory_item_id     IN      NUMBER,
8663         p_organization_id       IN      NUMBER,
8664         p_family_id             OUT     NOCOPY NUMBER,
8665         p_sr_family_id          OUT     NOCOPY NUMBER,
8666         p_atf_date              OUT     NOCOPY DATE,
8667         --bug3700564 added family name
8668         p_family_name           OUT     NOCOPY VARCHAR2,
8669         x_return_status         OUT     NOCOPY VARCHAR2
8670 )
8671 IS
8672 
8673 
8674 BEGIN
8675         IF PG_DEBUG in ('Y', 'C') THEN
8676                 msc_sch_wb.atp_debug('*********Begin procedure Get_Family_Item_Info ********');
8677                 msc_sch_wb.atp_debug('Get_Family_Item_Info: ' ||  'p_instance_id = ' ||to_char(p_instance_id));
8678                 msc_sch_wb.atp_debug('Get_Family_Item_Info: ' ||  'p_plan_id = ' ||to_char(p_plan_id));
8679                 msc_sch_wb.atp_debug('Get_Family_Item_Info: ' ||  'p_inventory_item_id = ' ||to_char(p_inventory_item_id));
8680                 msc_sch_wb.atp_debug('Get_Family_Item_Info: ' ||  'p_organization_id = ' ||to_char(p_organization_id));
8681         END IF;
8682 
8683         -- Initializing API return code
8684         x_return_status := FND_API.G_RET_STS_SUCCESS;
8685 
8686         SELECT DECODE(i2.bom_item_type,
8687                  5, DECODE(i2.atp_flag,
8688                      'N', i1.inventory_item_id,
8689                      i2.inventory_item_id),
8690                  i1.inventory_item_id
8691                ),
8692                DECODE(i2.bom_item_type,
8693                  5, DECODE(i2.atp_flag,
8694                      'N', i1.sr_inventory_item_id,
8695                      i2.sr_inventory_item_id),
8696                  i1.sr_inventory_item_id
8697                ),
8698                i1.aggregate_time_fence_date,
8699                i2.item_name --bug3700564
8700         INTO   p_family_id,
8701                p_sr_family_id,
8702                p_atf_date,
8703                p_family_name --bug3700564
8704         FROM   msc_system_items i2,
8705                msc_system_items i1
8706         WHERE  i1.inventory_item_id = p_inventory_item_id
8707         AND    i1.organization_id = p_organization_id
8708         AND    i1.plan_id = p_plan_id
8709         AND    i1.sr_instance_id = p_instance_id
8710         AND    i2.inventory_item_id = DECODE(i1.product_family_id,
8711                                              NULL, i1.inventory_item_id,
8712                                              -23453, i1.inventory_item_id,
8713                                              i1.product_family_id)
8714         AND    i2.organization_id = i1.organization_id
8715         AND    i2.sr_instance_id = i1.sr_instance_id
8716         AND    i2.plan_id = i1.plan_id;
8717 
8718         IF PG_DEBUG in ('Y', 'C') THEN
8719                 msc_sch_wb.atp_debug('Get_Family_Item_Info: ' ||  'ATF Date = ' ||to_char(p_atf_date));
8720                 msc_sch_wb.atp_debug('*********End procedure Get_Family_Item_Info ********');
8721         END IF;
8722 
8723 EXCEPTION
8724 
8725 -- bug 5574547
8726 	WHEN NO_DATA_FOUND THEN
8727 	SELECT i1.inventory_item_id,
8728 	       i1.sr_inventory_item_id,
8729 	       i1.aggregate_time_fence_date,
8730                i1.item_name
8731         INTO   p_family_id,
8732                p_sr_family_id,
8733                p_atf_date,
8734                p_family_name
8735         FROM   msc_system_items i1
8736         WHERE  i1.inventory_item_id = p_inventory_item_id
8737         AND    i1.organization_id = p_organization_id
8738         AND    i1.plan_id = p_plan_id
8739         AND    i1.sr_instance_id = p_instance_id;
8740 
8741 		    IF PG_DEBUG in ('Y', 'C') THEN
8742            msc_sch_wb.atp_debug('Get_Family_Item_Info: ' || 'Passing back the values originally sent to API');
8743         END IF;
8744 
8745 
8746         WHEN OTHERS THEN
8747                 IF PG_DEBUG in ('Y', 'C') THEN
8748                         msc_sch_wb.atp_debug('Get_Family_Item_Info: ' || 'Error occurred: ' || to_char(sqlcode) || ':' || SQLERRM);
8749                 END IF;
8750                 x_return_status := FND_API.G_RET_STS_ERROR;
8751 
8752 END Get_Family_Item_Info;
8753 
8754 /*--Get_PF_Plan_Info----------------------------------------------------------
8755 |  o  This procedure finds the plan to be used in PF scenarios
8756 |  o  Logic to select plan is as follows:
8757 |       -
8758 +---------------------------------------------------------------------------*/
8759 PROCEDURE Get_PF_Plan_Info(
8760         p_instance_id	        IN      NUMBER,
8761         p_member_item_id        IN      NUMBER,
8762         p_family_item_id        IN      NUMBER,
8763         p_org_id                IN      NUMBER,
8764         p_demand_class          IN      VARCHAR2,
8765         p_atf_date              OUT     NOCOPY DATE,
8766         p_error_code            OUT     NOCOPY NUMBER,
8767         x_return_status         OUT     NOCOPY VARCHAR2,
8768         p_parent_plan_id        IN      NUMBER DEFAULT NULL --bug3510475
8769 ) IS
8770         -- local variables
8771 
8772 
8773 BEGIN
8774         IF PG_DEBUG in ('Y', 'C') THEN
8775                 msc_sch_wb.atp_debug('*********Begin procedure Get_PF_Plan_Info ********');
8776                 msc_sch_wb.atp_debug('p_instance_id := ' || p_instance_id);
8777                 msc_sch_wb.atp_debug('p_member_item_id := ' || p_member_item_id);
8778                 msc_sch_wb.atp_debug('p_family_item_id := ' || p_family_item_id);
8779                 msc_sch_wb.atp_debug('p_org_id := ' || p_org_id);
8780                 msc_sch_wb.atp_debug('p_demand_class := ' || p_demand_class);
8781 
8782         END IF;
8783 
8784         -- initialize API return status to success
8785         x_return_status := FND_API.G_RET_STS_SUCCESS;
8786 
8787         /* First get member item's plan*/
8788         MSC_ATP_PROC.get_global_plan_info(
8789                 p_instance_id,
8790                 p_member_item_id,
8791                 p_org_id,
8792                 p_demand_class,
8793                 p_parent_plan_id --bug3510475
8794         );
8795 
8796         IF (MSC_ATP_PVT.G_PLAN_INFO_REC.plan_id = -300) THEN
8797                 IF PG_DEBUG in ('Y', 'C') THEN
8798                         msc_sch_wb.atp_debug('Get_PF_Plan_Info: ' || 'ATP Downtime');
8799                 END IF;
8800 
8801                 x_return_status := FND_API.G_RET_STS_ERROR;
8802                 MSC_ATP_PVT.G_DOWNTIME_HIT := 'Y';
8803                 p_error_code := MSC_ATP_PVT.PLAN_DOWN_TIME;
8804                 RAISE NO_DATA_FOUND;
8805         END IF;
8806 
8807         IF PG_DEBUG in ('Y', 'C') THEN
8808              msc_sch_wb.atp_debug('Get_PF_Plan_Info: ' || 'MSC_ATP_PVT.G_PLAN_INFO_REC.plan_id = '||MSC_ATP_PVT.G_PLAN_INFO_REC.plan_id);
8809         END IF;
8810 
8811         -- ATP4drp begin
8812         IF  NVL(MSC_ATP_PVT.G_PLAN_INFO_REC.plan_type, 1) = 5 THEN
8813             IF PG_DEBUG in ('Y', 'C') THEN
8814                msc_sch_wb.atp_debug('----- ATP4drp Specific Debug Messages -----');
8815                msc_sch_wb.atp_debug('Get_PF_Plan_Info: ' || 'PF and Allocated ATP not applicable for DRP plans');
8816                msc_sch_wb.atp_debug('Get_PF_Plan_Info: ' || 'ATF date will not be obtained.');
8817                msc_sch_wb.atp_debug('----- ATP4drp Specific Debug Messages -----');
8818             END IF;
8819         ELSIF (p_family_item_id <> p_member_item_id) THEN
8820             -- plan is not a DRP plan
8821         -- ATP4drp end
8822         /* Now Get ATF Date in PF case to check whether this is time phased atp case or old PF case*/
8823                 p_atf_date := MSC_ATP_PF.Get_Atf_Date(
8824                                   p_instance_id,
8825                                   p_member_item_id,
8826                                   p_org_id,
8827                                   MSC_ATP_PVT.G_PLAN_INFO_REC.plan_id
8828                               );
8829 
8830                 IF PG_DEBUG in ('Y', 'C') THEN
8831                         msc_sch_wb.atp_debug('Get_PF_Plan_Info: ' || 'ATF Date = '||p_atf_date);
8832                 END IF;
8833 
8834                 /* check if it is time phased atp scenario, if yes then we are done
8835                    else look for family item's plan*/
8836                 IF p_atf_date is not null THEN
8837                         IF PG_DEBUG in ('Y', 'C') THEN
8838                                 msc_sch_wb.atp_debug('Get_PF_Plan_Info: ' || '*** Time Phased ATP Scenario *** ');
8839                         END IF;
8840                 ELSE
8841                         IF PG_DEBUG in ('Y', 'C') THEN
8842                                 msc_sch_wb.atp_debug('Schedule: ' || '*** Product Family(non-time phased) ATP Scenario *** ');
8843                                 msc_sch_wb.atp_debug('Get_PF_Plan_Info: ' || 'Now trying to find old plan for family item...');
8844                         END IF;
8845 
8846                         MSC_ATP_PROC.get_global_plan_info(
8847                                 p_instance_id,
8848                                 p_family_item_id,
8849                                 p_org_id,
8850                                 p_demand_class,
8851                                 p_parent_plan_id  --bug3510475
8852                         );
8853 
8854                         IF (MSC_ATP_PVT.G_PLAN_INFO_REC.plan_id = -300) THEN
8855                                 IF PG_DEBUG in ('Y', 'C') THEN
8856                                         msc_sch_wb.atp_debug('Get_PF_Plan_Info: ' || 'ATP Downtime');
8857                                 END IF;
8858 
8859                                 x_return_status := FND_API.G_RET_STS_ERROR;
8860                                 MSC_ATP_PVT.G_DOWNTIME_HIT := 'Y';
8861                                 p_error_code := MSC_ATP_PVT.PLAN_DOWN_TIME;
8862                                 RAISE NO_DATA_FOUND;
8863                         END IF;
8864                 END IF;
8865         ELSE
8866                 IF PG_DEBUG in ('Y', 'C') THEN
8867                         msc_sch_wb.atp_debug('Get_PF_Plan_Info: ' || '*** Regular PDS ATP Scenario *** ');
8868                 END IF;
8869         END IF;
8870 
8871         IF PG_DEBUG in ('Y', 'C') THEN
8872                 msc_sch_wb.atp_debug('*********End of procedure Get_PF_Plan_Info ********');
8873         END IF;
8874 
8875 EXCEPTION
8876         WHEN OTHERS THEN
8877                 IF PG_DEBUG in ('Y', 'C') THEN
8878                         msc_sch_wb.atp_debug('Get_PF_Plan_Info: ' || 'Exception: ' || sqlerrm);
8879                         msc_sch_wb.atp_debug('Get_PF_Plan_Info: ' || 'Error code:' || to_char(sqlcode));
8880                 END IF;
8881                 x_return_status := FND_API.G_RET_STS_ERROR;
8882 
8883 END Get_PF_Plan_Info;
8884 
8885 /*--Populate_ATF_Dates--------------------------------------------------------
8886 |  o  This procedure populate ATF dates for:
8887 |       -  All atpable family items having ATF setup.
8888 |       -  All atpable member items belonging to the above atpable families.
8889 |  o  Returns number of member items whose ATF dates were populated.
8890 +---------------------------------------------------------------------------*/
8891 PROCEDURE Populate_ATF_Dates(
8892         p_plan_id          		IN	NUMBER,
8893         x_member_count                  OUT     NOCOPY NUMBER,
8894         x_return_status                 OUT	NOCOPY VARCHAR2
8895 ) IS
8896         -- local variables
8897 --bug3663487 start
8898 l_organization_id       MRP_ATP_PUB.number_arr := MRP_ATP_PUB.number_arr();
8899 l_sr_instance_id        MRP_ATP_PUB.number_arr := MRP_ATP_PUB.number_arr();
8900 l_inventory_item_id     MRP_ATP_PUB.number_arr := MRP_ATP_PUB.number_arr();
8901 l_atf_date              mrp_atp_pub.date_arr := mrp_atp_pub.date_arr();
8902 j                       NUMBER;
8903 k                       NUMBER;
8904 --bug3663487 end
8905 
8906 BEGIN
8907         IF PG_DEBUG in ('Y', 'C') THEN
8908                 msc_util.msc_log('*********Begin procedure Populate_ATF_Dates ********');
8909                 msc_util.msc_log('Populate_ATF_Dates: ' ||  'p_plan_id = ' ||to_char(p_plan_id));
8910         END IF;
8911 
8912         -- initialize API return status to success
8913         x_return_status := FND_API.G_RET_STS_SUCCESS;
8914 
8915         --bug3663487 start SQL ID 9426916 and 9426907
8916         SELECT  c2.calendar_date,i2.organization_id,i2.sr_instance_id,i2.inventory_item_id
8917         BULK COLLECT INTO   l_atf_date,l_organization_id,l_sr_instance_id,l_inventory_item_id
8918         FROM    msc_plans mp,
8919                 msc_plan_organizations po,
8920                 msc_system_items i2,
8921                 msc_trading_partners tp,
8922                 msc_atp_rules r,
8923                 msc_calendar_dates c1,
8924             	msc_calendar_dates c2
8925         WHERE   mp.plan_id = p_plan_id
8926         AND	po.plan_id = mp.plan_id
8927         AND	i2.organization_id = po.organization_id
8928         AND     i2.sr_instance_id = po.sr_instance_id
8929         AND     i2.plan_id = po.plan_id
8930         AND     i2.bom_item_type = 5
8931         AND     i2.atp_flag = 'Y'
8932         AND     tp.sr_tp_id = i2.organization_id
8933         AND     tp.sr_instance_id = i2.sr_instance_id
8934         AND     tp.partner_type = 3
8935         AND     r.sr_instance_id = tp.sr_instance_id
8936         AND     r.rule_id = NVL(i2.atp_rule_id, tp.default_atp_rule_id)
8937         AND     c1.sr_instance_id = r.sr_instance_id
8938         AND     c1.calendar_date = trunc(mp.plan_start_date)
8939         AND     c1.calendar_code = tp.calendar_code
8940         AND     c1.exception_set_id = -1
8941         AND     c2.sr_instance_id = c1.sr_instance_id
8942         AND     c2.seq_num = c1.next_seq_num +
8943                                         DECODE(r.aggregate_time_fence_code,
8944                                                 1, NULL,
8945                                                 2, i2.demand_time_fence_days,
8946                                                 3, i2.planning_time_fence_days,
8947                                                 4, r.aggregate_time_fence
8948                                               )
8949         AND    c2.calendar_code = c1.calendar_code
8950         AND    c2.exception_set_id = -1;
8951 
8952         IF PG_DEBUG in ('Y', 'C') THEN
8953                 msc_util.msc_log('Populate_ATF_Dates: ' ||  'l_inventory_item_id.COUNT = ' ||l_inventory_item_id.COUNT);
8954         END IF;
8955 
8956         IF l_inventory_item_id IS NOT NULL AND l_inventory_item_id.COUNT > 0 THEN
8957 
8958          FORALL j IN l_inventory_item_id.first.. l_inventory_item_id.last
8959          UPDATE  msc_system_items i
8960          SET     aggregate_time_fence_date = l_atf_date(j)
8961          WHERE   i.plan_id = p_plan_id
8962          AND     i.ORGANIZATION_ID = l_organization_id(j)
8963          AND     i.SR_INSTANCE_ID = l_sr_instance_id(j)
8964          AND     i.inventory_item_id = l_inventory_item_id(j);
8965 
8966          FORALL k IN l_inventory_item_id.first.. l_inventory_item_id.last
8967          UPDATE  msc_system_items i
8968          SET     aggregate_time_fence_date = l_atf_date(k)
8969          WHERE   i.plan_id = p_plan_id
8970          AND     i.ORGANIZATION_ID = l_organization_id(k)
8971          AND     i.SR_INSTANCE_ID = l_sr_instance_id(k)
8972          AND     i.product_family_id = l_inventory_item_id(k);
8973 
8974          x_member_count := SQL%ROWCOUNT;
8975 
8976         END IF;
8977         --bug3663487 end
8978 
8979         ----bug3663487 code commented for Performance fix
8980         /*
8981         -- populate ATF date for PF items
8982         UPDATE  msc_system_items i
8983         SET     aggregate_time_fence_date =
8984                        (SELECT  c2.calendar_date
8985                         FROM    msc_calendar_dates c2,
8986                                 msc_calendar_dates c1,
8987                                 msc_atp_rules r,
8988                                 msc_trading_partners tp,
8989                                 msc_plans mp,
8990                                 msc_system_items i2
8991                         WHERE   i2.inventory_item_id = i.inventory_item_id
8992                         AND     i2.organization_id = i.organization_id
8993                         AND     i2.sr_instance_id = i.sr_instance_id
8994                         AND     i2.plan_id = -1
8995                         AND     tp.sr_tp_id = i2.organization_id
8996                         AND     tp.sr_instance_id = i2.sr_instance_id
8997                         AND     tp.partner_type = 3
8998                         AND     mp.plan_id = p_plan_id
8999                         AND     r.sr_instance_id = tp.sr_instance_id
9000                         AND     r.rule_id = NVL(i2.atp_rule_id, tp.default_atp_rule_id)
9001                         AND     c1.sr_instance_id = r.sr_instance_id
9002                         AND     c1.calendar_date = mp.plan_start_date
9003                         AND     c1.calendar_code = tp.calendar_code
9004                         AND     c1.exception_set_id = -1
9005                         AND     c2.sr_instance_id = c1.sr_instance_id
9006                         AND     c2.seq_num = c1.next_seq_num +
9007                                         DECODE(r.aggregate_time_fence_code,
9008                                                 1, NULL,
9009                                                 2, i2.demand_time_fence_days,
9010                                                 3, i2.planning_time_fence_days,
9011                                                 4, r.aggregate_time_fence
9012                                               )
9013                         AND    c2.calendar_code = c1.calendar_code
9014                         AND    c2.exception_set_id = -1
9015                        )
9016         WHERE   i.plan_id = p_plan_id
9017         AND     i.bom_item_type = 5
9018         AND     i.atp_flag = 'Y';
9019 
9020         -- populate ATF date for atpable member items
9021         UPDATE  msc_system_items i
9022         SET     aggregate_time_fence_date =
9023                        (SELECT  i2.aggregate_time_fence_date
9024                         FROM    msc_system_items i2
9025                         WHERE   i2.inventory_item_id = i.product_family_id
9026                         AND     i2.sr_instance_id = i.sr_instance_id
9027                         AND     i2.organization_id = i.organization_id
9028                         AND     i2.plan_id = i.plan_id
9029                         AND     i2.aggregate_time_fence_date is not null
9030                        )
9031         WHERE   i.plan_id = p_plan_id
9032         AND     i.inventory_item_id <> DECODE(i.product_family_id,
9033                                               NULL, i.inventory_item_id,
9034                                               -23453, i.inventory_item_id,
9035                                               i.product_family_id)
9036         AND     i.bom_item_type <> 5
9037         AND     i.atp_flag = 'Y'
9038         AND     EXISTS (SELECT  1
9039                         FROM    msc_system_items i2
9040                         WHERE   i2.inventory_item_id = i.product_family_id
9041                         AND     i2.sr_instance_id = i.sr_instance_id
9042                         AND     i2.organization_id = i.organization_id
9043                         AND     i2.plan_id = i.plan_id
9044                         AND     i2.aggregate_time_fence_date is not null
9045                        );
9046         */
9047 
9048         IF PG_DEBUG in ('Y', 'C') THEN
9049                 msc_util.msc_log('Populate_ATF_Dates: ' ||  'Member Count = ' ||to_char(x_member_count));
9050                 msc_util.msc_log('*********End of procedure Populate_ATF_Dates ********');
9051         END IF;
9052 
9053 EXCEPTION
9054         WHEN OTHERS THEN
9055                 IF PG_DEBUG in ('Y', 'C') THEN
9056                         msc_util.msc_log('Populate_ATF_Dates: ' || 'Exception: ' || sqlerrm);
9057                         msc_util.msc_log('Populate_ATF_Dates: ' || 'Error code:' || to_char(sqlcode));
9058                 END IF;
9059                 x_return_status := FND_API.G_RET_STS_ERROR;
9060 
9061 END Populate_ATF_Dates;
9062 
9063 /*--Calculate_Alloc_Percentages-----------------------------------------------
9064 |  o  This procedure calculate allocation percentages for:
9065 |       -  All end demands for atpable items.
9066 |  o  Populate temp table with this information
9067 +---------------------------------------------------------------------------*/
9068 PROCEDURE Calculate_Alloc_Percentages(
9069         p_plan_id          		IN	NUMBER,
9070         x_return_status                 OUT	NOCOPY VARCHAR2
9071 ) IS
9072         -- local variables
9073         l_sysdate                       DATE;
9074         i                               NUMBER;
9075         l_plan_id                       NUMBER;
9076         l_ret_code			NUMBER;
9077         l_summary_flag			NUMBER;
9078         l_user_id                       NUMBER;
9079         dummy1                          VARCHAR2(10);
9080         dummy2                          VARCHAR2(10);
9081         l_alloc_atp                     VARCHAR2(1);
9082         l_applsys_schema                VARCHAR2(10);
9083         l_err_msg			VARCHAR2(1000);
9084         l_ind_tbspace                   VARCHAR2(30);
9085         l_insert_stmt                   VARCHAR2(8000);
9086         l_msc_schema                    VARCHAR2(30);
9087         l_other_dc                      VARCHAR2(30) := '-1';
9088         l_partition_name                VARCHAR2(30);
9089         l_share_partition   		VARCHAR2(1);
9090         l_sql_stmt                      VARCHAR2(300);
9091         l_sql_stmt_1                    VARCHAR2(16000);
9092         l_table_name			VARCHAR2(30);
9093         l_tbspace                       VARCHAR2(30);
9094         l_temp_table			VARCHAR2(30);
9095         l_plan_name                     varchar2(10);
9096         cur_handler			NUMBER;
9097         rows_processed			NUMBER;
9098         l_hash_size			NUMBER := -1;
9099         l_sort_size			NUMBER := -1;
9100         l_parallel_degree		NUMBER := 1;
9101         l_excess_supply_by_dc           VARCHAR2(1);
9102         l_return_status                 VARCHAR2(1);
9103 
9104 
9105 BEGIN
9106         IF PG_DEBUG in ('Y', 'C') THEN
9107                 msc_util.msc_log('*********Begin procedure Calculate_Alloc_Percentages ********');
9108                 msc_util.msc_log('Calculate_Alloc_Percentages: ' ||  'p_plan_id = ' ||to_char(p_plan_id));
9109         END IF;
9110 
9111         -- initialize API return status to success
9112         x_return_status := FND_API.G_RET_STS_SUCCESS;
9113 
9114         /* populate allocated quantity for planned order at product family that are blown down as production forecasts*/
9115         insert into msc_alloc_temp(
9116                 transaction_id,
9117                 demand_class,
9118                 supply_demand_quantity
9119         )
9120         (select sup.transaction_id,
9121                 decode(d1.inventory_item_id, NULL, '-2', d1.demand_class),
9122                 sum(peg1.allocated_quantity)
9123          from
9124                 (select /*+ NO_MERGE */ distinct d.disposition_id transaction_id --13021736 perf issue
9125                  from   msc_demands d,
9126                         msc_system_items msi
9127                  where  msi.plan_id = p_plan_id
9128                  and    msi.bom_item_type <> 5
9129                  and    NVL(msi.product_family_id, -23453) <> -23453 -- Bug 3629191
9130                  --and    msi.product_family_id is not null
9131                  and    msi.atp_flag = 'Y'
9132                  and    d.inventory_item_id = msi.inventory_item_id
9133                  and    d.organization_id = msi.organization_id
9134                  and    d.sr_instance_id = msi.sr_instance_id
9135                  and    d.plan_id = msi.plan_id
9136                  and    d.origination_type = 22
9137                 ) sup,
9138                 msc_full_pegging peg1,
9139                 msc_demands d1
9140          where  peg1.plan_id = p_plan_id
9141          and    peg1.pegging_id = peg1.end_pegging_id
9142          and    peg1.transaction_id = sup.transaction_id
9143          and    d1.plan_id (+) = peg1.plan_id
9144          and    d1.inventory_item_id (+) = peg1.inventory_item_id
9145          and    d1.organization_id (+) = peg1.organization_id
9146          and    d1.sr_instance_id (+) = peg1.sr_instance_id
9147          and    d1.demand_id (+) = peg1.demand_id
9148          and    d1.origination_type (+) not in (6, 10, 30)
9149          group by
9150                 sup.transaction_id,
9151                 decode(d1.inventory_item_id, NULL, '-2', d1.demand_class)
9152         );
9153 
9154         -- update allocation percentages
9155         --changed update statement for bug3387166
9156        /* update msc_alloc_temp mat1
9157         set    mat1.allocation_percent =
9158                         mat1.supply_demand_quantity/(select sum(mat2.supply_demand_quantity)
9159                                                      from   msc_alloc_temp mat2
9160                                                      where  mat2.transaction_id = mat1.transaction_id
9161                                                      ); */
9162         update msc_alloc_temp mat1
9163         set    mat1.allocation_percent =
9164                         (select mat1.supply_demand_quantity/sum(mat2.supply_demand_quantity)
9165                           from   msc_alloc_temp mat2
9166                           where  mat2.transaction_id = mat1.transaction_id
9167                           );
9168 
9169         IF PG_DEBUG in ('Y', 'C') THEN
9170                 msc_util.msc_log('Calculate_Alloc_Percentages: ' ||  'Row Count in MSC_ALLOC_TEMP = '|| SQL%ROWCOUNT);
9171                 msc_util.msc_log('*********End of procedure Calculate_Alloc_Percentages ********');
9172         END IF;
9173 
9174 EXCEPTION
9175         WHEN OTHERS THEN
9176                 IF PG_DEBUG in ('Y', 'C') THEN
9177                         msc_util.msc_log('Calculate_Alloc_Percentages: ' || 'Exception: ' || sqlerrm);
9178                         msc_util.msc_log('Calculate_Alloc_Percentages: ' || 'Error code:' || to_char(sqlcode));
9179                 END IF;
9180                 x_return_status := FND_API.G_RET_STS_ERROR;
9181 
9182 END Calculate_Alloc_Percentages;
9183 
9184 /*--Pf_Post_Plan_Proc-----------------------------------------------------------------
9185 |  o  This procedure is called from Load_Plan_Sd procedure for ATP Post
9186 |       Plan Processing (pre-allocation, supplies rollup and bucketing)
9187 |       only if there is atleast one item having ATF date not null.
9188 |  o  It calls following private procedures:
9189 |       -  Prepare_Demands_Stmt1 - to prepare demands statement for:
9190 |            :  Pre-allocation and bucketing for demands pegged to excess
9191 |                 if it is demand priority AATP case.
9192 |            :  Bucketing if it is not demand priority AATP case.
9193 |       -  Prepare_Demands_Stmt2 - to prepare demands statement for pre-allocation
9194 |            and bucketing for demands not pegged to excess if it is demand
9195 |            priority AATP case.
9196 |       -  Prepare_Supplies_Stmt1 - to prepare supplies statement for:
9197 |            :  Preallocation and rollup for supplies pegged to excess/safety stock
9198 |                 if it is demand priority AATP case.
9199 |            :  Rollup if it is not demand priority AATP case.
9200 |       -  Prepare_Supplies_Stmt2 - to prepare supplies statement for
9201 |            preallocation and rollup for supplies not pegged to excess/safety stock
9202 |            if it is demand priority AATP case.
9203 |  o  Calls private procedure Update_Pf_Display_Flag procedure to update
9204 |       Pf_Display_Flag to handle scenario when a demand on one side of ATF is
9205 |       satisfied totally from supplies on the other side of ATF.
9206 +-----------------------------------------------------------------------------------*/
9207 PROCEDURE Pf_Post_Plan_Proc(
9208 	ERRBUF                          OUT     NOCOPY VARCHAR2,
9209 	RETCODE                         OUT     NOCOPY NUMBER,
9210 	p_plan_id                       IN 	NUMBER,
9211 	p_demand_priority               IN      VARCHAR2
9212 )
9213 IS
9214         -- local variables
9215         G_ERROR				NUMBER := 1;
9216         G_SUCCESS			NUMBER := 0;
9217         MAXVALUE                        CONSTANT NUMBER := 999999;
9218         l_retval                        BOOLEAN;
9219         l_sysdate                       DATE;
9220         i                               NUMBER;
9221         l_alloc_method                  NUMBER;
9222         l_class_hrchy                   NUMBER;
9223         l_count				NUMBER;
9224         l_inv_ctp                       NUMBER;
9225         l_plan_id                       NUMBER;
9226         l_ret_code			NUMBER;
9227         l_summary_flag			NUMBER;
9228         l_user_id                       NUMBER;
9229         dummy1                          VARCHAR2(10);
9230         dummy2                          VARCHAR2(10);
9231         l_alloc_atp                     VARCHAR2(1);
9232         l_applsys_schema                VARCHAR2(10);
9233         l_err_msg			VARCHAR2(1000);
9234         l_ind_tbspace                   VARCHAR2(30);
9235         l_insert_stmt                   VARCHAR2(8000);
9236         l_msc_schema                    VARCHAR2(30);
9237         l_other_dc                      VARCHAR2(30) := '-1';
9238         l_partition_name                VARCHAR2(30);
9239         l_share_partition   		VARCHAR2(1);
9240         l_sql_stmt                      VARCHAR2(300);
9241         l_sql_stmt_1                    VARCHAR2(16000);
9242         l_table_name			VARCHAR2(30);
9243         l_tbspace                       VARCHAR2(30);
9244         l_temp_table			VARCHAR2(30);
9245         atp_summ_tab 			MRP_ATP_PUB.char30_arr :=
9246                                                 MRP_ATP_PUB.char30_arr(
9247                                                         'ALLOC_DEMANDS',
9248                                                         'ALLOC_SUPPLIES'
9249                                                 );
9250         l_plan_name                     varchar2(10);
9251         cur_handler			NUMBER;
9252         rows_processed			NUMBER;
9253         l_hash_size			NUMBER := -1;
9254         l_sort_size			NUMBER := -1;
9255         l_parallel_degree		NUMBER := 1;
9256         l_excess_supply_by_dc           VARCHAR2(1);
9257         l_return_status                 VARCHAR2(1);
9258         l_alloc_temp_table              VARCHAR2(30);
9259         l_yes                           VARCHAR2(1) := 'Y';
9260         l_excess_dc                     VARCHAR2(30) := '-2';
9261 
9262 BEGIN
9263         msc_util.msc_log('*********Begin procedure Pf_Post_Plan_Proc ********');
9264 
9265         --project atp
9266         l_excess_supply_by_dc := NVL(FND_PROFILE.VALUE('MSC_EXCESS_SUPPLY_BY_DC'), 'N');
9267         msc_util.msc_log('l_excess_supply_by_dc := ' || l_excess_supply_by_dc);
9268 
9269         BEGIN
9270                 msc_util.msc_log('Calling custom procedure MSC_ATP_CUSTOM.Custom_Pre_Allocation...');
9271                 MSC_ATP_CUSTOM.Custom_Pre_Allocation(p_plan_id);
9272                 msc_util.msc_log('End MSC_ATP_CUSTOM.Custom_Pre_Allocation.');
9273         EXCEPTION
9274                 WHEN OTHERS THEN
9275                         msc_util.msc_log('Error in custom procedure call');
9276                         msc_util.msc_log('Error Code: '|| sqlerrm);
9277         END;
9278         --project atp
9279 
9280         msc_util.msc_log('begin Loading pre-allocation demand/supply data for plan: ' || p_plan_id);
9281         RETCODE := G_SUCCESS;
9282 
9283         l_share_partition := fnd_profile.value('MSC_SHARE_PARTITIONS');
9284 
9285         msc_util.msc_log('l_share_partition := ' || l_share_partition);
9286 
9287         SELECT NVL(summary_flag,1), compile_designator
9288         INTO   l_summary_flag, l_plan_name
9289         FROM   msc_plans
9290         WHERE  plan_id = p_plan_id;
9291 
9292         IF NVL(l_summary_flag,1) = 2 THEN
9293                 msc_util.msc_log('Another session is running post-plan allocation program for this plan');
9294                 RETCODE :=  G_ERROR;
9295                 RETURN;
9296         END IF;
9297 
9298         l_retval := FND_INSTALLATION.GET_APP_INFO('FND', dummy1, dummy2, l_applsys_schema);
9299         SELECT  a.oracle_username,
9300                 sysdate,
9301                 FND_GLOBAL.USER_ID
9302         INTO    l_msc_schema,
9303                 l_sysdate,
9304                 l_user_id
9305         FROM    fnd_oracle_userid a,
9306                 fnd_product_installations b
9307         WHERE   a.oracle_id = b.oracle_id
9308         AND     b.application_id = 724;
9309 
9310         FOR i in 1..atp_summ_tab.count LOOP
9311 
9312                 l_table_name := 'MSC_' || atp_summ_tab(i);
9313 
9314                 IF (l_share_partition = 'Y') THEN
9315                         l_plan_id := MAXVALUE;
9316                 ELSE
9317                         l_plan_id := p_plan_id;
9318                 END IF;
9319 
9320                 l_partition_name :=  atp_summ_tab(i)|| '_' || l_plan_id;
9321                 msc_util.msc_log('l_partition_name := ' || l_partition_name);
9322 
9323                 BEGIN
9324                 SELECT count(*)
9325                 INTO   l_count
9326                 FROM   all_tab_partitions
9327                 WHERE  table_name = l_table_name
9328                 AND    partition_name = l_partition_name
9329                 AND    table_owner = l_msc_schema;
9330                 EXCEPTION
9331                         WHEN OTHERS THEN
9332                                 msc_util.msc_log('Inside Exception');
9333                                 l_count := 0;
9334                 END;
9335 
9336                 IF (l_count = 0) THEN
9337                         FND_MESSAGE.SET_NAME('MSC', 'MSC_ATP_PLAN_PARTITION_MISSING');
9338                         FND_MESSAGE.SET_TOKEN('PLAN_NAME', l_plan_name);
9339                         FND_MESSAGE.SET_TOKEN('TABLE_NAME', 'MSC_' || atp_summ_tab(i));
9340                         msc_util.msc_log(FND_MESSAGE.GET);
9341                         RETCODE := G_ERROR;
9342                         RETURN;
9343                 END IF;
9344         END LOOP;
9345 
9346         BEGIN
9347                 update msc_plans
9348                 set    summary_flag = 2
9349                 where  plan_id = p_plan_id;
9350                 commit;
9351         EXCEPTION
9352                 WHEN OTHERS THEN
9353                         ERRBUF := sqlerrm;
9354                         RETCODE := G_ERROR;
9355                         RETURN;
9356         END;
9357 
9358         msc_util.msc_log('l_share_partition := ' || l_share_partition);
9359 
9360         BEGIN
9361             SELECT	NVL(pre_alloc_hash_size, -1),
9362         		NVL(pre_alloc_sort_size, -1),
9363         		NVL(pre_alloc_parallel_degree, 1)
9364             INTO	l_hash_size,
9365         		l_sort_size,
9366         		l_parallel_degree
9367             FROM	msc_atp_parameters
9368             WHERE	rownum = 1;
9369         EXCEPTION
9370             WHEN others THEN
9371         	 msc_util.msc_log('Error getting performance param: ' || sqlcode || ': ' || sqlerrm);
9372         	 l_hash_size := -1;
9373         	 l_sort_size := -1;
9374         	 l_parallel_degree := 1;
9375         END;
9376 
9377         msc_util.msc_log('Hash: ' || l_hash_size || ' Sort: ' || l_sort_size || ' Parallel: ' || l_parallel_degree);
9378 
9379         IF NVL(l_hash_size, -1) <> -1 THEN
9380            l_sql_stmt_1 := 'alter session set hash_area_size = ' || to_char(l_hash_size);
9381            msc_util.msc_log('l_sql_stmt : ' || l_sql_stmt_1);
9382            execute immediate l_sql_stmt_1;
9383         END IF;
9384 
9385         IF NVL(l_sort_size, -1) <> -1 THEN
9386            l_sql_stmt_1 := 'alter session set sort_area_size = ' || to_char(l_sort_size);
9387            msc_util.msc_log('l_sql_stmt : ' || l_sql_stmt_1);
9388            execute immediate l_sql_stmt_1;
9389         END IF;
9390 
9391         /* forecast at PF changes begin
9392            Changes to populate demand class allocation information in a temp table*/
9393         IF p_demand_priority = 'Y' THEN
9394                 l_alloc_temp_table := 'MSC_ALLOC_TEMP_' || to_char(p_plan_id);
9395 
9396                 msc_util.msc_log('temp table : ' || l_alloc_temp_table);
9397 
9398                 /* Create temp table in tablespace of MSC_ALLOC_DEMANDS*/
9399                 SELECT  t.tablespace_name, NVL(i.def_tablespace_name, t.tablespace_name)
9400                 INTO    l_tbspace, l_ind_tbspace
9401                 FROM    all_tab_partitions t,
9402                         all_part_indexes i
9403                 WHERE   t.table_owner = l_msc_schema
9404                 AND     t.table_name = 'MSC_ALLOC_DEMANDS'
9405                 AND     t.partition_name = 'ALLOC_DEMANDS_' || to_char(l_plan_id)
9406                 AND     i.owner (+) = t.table_owner
9407                 AND     i.table_name (+) = t.table_name
9408                 AND     rownum = 1;
9409 
9410                 msc_util.msc_log('tb space : ' || l_tbspace);
9411                 msc_util.msc_log('ind tbspace : ' || l_ind_tbspace);
9412 
9413                 l_insert_stmt := 'CREATE TABLE ' || l_alloc_temp_table || '(
9414                                      PEGGING_ID             NUMBER,
9415                                      DEMAND_CLASS           VARCHAR2(30),
9416                                      ALLOCATION_PERCENT     NUMBER)
9417                                   TABLESPACE ' || l_tbspace || '
9418                                   PCTFREE 0 STORAGE(INITIAL 40K NEXT 5M PCTINCREASE 0)';
9419 
9420                 msc_util.msc_log('before creating table : ' || l_alloc_temp_table);
9421 
9422                 BEGIN
9423                    ad_ddl.do_ddl(APPLSYS_SCHEMA => l_applsys_schema,
9424                         APPLICATION_SHORT_NAME => 'MSC',
9425                         STATEMENT_TYPE => ad_ddl.create_table,
9426                         STATEMENT => l_insert_stmt,
9427                         OBJECT_NAME => l_alloc_temp_table);
9428                    msc_util.msc_log('after creating table : ' || l_alloc_temp_table);
9429 
9430                 EXCEPTION
9431                    WHEN others THEN
9432                       msc_util.msc_log(sqlcode || ': ' || sqlerrm);
9433                       msc_util.msc_log('Exception of create table : ' || l_alloc_temp_table);
9434 
9435                       ad_ddl.do_ddl(APPLSYS_SCHEMA => l_applsys_schema,
9436                              APPLICATION_SHORT_NAME => 'MSC',
9437                              STATEMENT_TYPE => ad_ddl.drop_table,
9438                              STATEMENT =>  'DROP TABLE ' || l_alloc_temp_table,
9439                              OBJECT_NAME => l_alloc_temp_table);
9440 
9441                       msc_util.msc_log('After Drop table : ' ||l_alloc_temp_table);
9442                       msc_util.msc_log('Before exception create table : ' ||l_alloc_temp_table);
9443 
9444                       ad_ddl.do_ddl(APPLSYS_SCHEMA => l_applsys_schema,
9445                              APPLICATION_SHORT_NAME => 'MSC',
9446                              STATEMENT_TYPE => ad_ddl.create_table,
9447                              STATEMENT => l_insert_stmt,
9448                              OBJECT_NAME => l_alloc_temp_table);
9449 
9450                       msc_util.msc_log('After exception create table : ' ||l_alloc_temp_table);
9451                 END;
9452 
9453                 Calculate_Alloc_Percentages(p_plan_id, l_return_status);
9454 
9455                 IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
9456                         IF PG_DEBUG in ('Y', 'C') THEN
9457                                 msc_util.msc_log('Pf_Post_Plan_Proc: ' || 'Error occured in procedure Calculate_Alloc_Percentages');
9458                         END IF;
9459                         RAISE FND_API.G_EXC_ERROR;
9460                 END IF;
9461 
9462                 msc_util.msc_log('Before generating the SQL');
9463 
9464                 l_insert_stmt := 'insert into '|| l_alloc_temp_table ||'(
9465                                         pegging_id,
9466                                         demand_class,
9467                                         allocation_percent
9468                                 )
9469                                 (select peg1.pegging_id,
9470                                         :l_excess_dc,
9471                                         1
9472                                  from   msc_full_pegging peg1
9473                                  where  peg1.plan_id = :p_plan_id
9474                                  and    peg1.pegging_id = peg1.end_pegging_id
9475                                  and    peg1.demand_id in (-1, -2)
9476 
9477                                  UNION ALL
9478 
9479                                  select peg1.pegging_id,
9480                                         decode(mat.transaction_id, NULL, d.demand_class,
9481                                                                    mat.demand_class),
9482                                         decode(mat.transaction_id, NULL, 1,
9483                                                                    mat.allocation_percent)
9484                                  from   msc_full_pegging peg1,
9485                                         msc_demands d,
9486                                         msc_alloc_temp mat
9487                                  where  peg1.plan_id = :p_plan_id
9488                                  and    peg1.pegging_id = peg1.end_pegging_id
9489                                  and    peg1.demand_id = d.demand_id
9490                                  and    peg1.plan_id = d.plan_id
9491                                  and    d.disposition_id = mat.transaction_id (+)
9492                                 )';
9493 
9494                 msc_util.msc_log(l_insert_stmt);
9495                 msc_util.msc_log('After generating the SQL');
9496 
9497                 -- Obtain cursor handler for sql_stmt
9498                 cur_handler := DBMS_SQL.OPEN_CURSOR;
9499 
9500                 DBMS_SQL.PARSE(cur_handler, l_insert_stmt, DBMS_SQL.NATIVE);
9501 
9502                 msc_util.msc_log('After parsing the SQL');
9503 
9504                 DBMS_SQL.BIND_VARIABLE(cur_handler, ':l_excess_dc', l_excess_dc);
9505                 DBMS_SQL.BIND_VARIABLE(cur_handler, ':p_plan_id', p_plan_id);
9506 
9507                 msc_util.msc_log('after binding the variables');
9508 
9509                 -- Execute the cursor
9510                 rows_processed := DBMS_SQL.EXECUTE(cur_handler);
9511 
9512                 msc_util.msc_log('After executing the cursor');
9513 
9514                 commit;
9515 
9516                 msc_util.msc_log('before creating indexes on temp table');
9517 
9518                 l_sql_stmt_1 := 'CREATE INDEX ' || l_alloc_temp_table || '_N1 ON ' || l_alloc_temp_table || '
9519                                 (pegging_id)
9520                                 STORAGE(INITIAL 40K NEXT 2M PCTINCREASE 0) tablespace ' || l_ind_tbspace;
9521 
9522                 msc_util.msc_log('Before index : ' || l_alloc_temp_table || '.' || l_alloc_temp_table || '_N1');
9523 
9524                 ad_ddl.do_ddl(APPLSYS_SCHEMA => l_applsys_schema,
9525                                 APPLICATION_SHORT_NAME => 'MSC',
9526                                 STATEMENT_TYPE => ad_ddl.create_index,
9527                                 STATEMENT => l_sql_stmt_1,
9528                                 OBJECT_NAME => l_alloc_temp_table);
9529 
9530                 msc_util.msc_log('After index : ' || l_alloc_temp_table || '.' || l_alloc_temp_table || '_N1');
9531                 msc_util.msc_log('Done creating indexes on temp table');
9532                 msc_util.msc_log('Gather Table Stats');
9533 
9534                 -- Use p_plan_id instead of l_plan_id
9535                 --fnd_stats.gather_table_stats('MSC', 'MSC_ALLOC_TEMP_' || to_char(l_plan_id), granularity => 'ALL');
9536                 fnd_stats.gather_table_stats(l_msc_schema, l_alloc_temp_table, granularity => 'ALL');
9537         END IF;
9538         /* forecast at PF changes end*/
9539 
9540         IF l_share_partition = 'Y' THEN
9541 
9542            msc_util.msc_log('Inside shared partition');
9543 
9544            -- first delete the existing data from tables
9545            msc_util.msc_log('before deleteing data from the table');
9546 
9547            DELETE MSC_ALLOC_DEMANDS where plan_id = p_plan_id;
9548            msc_util.msc_log('After deleting data from MSC_ALLOC_DEMANDS table');
9549 
9550            DELETE MSC_ALLOC_SUPPLIES where plan_id = p_plan_id;
9551            msc_util.msc_log('After deleting data from MSC_ALLOC_SUPPLIES table');
9552 
9553            /*--------------------------------------------------------------------------
9554            |  <<<<<<<<<<<<<<<<<<<<<<< Begin Demands SQL1 >>>>>>>>>>>>>>>>>>>>>>>>>>>
9555            +-------------------------------------------------------------------------*/
9556            msc_util.msc_log('Before generating Demands SQL1');
9557 
9558            /* forecast at PF changes begin*/
9559            Prepare_Demands_Stmt(l_share_partition, p_demand_priority, l_excess_supply_by_dc,
9560                                  NULL, l_alloc_temp_table, l_parallel_degree, l_sql_stmt_1, l_return_status);
9561            IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
9562                 IF PG_DEBUG in ('Y', 'C') THEN
9563                         msc_util.msc_log('Pf_Post_Plan_Proc: ' || 'Error occured in procedure Prepare_Demands_Stmt');
9564                 END IF;
9565                 RAISE FND_API.G_EXC_ERROR;
9566            END IF;
9567 
9568            msc_util.msc_log('After generating Demands SQL1');
9569            msc_util.msc_log(l_sql_stmt_1);
9570 
9571            -- Obtain cursor handler for sql_stmt
9572            cur_handler := DBMS_SQL.OPEN_CURSOR;
9573 
9574            DBMS_SQL.PARSE(cur_handler, l_sql_stmt_1, DBMS_SQL.NATIVE);
9575            msc_util.msc_log('After parsing Demands SQL1');
9576 
9577            DBMS_SQL.BIND_VARIABLE(cur_handler, ':l_user_id', l_user_id);
9578            DBMS_SQL.BIND_VARIABLE(cur_handler, ':l_sysdate', l_sysdate);
9579            DBMS_SQL.BIND_VARIABLE(cur_handler, ':p_plan_id', p_plan_id);
9580            DBMS_SQL.BIND_VARIABLE(cur_handler, ':l_yes', l_yes);
9581            IF p_demand_priority = 'Y' THEN
9582                 DBMS_SQL.BIND_VARIABLE(cur_handler, ':l_excess_dc', l_excess_dc);
9583                 DBMS_SQL.BIND_VARIABLE(cur_handler, ':p_excess_supply_by_dc', l_excess_supply_by_dc);
9584                 DBMS_SQL.BIND_VARIABLE(cur_handler, ':def_num', '-1');
9585            END IF;
9586            msc_util.msc_log('after binding the variables');
9587 
9588            -- Execute the cursor
9589            rows_processed := DBMS_SQL.EXECUTE(cur_handler);
9590            msc_util.msc_log('After executing the cursor');
9591 
9592            msc_util.msc_log('rows processed: ' || rows_processed);
9593            msc_util.msc_log('after inserting item data into MSC_ALLOC_DEMANDS tables');
9594 
9595            /*--------------------------------------------------------------------------
9596            |  <<<<<<<<<<<<<<<<<<<<<<< Begin Supplies SQL1 >>>>>>>>>>>>>>>>>>>>>>>>>>>
9597            +-------------------------------------------------------------------------*/
9598            msc_util.msc_log('Before generating Supplies SQL1');
9599 
9600            Prepare_Supplies_Stmt(l_share_partition, p_demand_priority,
9601                                   l_excess_supply_by_dc, NULL, l_alloc_temp_table, l_parallel_degree, l_sql_stmt_1, l_return_status);
9602 
9603            IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
9604                 IF PG_DEBUG in ('Y', 'C') THEN
9605                         msc_util.msc_log('Pf_Post_Plan_Proc: ' || 'Error occured in procedure Prepare_Supplies_Stmt');
9606                 END IF;
9607                 RAISE FND_API.G_EXC_ERROR;
9608            END IF;
9609 
9610            msc_util.msc_log(l_sql_stmt_1);
9611            msc_util.msc_log('After Generating Supplies SQL1');
9612 
9613            -- Parse cursor handler for sql_stmt: Don't open as its already opened
9614 
9615            DBMS_SQL.PARSE(cur_handler, l_sql_stmt_1, DBMS_SQL.NATIVE);
9616            msc_util.msc_log('After parsing Supplies SQL1');
9617 
9618            DBMS_SQL.BIND_VARIABLE(cur_handler, ':l_user_id', l_user_id);
9619            DBMS_SQL.BIND_VARIABLE(cur_handler, ':l_sysdate', l_sysdate);
9620            DBMS_SQL.BIND_VARIABLE(cur_handler, ':p_plan_id', p_plan_id);
9621            DBMS_SQL.BIND_VARIABLE(cur_handler, ':l_yes', l_yes);
9622            IF p_demand_priority = 'Y' THEN
9623                 DBMS_SQL.BIND_VARIABLE(cur_handler, ':l_excess_dc', l_excess_dc);
9624                 DBMS_SQL.BIND_VARIABLE(cur_handler, ':p_excess_supply_by_dc', l_excess_supply_by_dc);
9625                 DBMS_SQL.BIND_VARIABLE(cur_handler, ':def_num', '-1');
9626            END IF;
9627            /* forecast at PF changes end*/
9628 
9629            msc_util.msc_log('after binding the variables');
9630 
9631            -- Execute the cursor
9632            rows_processed := DBMS_SQL.EXECUTE(cur_handler);
9633            msc_util.msc_log('After executing first supplies cursor');
9634 
9635            msc_util.msc_log('rows processed: ' || rows_processed);
9636            msc_util.msc_log('after inserting item data into MSC_ALLOC_SUPPLIES tables');
9637 
9638            msc_util.msc_log('Analyze Plan partition for MSC_ALLOC_DEMANDS');
9639            fnd_stats.gather_table_stats(ownname=>l_msc_schema,tabname=>'MSC_ALLOC_DEMANDS',
9640                                    partname=>'ALLOC_DEMANDS_999999',
9641                                    granularity=>'PARTITION',
9642                                    percent =>10);
9643 
9644            msc_util.msc_log('Analyze Plan partition for MSC_ALLOC_SUPPLIES');
9645            fnd_stats.gather_table_stats(ownname=>l_msc_schema,tabname=>'MSC_ALLOC_SUPPLIES',
9646                                    partname=>'ALLOC_SUPPLIES_999999',
9647                                    granularity=>'PARTITION',
9648                                    percent =>10);
9649 
9650         ELSE
9651 
9652            msc_util.msc_log('not a shared plan partition, insert data into temp tables');
9653 
9654            l_temp_table := 'MSC_TEMP_ALLOC_DEM_' || to_char(l_plan_id);
9655 
9656            msc_util.msc_log('temp table : ' || l_temp_table);
9657 
9658            IF p_demand_priority <> 'Y' THEN
9659                    SELECT  t.tablespace_name, NVL(i.def_tablespace_name, t.tablespace_name)
9660         	   INTO    l_tbspace, l_ind_tbspace
9661                    FROM    all_tab_partitions t,
9662                            all_part_indexes i
9663                    WHERE   t.table_owner = l_msc_schema
9664                    AND     t.table_name = 'MSC_ALLOC_DEMANDS'
9665         	   AND     t.partition_name = 'ALLOC_DEMANDS_' || to_char(l_plan_id)
9666                    AND     i.owner (+) = t.table_owner
9667                    AND     i.table_name (+) = t.table_name
9668                    AND     rownum = 1;
9669 
9670                    msc_util.msc_log('tb space : ' || l_tbspace);
9671                    msc_util.msc_log('ind tbspace : ' || l_ind_tbspace);
9672            END IF;
9673 
9674          --bug 6113544
9675          l_insert_stmt := 'CREATE TABLE ' || l_temp_table
9676            || ' TABLESPACE ' || l_tbspace
9677            || ' PCTFREE 0 STORAGE(INITIAL 40K NEXT 5M PCTINCREASE 0)'
9678            || ' as select * from MSC_ALLOC_DEMANDS where 1=2 ';
9679 
9680       /*
9681            l_insert_stmt := 'CREATE TABLE ' || l_temp_table || '(
9682 				 PLAN_ID                    NUMBER           NOT NULL,
9683 				 INVENTORY_ITEM_ID          NUMBER           NOT NULL,
9684 				 ORGANIZATION_ID            NUMBER           NOT NULL,
9685 				 SR_INSTANCE_ID             NUMBER           NOT NULL,
9686 				 DEMAND_CLASS               VARCHAR2(30),   --bug3272444
9687 				 DEMAND_DATE                DATE             NOT NULL,
9688 				 PARENT_DEMAND_ID           NUMBER           NOT NULL,
9689 				 ALLOCATED_QUANTITY         NUMBER           NOT NULL,
9690 				 ORIGINATION_TYPE           NUMBER           NOT NULL,
9691 				 ORDER_NUMBER               VARCHAR2(62),
9692 				 SALES_ORDER_LINE_ID        NUMBER,
9693 				 OLD_DEMAND_DATE            DATE,
9694 				 OLD_ALLOCATED_QUANTITY     NUMBER,
9695 				 CREATED_BY                 NUMBER           NOT NULL,
9696 				 CREATION_DATE              DATE             NOT NULL,
9697 				 LAST_UPDATED_BY            NUMBER           NOT NULL,
9698 				 LAST_UPDATE_DATE           DATE             NOT NULL,
9699 				 DEMAND_QUANTITY            NUMBER,
9700 				 PF_DISPLAY_FLAG            NUMBER,
9701 				 ORIGINAL_ITEM_ID           NUMBER,
9702 				 ORIGINAL_ORIGINATION_TYPE  NUMBER,
9703 				 ORIGINAL_DEMAND_DATE       DATE,
9704 				 SOURCE_ORGANIZATION_ID     NUMBER,         --bug3272444
9705                                  USING_ASSEMBLY_ITEM_ID     NUMBER,         --bug3272444
9706 				 CUSTOMER_ID                NUMBER,
9707                                  SHIP_TO_SITE_ID            NUMBER,
9708                                  REFRESH_NUMBER             NUMBER,         --bug3272444
9709                                  OLD_REFRESH_NUMBER         NUMBER,         --bug3272444
9710                                  DEMAND_SOURCE_TYPE         NUMBER,         --cmro
9711                                  REQUEST_DATE               DATE)           --bug3263368
9712 			    TABLESPACE ' || l_tbspace || '
9713                             PCTFREE 0 STORAGE(INITIAL 40K NEXT 5M PCTINCREASE 0)';
9714        */
9715 
9716            msc_util.msc_log('before creating table : ' || l_temp_table);
9717            BEGIN
9718               ad_ddl.do_ddl(APPLSYS_SCHEMA => l_applsys_schema,
9719                    APPLICATION_SHORT_NAME => 'MSC',
9720                    STATEMENT_TYPE => ad_ddl.create_table,
9721                    STATEMENT => l_insert_stmt,
9722                    OBJECT_NAME => l_temp_table);
9723               msc_util.msc_log('after creating table : ' || l_temp_table);
9724 
9725            EXCEPTION
9726               WHEN others THEN
9727                  msc_util.msc_log(sqlcode || ': ' || sqlerrm);
9728                  msc_util.msc_log('Exception of create table : ' || l_temp_table);
9729 
9730                  ad_ddl.do_ddl(APPLSYS_SCHEMA => l_applsys_schema,
9731                         APPLICATION_SHORT_NAME => 'MSC',
9732                         STATEMENT_TYPE => ad_ddl.drop_table,
9733                         STATEMENT =>  'DROP TABLE ' || l_temp_table,
9734                         OBJECT_NAME => l_temp_table);
9735 
9736                  msc_util.msc_log('After Drop table : ' ||l_temp_table);
9737                  msc_util.msc_log('Before exception create table : ' ||l_temp_table);
9738 
9739                  ad_ddl.do_ddl(APPLSYS_SCHEMA => l_applsys_schema,
9740                         APPLICATION_SHORT_NAME => 'MSC',
9741                         STATEMENT_TYPE => ad_ddl.create_table,
9742                         STATEMENT => l_insert_stmt,
9743                         OBJECT_NAME => l_temp_table);
9744                  msc_util.msc_log('After exception create table : ' ||l_temp_table);
9745            END;
9746 
9747            /*--------------------------------------------------------------------------
9748            |  <<<<<<<<<<<<<<<<<<<<<<< Begin Demands SQL1 >>>>>>>>>>>>>>>>>>>>>>>>>>>
9749            +-------------------------------------------------------------------------*/
9750            msc_util.msc_log('Before generating Demands SQL1');
9751 
9752            /* forecast at PF changes begin*/
9753            Prepare_Demands_Stmt(l_share_partition, p_demand_priority, l_excess_supply_by_dc,
9754                                  l_temp_table, l_alloc_temp_table, l_parallel_degree, l_sql_stmt_1, l_return_status);
9755 
9756            IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
9757                 IF PG_DEBUG in ('Y', 'C') THEN
9758                         msc_util.msc_log('Pf_Post_Plan_Proc: ' || 'Error occured in procedure Prepare_Demands_Stmt');
9759                 END IF;
9760                 RAISE FND_API.G_EXC_ERROR;
9761            END IF;
9762 
9763            msc_util.msc_log(l_sql_stmt_1);
9764            msc_util.msc_log('After generating Demands SQL1');
9765 
9766            -- Obtain cursor handler for sql_stmt
9767            cur_handler := DBMS_SQL.OPEN_CURSOR;
9768 
9769            DBMS_SQL.PARSE(cur_handler, l_sql_stmt_1, DBMS_SQL.NATIVE);
9770            msc_util.msc_log('After parsing Demands SQL1');
9771 
9772            DBMS_SQL.BIND_VARIABLE(cur_handler, ':l_user_id', l_user_id);
9773            DBMS_SQL.BIND_VARIABLE(cur_handler, ':l_sysdate', l_sysdate);
9774            DBMS_SQL.BIND_VARIABLE(cur_handler, ':p_plan_id', p_plan_id);
9775            DBMS_SQL.BIND_VARIABLE(cur_handler, ':l_yes', l_yes);
9776            IF p_demand_priority = 'Y' THEN
9777                 DBMS_SQL.BIND_VARIABLE(cur_handler, ':l_excess_dc', l_excess_dc);
9778                 DBMS_SQL.BIND_VARIABLE(cur_handler, ':p_excess_supply_by_dc', l_excess_supply_by_dc);
9779                 DBMS_SQL.BIND_VARIABLE(cur_handler, ':def_num', '-1');
9780            END IF;
9781            /* forecast at PF changes end*/
9782 
9783            msc_util.msc_log('after binding the variables');
9784 
9785            -- Execute the cursor
9786            rows_processed := DBMS_SQL.EXECUTE(cur_handler);
9787            msc_util.msc_log('After executing the cursor');
9788            msc_util.msc_log('after inserting item data into MSC_TEMP_ALLOC_DEMANDS table');
9789 
9790            commit;
9791 
9792            msc_util.msc_log('before creating indexes on temp demand table');
9793            l_sql_stmt_1 := 'CREATE INDEX ' || l_temp_table || '_N1 ON ' || l_temp_table || '
9794                            --NOLOGGING
9795                            (plan_id, inventory_item_id, organization_id, sr_instance_id, demand_class, demand_date)
9796                            STORAGE(INITIAL 40K NEXT 2M PCTINCREASE 0) tablespace ' || l_ind_tbspace;
9797 
9798            msc_util.msc_log('Before index : ' || l_temp_table || '.' || l_temp_table || '_N1');
9799 
9800            ad_ddl.do_ddl(APPLSYS_SCHEMA => l_applsys_schema,
9801                            APPLICATION_SHORT_NAME => 'MSC',
9802                            STATEMENT_TYPE => ad_ddl.create_index,
9803                            STATEMENT => l_sql_stmt_1,
9804                            OBJECT_NAME => l_temp_table);
9805 
9806            msc_util.msc_log('After index : ' || l_temp_table || '.' || l_temp_table || '_N1');
9807 
9808            l_sql_stmt_1 := 'CREATE INDEX ' || l_temp_table || '_N2 ON ' || l_temp_table || '
9809                            -- NOLOGGING
9810                            --Bug 3629191
9811                            (plan_id,
9812                            sales_order_line_id)
9813                            STORAGE(INITIAL 40K NEXT 2M PCTINCREASE 0) tablespace ' || l_ind_tbspace;
9814 
9815            msc_util.msc_log('Before index : ' || l_temp_table || '.' || l_temp_table || '_N2');
9816 
9817            ad_ddl.do_ddl(APPLSYS_SCHEMA => l_applsys_schema,
9818                            APPLICATION_SHORT_NAME => 'MSC',
9819                            STATEMENT_TYPE => ad_ddl.create_index,
9820                            STATEMENT => l_sql_stmt_1,
9821                            OBJECT_NAME => l_temp_table);
9822 
9823            msc_util.msc_log('After index : ' || l_temp_table || '.' || l_temp_table || '_N2');
9824 
9825            l_sql_stmt_1 := 'CREATE INDEX ' || l_temp_table || '_N3 ON ' || l_temp_table || '
9826                            -- NOLOGGING
9827                            --Bug 3629191
9828                            (plan_id,
9829                            parent_demand_id)
9830                            STORAGE(INITIAL 40K NEXT 2M PCTINCREASE 0) tablespace ' || l_ind_tbspace;
9831 
9832            msc_util.msc_log('Before index : ' || l_temp_table || '.' || l_temp_table || '_N3');
9833 
9834            ad_ddl.do_ddl(APPLSYS_SCHEMA => l_applsys_schema,
9835                            APPLICATION_SHORT_NAME => 'MSC',
9836                            STATEMENT_TYPE => ad_ddl.create_index,
9837                            STATEMENT => l_sql_stmt_1,
9838                            OBJECT_NAME => l_temp_table);
9839 
9840            msc_util.msc_log('After index : ' || l_temp_table || '.' || l_temp_table || '_N3');
9841            msc_util.msc_log('Done creating indexes on temp demand table');
9842 
9843            l_temp_table := 'MSC_TEMP_ALLOC_SUP_' || to_char(l_plan_id);
9844 
9845            SELECT  t.tablespace_name, NVL(i.def_tablespace_name, t.tablespace_name)
9846            INTO    l_tbspace, l_ind_tbspace
9847            FROM    all_tab_partitions t,
9848                    all_part_indexes i
9849            WHERE   t.table_owner = l_msc_schema
9850            AND     t.table_name = 'MSC_ALLOC_SUPPLIES'
9851            AND     t.partition_name = 'ALLOC_SUPPLIES_' || to_char(l_plan_id)
9852            AND     i.owner (+) = t.table_owner
9853            AND     i.table_name (+) = t.table_name
9854            AND     rownum = 1;
9855 
9856            msc_util.msc_log('tb space : ' || l_tbspace);
9857            msc_util.msc_log('ind tbspace : ' || l_ind_tbspace);
9858 
9859        --bug 6113544
9860            l_insert_stmt := 'CREATE TABLE ' || l_temp_table
9861            || ' TABLESPACE ' || l_tbspace
9862            || ' PCTFREE 0 STORAGE(INITIAL 40K NEXT 5M PCTINCREASE 0)'
9863            || ' as select * from msc_alloc_supplies where 1=2 ';
9864 
9865        /*
9866            l_insert_stmt := 'CREATE TABLE ' || l_temp_table || '(
9867                                  PLAN_ID                    NUMBER           NOT NULL,
9868                                  INVENTORY_ITEM_ID          NUMBER           NOT NULL,
9869                                  ORGANIZATION_ID            NUMBER           NOT NULL,
9870                                  SR_INSTANCE_ID             NUMBER           NOT NULL,
9871                                  DEMAND_CLASS               VARCHAR2(30)      ,  --bug3272444
9872                                  SUPPLY_DATE                DATE             NOT NULL,
9873                                  PARENT_TRANSACTION_ID      NUMBER           NOT NULL,
9874                                  ALLOCATED_QUANTITY         NUMBER           NOT NULL,
9875                                  ORDER_TYPE                 NUMBER           NOT NULL,
9876                                  ORDER_NUMBER               VARCHAR2(240),
9877 				 SCHEDULE_DESIGNATOR_ID	    NUMBER,
9878                                  SALES_ORDER_LINE_ID        NUMBER,
9879                                  OLD_SUPPLY_DATE            DATE,
9880                                  OLD_ALLOCATED_QUANTITY     NUMBER,
9881 				 STEALING_FLAG		    NUMBER,
9882                                  CREATED_BY                 NUMBER           NOT NULL,
9883                                  CREATION_DATE              DATE             NOT NULL,
9884                                  LAST_UPDATED_BY            NUMBER           NOT NULL,
9885                                  LAST_UPDATE_DATE           DATE             NOT NULL,
9886                                  FROM_DEMAND_CLASS          VARCHAR2(80),
9887                                  SUPPLY_QUANTITY            NUMBER,
9888                                  ORIGINAL_ORDER_TYPE        NUMBER,         --bug3272444
9889                                  ORIGINAL_ITEM_ID           NUMBER,         --bug3272444
9890                                  CUSTOMER_ID                NUMBER,
9891                                  SHIP_TO_SITE_ID            NUMBER,
9892                                  REFRESH_NUMBER             NUMBER,        --bug3272444
9893                                  OLD_REFRESH_NUMBER         NUMBER,        --bug3272444
9894                                  ATO_MODEL_LINE_ID          NUMBER,
9895                                --ATO_MODEL_LINE_ID          NUMBER)        --
9896                                  DEMAND_SOURCE_TYPE         NUMBER)        --cmro
9897                                   TABLESPACE ' || l_tbspace || '
9898                             PCTFREE 0 STORAGE(INITIAL 40K NEXT 5M PCTINCREASE 0)';
9899        */
9900 
9901            msc_util.msc_log('before creating table : ' || l_temp_table);
9902            BEGIN
9903               ad_ddl.do_ddl(APPLSYS_SCHEMA => l_applsys_schema,
9904                    APPLICATION_SHORT_NAME => 'MSC',
9905                    STATEMENT_TYPE => ad_ddl.create_table,
9906                    STATEMENT => l_insert_stmt,
9907                    OBJECT_NAME => l_temp_table);
9908               msc_util.msc_log('after creating table : ' || l_temp_table);
9909 
9910            EXCEPTION
9911               WHEN others THEN
9912                  msc_util.msc_log(sqlcode || ': ' || sqlerrm);
9913                  msc_util.msc_log('Exception of create table : ' || l_temp_table);
9914 
9915                  ad_ddl.do_ddl(APPLSYS_SCHEMA => l_applsys_schema,
9916                         APPLICATION_SHORT_NAME => 'MSC',
9917                         STATEMENT_TYPE => ad_ddl.drop_table,
9918                         STATEMENT =>  'DROP TABLE ' || l_temp_table,
9919                         OBJECT_NAME => l_temp_table);
9920 
9921                  msc_util.msc_log('After Drop table : ' ||l_temp_table);
9922                  msc_util.msc_log('Before exception create table : ' ||l_temp_table);
9923 
9924                  ad_ddl.do_ddl(APPLSYS_SCHEMA => l_applsys_schema,
9925                         APPLICATION_SHORT_NAME => 'MSC',
9926                         STATEMENT_TYPE => ad_ddl.create_table,
9927                         STATEMENT => l_insert_stmt,
9928                         OBJECT_NAME => l_temp_table);
9929                  msc_util.msc_log('After exception create table : ' ||l_temp_table);
9930            END;
9931 
9932            /*--------------------------------------------------------------------------
9933            |  <<<<<<<<<<<<<<<<<<<<<<< Begin Supplies SQL1 >>>>>>>>>>>>>>>>>>>>>>>>>>>
9934            +-------------------------------------------------------------------------*/
9935            msc_util.msc_log('Before generating Supplies SQL1');
9936 
9937            /* forecast at PF changes begin*/
9938            Prepare_Supplies_Stmt(l_share_partition, p_demand_priority, l_excess_supply_by_dc,
9939                                   l_temp_table, l_alloc_temp_table, l_parallel_degree, l_sql_stmt_1, l_return_status);
9940 
9941            IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
9942                 IF PG_DEBUG in ('Y', 'C') THEN
9943                         msc_util.msc_log('Pf_Post_Plan_Proc: ' || 'Error occured in procedure Prepare_Supplies_Stmt');
9944                 END IF;
9945                 RAISE FND_API.G_EXC_ERROR;
9946            END IF;
9947 
9948            msc_util.msc_log(l_sql_stmt_1);
9949            msc_util.msc_log('After Generating Supplies SQL1');
9950 
9951            -- Parse cursor handler for sql_stmt: Don't open as its already opened
9952 
9953            DBMS_SQL.PARSE(cur_handler, l_sql_stmt_1, DBMS_SQL.NATIVE);
9954            msc_util.msc_log('After parsing Supplies SQL1');
9955 
9956            DBMS_SQL.BIND_VARIABLE(cur_handler, ':l_user_id', l_user_id);
9957            DBMS_SQL.BIND_VARIABLE(cur_handler, ':l_sysdate', l_sysdate);
9958            DBMS_SQL.BIND_VARIABLE(cur_handler, ':p_plan_id', p_plan_id);
9959            DBMS_SQL.BIND_VARIABLE(cur_handler, ':l_yes', l_yes);
9960            IF p_demand_priority = 'Y' THEN
9961                 DBMS_SQL.BIND_VARIABLE(cur_handler, ':l_excess_dc', l_excess_dc);
9962                 DBMS_SQL.BIND_VARIABLE(cur_handler, ':p_excess_supply_by_dc', l_excess_supply_by_dc);
9963                 DBMS_SQL.BIND_VARIABLE(cur_handler, ':def_num', '-1');
9964            END IF;
9965            /* forecast at PF changes end*/
9966 
9967            msc_util.msc_log('after binding the variables');
9968 
9969            -- Execute the cursor
9970            rows_processed := DBMS_SQL.EXECUTE(cur_handler);
9971            msc_util.msc_log('After executing first supplies cursor');
9972            msc_util.msc_log('after inserting item data into MSC_TEMP_ALLOC_SUPPLIES table');
9973 
9974            commit;
9975 
9976            msc_util.msc_log('before creating indexes on temp supply table');
9977            l_sql_stmt_1 := 'CREATE INDEX ' || l_temp_table || '_N1 ON ' || l_temp_table || '
9978                            -- NOLOGGING
9979                            (plan_id, inventory_item_id, organization_id, sr_instance_id, demand_class, supply_date)
9980                            STORAGE(INITIAL 40K NEXT 2M PCTINCREASE 0) tablespace ' || l_ind_tbspace;
9981 
9982            msc_util.msc_log('Before index : ' || l_temp_table || '.' || l_temp_table || '_N1');
9983 
9984            ad_ddl.do_ddl(APPLSYS_SCHEMA => l_applsys_schema,
9985                            APPLICATION_SHORT_NAME => 'MSC',
9986                            STATEMENT_TYPE => ad_ddl.create_index,
9987                            STATEMENT => l_sql_stmt_1,
9988                            OBJECT_NAME => l_temp_table);
9989 
9990            msc_util.msc_log('After index : ' || l_temp_table || '.' || l_temp_table || '_N1');
9991 
9992            l_sql_stmt_1 := 'CREATE INDEX ' || l_temp_table || '_N2 ON ' || l_temp_table || '
9993                            -- NOLOGGING
9994                            --Bug 3629191
9995                            (plan_id,
9996                            parent_transaction_id)
9997                            STORAGE(INITIAL 40K NEXT 2M PCTINCREASE 0) tablespace ' || l_ind_tbspace;
9998 
9999            msc_util.msc_log('Before index : ' || l_temp_table || '.' || l_temp_table || '_N2');
10000 
10001            ad_ddl.do_ddl(APPLSYS_SCHEMA => l_applsys_schema,
10002                            APPLICATION_SHORT_NAME => 'MSC',
10003                            STATEMENT_TYPE => ad_ddl.create_index,
10004                            STATEMENT => l_sql_stmt_1,
10005                            OBJECT_NAME => l_temp_table);
10006 
10007            msc_util.msc_log('After index : ' || l_temp_table || '.' || l_temp_table || '_N2');
10008 
10009            l_sql_stmt_1 := 'CREATE INDEX ' || l_temp_table || '_N3 ON ' || l_temp_table || '
10010                            -- NOLOGGING
10011                            --Bug 3629191
10012                            (plan_id,
10013                            sales_order_line_id)
10014                            STORAGE(INITIAL 40K NEXT 2M PCTINCREASE 0) tablespace ' || l_ind_tbspace;
10015 
10016            msc_util.msc_log('Before index : ' || l_temp_table || '.' || l_temp_table || '_N3');
10017 
10018            ad_ddl.do_ddl(APPLSYS_SCHEMA => l_applsys_schema,
10019                            APPLICATION_SHORT_NAME => 'MSC',
10020                            STATEMENT_TYPE => ad_ddl.create_index,
10021                            STATEMENT => l_sql_stmt_1,
10022                            OBJECT_NAME => l_temp_table);
10023 
10024            msc_util.msc_log('After index : ' || l_temp_table || '.' || l_temp_table || '_N3');
10025 
10026            msc_util.msc_log('Gather Table Stats for Allocated S/D Tables');
10027 
10028            fnd_stats.gather_table_stats(l_msc_schema, 'MSC_TEMP_ALLOC_DEM_' || to_char(l_plan_id), granularity => 'ALL');
10029            fnd_stats.gather_table_stats(l_msc_schema, 'MSC_TEMP_ALLOC_SUP_' || to_char(l_plan_id), granularity => 'ALL');
10030 
10031            msc_util.msc_log('swap partition for demands');
10032            l_partition_name := 'ALLOC_DEMANDS_' || to_char(l_plan_id);
10033 
10034            msc_util.msc_log('Partition name for msc_alloc_demands table : ' || l_partition_name);
10035 
10036            -- swap partiton for supplies and demand part
10037 
10038            l_sql_stmt := 'ALTER TABLE msc_alloc_demands EXCHANGE PARTITION ' || l_partition_name  ||
10039            ' with table MSC_TEMP_ALLOC_DEM_'|| to_char(l_plan_id) ||
10040            ' including indexes without validation';
10041 
10042            BEGIN
10043         	   msc_util.msc_log('Before alter table msc_alloc_demands');
10044                    ad_ddl.do_ddl(APPLSYS_SCHEMA => l_applsys_schema,
10045                    APPLICATION_SHORT_NAME => 'MSC',
10046                    STATEMENT_TYPE => ad_ddl.alter_table,
10047                    STATEMENT => l_sql_stmt,
10048                    OBJECT_NAME => 'MSC_ALLOC_DEMANDS');
10049        	   END;
10050 
10051            msc_util.msc_log('swap partition for supplies');
10052            l_partition_name := 'ALLOC_SUPPLIES_' || to_char(l_plan_id);
10053 
10054            msc_util.msc_log('Partition name for msc_alloc_supplies table : ' || l_partition_name);
10055 
10056            l_sql_stmt := 'ALTER TABLE msc_alloc_supplies EXCHANGE PARTITION ' || l_partition_name  ||
10057            ' with table MSC_TEMP_ALLOC_SUP_'|| to_char(l_plan_id) ||
10058            ' including indexes without validation';
10059 
10060            BEGIN
10061         	   msc_util.msc_log('Before alter table msc_alloc_supplies');
10062                    ad_ddl.do_ddl(APPLSYS_SCHEMA => l_applsys_schema,
10063                    APPLICATION_SHORT_NAME => 'MSC',
10064                    STATEMENT_TYPE => ad_ddl.alter_table,
10065                    STATEMENT => l_sql_stmt,
10066                    OBJECT_NAME => 'MSC_ALLOC_SUPPLIES');
10067        	   END;
10068 
10069 	END IF; -- IF l_share_partition = 'Y'
10070 
10071         /* forecast at PF changes begin*/
10072         -- clean temp tables after exchanging partitions
10073         msc_util.msc_log('Call procedure clean_temp_tables');
10074 
10075         MSC_POST_PRO.clean_temp_tables(l_applsys_schema, l_plan_id, p_plan_id, p_demand_priority);
10076 
10077         msc_util.msc_log('After procedure clean_temp_tables');
10078         /* forecast at PF changes end*/
10079 
10080         /* Call Update_Pf_Display_Flags to update Pf_Display_Flag in msc_alloc_demands*/
10081         Update_Pf_Display_Flag(p_plan_id, l_return_status);
10082 
10083         IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
10084                 IF PG_DEBUG in ('Y', 'C') THEN
10085                         msc_util.msc_log('Pf_Post_Plan_Proc: ' || 'Error occured in procedure Update_Pf_Display_Flag');
10086                 END IF;
10087                 RAISE FND_API.G_EXC_ERROR;
10088         END IF;
10089 
10090         BEGIN
10091             update msc_plans
10092             set    summary_flag = 3
10093             where  plan_id = p_plan_id;
10094         END;
10095 
10096 	RETCODE := G_SUCCESS;
10097 	commit;
10098 
10099 	msc_util.msc_log('End procedure Pf_Post_Plan_Proc');
10100 
10101 EXCEPTION
10102        WHEN OTHERS THEN
10103             msc_util.msc_log('Inside main exception of Pf_Post_Plan_Proc');
10104             msc_util.msc_log(sqlerrm);
10105             ERRBUF := sqlerrm;
10106 
10107             BEGIN
10108                update msc_plans
10109                set    summary_flag = 1
10110                where  plan_id = p_plan_id;
10111                commit;
10112             END;
10113 
10114             RETCODE := G_ERROR;
10115             IF (l_share_partition = 'Y') THEN
10116                ROLLBACK;
10117             ELSE
10118 	       msc_util.msc_log('Call procedure clean_temp_tables in exception');
10119 
10120 	       /* forecast at PF changes*/
10121 	       MSC_POST_PRO.clean_temp_tables(l_applsys_schema, l_plan_id, p_plan_id, p_demand_priority);
10122 
10123 	       msc_util.msc_log('After procedure clean_temp_tables in exception');
10124             END IF;
10125 END Pf_Post_Plan_Proc;
10126 
10127 -- New private procedure added for forecast at PF
10128 /*--Prepare_Demands_Stmt----------------------------------------------------
10129 |  o  Called from Pf_Post_Plan_Proc procedure to:
10130 |       -  Prepare demands stmt for preallocation + bucketting (Demand
10131 |            priority AATP)
10132 |            :  Excess supply by demand class = No
10133 |            :  Excess supply by demand class = Yes (for project atp)
10134 |       -  Prepare demands stmt for bucketting. (All PDS ATP scenarios except
10135 |            demand priority AATP)
10136 |  o  Prepares demand stmt for both share plan partition "yes" and "no".
10137 +-------------------------------------------------------------------------*/
10138 PROCEDURE Prepare_Demands_Stmt(
10139 	p_share_partition               IN      VARCHAR2,
10140 	p_demand_priority               IN      VARCHAR2,
10141 	p_excess_supply_by_dc           IN      VARCHAR2,
10142 	p_temp_table                    IN      VARCHAR2,
10143 	p_alloc_temp_table              IN      VARCHAR2,
10144 	p_parallel_degree               IN      NUMBER,
10145 	x_sql_stmt                      OUT 	NOCOPY VARCHAR2,
10146         x_return_status                 OUT     NOCOPY VARCHAR2
10147 )
10148 IS
10149 
10150 BEGIN
10151 
10152         IF PG_DEBUG in ('Y', 'C') THEN
10153                 msc_util.msc_log('Prepare_Demands_Stmt: ' || 'p_share_partition        : ' || p_share_partition);
10154                 msc_util.msc_log('Prepare_Demands_Stmt: ' || 'p_demand_priority        : ' || p_demand_priority);
10155                 msc_util.msc_log('Prepare_Demands_Stmt: ' || 'p_excess_supply_by_dc    : ' || p_excess_supply_by_dc);
10156                 msc_util.msc_log('Prepare_Demands_Stmt: ' || 'p_temp_table             : ' || p_temp_table);
10157                 msc_util.msc_log('Prepare_Demands_Stmt: ' || 'p_alloc_temp_table       : ' || p_alloc_temp_table);
10158                 msc_util.msc_log('Prepare_Demands_Stmt: ' || 'p_parallel_degree        : ' || p_parallel_degree);
10159                 msc_util.msc_log('Prepare_Demands_Stmt: ' || 'MSC_ATP_PVT.G_HP_DEMAND_BUCKETING_PREF        : ' || MSC_ATP_PVT.G_HP_DEMAND_BUCKETING_PREF);
10160         END IF;
10161 
10162         -- Initializing API return code
10163         x_return_status := FND_API.G_RET_STS_SUCCESS;
10164 
10165         IF p_share_partition = 'Y' THEN
10166            x_sql_stmt := '
10167                 INSERT INTO MSC_ALLOC_DEMANDS(';
10168         ELSE
10169            x_sql_stmt := '
10170                 INSERT INTO ' || p_temp_table || '(';
10171         END IF;
10172 
10173         IF p_demand_priority = 'Y' THEN
10174                    x_sql_stmt := x_sql_stmt ||'
10175                                 plan_id,
10176                                 inventory_item_id,
10177                                 original_item_id,
10178                                 organization_id,
10179                                 sr_instance_id,
10180                                 demand_class,
10181                                 demand_date,
10182                                 original_demand_date,
10183                                 demand_quantity,
10184                                 allocated_quantity,
10185                                 parent_demand_id,
10186                                 origination_type,
10187                                 original_origination_type,
10188                                 pf_display_flag,
10189                                 order_number,
10190                                 sales_order_line_id,
10191                                 demand_source_type,--cmro
10192                                 source_organization_id,
10193                                 using_assembly_item_id,
10194                                 customer_id,
10195                                 ship_to_site_id,
10196                                 created_by,
10197                                 creation_date,
10198                                 last_updated_by,
10199                                 last_update_date,
10200                                 request_date)--bug3263368
10201                 	(
10202                         SELECT	/*+  use_hash(pegging_v mv) parallel(mv,' || to_char(p_parallel_degree) || ')  */
10203                                 pegging_v.plan_id plan_id,
10204                                 pegging_v.inventory_item_id,
10205                                 pegging_v.original_item_id,
10206                                 pegging_v.organization_id,
10207                                 pegging_v.sr_instance_id,
10208                                 NVL(mv.demand_class, :def_num) demand_class,
10209                                 pegging_v.demand_date,
10210                                 pegging_v.original_demand_date,
10211                                 MIN(pegging_v.demand_quantity),
10212                                 SUM(pegging_v.allocated_quantity),
10213                                 pegging_v.demand_id,
10214                                 pegging_v.origination_type,
10215                                 pegging_v.original_origination_type,
10216                                 pegging_v.pf_display_flag,
10217                                 pegging_v.order_number,
10218                                 pegging_v.sales_order_line_id,
10219                                 pegging_v.demand_source_type,--cmro
10220                                 pegging_v.source_organization_id,
10221                                 pegging_v.using_assembly_item_id,
10222                                 pegging_v.customer_id,
10223                                 pegging_v.ship_to_site_id,
10224                                 :l_user_id,
10225                                 :l_sysdate,
10226                                 :l_user_id,
10227                                 :l_sysdate,
10228                                 pegging_v.request_date --bug3263368
10229                         FROM
10230                                 (SELECT peg.plan_id plan_id,
10231                                         decode(msi.aggregate_time_fence_date,
10232                                                    NULL, msi.inventory_item_id,
10233                                                    decode(sign(trunc(s.new_schedule_date) - msi.aggregate_time_fence_date), -- Bug 3450234 use trunc on s.new_schedule_date
10234                                                        1, msi.product_family_id,                                            -- to avoid wrong bucketed demands creation
10235                                                        msi.inventory_item_id)) inventory_item_id,
10236                                         msi.inventory_item_id original_item_id,
10237                         	        peg.organization_id,
10238                         	        peg.sr_instance_id,
10239                         	        decode(mat.demand_class, :l_excess_dc, decode(:p_excess_supply_by_dc, :l_yes, nvl(s.demand_class, :def_num),
10240                         	                                                                     :def_num),
10241                         	                                 NULL, :def_num,
10242                         	                                 mat.demand_class) demand_class,
10243                                         decode(msi.aggregate_time_fence_date,
10244                                         -- Bug 3574164. DMD_SATISFIED_TIME changed to PLANNED_SHIP_DATE.
10245                                                NULL, trunc(DECODE('||MSC_ATP_PVT.G_HP_DEMAND_BUCKETING_PREF||',
10246                                                                   2, NVL(D.PLANNED_SHIP_DATE,D.USING_ASSEMBLY_DEMAND_DATE),
10247                                                                      NVL(D.SCHEDULE_SHIP_DATE,D.USING_ASSEMBLY_DEMAND_DATE))),
10248                                                      decode(sign(trunc(s.new_schedule_date) - msi.aggregate_time_fence_date),
10249                                                             1, decode(sign(trunc(DECODE('||MSC_ATP_PVT.G_HP_DEMAND_BUCKETING_PREF||',
10250                                                                                         2, NVL(D.PLANNED_SHIP_DATE,D.USING_ASSEMBLY_DEMAND_DATE),
10251                                                                                            NVL(D.SCHEDULE_SHIP_DATE,
10252                                                                                                D.USING_ASSEMBLY_DEMAND_DATE)))
10253                                                                                                - msi.aggregate_time_fence_date),
10254                                                                       1, trunc(DECODE('||MSC_ATP_PVT.G_HP_DEMAND_BUCKETING_PREF||',
10255                                                                                       2, NVL(D.PLANNED_SHIP_DATE,D.USING_ASSEMBLY_DEMAND_DATE),
10256                                                                                          NVL(D.SCHEDULE_SHIP_DATE,
10257                                                                                              D.USING_ASSEMBLY_DEMAND_DATE))),
10258                                                                          msi.aggregate_time_fence_date+1),
10259                                                                decode(sign(trunc(DECODE('||MSC_ATP_PVT.G_HP_DEMAND_BUCKETING_PREF||',
10260                                                                                         2, NVL(D.PLANNED_SHIP_DATE,D.USING_ASSEMBLY_DEMAND_DATE),
10261                                                                                            NVL(D.SCHEDULE_SHIP_DATE,
10262                                                                                                D.USING_ASSEMBLY_DEMAND_DATE)))
10263                                                                                                - msi.aggregate_time_fence_date),
10264                                                                       1, msi.aggregate_time_fence_date,
10265                                                                          trunc(DECODE('||MSC_ATP_PVT.G_HP_DEMAND_BUCKETING_PREF||',
10266                                                                                       2, NVL(D.PLANNED_SHIP_DATE,D.USING_ASSEMBLY_DEMAND_DATE),
10267                                                                                          NVL(D.SCHEDULE_SHIP_DATE,
10268                                                                                              D.USING_ASSEMBLY_DEMAND_DATE)))))) demand_date,
10269                                         trunc(DECODE('||MSC_ATP_PVT.G_HP_DEMAND_BUCKETING_PREF||',
10270                                                      2, NVL(D.PLANNED_SHIP_DATE,D.USING_ASSEMBLY_DEMAND_DATE),
10271                                                         NVL(D.SCHEDULE_SHIP_DATE,
10272                                                             D.USING_ASSEMBLY_DEMAND_DATE))) original_demand_date,
10273                         		decode(d.origination_type, 4, d.daily_demand_rate,
10274                         		           d.using_requirement_quantity) demand_quantity,
10275                                         decode(msi.aggregate_time_fence_date,
10276                                                NULL, peg.allocated_quantity,
10277                                                decode(msi.bom_item_type,
10278                                                       5, 0,
10279                                                       peg.allocated_quantity))* mat.allocation_percent allocated_quantity,
10280                                         d.demand_id,
10281                                         decode(msi.aggregate_time_fence_date,
10282                                                    NULL, d.origination_type, 51) origination_type,
10283                         		d.origination_type original_origination_type,
10284                                         decode(msi.aggregate_time_fence_date,
10285                                                    NULL, NULL,
10286                                                    decode(sign(trunc(s.new_schedule_date) - msi.aggregate_time_fence_date),
10287                                                        1, decode(sign(trunc(DECODE('||MSC_ATP_PVT.G_HP_DEMAND_BUCKETING_PREF||',
10288                                                                                    2, NVL(D.PLANNED_SHIP_DATE,D.USING_ASSEMBLY_DEMAND_DATE),
10289                                                                                       NVL(D.SCHEDULE_SHIP_DATE,
10290                                                                                           D.USING_ASSEMBLY_DEMAND_DATE)))
10291                                                                                           - msi.aggregate_time_fence_date),
10292                                                               1, 1,
10293                                                               NULL),
10294                                                           decode(sign(trunc(DECODE('||MSC_ATP_PVT.G_HP_DEMAND_BUCKETING_PREF||',
10295                                                                                    2, NVL(D.PLANNED_SHIP_DATE,D.USING_ASSEMBLY_DEMAND_DATE),
10296                                                                                       NVL(D.SCHEDULE_SHIP_DATE,
10297                                                                                           D.USING_ASSEMBLY_DEMAND_DATE)))
10298                                                                                           - msi.aggregate_time_fence_date),
10299                                                               1, NULL, -- Moved paranthesis from here to end of decode. Identified as part of 3450234 testing.
10300                                                               1))) pf_display_flag,
10301                         		decode(d.origination_type, 1, to_char(d.disposition_id), d.order_number) order_number,
10302                         		d.sales_order_line_id,
10303                         		d.demand_source_type,--cmro
10304                                         d.source_organization_id,
10305                                         d.using_assembly_item_id,
10306                                         d.customer_id,
10307                                         d.ship_to_site_id,
10308                                         /* New Allocation logic for time phased ATP */
10309                                         decode(msi.aggregate_time_fence_date,
10310                                                    NULL, msi.inventory_item_id,
10311                                                    msi.product_family_id) product_family_id ,
10312                                         decode(d.order_date_type_code,2,d.request_date,
10313                         		           d.request_ship_date)request_date --bug3263368
10314                         	FROM    msc_system_items msi,
10315                         		msc_demands d,
10316                         	        msc_full_pegging peg,
10317                         	        ' || p_alloc_temp_table || ' mat,
10318                         	        msc_supplies s
10319                         	WHERE   msi.plan_id = :p_plan_id
10320                                 AND     msi.atp_flag = :l_yes
10321                                 AND     msi.plan_id = d.plan_id --bug3453289
10322                                 AND     d.inventory_item_id = msi.inventory_item_id
10323                                 AND     d.sr_instance_id = msi.sr_instance_id
10324                                 AND     d.organization_id = msi.organization_id
10325                         	AND	d.origination_type NOT IN (5,7,8,9,11,15,22,28,29,31,70)
10326                         	AND     peg.plan_id = d.plan_id
10327                         	AND     peg.demand_id = d.demand_id
10328                         	AND     peg.sr_instance_id = d.sr_instance_id --bug3453289 MSC_FULL_PEGGING_N2
10329                         	AND     peg.organization_id= d.organization_id --bug3453289 MSC_FULL_PEGGING_N2
10330                         	AND     mat.pegging_id = peg.end_pegging_id
10331                         	AND     s.sr_instance_id = peg.sr_instance_id
10332                         	AND     s.plan_id = peg.plan_id
10333                         	AND     s.transaction_id = peg.transaction_id) pegging_v,
10334                                 msc_item_hierarchy_mv mv
10335                         WHERE	pegging_v.product_family_id = mv.inventory_item_id(+)
10336                         AND     pegging_v.organization_id = mv.organization_id (+)
10337                         AND     pegging_v.sr_instance_id = mv.sr_instance_id (+)
10338                         AND     pegging_v.demand_date >=  mv.effective_date (+)
10339                         AND     pegging_v.demand_date <=  mv.disable_date (+)
10340                         AND	pegging_v.demand_class = mv.demand_class (+)
10341                         AND     mv.level_id (+) = -1
10342                         AND     pegging_v.allocated_quantity <> 0
10343                 	GROUP BY
10344                                 pegging_v.plan_id,
10345                                 pegging_v.inventory_item_id,
10346                                 pegging_v.original_item_id,
10347                                 pegging_v.organization_id,
10348                                 pegging_v.sr_instance_id,
10349                                 NVL(mv.demand_class, :def_num),
10350                                 pegging_v.demand_date,
10351                                 pegging_v.original_demand_date,
10352                                 pegging_v.demand_id,
10353                                 pegging_v.origination_type,
10354                                 pegging_v.original_origination_type,
10355                                 pegging_v.pf_display_flag,
10356                                 pegging_v.order_number,
10357                                 pegging_v.sales_order_line_id,
10358                                 pegging_v.demand_source_type,--cmro
10359                                 pegging_v.source_organization_id,
10360                                 pegging_v.using_assembly_item_id,
10361                                 pegging_v.customer_id,
10362                                 pegging_v.ship_to_site_id,
10363                                 :l_user_id,
10364                                 :l_sysdate,
10365                                 :l_user_id,
10366                                 :l_sysdate,
10367                                 pegging_v.request_date)';
10368         ELSE -- this is same as else of old private procedure prepare_demands_stmt1 as there
10369              -- is no changes for non demand priority AATP scenarios
10370                 -- Prepare demands stmt for creation of bucketed demands/rollup supplies
10371                 x_sql_stmt := x_sql_stmt ||'
10372                                 plan_id,
10373                                 inventory_item_id,
10374                                 original_item_id,
10375                                 organization_id,
10376                                 sr_instance_id,
10377                                 demand_class,
10378                                 demand_date,
10379                                 original_demand_date,
10380                                 demand_quantity,
10381                                 allocated_quantity,
10382                                 parent_demand_id,
10383                                 origination_type,
10384                                 original_origination_type,
10385                                 pf_display_flag,
10386                                 order_number,
10387                                 sales_order_line_id,
10388                                 demand_source_type,--cmro
10389                                 source_organization_id,
10390                                 using_assembly_item_id,
10391                                 customer_id,
10392                                 ship_to_site_id,
10393                                 created_by,
10394                                 creation_date,
10395                                 last_updated_by,
10396                                 last_update_date,
10397                                 request_date)--bug3263368
10398                         (SELECT
10399                                 peg1.plan_id plan_id,
10400                                 decode(sign(trunc(s.new_schedule_date) - msi.aggregate_time_fence_date), -- Bug 3450234 use trunc on s.new_schedule_date
10401                                                                                                          -- to avoid wrong bucketed demands creation
10402                                            1, msi.product_family_id,
10403                                            msi.inventory_item_id) inventory_item_id,
10404                                 msi.inventory_item_id original_item_id,
10405                                 peg1.organization_id,
10406                                 peg1.sr_instance_id,
10407                                 d.demand_class demand_class,
10408                                 decode(sign(trunc(s.new_schedule_date) - msi.aggregate_time_fence_date),
10409                                        1, decode(sign(trunc(DECODE('||MSC_ATP_PVT.G_HP_DEMAND_BUCKETING_PREF||',
10410                                        -- Bug 3574164. DMD_SATISFIED_TIME changed to PLANNED_SHIP_DATE.
10411                                                                    2, NVL(D.PLANNED_SHIP_DATE,D.USING_ASSEMBLY_DEMAND_DATE),
10412                                                                    NVL(D.SCHEDULE_SHIP_DATE,
10413                                                                        D.USING_ASSEMBLY_DEMAND_DATE)))
10414                                                                        - msi.aggregate_time_fence_date),
10415                                                  1, trunc(DECODE('||MSC_ATP_PVT.G_HP_DEMAND_BUCKETING_PREF||',
10416                                                               2, NVL(D.PLANNED_SHIP_DATE,D.USING_ASSEMBLY_DEMAND_DATE),
10417                                                                  NVL(D.SCHEDULE_SHIP_DATE,
10418                                                                      D.USING_ASSEMBLY_DEMAND_DATE))),
10419                                                  msi.aggregate_time_fence_date+1),
10420                                        decode(sign(trunc(DECODE('||MSC_ATP_PVT.G_HP_DEMAND_BUCKETING_PREF||',
10421                                                                 2, NVL(D.PLANNED_SHIP_DATE,D.USING_ASSEMBLY_DEMAND_DATE),
10422                                                                    NVL(D.SCHEDULE_SHIP_DATE,
10423                                                                        D.USING_ASSEMBLY_DEMAND_DATE)))
10424                                                                        - msi.aggregate_time_fence_date),
10425                                            1, msi.aggregate_time_fence_date,
10426                                            trunc(DECODE('||MSC_ATP_PVT.G_HP_DEMAND_BUCKETING_PREF||',
10427                                                         2, NVL(D.PLANNED_SHIP_DATE,D.USING_ASSEMBLY_DEMAND_DATE),
10428                                                            NVL(D.SCHEDULE_SHIP_DATE,
10429                                                                D.USING_ASSEMBLY_DEMAND_DATE))))) demand_date,
10430                                 trunc(DECODE('||MSC_ATP_PVT.G_HP_DEMAND_BUCKETING_PREF||',
10431                                              2, NVL(D.PLANNED_SHIP_DATE,D.USING_ASSEMBLY_DEMAND_DATE),
10432                                                 NVL(D.SCHEDULE_SHIP_DATE,
10433                                                     D.USING_ASSEMBLY_DEMAND_DATE))) original_demand_date,
10434                                 MIN(decode(d.origination_type, 4, d.daily_demand_rate,
10435                 		           d.using_requirement_quantity)) demand_quantity,
10436                                 SUM(peg1.allocated_quantity),
10437                                 d.demand_id,
10438                                 51 origination_type, -- ATP Bucketed Demand
10439                                 d.origination_type original_origination_type,
10440                                 decode(sign(trunc(s.new_schedule_date) - msi.aggregate_time_fence_date),
10441                                        1, decode(sign(trunc(DECODE('||MSC_ATP_PVT.G_HP_DEMAND_BUCKETING_PREF||',
10442                                        -- Bug 3574164. DMD_SATISFIED_TIME changed to PLANNED_SHIP_DATE.
10443                                                                    2, NVL(D.PLANNED_SHIP_DATE,D.USING_ASSEMBLY_DEMAND_DATE),
10444                                                                       NVL(D.SCHEDULE_SHIP_DATE,
10445                                                                           D.USING_ASSEMBLY_DEMAND_DATE)))
10446                                                                           - msi.aggregate_time_fence_date),
10447                                               1, 1,
10448                                               NULL),
10449                                        decode(sign(trunc(DECODE('||MSC_ATP_PVT.G_HP_DEMAND_BUCKETING_PREF||',
10450                                                                 2, NVL(D.PLANNED_SHIP_DATE,D.USING_ASSEMBLY_DEMAND_DATE),
10451                                                                    NVL(D.SCHEDULE_SHIP_DATE,
10452                                                                        D.USING_ASSEMBLY_DEMAND_DATE)))
10453                                                                        - msi.aggregate_time_fence_date),
10454                                            1, NULL, -- Moved paranthesis from here to end of decode. Identified as part of 3450234 testing.
10455                                            1)) pf_display_flag,
10456                 		decode(d.origination_type, 1, to_char(d.disposition_id), d.order_number) order_number,
10457                                 d.sales_order_line_id,
10458                                 d.demand_source_type,--cmro
10459                                 d.source_organization_id,
10460                                 d.using_assembly_item_id,
10461                                 d.customer_id,
10462                                 d.ship_to_site_id,
10463                                 :l_user_id,
10464                                 :l_sysdate,
10465                                 :l_user_id,
10466                                 :l_sysdate,
10467                                 decode(d.order_date_type_code,2,d.request_date,
10468         			            d.request_ship_date)request_date --bug3263368
10469                         FROM    msc_full_pegging peg1,
10470                                 msc_demands d,
10471                                 msc_supplies s,
10472                                 msc_system_items msi
10473                         WHERE   d.demand_id = peg1.demand_id
10474                         AND     d.plan_id = peg1.plan_id
10475                         AND     d.sr_instance_id = peg1.sr_instance_id
10476                         AND     d.organization_id= peg1.organization_id --bug3453289
10477                         AND	d.origination_type NOT IN (5,7,8,9,11,15,22,28,29,31,70)
10478                         AND     s.transaction_id = peg1.transaction_id
10479                         AND     s.plan_id = peg1.plan_id
10480                         AND     s.sr_instance_id = peg1.sr_instance_id --bug3453289
10481                         AND     msi.plan_id = d.plan_id
10482                         AND     msi.inventory_item_id = d.inventory_item_id
10483                         AND     msi.sr_instance_id = d.sr_instance_id
10484                         AND     msi.organization_id = d.organization_id
10485                         AND     msi.aggregate_time_fence_date is not null
10486                         AND     msi.bom_item_type <> 5
10487                         AND     msi.plan_id = :p_plan_id
10488                         AND     msi.atp_flag = :l_yes
10489                         GROUP BY
10490                                 peg1.plan_id,
10491                                 decode(sign(trunc(s.new_schedule_date) - msi.aggregate_time_fence_date), -- Bug 3450234 use trunc on s.new_schedule_date
10492                                                                                                          -- to avoid wrong bucketed demands creation
10493                                            1, msi.product_family_id,
10494                                            msi.inventory_item_id),
10495                                 msi.inventory_item_id,
10496                                 peg1.organization_id,
10497                                 peg1.sr_instance_id,
10498                                 d.demand_class,
10499                                 decode(sign(trunc(s.new_schedule_date) - msi.aggregate_time_fence_date),
10500                                        1, decode(sign(trunc(DECODE('||MSC_ATP_PVT.G_HP_DEMAND_BUCKETING_PREF||',
10501                                        -- Bug 3574164. DMD_SATISFIED_TIME changed to PLANNED_SHIP_DATE.
10502                                                                    2, NVL(D.PLANNED_SHIP_DATE,D.USING_ASSEMBLY_DEMAND_DATE),
10503                                                                       NVL(D.SCHEDULE_SHIP_DATE,
10504                                                                           D.USING_ASSEMBLY_DEMAND_DATE)))
10505                                                                           - msi.aggregate_time_fence_date),
10506                                               1, trunc(DECODE('||MSC_ATP_PVT.G_HP_DEMAND_BUCKETING_PREF||',
10507                                                               2, NVL(D.PLANNED_SHIP_DATE,D.USING_ASSEMBLY_DEMAND_DATE),
10508                                                                  NVL(D.SCHEDULE_SHIP_DATE,
10509                                                                      D.USING_ASSEMBLY_DEMAND_DATE))),
10510                                               msi.aggregate_time_fence_date+1),
10511                                        decode(sign(trunc(DECODE('||MSC_ATP_PVT.G_HP_DEMAND_BUCKETING_PREF||',
10512                                                                 2, NVL(D.PLANNED_SHIP_DATE,D.USING_ASSEMBLY_DEMAND_DATE),
10513                                                                    NVL(D.SCHEDULE_SHIP_DATE,
10514                                                                        D.USING_ASSEMBLY_DEMAND_DATE))) - msi.aggregate_time_fence_date),
10515                                            1, msi.aggregate_time_fence_date,
10516                                            trunc(DECODE('||MSC_ATP_PVT.G_HP_DEMAND_BUCKETING_PREF||',
10517                                                         2, NVL(D.PLANNED_SHIP_DATE,D.USING_ASSEMBLY_DEMAND_DATE),
10518                                                            NVL(D.SCHEDULE_SHIP_DATE,
10519                                                                D.USING_ASSEMBLY_DEMAND_DATE))))),
10520                                 trunc(DECODE('||MSC_ATP_PVT.G_HP_DEMAND_BUCKETING_PREF||',
10521                                              2, NVL(D.PLANNED_SHIP_DATE,D.USING_ASSEMBLY_DEMAND_DATE),
10522                                                 NVL(D.SCHEDULE_SHIP_DATE,
10523                                                     D.USING_ASSEMBLY_DEMAND_DATE))),
10524                                 d.demand_id,
10525                                 51,
10526                                 d.origination_type,
10527                                 decode(sign(trunc(s.new_schedule_date) - msi.aggregate_time_fence_date),
10528                                        1, decode(sign(trunc(DECODE('||MSC_ATP_PVT.G_HP_DEMAND_BUCKETING_PREF||',
10529                                                                    2, NVL(D.PLANNED_SHIP_DATE,D.USING_ASSEMBLY_DEMAND_DATE),
10530                                                                       NVL(D.SCHEDULE_SHIP_DATE,
10531                                                                           D.USING_ASSEMBLY_DEMAND_DATE)))
10532                                                                           - msi.aggregate_time_fence_date),
10533                                               1, 1,
10534                                               NULL),
10535                                        decode(sign(trunc(DECODE('||MSC_ATP_PVT.G_HP_DEMAND_BUCKETING_PREF||',
10536                                                                 2, NVL(D.PLANNED_SHIP_DATE,D.USING_ASSEMBLY_DEMAND_DATE),
10537                                                                    NVL(D.SCHEDULE_SHIP_DATE,
10538                                                                        D.USING_ASSEMBLY_DEMAND_DATE)))
10539                                                                        - msi.aggregate_time_fence_date),
10540                                            1, NULL, -- Moved paranthesis from here to end of decode. Identified as part of 3450234 testing.
10541                                            1)),
10542                 		decode(d.origination_type, 1, to_char(d.disposition_id), d.order_number),
10543                                 d.sales_order_line_id,
10544                                 d.demand_source_type,--cmro
10545                                 d.source_organization_id,
10546                                 d.using_assembly_item_id,
10547                                 d.customer_id,
10548                                 d.ship_to_site_id,
10549                                 :l_user_id,
10550                                 :l_sysdate,
10551                                 :l_user_id,
10552                                 :l_sysdate,
10553                                 decode(d.order_date_type_code,2,d.request_date,
10554         			            d.request_ship_date))';  --bug3263368
10555         END IF;
10556 
10557 EXCEPTION
10558         WHEN OTHERS THEN
10559                 IF PG_DEBUG in ('Y', 'C') THEN
10560                         msc_util.msc_log('Prepare_Demands_Stmt: ' || 'Error occurred: ' || to_char(sqlcode) || ':' || SQLERRM);
10561                 END IF;
10562                 x_return_status := FND_API.G_RET_STS_ERROR;
10563 
10564 END Prepare_Demands_Stmt;
10565 
10566 -- New private procedure added for forecast at PF
10567 /*--Prepare_Supplies_Stmt---------------------------------------------------
10568 |  o  Called from Pf_Post_Plan_Proc procedure to:
10569 |       -  Prepare supplies stmt for preallocation + rollup (Demand
10570 |            priority AATP)
10571 |            :  Excess supply by demand class = No
10572 |            :  Excess supply by demand class = Yes (for project atp)
10573 |       -  Prepare supplies stmt for rollup. (All PDS ATP scenarios except
10574 |            demand priority AATP)
10575 |  o  Prepares supplies stmt for both share plan partition "yes" and "no".
10576 +-------------------------------------------------------------------------*/
10577 PROCEDURE Prepare_Supplies_Stmt(
10578 	p_share_partition               IN      VARCHAR2,
10579 	p_demand_priority               IN      VARCHAR2,
10580 	p_excess_supply_by_dc           IN      VARCHAR2,
10581 	p_temp_table                    IN      VARCHAR2,
10582 	p_alloc_temp_table              IN      VARCHAR2,
10583 	p_parallel_degree               IN      NUMBER,
10584 	x_sql_stmt                      OUT 	NOCOPY VARCHAR2,
10585         x_return_status                 OUT     NOCOPY VARCHAR2
10586 )
10587 IS
10588 
10589 BEGIN
10590 
10591         IF PG_DEBUG in ('Y', 'C') THEN
10592                 msc_util.msc_log('Prepare_Supplies_Stmt: ' || 'p_share_partition        : ' || p_share_partition);
10593                 msc_util.msc_log('Prepare_Supplies_Stmt: ' || 'p_demand_priority        : ' || p_demand_priority);
10594                 msc_util.msc_log('Prepare_Supplies_Stmt: ' || 'p_excess_supply_by_dc    : ' || p_excess_supply_by_dc);
10595                 msc_util.msc_log('Prepare_Supplies_Stmt: ' || 'p_temp_table             : ' || p_temp_table);
10596                 msc_util.msc_log('Prepare_Supplies_Stmt: ' || 'p_alloc_temp_table       : ' || p_alloc_temp_table);
10597                 msc_util.msc_log('Prepare_Supplies_Stmt: ' || 'p_parallel_degree        : ' || p_parallel_degree);
10598         END IF;
10599 
10600         -- Initializing API return code
10601         x_return_status := FND_API.G_RET_STS_SUCCESS;
10602 
10603         IF p_share_partition = 'Y' THEN
10604            x_sql_stmt := '
10605                 INSERT INTO MSC_ALLOC_SUPPLIES(';
10606         ELSE
10607            x_sql_stmt := '
10608                 INSERT INTO ' || p_temp_table || '(';
10609         END IF;
10610 
10611         IF p_demand_priority = 'Y' THEN
10612                    x_sql_stmt := x_sql_stmt ||'
10613                                 plan_id,
10614                                 inventory_item_id,
10615                                 original_item_id,
10616                                 organization_id,
10617                                 sr_instance_id,
10618                                 demand_class,
10619                                 supply_date,
10620                                 parent_transaction_id,
10621                                 allocated_quantity,
10622                                 supply_quantity,
10623                                 order_type,
10624                                 original_order_type,
10625                                 order_number,
10626                                 schedule_designator_id,
10627                                 customer_id, -- not really required only used in rule based
10628                                 ship_to_site_id, -- not really required only used in rule based
10629                                 created_by,
10630                                 creation_date,
10631                                 last_updated_by,
10632                                 last_update_date)
10633         		(
10634         	        SELECT	/*+  use_hash(pegging_v mv) parallel(mv,' || to_char(p_parallel_degree) || ')  */
10635                                 pegging_v.plan_id plan_id,
10636                                 pegging_v.inventory_item_id,
10637                                 pegging_v.original_item_id,
10638                                 pegging_v.organization_id,
10639                                 pegging_v.sr_instance_id,
10640                                 NVL(mv.demand_class, :def_num) demand_class,
10641                                 pegging_v.supply_date,
10642                                 pegging_v.transaction_id,
10643                                 SUM(pegging_v.allocated_quantity),
10644                                 MIN(pegging_v.supply_quantity),
10645                                 pegging_v.order_type,
10646                                 pegging_v.original_order_type,
10647                                 pegging_v.order_number,
10648                                 pegging_v.schedule_designator_id,
10649                                 pegging_v.customer_id,
10650                                 pegging_v.ship_to_site_id,
10651                                 :l_user_id,
10652                                 :l_sysdate,
10653                                 :l_user_id,
10654                                 :l_sysdate
10655                         FROM
10656                                 (SELECT peg.plan_id plan_id,
10657                                         decode(msi.aggregate_time_fence_date,
10658                                                    NULL, msi.inventory_item_id,
10659                                                    decode(sign(TRUNC(s.new_schedule_date) - msi.aggregate_time_fence_date),
10660                                                        1, msi.product_family_id,
10661                                                        msi.inventory_item_id)) inventory_item_id,
10662                                         msi.inventory_item_id original_item_id,
10663                                         peg.organization_id,
10664                                         peg.sr_instance_id,
10665                         	        decode(mat.demand_class, :l_excess_dc, decode(:p_excess_supply_by_dc, :l_yes, nvl(s.demand_class, :def_num),
10666                         	                                                                     :def_num),
10667                         	                                 NULL, :def_num,
10668                         	                                 mat.demand_class) demand_class,
10669                                         TRUNC(s.new_schedule_date) supply_date,
10670                                         decode(msi.aggregate_time_fence_date,
10671                                                NULL, peg.allocated_quantity,
10672                                                decode(msi.bom_item_type,
10673                                                       5, 0,
10674                                                       peg.allocated_quantity))* mat.allocation_percent allocated_quantity,
10675                                         s.new_order_quantity supply_quantity,
10676                                         peg.transaction_id,
10677                                         decode(msi.aggregate_time_fence_date,
10678                                                    NULL, s.order_type, 50) order_type,
10679                                         s.order_type original_order_type,
10680                                         s.order_number,
10681                                         s.schedule_designator_id,
10682                                         s.customer_id,
10683                                         s.ship_to_site_id,
10684                                         decode(msi.aggregate_time_fence_date,
10685                                                    NULL, msi.inventory_item_id,
10686                                                    msi.product_family_id) product_family_id
10687                         	FROM    msc_system_items msi,
10688                         		msc_supplies s,
10689                         	        msc_full_pegging peg,
10690                         	        ' || p_alloc_temp_table || ' mat
10691                         	WHERE   msi.plan_id = :p_plan_id
10692                                 AND     msi.atp_flag = :l_yes
10693                                 AND     s.plan_id = msi.plan_id --bug3453289
10694                                 AND     s.inventory_item_id = msi.inventory_item_id
10695                                 AND     s.sr_instance_id = msi.sr_instance_id
10696                                 AND     s.organization_id = msi.organization_id
10697                         	AND     peg.plan_id = s.plan_id
10698                         	AND     peg.transaction_id = s.transaction_id
10699                         	AND     peg.sr_instance_id = s.sr_instance_id
10700                         	AND     mat.pegging_id = peg.end_pegging_id) pegging_v,
10701                                 msc_item_hierarchy_mv mv
10702                         WHERE	pegging_v.product_family_id = mv.inventory_item_id(+)
10703                         AND     pegging_v.organization_id = mv.organization_id (+)
10704                         AND     pegging_v.sr_instance_id = mv.sr_instance_id (+)
10705                         AND     pegging_v.supply_date >=  mv.effective_date (+)
10706                         AND     pegging_v.supply_date <=  mv.disable_date (+)
10707                         AND	pegging_v.demand_class = mv.demand_class (+)
10708                         AND     mv.level_id (+) = -1
10709                         AND     pegging_v.allocated_quantity <> 0
10710         		GROUP BY
10711                                 pegging_v.plan_id,
10712                                 pegging_v.inventory_item_id,
10713                                 pegging_v.original_item_id,
10714                                 pegging_v.organization_id,
10715                                 pegging_v.sr_instance_id,
10716                                 NVL(mv.demand_class, :def_num),
10717                                 pegging_v.supply_date,
10718                                 pegging_v.transaction_id,
10719                                 pegging_v.order_type,
10720                                 pegging_v.original_order_type,
10721                                 pegging_v.order_number,
10722                                 pegging_v.schedule_designator_id,
10723                                 pegging_v.customer_id,
10724                                 pegging_v.ship_to_site_id,
10725                                 :l_user_id,
10726                                 :l_sysdate,
10727                                 :l_user_id,
10728                                 :l_sysdate)';
10729         ELSE -- this is same as else of old private procedure prepare_supplies_stmt1 as there
10730              -- is no changes for non demand priority AATP scenarios
10731                 -- Prepare supplies stmt for creation of rollup supplies
10732                 x_sql_stmt := x_sql_stmt ||'
10733                                 plan_id,
10734                                 inventory_item_id,
10735                                 original_item_id,
10736                                 organization_id,
10737                                 sr_instance_id,
10738                                 demand_class,
10739                                 supply_date,
10740                                 parent_transaction_id,
10741                                 allocated_quantity,
10742                                 supply_quantity,
10743                                 order_type,
10744                                 original_order_type,
10745                                 order_number,
10746                                 schedule_designator_id,
10747                                 customer_id,
10748                                 ship_to_site_id,
10749                                 created_by,
10750                                 creation_date,
10751                                 last_updated_by,
10752                                 last_update_date)
10753         		(
10754                         select  :p_plan_id,
10755                                 decode(sign(TRUNC(s.new_schedule_date) - i.aggregate_time_fence_date),
10756                                         1, i.product_family_id, s.inventory_item_id),
10757                                 s.inventory_item_id,
10758                                 s.organization_id,
10759                                 s.sr_instance_id,
10760                                 s.demand_class,
10761                                 TRUNC(s.new_schedule_date),
10762                                 s.transaction_id,
10763                                 s.new_order_quantity,
10764                                 s.new_order_quantity,
10765                                 50,
10766                                 s.order_type,
10767                                 s.order_number,
10768                                 s.schedule_designator_id,
10769                                 s.customer_id,
10770                                 s.ship_to_site_id,
10771                                 :l_user_id,
10772                                 :l_sysdate,
10773                                 :l_user_id,
10774                                 :l_sysdate
10775                         from    msc_supplies s,
10776                                 msc_system_items i
10777                         where   i.aggregate_time_fence_date is not null
10778                         and     i.bom_item_type <> 5
10779                         and     i.plan_id = :p_plan_id
10780                         and     i.atp_flag = :l_yes
10781                         and     s.plan_id = i.plan_id --bug3453289
10782                         and     s.inventory_item_id = i.inventory_item_id
10783                         and     s.organization_id = i.organization_id
10784                         and     s.sr_instance_id = i.sr_instance_id
10785                         and     s.plan_id = i.plan_id
10786                         )';
10787         END IF;
10788 
10789 EXCEPTION
10790         WHEN OTHERS THEN
10791                 IF PG_DEBUG in ('Y', 'C') THEN
10792                         msc_util.msc_log('Prepare_Supplies_Stmt: ' || 'Error occurred: ' || to_char(sqlcode) || ':' || SQLERRM);
10793                 END IF;
10794                 x_return_status := FND_API.G_RET_STS_ERROR;
10795 
10796 END Prepare_Supplies_Stmt;
10797 
10798 /*Private procedures removed for forecast at PF  **Will be deleted after code review
10799 /*--Prepare_Demands_Stmt1---------------------------------------------------
10800 |  o  Called from Pf_Post_Plan_Proc procedure to:
10801 |       -  Prepare demands stmt for preallocation + bucketting for demands
10802 |            pegged to excess/safety stock. (Demand priority AATP)
10803 |            :  Excess supply by demand class = No
10804 |            :  Excess supply by demand class = Yes (for project atp)
10805 |       -  Prepare demands stmt for bucketting. (All PDS ATP scenarios except
10806 |            demand priority AATP)
10807 |  o  Prepares demand stmt for both share plan partition "yes" and "no".
10808 +-------------------------------------------------------------------------*/
10809 /*PROCEDURE Prepare_Demands_Stmt1(
10810 	p_share_partition               IN      VARCHAR2,
10811 	p_demand_priority               IN      VARCHAR2,
10812 	p_excess_supply_by_dc           IN      VARCHAR2,
10813 	p_temp_table                    IN      VARCHAR2,
10814 	p_parallel_degree               IN      NUMBER,
10815 	x_sql_stmt                      OUT 	NOCOPY VARCHAR2,
10816         x_return_status                 OUT     NOCOPY VARCHAR2
10817 )
10818 IS
10819 
10820 BEGIN
10821 
10822         IF PG_DEBUG in ('Y', 'C') THEN
10823                 msc_util.msc_log('Prepare_Demands_Stmt1: ' || 'p_share_partition        : ' || p_share_partition);
10824                 msc_util.msc_log('Prepare_Demands_Stmt1: ' || 'p_demand_priority        : ' || p_demand_priority);
10825                 msc_util.msc_log('Prepare_Demands_Stmt1: ' || 'p_excess_supply_by_dc    : ' || p_excess_supply_by_dc);
10826                 msc_util.msc_log('Prepare_Demands_Stmt1: ' || 'p_temp_table             : ' || p_temp_table);
10827                 msc_util.msc_log('Prepare_Demands_Stmt1: ' || 'p_parallel_degree        : ' || p_parallel_degree);
10828         END IF;
10829 
10830         -- Initializing API return code
10831         x_return_status := FND_API.G_RET_STS_SUCCESS;
10832 
10833         IF p_share_partition = 'Y' THEN
10834            x_sql_stmt := '
10835                 INSERT INTO MSC_ALLOC_DEMANDS(';
10836         ELSE
10837            x_sql_stmt := '
10838                 INSERT INTO ' || p_temp_table || '(';
10839         END IF;
10840 
10841         IF p_demand_priority = 'Y' THEN
10842                 /* Prepare demands stmt for preallocation + creation of bucketed demands/rollup supplies
10843                  * project atp changes
10844                  * If the profile is set to 'Yes' then:
10845                  *    o If the supply pegged to the demand has a demand class existing on allocation rule then
10846                  *      allocate the demand to that demand class.
10847                  *    o If the supply pegged to the demand has a demand class not present on allocation rule then
10848                  *      allocate the demand to 'OTHER'.
10849                  *    o If the supply pegged to the demand does not have a demand class present, allocate the demand
10850                  *      to 'OTHER'.
10851                  * Else: Allocate the supply to 'OTHER'*/
10852 /*                IF p_excess_supply_by_dc = 'Y' THEN
10853                    x_sql_stmt := x_sql_stmt ||'
10854                                 plan_id,
10855                                 inventory_item_id,
10856                                 original_item_id,
10857                                 organization_id,
10858                                 sr_instance_id,
10859                                 demand_class,
10860                                 demand_date,
10861                                 original_demand_date,
10862                                 demand_quantity,
10863                                 allocated_quantity,
10864                                 parent_demand_id,
10865                                 origination_type,
10866                                 original_origination_type,
10867                                 pf_display_flag,
10868                                 order_number,
10869                                 sales_order_line_id,
10870                                 source_organization_id,
10871                                 using_assembly_item_id,
10872                                 customer_id,
10873                                 ship_to_site_id,
10874                                 created_by,
10875                                 creation_date,
10876                                 last_updated_by,
10877                                 last_update_date)
10878                 	(
10879                         SELECT	/*+  use_hash(pegging_v mv) parallel(mv,' || to_char(p_parallel_degree) || ')  */
10880 /*                                pegging_v.plan_id plan_id,
10881                                 pegging_v.inventory_item_id,
10882                                 pegging_v.original_item_id,
10883                                 pegging_v.organization_id,
10884                                 pegging_v.sr_instance_id,
10885                                 NVL(mv.demand_class, :def_num) demand_class,
10886                                 pegging_v.demand_date,
10887                                 pegging_v.original_demand_date,
10888                                 MIN(pegging_v.demand_quantity),
10889                                 SUM(pegging_v.allocated_quantity),
10890                                 pegging_v.demand_id,
10891                                 pegging_v.origination_type,
10892                                 pegging_v.original_origination_type,
10893                                 pegging_v.pf_display_flag,
10894                                 pegging_v.order_number,
10895                                 pegging_v.sales_order_line_id,
10896                                 pegging_v.source_organization_id,
10897                                 pegging_v.using_assembly_item_id,
10898                                 pegging_v.customer_id,
10899                                 pegging_v.ship_to_site_id,
10900                                 :l_user_id,
10901                                 :l_sysdate,
10902                                 :l_user_id,
10903                                 :l_sysdate
10904                         FROM
10905                                 (SELECT /*+ ordered use_hash(peg2 peg1 d s msi)
10906                         			parallel(peg2,' || to_char(p_parallel_degree) || ')
10907                         			parallel(peg1,' || to_char(p_parallel_degree) || ')
10908                         			parallel(d,' || to_char(p_parallel_degree) || ')
10909                                                 parallel(s,' || to_char(p_parallel_degree) || ')
10910                                                 parallel(msi,' || to_char(p_parallel_degree) || ')
10911                         			full(peg2) full(peg1) full(d) full(s) full(msi) */
10912 /*                                        peg1.plan_id plan_id,
10913                                         decode(msi.aggregate_time_fence_date,
10914                                                    NULL, msi.inventory_item_id,
10915                                                    decode(sign(s.new_schedule_date - msi.aggregate_time_fence_date),
10916                                                        1, msi.product_family_id,
10917                                                        msi.inventory_item_id)) inventory_item_id,
10918                                         msi.inventory_item_id original_item_id,
10919                         	        peg1.organization_id,
10920                         	        peg1.sr_instance_id,
10921                         	        NVL(s.demand_class, :def_num) demand_class,
10922                                         decode(msi.aggregate_time_fence_date,
10923                                                NULL, trunc(DECODE('||MSC_ATP_PVT.G_HP_DEMAND_BUCKETING_PREF||',
10924                                                                   2, NVL(D.PLANNED_SHIP_DATE,D.USING_ASSEMBLY_DEMAND_DATE),
10925                                                                      NVL(D.SCHEDULE_SHIP_DATE,D.USING_ASSEMBLY_DEMAND_DATE))),
10926                                                      decode(sign(trunc(s.new_schedule_date) - msi.aggregate_time_fence_date),
10927                                                             1, decode(sign(trunc(DECODE('||MSC_ATP_PVT.G_HP_DEMAND_BUCKETING_PREF||',
10928                                                                                         2, NVL(D.PLANNED_SHIP_DATE,D.USING_ASSEMBLY_DEMAND_DATE),
10929                                                                                            NVL(D.SCHEDULE_SHIP_DATE,
10930                                                                                                D.USING_ASSEMBLY_DEMAND_DATE)))
10931                                                                                                - msi.aggregate_time_fence_date),
10932                                                                       1, trunc(DECODE('||MSC_ATP_PVT.G_HP_DEMAND_BUCKETING_PREF||',
10933                                                                                       2, NVL(D.PLANNED_SHIP_DATE,D.USING_ASSEMBLY_DEMAND_DATE),
10934                                                                                          NVL(D.SCHEDULE_SHIP_DATE,
10935                                                                                              D.USING_ASSEMBLY_DEMAND_DATE))),
10936                                                                          msi.aggregate_time_fence_date+1),
10937                                                                decode(sign(trunc(DECODE('||MSC_ATP_PVT.G_HP_DEMAND_BUCKETING_PREF||',
10938                                                                                         2, NVL(D.PLANNED_SHIP_DATE,D.USING_ASSEMBLY_DEMAND_DATE),
10939                                                                                            NVL(D.SCHEDULE_SHIP_DATE,
10940                                                                                                D.USING_ASSEMBLY_DEMAND_DATE)))
10941                                                                                                - msi.aggregate_time_fence_date),
10942                                                                       1, msi.aggregate_time_fence_date,
10943                                                                          trunc(DECODE('||MSC_ATP_PVT.G_HP_DEMAND_BUCKETING_PREF||',
10944                                                                                       2, NVL(D.PLANNED_SHIP_DATE,D.USING_ASSEMBLY_DEMAND_DATE),
10945                                                                                          NVL(D.SCHEDULE_SHIP_DATE,
10946                                                                                              D.USING_ASSEMBLY_DEMAND_DATE)))))) demand_date,
10947                                         trunc(DECODE('||MSC_ATP_PVT.G_HP_DEMAND_BUCKETING_PREF||',
10948                                                      2, NVL(D.PLANNED_SHIP_DATE,D.USING_ASSEMBLY_DEMAND_DATE),
10949                                                         NVL(D.SCHEDULE_SHIP_DATE,
10950                                                             D.USING_ASSEMBLY_DEMAND_DATE))) original_demand_date,
10951                         		decode(d.origination_type, 4, d.daily_demand_rate,
10952                         		           d.using_requirement_quantity) demand_quantity,
10953                                         decode(msi.aggregate_time_fence_date,
10954                                                NULL, peg1.allocated_quantity,
10955                                                decode(msi.bom_item_type,
10956                                                       5, 0,
10957                                                       peg1.allocated_quantity)) allocated_quantity,
10958                                         d.demand_id,
10959                                         decode(msi.aggregate_time_fence_date,
10960                                                    NULL, d.origination_type, 51) origination_type,
10961                         		d.origination_type original_origination_type,
10962                                         decode(msi.aggregate_time_fence_date,
10963                                                    NULL, NULL,
10964                                                    decode(sign(trunc(s.new_schedule_date) - msi.aggregate_time_fence_date),
10965                                                        1, decode(sign(trunc(DECODE('||MSC_ATP_PVT.G_HP_DEMAND_BUCKETING_PREF||',
10966                                                                                    2, NVL(D.PLANNED_SHIP_DATE,D.USING_ASSEMBLY_DEMAND_DATE),
10967                                                                                       NVL(D.SCHEDULE_SHIP_DATE,
10968                                                                                           D.USING_ASSEMBLY_DEMAND_DATE)))
10969                                                                                           - msi.aggregate_time_fence_date),
10970                                                               1, 1,
10971                                                               NULL),
10972                                                           decode(sign(trunc(DECODE('||MSC_ATP_PVT.G_HP_DEMAND_BUCKETING_PREF||',
10973                                                                                    2, NVL(D.PLANNED_SHIP_DATE,D.USING_ASSEMBLY_DEMAND_DATE),
10974                                                                                       NVL(D.SCHEDULE_SHIP_DATE,
10975                                                                                           D.USING_ASSEMBLY_DEMAND_DATE)))
10976                                                                                           - msi.aggregate_time_fence_date),
10977                                                               1, NULL),
10978                                                               1)) pf_display_flag,
10979                         		decode(d.origination_type, 1, to_char(d.disposition_id), d.order_number) order_number,
10980                         		d.sales_order_line_id,
10981                                         d.source_organization_id,
10982                                         d.using_assembly_item_id,
10983                                         d.customer_id,
10984                                         d.ship_to_site_id,
10985                                         /* New Allocation logic for time phased ATP */
10986 /*                                        decode(msi.aggregate_time_fence_date,
10987                                                    NULL, msi.inventory_item_id,
10988                                                    msi.product_family_id) product_family_id
10989                         	FROM    msc_full_pegging peg2,
10990                         	        msc_full_pegging peg1,
10991                         		msc_demands d,
10992                                         msc_supplies s,
10993                                         msc_system_items msi
10994                         	WHERE   peg1.plan_id = :p_plan_id
10995                         	AND     peg2.plan_id = peg1.plan_id
10996                         	AND     peg2.pegging_id = peg1.end_pegging_id
10997                         	AND     peg2.demand_id IN (-1, -2)
10998                         	AND     d.demand_id = peg1.demand_id
10999                         	AND     peg1.plan_id = d.plan_id
11000                         	AND     d.sr_instance_id = peg1.sr_instance_id
11001                         	AND     peg1.sr_instance_id=s.sr_instance_id
11002                         	AND     peg1.plan_id = s.plan_id
11003                         	AND     peg1.transaction_id = s.transaction_id
11004                         	AND	d.origination_type NOT IN (5,7,8,9,11,15,22,28,29,31)
11005                         	AND     msi.plan_id = s.plan_id
11006                                 AND     msi.inventory_item_id = s.inventory_item_id
11007                                 AND     msi.sr_instance_id = s.sr_instance_id
11008                                 AND     msi.organization_id = s.organization_id) pegging_v,
11009                                 msc_item_hierarchy_mv mv
11010                         WHERE	pegging_v.product_family_id = mv.inventory_item_id(+)
11011                         AND     pegging_v.organization_id = mv.organization_id (+)
11012                         AND     pegging_v.sr_instance_id = mv.sr_instance_id (+)
11013                         AND     pegging_v.demand_date >=  mv.effective_date (+)
11014                         AND     pegging_v.demand_date <=  mv.disable_date (+)
11015                         AND	pegging_v.demand_class = mv.demand_class (+)
11016                         AND     mv.level_id (+) = -1
11017                         AND     pegging_v.allocated_quantity <> 0
11018                 	GROUP BY
11019                                 pegging_v.plan_id plan_id,
11020                                 pegging_v.inventory_item_id,
11021                                 pegging_v.original_item_id,
11022                                 pegging_v.organization_id,
11023                                 pegging_v.sr_instance_id,
11024                                 NVL(mv.demand_class, :def_num),
11025                                 pegging_v.demand_date,
11026                                 pegging_v.original_demand_date,
11027                                 pegging_v.demand_id,
11028                                 pegging_v.origination_type,
11029                                 pegging_v.original_origination_type,
11030                                 pegging_v.pf_display_flag,
11031                                 pegging_v.order_number,
11032                                 pegging_v.sales_order_line_id,
11033                                 pegging_v.demand_source_type,--cmro
11034                                 pegging_v.source_organization_id,
11035                                 pegging_v.using_assembly_item_id,
11036                                 pegging_v.customer_id,
11037                                 pegging_v.ship_to_site_id,
11038                                 :l_user_id,
11039                                 :l_sysdate,
11040                                 :l_user_id,
11041                                 :l_sysdate)';
11042                 ELSE
11043                    x_sql_stmt := x_sql_stmt ||'
11044                                 plan_id,
11045                                 inventory_item_id,
11046                                 original_item_id,
11047                                 organization_id,
11048                                 sr_instance_id,
11049                                 demand_class,
11050                                 demand_date,
11051                                 original_demand_date,
11052                                 demand_quantity,
11053                                 allocated_quantity,
11054                                 parent_demand_id,
11055                                 origination_type,
11056                                 original_origination_type,
11057                                 pf_display_flag,
11058                                 order_number,
11059                                 sales_order_line_id,
11060                                 demand_source_type,--cmro
11061                                 source_organization_id,
11062                                 using_assembly_item_id,
11063                                 customer_id,
11064                                 ship_to_site_id,
11065                                 created_by,
11066                                 creation_date,
11067                                 last_updated_by,
11068                                 last_update_date)
11069                 	(
11070                         SELECT /*+ ordered use_hash(peg2 peg1 d s msi)
11071                         			parallel(peg2,' || to_char(p_parallel_degree) || ')
11072                         			parallel(peg1,' || to_char(p_parallel_degree) || ')
11073                         			parallel(d,' || to_char(p_parallel_degree) || ')
11074                                                 parallel(s,' || to_char(p_parallel_degree) || ')
11075                                                 parallel(msi,' || to_char(p_parallel_degree) || ')
11076                         			full(peg2) full(peg1) full(d) full(s) full(msi) */
11077 /*                                peg1.plan_id plan_id,
11078                                 decode(msi.aggregate_time_fence_date,
11079                                            NULL, msi.inventory_item_id,
11080                                            decode(sign(s.new_schedule_date - msi.aggregate_time_fence_date),
11081                                                1, msi.product_family_id,
11082                                                msi.inventory_item_id)) inventory_item_id,
11083                                 msi.inventory_item_id original_item_id,
11084                 	        peg1.organization_id,
11085                 	        peg1.sr_instance_id,
11086                 	        :def_num demand_class,
11087                                 decode(msi.aggregate_time_fence_date,
11088                                            NULL,trunc(DECODE('||MSC_ATP_PVT.G_HP_DEMAND_BUCKETING_PREF||',
11089                                                              2, NVL(D.PLANNED_SHIP_DATE,D.USING_ASSEMBLY_DEMAND_DATE),
11090                                                                 NVL(D.SCHEDULE_SHIP_DATE,
11091                                                                     D.USING_ASSEMBLY_DEMAND_DATE))),
11092                                            decode(sign(trunc(s.new_schedule_date) - msi.aggregate_time_fence_date),
11093                                                1, decode(sign(trunc(DECODE('||MSC_ATP_PVT.G_HP_DEMAND_BUCKETING_PREF||',
11094                                                                            2, NVL(D.PLANNED_SHIP_DATE,D.USING_ASSEMBLY_DEMAND_DATE),
11095                                                                               NVL(D.SCHEDULE_SHIP_DATE,
11096                                                                                   D.USING_ASSEMBLY_DEMAND_DATE)))
11097                                                                                   - msi.aggregate_time_fence_date),
11098                                                       1,trunc(DECODE('||MSC_ATP_PVT.G_HP_DEMAND_BUCKETING_PREF||',
11099                                                                      2, NVL(D.PLANNED_SHIP_DATE,D.USING_ASSEMBLY_DEMAND_DATE),
11100                                                                         NVL(D.SCHEDULE_SHIP_DATE,
11101                                                                             D.USING_ASSEMBLY_DEMAND_DATE))),
11102                                                       msi.aggregate_time_fence_date+1),
11103                                                decode(sign(trunc(DECODE('||MSC_ATP_PVT.G_HP_DEMAND_BUCKETING_PREF||',
11104                                                                         2, NVL(D.PLANNED_SHIP_DATE,D.USING_ASSEMBLY_DEMAND_DATE),
11105                                                                            NVL(D.SCHEDULE_SHIP_DATE,
11106                                                                                D.USING_ASSEMBLY_DEMAND_DATE)))
11107                                                                                - msi.aggregate_time_fence_date),
11108                                                    1, msi.aggregate_time_fence_date,
11109                                                    trunc(DECODE('||MSC_ATP_PVT.G_HP_DEMAND_BUCKETING_PREF||',
11110                                                                 2, NVL(D.PLANNED_SHIP_DATE,D.USING_ASSEMBLY_DEMAND_DATE),
11111                                                                    NVL(D.SCHEDULE_SHIP_DATE,
11112                                                                        D.USING_ASSEMBLY_DEMAND_DATE)))))) demand_date,
11113                                 trunc(DECODE('||MSC_ATP_PVT.G_HP_DEMAND_BUCKETING_PREF||',
11114                                              2, NVL(D.PLANNED_SHIP_DATE,D.USING_ASSEMBLY_DEMAND_DATE),
11115                                                 NVL(D.SCHEDULE_SHIP_DATE,
11116                                                     D.USING_ASSEMBLY_DEMAND_DATE))) original_demand_date,
11117                 		MIN(decode(d.origination_type, 4, d.daily_demand_rate,
11118                 		           d.using_requirement_quantity)) demand_quantity,
11119                                 SUM(decode(msi.aggregate_time_fence_date,
11120                                        NULL, peg1.allocated_quantity,
11121                                        decode(msi.bom_item_type,
11122                                               5, 0,
11123                                               peg1.allocated_quantity))) allocated_quantity,
11124                                 d.demand_id,
11125                                 decode(msi.aggregate_time_fence_date,
11126                                            NULL, d.origination_type, 51) origination_type,
11127                 		d.origination_type original_origination_type,
11128                                 decode(msi.aggregate_time_fence_date,
11129                                            NULL, NULL,
11130                                            decode(sign(trunc(s.new_schedule_date) - msi.aggregate_time_fence_date),
11131                                                1, decode(sign(trunc(DECODE('||MSC_ATP_PVT.G_HP_DEMAND_BUCKETING_PREF||',
11132                                                                            2, NVL(D.PLANNED_SHIP_DATE,D.USING_ASSEMBLY_DEMAND_DATE),
11133                                                                               NVL(D.SCHEDULE_SHIP_DATE,
11134                                                                                   D.USING_ASSEMBLY_DEMAND_DATE)))
11135                                                                                   - msi.aggregate_time_fence_date),
11136                                                       1, 1,
11137                                                       NULL),
11138                                                decode(sign(trunc(DECODE('||MSC_ATP_PVT.G_HP_DEMAND_BUCKETING_PREF||',
11139                                                                         2, NVL(D.PLANNED_SHIP_DATE,D.USING_ASSEMBLY_DEMAND_DATE),
11140                                                                            NVL(D.SCHEDULE_SHIP_DATE,
11141                                                                                D.USING_ASSEMBLY_DEMAND_DATE)))
11142                                                                                - msi.aggregate_time_fence_date),
11143                                                    1, NULL),
11144                                                    1)) pf_display_flag,
11145                 		decode(d.origination_type, 1, to_char(d.disposition_id), d.order_number) order_number,
11146                 		d.sales_order_line_id,
11147                 		d.demand_source_type,--cmro
11148                                 d.source_organization_id,
11149                                 d.using_assembly_item_id,
11150                                 d.customer_id,
11151                                 d.ship_to_site_id,
11152                                 :l_user_id,
11153                                 :l_sysdate,
11154                                 :l_user_id,
11155                                 :l_sysdate
11156                 	FROM    msc_full_pegging peg2,
11157                 	        msc_full_pegging peg1,
11158                 		msc_demands d,
11159                                 msc_supplies s,
11160                                 msc_system_items msi
11161                 	WHERE   peg1.plan_id = :p_plan_id
11162                 	AND     peg2.plan_id = peg1.plan_id
11163                 	AND     peg2.pegging_id = peg1.end_pegging_id
11164                 	AND     peg2.demand_id IN (-1, -2)
11165                 	AND     d.demand_id = peg1.demand_id
11166                 	AND     peg1.plan_id = d.plan_id
11167                 	AND     d.sr_instance_id = peg1.sr_instance_id
11168                 	AND     peg1.sr_instance_id=s.sr_instance_id
11169                 	AND     peg1.plan_id = s.plan_id
11170                 	AND     peg1.transaction_id = s.transaction_id
11171                 	AND	d.origination_type NOT IN (5,7,8,9,11,15,22,28,29,31,70)
11172                 	AND     msi.plan_id = s.plan_id
11173                         AND     msi.inventory_item_id = s.inventory_item_id
11174                         AND     msi.sr_instance_id = s.sr_instance_id
11175                         AND     msi.organization_id = s.organization_id
11176                 	GROUP BY
11177                                 peg1.plan_id,
11178                                 decode(msi.aggregate_time_fence_date,
11179                                            NULL, msi.inventory_item_id,
11180                                            decode(sign(s.new_schedule_date - msi.aggregate_time_fence_date),
11181                                                1, msi.product_family_id,
11182                                                msi.inventory_item_id)),
11183                                 msi.inventory_item_id,
11184                 	        peg1.organization_id,
11185                 	        peg1.sr_instance_id,
11186                 	        :def_num,
11187                                 decode(msi.aggregate_time_fence_date,
11188                                            NULL, trunc(DECODE('||MSC_ATP_PVT.G_HP_DEMAND_BUCKETING_PREF||',
11189                                                                           2, NVL(D.PLANNED_SHIP_DATE,D.USING_ASSEMBLY_DEMAND_DATE),
11190                                                                              NVL(D.SCHEDULE_SHIP_DATE,
11191                                                                                  D.USING_ASSEMBLY_DEMAND_DATE))),
11192                                            decode(sign(trunc(s.new_schedule_date) - msi.aggregate_time_fence_date),
11193                                                1, decode(sign(trunc(DECODE('||MSC_ATP_PVT.G_HP_DEMAND_BUCKETING_PREF||',
11194                                                                            2, NVL(D.PLANNED_SHIP_DATE,D.USING_ASSEMBLY_DEMAND_DATE),
11195                                                                               NVL(D.SCHEDULE_SHIP_DATE,
11196                                                                                   D.USING_ASSEMBLY_DEMAND_DATE)))
11197                                                                                   - msi.aggregate_time_fence_date),
11198                                                       1, trunc(DECODE('||MSC_ATP_PVT.G_HP_DEMAND_BUCKETING_PREF||',
11199                                                                       2, NVL(D.PLANNED_SHIP_DATE,D.USING_ASSEMBLY_DEMAND_DATE),
11200                                                                          NVL(D.SCHEDULE_SHIP_DATE,
11201                                                                              D.USING_ASSEMBLY_DEMAND_DATE))),
11202                                                       msi.aggregate_time_fence_date+1),
11203                                                decode(sign(trunc(DECODE('||MSC_ATP_PVT.G_HP_DEMAND_BUCKETING_PREF||',
11204                                                                         2, NVL(D.PLANNED_SHIP_DATE,D.USING_ASSEMBLY_DEMAND_DATE),
11205                                                                            NVL(D.SCHEDULE_SHIP_DATE,
11206                                                                                D.USING_ASSEMBLY_DEMAND_DATE)))
11207                                                                                - msi.aggregate_time_fence_date),
11208                                                    1, msi.aggregate_time_fence_date,
11209                                                    trunc(DECODE('||MSC_ATP_PVT.G_HP_DEMAND_BUCKETING_PREF||',
11210                                                                                    2, NVL(D.PLANNED_SHIP_DATE,D.USING_ASSEMBLY_DEMAND_DATE),
11211                                                                                       NVL(D.SCHEDULE_SHIP_DATE,
11212                                                                                           D.USING_ASSEMBLY_DEMAND_DATE)))))),
11213                                 trunc(DECODE('||MSC_ATP_PVT.G_HP_DEMAND_BUCKETING_PREF||',
11214                                              2, NVL(D.PLANNED_SHIP_DATE,D.USING_ASSEMBLY_DEMAND_DATE),
11215                                                 NVL(D.SCHEDULE_SHIP_DATE,
11216                                                     D.USING_ASSEMBLY_DEMAND_DATE))),
11217                                 d.demand_id,
11218                                 decode(msi.aggregate_time_fence_date,
11219                                            NULL, d.origination_type, 51),
11220                 		d.origination_type,
11221                                 decode(msi.aggregate_time_fence_date,
11222                                            NULL, NULL,
11223                                            decode(sign(trunc(s.new_schedule_date) - msi.aggregate_time_fence_date),
11224                                                1, decode(sign(trunc(DECODE('||MSC_ATP_PVT.G_HP_DEMAND_BUCKETING_PREF||',
11225                                                                            2, NVL(D.PLANNED_SHIP_DATE,D.USING_ASSEMBLY_DEMAND_DATE),
11226                                                                               NVL(D.SCHEDULE_SHIP_DATE,
11227                                                                                   D.USING_ASSEMBLY_DEMAND_DATE)))
11228                                                                                   - msi.aggregate_time_fence_date),
11229                                                       1, 1,
11230                                                       NULL),
11231                                                decode(sign(trunc(DECODE('||MSC_ATP_PVT.G_HP_DEMAND_BUCKETING_PREF||',
11232                                                                         2, NVL(D.PLANNED_SHIP_DATE,D.USING_ASSEMBLY_DEMAND_DATE),
11233                                                                            NVL(D.SCHEDULE_SHIP_DATE,
11234                                                                                D.USING_ASSEMBLY_DEMAND_DATE)))
11235                                                                                - msi.aggregate_time_fence_date),
11236                                                    1, NULL),
11237                                                    1)),
11238                 		decode(d.origination_type, 1, to_char(d.disposition_id), d.order_number),
11239                 		d.sales_order_line_id,
11240                 		d.demand_source_type,--cmro
11241                                 d.source_organization_id,
11242                                 d.using_assembly_item_id,
11243                                 d.customer_id,
11244                                 d.ship_to_site_id,
11245                                 :l_user_id,
11246                                 :l_sysdate,
11247                                 :l_user_id,
11248                                 :l_sysdate)';
11249                 END IF;
11250         ELSE
11251                 -- Prepare demands stmt for creation of bucketed demands/rollup supplies
11252                 x_sql_stmt := x_sql_stmt ||'
11253                                 plan_id,
11254                                 inventory_item_id,
11255                                 original_item_id,
11256                                 organization_id,
11257                                 sr_instance_id,
11258                                 demand_class,
11259                                 demand_date,
11260                                 original_demand_date,
11261                                 demand_quantity,
11262                                 allocated_quantity,
11263                                 parent_demand_id,
11264                                 origination_type,
11265                                 original_origination_type,
11266                                 pf_display_flag,
11267                                 order_number,
11268                                 sales_order_line_id,
11269                                 demand_source_type,--cmro
11270                                 source_organization_id,
11271                                 using_assembly_item_id,
11272                                 customer_id,
11273                                 ship_to_site_id,
11274                                 created_by,
11275                                 creation_date,
11276                                 last_updated_by,
11277                                 last_update_date)
11278                         (SELECT
11279                                 peg1.plan_id plan_id,
11280                                 decode(sign(s.new_schedule_date - msi.aggregate_time_fence_date),
11281                                            1, msi.product_family_id,
11282                                            msi.inventory_item_id) inventory_item_id,
11283                                 msi.inventory_item_id original_item_id,
11284                                 peg1.organization_id,
11285                                 peg1.sr_instance_id,
11286                                 d.demand_class demand_class,
11287                                 decode(sign(trunc(s.new_schedule_date) - msi.aggregate_time_fence_date),
11288                                        1, decode(sign(trunc(DECODE('||MSC_ATP_PVT.G_HP_DEMAND_BUCKETING_PREF||',
11289                                                                    2, NVL(D.PLANNED_SHIP_DATE,D.USING_ASSEMBLY_DEMAND_DATE),
11290                                                                    NVL(D.SCHEDULE_SHIP_DATE,
11291                                                                        D.USING_ASSEMBLY_DEMAND_DATE)))
11292                                                                        - msi.aggregate_time_fence_date),
11293                                                  1, trunc(DECODE('||MSC_ATP_PVT.G_HP_DEMAND_BUCKETING_PREF||',
11294                                                               2, NVL(D.PLANNED_SHIP_DATE,D.USING_ASSEMBLY_DEMAND_DATE),
11295                                                                  NVL(D.SCHEDULE_SHIP_DATE,
11296                                                                      D.USING_ASSEMBLY_DEMAND_DATE))),
11297                                                  msi.aggregate_time_fence_date+1),
11298                                        decode(sign(trunc(DECODE('||MSC_ATP_PVT.G_HP_DEMAND_BUCKETING_PREF||',
11299                                                                 2, NVL(D.PLANNED_SHIP_DATE,D.USING_ASSEMBLY_DEMAND_DATE),
11300                                                                    NVL(D.SCHEDULE_SHIP_DATE,
11301                                                                        D.USING_ASSEMBLY_DEMAND_DATE)))
11302                                                                        - msi.aggregate_time_fence_date),
11303                                            1, msi.aggregate_time_fence_date,
11304                                            trunc(DECODE('||MSC_ATP_PVT.G_HP_DEMAND_BUCKETING_PREF||',
11305                                                         2, NVL(D.PLANNED_SHIP_DATE,D.USING_ASSEMBLY_DEMAND_DATE),
11306                                                            NVL(D.SCHEDULE_SHIP_DATE,
11307                                                                D.USING_ASSEMBLY_DEMAND_DATE))))) demand_date,
11308                                 trunc(DECODE('||MSC_ATP_PVT.G_HP_DEMAND_BUCKETING_PREF||',
11309                                              2, NVL(D.PLANNED_SHIP_DATE,D.USING_ASSEMBLY_DEMAND_DATE),
11310                                                 NVL(D.SCHEDULE_SHIP_DATE,
11311                                                     D.USING_ASSEMBLY_DEMAND_DATE))) original_demand_date,
11312                                 MIN(decode(d.origination_type, 4, d.daily_demand_rate,
11313                 		           d.using_requirement_quantity)) demand_quantity,
11314                                 SUM(peg1.allocated_quantity),
11315                                 d.demand_id,
11316                                 51 origination_type, -- ATP Bucketed Demand
11317                                 d.origination_type original_origination_type,
11318                                 decode(sign(trunc(s.new_schedule_date) - msi.aggregate_time_fence_date),
11319                                        1, decode(sign(trunc(DECODE('||MSC_ATP_PVT.G_HP_DEMAND_BUCKETING_PREF||',
11320                                                                    2, NVL(D.PLANNED_SHIP_DATE,D.USING_ASSEMBLY_DEMAND_DATE),
11321                                                                       NVL(D.SCHEDULE_SHIP_DATE,
11322                                                                           D.USING_ASSEMBLY_DEMAND_DATE)))
11323                                                                           - msi.aggregate_time_fence_date),
11324                                               1, 1,
11325                                               NULL),
11326                                        decode(sign(trunc(DECODE('||MSC_ATP_PVT.G_HP_DEMAND_BUCKETING_PREF||',
11327                                                                 2, NVL(D.PLANNED_SHIP_DATE,D.USING_ASSEMBLY_DEMAND_DATE),
11328                                                                    NVL(D.SCHEDULE_SHIP_DATE,
11329                                                                        D.USING_ASSEMBLY_DEMAND_DATE)))
11330                                                                        - msi.aggregate_time_fence_date),
11331                                            1, NULL),
11332                                            1) pf_display_flag,
11333                 		decode(d.origination_type, 1, to_char(d.disposition_id), d.order_number) order_number,
11334                                 d.sales_order_line_id,
11335                                 d.demand_source_type,--cmro
11336                                 d.source_organization_id,
11337                                 d.using_assembly_item_id,
11338                                 d.customer_id,
11339                                 d.ship_to_site_id,
11340                                 :l_user_id,
11341                                 :l_sysdate,
11342                                 :l_user_id,
11343                                 :l_sysdate
11344                         FROM    msc_full_pegging peg1,
11345                                 msc_demands d,
11346                                 msc_supplies s,
11347                                 msc_system_items msi
11348                         WHERE   d.demand_id = peg1.demand_id
11349                         AND     d.plan_id = peg1.plan_id
11350                         AND     d.sr_instance_id = peg1.sr_instance_id
11351                         AND	d.origination_type NOT IN (5,7,8,9,11,15,22,28,29,31,70)
11352                         AND     s.transaction_id = peg1.transaction_id
11353                         AND     s.plan_id = peg1.plan_id
11354                         AND     msi.plan_id = d.plan_id
11355                         AND     msi.inventory_item_id = d.inventory_item_id
11356                         AND     msi.sr_instance_id = d.sr_instance_id
11357                         AND     msi.organization_id = d.organization_id
11358                         --AND     nvl(msi.product_family_id, msi.inventory_item_id)<>msi.inventory_item_id
11359                         AND     msi.aggregate_time_fence_date is not null
11360                         AND     msi.bom_item_type <> 5
11361                         AND     msi.plan_id = :p_plan_id
11362                         GROUP BY
11363                                 peg1.plan_id,
11364                                 decode(sign(s.new_schedule_date - msi.aggregate_time_fence_date),
11365                                            1, msi.product_family_id,
11366                                            msi.inventory_item_id),
11367                                 msi.inventory_item_id,
11368                                 peg1.organization_id,
11369                                 peg1.sr_instance_id,
11370                                 d.demand_class,
11371                                 decode(sign(trunc(s.new_schedule_date) - msi.aggregate_time_fence_date),
11372                                        1, decode(sign(trunc(DECODE('||MSC_ATP_PVT.G_HP_DEMAND_BUCKETING_PREF||',
11373                                                                    2, NVL(D.PLANNED_SHIP_DATE,D.USING_ASSEMBLY_DEMAND_DATE),
11374                                                                       NVL(D.SCHEDULE_SHIP_DATE,
11375                                                                           D.USING_ASSEMBLY_DEMAND_DATE)))
11376                                                                           - msi.aggregate_time_fence_date),
11377                                               1, trunc(DECODE('||MSC_ATP_PVT.G_HP_DEMAND_BUCKETING_PREF||',
11378                                                               2, NVL(D.PLANNED_SHIP_DATE,D.USING_ASSEMBLY_DEMAND_DATE),
11379                                                                  NVL(D.SCHEDULE_SHIP_DATE,
11380                                                                      D.USING_ASSEMBLY_DEMAND_DATE))),
11381                                               msi.aggregate_time_fence_date+1),
11382                                        decode(sign(trunc(DECODE('||MSC_ATP_PVT.G_HP_DEMAND_BUCKETING_PREF||',
11383                                                                 2, NVL(D.PLANNED_SHIP_DATE,D.USING_ASSEMBLY_DEMAND_DATE),
11384                                                                    NVL(D.SCHEDULE_SHIP_DATE,
11385                                                                        D.USING_ASSEMBLY_DEMAND_DATE))) - msi.aggregate_time_fence_date),
11386                                            1, msi.aggregate_time_fence_date,
11387                                            trunc(DECODE('||MSC_ATP_PVT.G_HP_DEMAND_BUCKETING_PREF||',
11388                                                         2, NVL(D.PLANNED_SHIP_DATE,D.USING_ASSEMBLY_DEMAND_DATE),
11389                                                            NVL(D.SCHEDULE_SHIP_DATE,
11390                                                                D.USING_ASSEMBLY_DEMAND_DATE))))),
11391                                 trunc(DECODE('||MSC_ATP_PVT.G_HP_DEMAND_BUCKETING_PREF||',
11392                                              2, NVL(D.PLANNED_SHIP_DATE,D.USING_ASSEMBLY_DEMAND_DATE),
11393                                                 NVL(D.SCHEDULE_SHIP_DATE,
11394                                                     D.USING_ASSEMBLY_DEMAND_DATE))),
11395                                 d.demand_id,
11396                                 51,
11397                                 d.origination_type,
11398                                 decode(sign(trunc(s.new_schedule_date) - msi.aggregate_time_fence_date),
11399                                        1, decode(sign(trunc(DECODE('||MSC_ATP_PVT.G_HP_DEMAND_BUCKETING_PREF||',
11400                                                                    2, NVL(D.PLANNED_SHIP_DATE,D.USING_ASSEMBLY_DEMAND_DATE),
11401                                                                       NVL(D.SCHEDULE_SHIP_DATE,
11402                                                                           D.USING_ASSEMBLY_DEMAND_DATE)))
11403                                                                           - msi.aggregate_time_fence_date),
11404                                               1, 1,
11405                                               NULL),
11406                                        decode(sign(trunc(DECODE('||MSC_ATP_PVT.G_HP_DEMAND_BUCKETING_PREF||',
11407                                                                 2, NVL(D.PLANNED_SHIP_DATE,D.USING_ASSEMBLY_DEMAND_DATE),
11408                                                                    NVL(D.SCHEDULE_SHIP_DATE,
11409                                                                        D.USING_ASSEMBLY_DEMAND_DATE)))
11410                                                                        - msi.aggregate_time_fence_date),
11411                                            1, NULL),
11412                                            1),
11413                 		decode(d.origination_type, 1, to_char(d.disposition_id), d.order_number),
11414                                 d.sales_order_line_id,
11415                                 d.demand_source_type,--cmro
11416                                 d.source_organization_id,
11417                                 d.using_assembly_item_id,
11418                                 d.customer_id,
11419                                 d.ship_to_site_id,
11420                                 :l_user_id,
11421                                 :l_sysdate,
11422                                 :l_user_id,
11423                                 :l_sysdate
11424                         )';
11425         END IF;
11426 
11427 EXCEPTION
11428         WHEN OTHERS THEN
11429                 IF PG_DEBUG in ('Y', 'C') THEN
11430                         msc_util.msc_log('Prepare_Demands_Stmt1: ' || 'Error occurred: ' || to_char(sqlcode) || ':' || SQLERRM);
11431                 END IF;
11432                 x_return_status := FND_API.G_RET_STS_ERROR;
11433 
11434 END Prepare_Demands_Stmt1;
11435 
11436 /*--Prepare_Demands_Stmt2---------------------------------------------------
11437 |  o  Called from Pf_Post_Plan_Proc procedure to:
11438 |       -  Prepare demands stmt for preallocation + bucketting for demands
11439 |            NOT pegged to excess/safety stock. (Demand priority AATP)
11440 |  o  Prepares demand stmt for both share plan partition "yes" and "no".
11441 +-------------------------------------------------------------------------*/
11442 /*PROCEDURE Prepare_Demands_Stmt2(
11443 	p_share_partition               IN      VARCHAR2,
11444 	p_temp_table                    IN      VARCHAR2,
11445 	p_parallel_degree               IN      NUMBER,
11446 	x_sql_stmt                      OUT 	NOCOPY VARCHAR2,
11447         x_return_status                 OUT     NOCOPY VARCHAR2
11448 )
11449 IS
11450 
11451 BEGIN
11452         -- Initializing API return code
11453         x_return_status := FND_API.G_RET_STS_SUCCESS;
11454 
11455         IF p_share_partition = 'Y' THEN
11456            x_sql_stmt := '
11457                 INSERT INTO MSC_ALLOC_DEMANDS(';
11458         ELSE
11459            x_sql_stmt := '
11460                 INSERT INTO ' || p_temp_table || '(';
11461         END IF;
11462 
11463         x_sql_stmt := x_sql_stmt ||'
11464                         plan_id,
11465                         inventory_item_id,
11466                         original_item_id,
11467                         organization_id,
11468                         sr_instance_id,
11469                         demand_class,
11470                         demand_date,
11471                         original_demand_date,
11472                         demand_quantity,
11473                         allocated_quantity,
11474                         parent_demand_id,
11475                         origination_type,
11476                         original_origination_type,
11477                         pf_display_flag,
11478                         order_number,
11479                         sales_order_line_id,
11480                         demand_source_type,--cmro
11481                         source_organization_id,
11482                         using_assembly_item_id,
11483                         customer_id,
11484                         ship_to_site_id,
11485                         created_by,
11486                         creation_date,
11487                         last_updated_by,
11488                         last_update_date)
11489 		(
11490 		SELECT  /*+ use_hash(mv) parallel(mv,' || to_char(p_parallel_degree) || ')
11491 				full(peg1.d1) full(peg1.d2) full(peg1.peg1) full(peg1.peg2) full(mv) full(peg1.tp) */
11492 /*                        pegging_v.plan_id,
11493                         pegging_v.inventory_item_id,
11494                         pegging_v.original_item_id,
11495                         pegging_v.organization_id,
11496                         pegging_v.sr_instance_id,
11497                         NVL(mv.demand_class, :def_num) demand_class,
11498                         pegging_v.demand_date,
11499                         pegging_v.original_demand_date,
11500                         MIN(pegging_v.demand_quantity),
11501                         SUM(pegging_v.allocated_quantity),
11502                         pegging_v.parent_demand_id,
11503                         pegging_v.origination_type,
11504                         pegging_v.original_origination_type,
11505                         pegging_v.pf_display_flag,
11506                         pegging_v.order_number,
11507                         pegging_v.sales_order_line_id,
11508                         pegging_v.demand_source_type,--cmro
11509                         pegging_v.source_organization_id,
11510                         pegging_v.using_assembly_item_id,
11511                         pegging_v.customer_id,
11512                         pegging_v.ship_to_site_id,
11513 			:l_user_id,
11514 			:l_sysdate,
11515 			:l_user_id,
11516 			:l_sysdate
11517 		FROM
11518                         (SELECT /*+ ordered use_hash(d2 peg2 peg1 tp)
11519 					parallel(d2,' || to_char(p_parallel_degree) || ')
11520 					parallel(d1,' || to_char(p_parallel_degree) || ')
11521 					parallel(peg2,' || to_char(p_parallel_degree) || ')
11522 					parallel(peg1,' || to_char(p_parallel_degree) || ')
11523                                         parallel(tp,'  || to_char(p_parallel_degree) || ') */
11524 /*                                peg2.plan_id plan_id,
11525                                 decode(sign(s.new_schedule_date - msi.aggregate_time_fence_date),
11526                                            1, msi.product_family_id,
11527                                            msi.inventory_item_id) inventory_item_id,
11528                                 msi.inventory_item_id original_item_id,
11529                                 peg2.organization_id,
11530                                 peg2.sr_instance_id,
11531 				NVL(d1.demand_class, :def_num) demand_class,
11532                                 decode(msi.aggregate_time_fence_date,
11533                                            NULL, trunc(DECODE('||MSC_ATP_PVT.G_HP_DEMAND_BUCKETING_PREF||',
11534                                                               2, NVL(d2.PLANNED_SHIP_DATE,d2.USING_ASSEMBLY_DEMAND_DATE),
11535                                                                  NVL(d2.SCHEDULE_SHIP_DATE,
11536                                                                      d2.USING_ASSEMBLY_DEMAND_DATE))),
11537                                            decode(sign(trunc(s.new_schedule_date) - msi.aggregate_time_fence_date),
11538                                                1, decode(sign(trunc(DECODE('||MSC_ATP_PVT.G_HP_DEMAND_BUCKETING_PREF||',
11539                                                               2, NVL(d2.PLANNED_SHIP_DATE,d2.USING_ASSEMBLY_DEMAND_DATE),
11540                                                                  NVL(d2.SCHEDULE_SHIP_DATE,
11541                                                                      d2.USING_ASSEMBLY_DEMAND_DATE))) - msi.aggregate_time_fence_date),
11542                                                       1, trunc(DECODE('||MSC_ATP_PVT.G_HP_DEMAND_BUCKETING_PREF||',
11543                                                                       2, NVL(d2.PLANNED_SHIP_DATE,d2.USING_ASSEMBLY_DEMAND_DATE),
11544                                                                          NVL(d2.SCHEDULE_SHIP_DATE,
11545                                                                              d2.USING_ASSEMBLY_DEMAND_DATE))),
11546                                                       msi.aggregate_time_fence_date+1),
11547                                                decode(sign(trunc(DECODE('||MSC_ATP_PVT.G_HP_DEMAND_BUCKETING_PREF||',
11548                                                                         2, NVL(d2.PLANNED_SHIP_DATE,d2.USING_ASSEMBLY_DEMAND_DATE),
11549                                                                            NVL(d2.SCHEDULE_SHIP_DATE,
11550                                                                                d2.USING_ASSEMBLY_DEMAND_DATE)))
11551                                                                                - msi.aggregate_time_fence_date),
11552                                                    1, msi.aggregate_time_fence_date,
11553                                                    trunc(DECODE('||MSC_ATP_PVT.G_HP_DEMAND_BUCKETING_PREF||',
11554                                                                 2, NVL(d2.PLANNED_SHIP_DATE,d2.USING_ASSEMBLY_DEMAND_DATE),
11555                                                                    NVL(d2.SCHEDULE_SHIP_DATE,
11556                                                                        d2.USING_ASSEMBLY_DEMAND_DATE)))))) demand_date,
11557                                 trunc(DECODE('||MSC_ATP_PVT.G_HP_DEMAND_BUCKETING_PREF||',
11558                                              2, NVL(d2.PLANNED_SHIP_DATE,d2.USING_ASSEMBLY_DEMAND_DATE),
11559                                                 NVL(d2.SCHEDULE_SHIP_DATE,
11560                                                     d2.USING_ASSEMBLY_DEMAND_DATE))) original_demand_date,
11561                                 decode(d2.origination_type, 4, d2.daily_demand_rate,
11562                 		           d2.using_requirement_quantity) demand_quantity,
11563                                 decode(msi.aggregate_time_fence_date,
11564                                        NULL, peg2.allocated_quantity,
11565                                        decode(msi.bom_item_type,
11566                                               5, 0,
11567                                               peg2.allocated_quantity)) allocated_quantity,
11568                                 d2.demand_id parent_demand_id,
11569                                 51 origination_type, -- ATP Bucketed Demand
11570                                 d2.origination_type original_origination_type,
11571                                 decode(sign(trunc(s.new_schedule_date) - msi.aggregate_time_fence_date),
11572                                        1, decode(sign(trunc(DECODE('||MSC_ATP_PVT.G_HP_DEMAND_BUCKETING_PREF||',
11573                                                                    2, NVL(d2.PLANNED_SHIP_DATE,d2.USING_ASSEMBLY_DEMAND_DATE),
11574                                                                       NVL(d2.SCHEDULE_SHIP_DATE,
11575                                                                           d2.USING_ASSEMBLY_DEMAND_DATE)))
11576                                                                           - msi.aggregate_time_fence_date),
11577                                               1, 1,
11578                                               NULL),
11579                                        decode(sign(trunc(DECODE('||MSC_ATP_PVT.G_HP_DEMAND_BUCKETING_PREF||',
11580                                                                 2, NVL(d2.PLANNED_SHIP_DATE,d2.USING_ASSEMBLY_DEMAND_DATE),
11581                                                                    NVL(d2.SCHEDULE_SHIP_DATE,
11582                                                                        d2.USING_ASSEMBLY_DEMAND_DATE)))
11583                                                                        - msi.aggregate_time_fence_date),
11584                                            1, NULL),
11585                                            1) pf_display_flag,
11586                 		decode(d2.origination_type, 1, to_char(d2.disposition_id), d2.order_number) order_number,
11587                                 d2.sales_order_line_id,
11588                                 d2.demand_source_type,--cmro
11589                                 d2.source_organization_id,
11590                                 d2.using_assembly_item_id,
11591                                 d2.customer_id,
11592                                 d2.ship_to_site_id,
11593                                 decode(msi.aggregate_time_fence_date,
11594                                            NULL, msi.inventory_item_id,
11595                                            msi.product_family_id) product_family_id
11596                         FROM	msc_demands d2,
11597 				msc_full_pegging peg2,
11598 				msc_full_pegging peg1 ,
11599 				msc_demands d1,
11600 				msc_supplies s,
11601 				msc_system_items msi
11602                         WHERE	peg2.plan_id = :p_plan_id
11603                         AND     peg2.plan_id = peg1.plan_id
11604                         AND	peg2.end_pegging_id = peg1.pegging_id
11605                         AND	peg2.sr_instance_id = peg1.sr_instance_id
11606                         AND	d1.plan_id = peg1.plan_id
11607                         AND	d1.demand_id = peg1.demand_id
11608                         AND	d1.sr_instance_id = peg1.sr_instance_id
11609                         AND	d2.plan_id = peg2.plan_id
11610                         AND	d2.demand_id = peg2.demand_id
11611                         AND	d2.sr_instance_id = peg2.sr_instance_id
11612                         AND	d2.origination_type NOT IN (5,7,8,9,11,15,22,28,29,31,70)
11613                 	AND     peg2.sr_instance_id=s.sr_instance_id
11614                 	AND     peg2.plan_id = s.plan_id
11615                 	AND     peg2.transaction_id = s.transaction_id
11616                 	AND     msi.plan_id = s.plan_id
11617                         AND     msi.inventory_item_id = s.inventory_item_id
11618                         AND     msi.sr_instance_id = s.sr_instance_id
11619                         AND     msi.organization_id = s.organization_id
11620                         ) pegging_v,
11621 			msc_item_hierarchy_mv mv
11622 		WHERE   pegging_v.product_family_id = mv.inventory_item_id(+)
11623 		AND     pegging_v.organization_id = mv.organization_id (+)
11624 		AND     pegging_v.sr_instance_id = mv.sr_instance_id (+)
11625 		AND     pegging_v.demand_date >=  mv.effective_date (+)
11626 		AND     pegging_v.demand_date <=  mv.disable_date (+)
11627 		AND	pegging_v.demand_class = mv.demand_class (+)
11628 		AND     mv.level_id (+) = -1
11629 		AND     pegging_v.allocated_quantity <> 0
11630 		GROUP BY
11631                         pegging_v.plan_id,
11632                         pegging_v.inventory_item_id,
11633                         pegging_v.original_item_id,
11634                         pegging_v.organization_id,
11635                         pegging_v.sr_instance_id,
11636                         NVL(mv.demand_class, :def_num),
11637                         pegging_v.demand_date,
11638                         pegging_v.original_demand_date,
11639                         pegging_v.parent_demand_id,
11640                         pegging_v.origination_type,
11641                         pegging_v.original_origination_type,
11642                         pegging_v.pf_display_flag,
11643                         pegging_v.order_number,
11644                         pegging_v.sales_order_line_id,
11645                         pegging_v.demand_source_type,--cmro
11646                         pegging_v.source_organization_id,
11647                         pegging_v.using_assembly_item_id,
11648                         pegging_v.customer_id,
11649                         pegging_v.ship_to_site_id,
11650 			:l_user_id,
11651 			:l_sysdate,
11652 			:l_user_id,
11653 			:l_sysdate)';
11654 
11655 EXCEPTION
11656         WHEN OTHERS THEN
11657                 IF PG_DEBUG in ('Y', 'C') THEN
11658                         msc_util.msc_log('Prepare_Demands_Stmt2: ' || 'Error occurred: ' || to_char(sqlcode) || ':' || SQLERRM);
11659                 END IF;
11660                 x_return_status := FND_API.G_RET_STS_ERROR;
11661 
11662 END Prepare_Demands_Stmt2;
11663 
11664 /*--Prepare_Supplies_Stmt1--------------------------------------------------
11665 |  o  Called from Pf_Post_Plan_Proc procedure to:
11666 |       -  Prepare supplies stmt for preallocation + rollup for supplies
11667 |            pegged to excess/safety stock. (Demand priority AATP)
11668 |            :  Excess supply by demand class = No
11669 |            :  Excess supply by demand class = Yes (for project atp)
11670 |       -  Prepare supplies stmt for rollup. (All PDS ATP scenarios except
11671 |            demand priority AATP)
11672 |  o  Prepares supplies stmt for both share plan partition "yes" and "no".
11673 +-------------------------------------------------------------------------*/
11674 /*PROCEDURE Prepare_Supplies_Stmt1(
11675 	p_share_partition               IN      VARCHAR2,
11676 	p_demand_priority               IN      VARCHAR2,
11677 	p_excess_supply_by_dc           IN      VARCHAR2,
11678 	p_temp_table                    IN      VARCHAR2,
11679 	p_parallel_degree               IN      NUMBER,
11680 	x_sql_stmt                      OUT 	NOCOPY VARCHAR2,
11681         x_return_status                 OUT     NOCOPY VARCHAR2
11682 )
11683 IS
11684 
11685 BEGIN
11686         -- Initializing API return code
11687         x_return_status := FND_API.G_RET_STS_SUCCESS;
11688 
11689         IF p_share_partition = 'Y' THEN
11690            x_sql_stmt := '
11691                 INSERT INTO MSC_ALLOC_SUPPLIES(';
11692         ELSE
11693            x_sql_stmt := '
11694                 INSERT INTO ' || p_temp_table || '(';
11695         END IF;
11696 
11697         IF p_demand_priority = 'Y' THEN
11698                 /* Prepare supplies stmt for preallocation + creation of rollup supplies
11699                  * project atp changes
11700                  * If the profile is set to 'Yes' then:
11701                  *    o If supply has a demand class existing on allocation rule then
11702                  *      allocate the supply to that demand class.
11703                  *    o If supply has a demand class not present on allocation rule then
11704                  *      allocate the supply to 'OTHER'.
11705                  *    o If supply does not have a demand class present, allocate the supply
11706                  *      to 'OTHER'.
11707                  * Else: Allocate the supply to 'OTHER'*/
11708 /*                IF p_excess_supply_by_dc = 'Y' THEN
11709                    x_sql_stmt := x_sql_stmt ||'
11710                                 plan_id,
11711                                 inventory_item_id,
11712                                 original_item_id,
11713                                 organization_id,
11714                                 sr_instance_id,
11715                                 demand_class,
11716                                 supply_date,
11717                                 parent_transaction_id,
11718                                 allocated_quantity,
11719                                 supply_quantity,
11720                                 order_type,
11721                                 original_order_type,
11722                                 order_number,
11723                                 schedule_designator_id,
11724                                 customer_id, -- not really required only used in rule based
11725                                 ship_to_site_id, -- not really required only used in rule based
11726                                 created_by,
11727                                 creation_date,
11728                                 last_updated_by,
11729                                 last_update_date)
11730         		(
11731         	        SELECT	/*+  use_hash(pegging_v mv) parallel(mv,' || to_char(p_parallel_degree) || ')  */
11732 /*                                pegging_v.plan_id plan_id,
11733                                 pegging_v.inventory_item_id,
11734                                 pegging_v.original_item_id,
11735                                 pegging_v.organization_id,
11736                                 pegging_v.sr_instance_id,
11737                                 NVL(mv.demand_class, :def_num) demand_class,
11738                                 pegging_v.supply_date,
11739                                 pegging_v.transaction_id,
11740                                 SUM(pegging_v.allocated_quantity),
11741                                 MIN(pegging_v.supply_quantity),
11742                                 pegging_v.order_type,
11743                                 pegging_v.original_order_type,
11744                                 pegging_v.order_number,
11745                                 pegging_v.schedule_designator_id,
11746                                 pegging_v.customer_id,
11747                                 pegging_v.ship_to_site_id,
11748                                 :l_user_id,
11749                                 :l_sysdate,
11750                                 :l_user_id,
11751                                 :l_sysdate
11752                         FROM
11753                                 (SELECT  /*+ ordered use_hash(peg2 peg1) use_hash(peg1 s msi)
11754                 				parallel(peg2,' || to_char(p_parallel_degree) || ')
11755                 				parallel(peg1,' || to_char(p_parallel_degree) || ')
11756                 				parallel(s,' || to_char(p_parallel_degree) || ')
11757                                                 parallel(msi,' || to_char(p_parallel_degree) || ') */
11758 /*                                        peg1.plan_id plan_id,
11759                                         decode(msi.aggregate_time_fence_date,
11760                                                    NULL, msi.inventory_item_id,
11761                                                    decode(sign(TRUNC(s.new_schedule_date) - msi.aggregate_time_fence_date),
11762                                                        1, msi.product_family_id,
11763                                                        msi.inventory_item_id)) inventory_item_id,
11764                                         msi.inventory_item_id original_item_id,
11765                                         peg1.organization_id,
11766                                         peg1.sr_instance_id,
11767                                         NVL(s.demand_class, :def_num) demand_class,
11768                                         TRUNC(s.new_schedule_date) supply_date,
11769                                         decode(msi.aggregate_time_fence_date,
11770                                                NULL, peg1.allocated_quantity,
11771                                                decode(msi.bom_item_type,
11772                                                       5, 0,
11773                                                       peg1.allocated_quantity)) allocated_quantity,
11774                                         s.new_order_quantity supply_quantity,
11775                                         peg1.transaction_id,
11776                                         decode(msi.aggregate_time_fence_date,
11777                                                    NULL, s.order_type, 50) order_type
11778                                         s.order_type original_order_type,
11779                                         s.order_number,
11780                                         s.schedule_designator_id,
11781                                         s.customer_id,
11782                                         s.ship_to_site_id,
11783                                         decode(msi.aggregate_time_fence_date,
11784                                                    NULL, msi.inventory_item_id,
11785                                                    msi.product_family_id) product_family_id
11786                                 FROM    msc_full_pegging peg2,
11787                                         msc_full_pegging peg1,
11788                                 	msc_supplies s,
11789                                 	msc_system_items msi
11790                                 WHERE   peg1.plan_id = :p_plan_id
11791                                 AND     peg2.plan_id = peg1.plan_id
11792                                 AND     peg2.pegging_id = peg1.end_pegging_id
11793                                 AND     peg2.demand_id IN (-1, -2)
11794                                 AND     s.plan_id = peg1.plan_id
11795                                 AND     s.transaction_id = peg1.transaction_id
11796                                 AND     s.sr_instance_id = peg1.sr_instance_id
11797                                 AND     msi.sr_instance_id = s.sr_instance_id
11798                                 AND     msi.plan_id = s.plan_id
11799                                 AND     msi.organization_id = s.organization_id
11800                                 AND     msi.inventory_item_id = s.inventory_item_id) pegging_v,
11801                                 msc_item_hierarchy_mv mv
11802                         WHERE	pegging_v.product_family_id = mv.inventory_item_id(+)
11803                         AND     pegging_v.organization_id = mv.organization_id (+)
11804                         AND     pegging_v.sr_instance_id = mv.sr_instance_id (+)
11805                         AND     pegging_v.supply_date >=  mv.effective_date (+)
11806                         AND     pegging_v.supply_date <=  mv.disable_date (+)
11807                         AND	pegging_v.demand_class = mv.demand_class (+)
11808                         AND     mv.level_id (+) = -1
11809                         AND     pegging_v.allocated_quantity <> 0
11810         		GROUP BY
11811                                 pegging_v.plan_id plan_id,
11812                                 pegging_v.inventory_item_id,
11813                                 pegging_v.original_item_id,
11814                                 pegging_v.organization_id,
11815                                 pegging_v.sr_instance_id,
11816                                 NVL(mv.demand_class, :def_num),
11817                                 pegging_v.supply_date,
11818                                 pegging_v.transaction_id,
11819                                 pegging_v.order_type,
11820                                 pegging_v.original_order_type,
11821                                 pegging_v.order_number,
11822                                 pegging_v.schedule_designator_id,
11823                                 pegging_v.customer_id,
11824                                 pegging_v.ship_to_site_id,
11825                                 :l_user_id,
11826                                 :l_sysdate,
11827                                 :l_user_id,
11828                                 :l_sysdate)';
11829                 ELSE
11830                    x_sql_stmt := x_sql_stmt ||'
11831                                 plan_id,
11832                                 inventory_item_id,
11833                                 original_item_id,
11834                                 organization_id,
11835                                 sr_instance_id,
11836                                 demand_class,
11837                                 supply_date,
11838                                 parent_transaction_id,
11839                                 allocated_quantity,
11840                                 supply_quantity,
11841                                 order_type,
11842                                 original_order_type,
11843                                 order_number,
11844                                 schedule_designator_id,
11845                                 customer_id, -- not really required only used in rule based
11846                                 ship_to_site_id, -- not really required only used in rule based
11847                                 created_by,
11848                                 creation_date,
11849                                 last_updated_by,
11850                                 last_update_date)
11851         		(
11852         		SELECT  /*+ ordered use_hash(peg2 peg1) use_hash(peg1 s tp cal)
11853         				parallel(peg2,' || to_char(p_parallel_degree) || ')
11854         				parallel(peg1,' || to_char(p_parallel_degree) || ')
11855         				parallel(s,' || to_char(p_parallel_degree) || ')
11856                                         parallel(tp,' || to_char(p_parallel_degree) || ') */
11857 /*                                peg1.plan_id plan_id,
11858                                 decode(msi.aggregate_time_fence_date,
11859                                            NULL, msi.inventory_item_id,
11860                                            decode(sign(TRUNC(s.new_schedule_date) - msi.aggregate_time_fence_date),
11861                                                1, msi.product_family_id,
11862                                                msi.inventory_item_id)) inventory_item_id,
11863                                 msi.inventory_item_id original_item_id,
11864                                 peg1.organization_id,
11865                                 peg1.sr_instance_id,
11866                                 :def_num demand_class,
11867                                 TRUNC(s.new_schedule_date) supply_date,
11868                                 SUM(decode(msi.aggregate_time_fence_date,
11869                                        NULL, peg1.allocated_quantity,
11870                                        decode(msi.bom_item_type,
11871                                               5, 0,
11872                                               peg1.allocated_quantity))) allocated_quantity,
11873                                 MIN(s.new_order_quantity) supply_quantity,
11874                                 peg1.transaction_id,
11875                                 decode(msi.aggregate_time_fence_date,
11876                                            NULL, s.order_type, 50) order_type,
11877                                 s.order_type original_order_type,
11878                                 s.order_number,
11879                                 s.schedule_designator_id,
11880                                 s.customer_id,
11881                                 s.ship_to_site_id,
11882                                 :l_user_id created_by,
11883                                 :l_sysdate creation_date,
11884                                 :l_user_id last_updated_by,
11885                                 :l_sysdate last_update_date
11886         		FROM    msc_full_pegging peg2,
11887         		        msc_full_pegging peg1,
11888         			msc_supplies s,
11889         			msc_system_items msi
11890         		WHERE   peg1.plan_id = :p_plan_id
11891         		AND     peg2.plan_id = peg1.plan_id
11892         		AND     peg2.pegging_id = peg1.end_pegging_id
11893         		AND     peg2.demand_id IN (-1, -2)
11894         		AND     s.plan_id = peg1.plan_id
11895         		AND     s.transaction_id = peg1.transaction_id
11896         		AND     s.sr_instance_id = peg1.sr_instance_id
11897                         AND     msi.sr_instance_id = s.sr_instance_id
11898                         AND     msi.plan_id = s.plan_id
11899                         AND     msi.organization_id = s.organization_id
11900                         AND     msi.inventory_item_id = s.inventory_item_id
11901                         GROUP BY
11902                                 peg1.plan_id,
11903                                 decode(msi.aggregate_time_fence_date,
11904                                            NULL, msi.inventory_item_id,
11905                                            decode(sign(TRUNC(s.new_schedule_date) - msi.aggregate_time_fence_date),
11906                                                1, msi.product_family_id,
11907                                                msi.inventory_item_id)),
11908                                 msi.inventory_item_id,
11909                                 peg1.organization_id,
11910                                 peg1.sr_instance_id,
11911                                 :def_num,
11912                                 TRUNC(s.new_schedule_date),
11913                                 peg1.transaction_id,
11914                                 decode(msi.aggregate_time_fence_date,
11915                                            NULL, s.order_type, 50),
11916                                 s.order_type,
11917                                 s.order_number,
11918                                 s.schedule_designator_id,
11919                                 s.customer_id,
11920                                 s.ship_to_site_id,
11921                                 :l_user_id,
11922                                 :l_sysdate,
11923                                 :l_user_id,
11924                                 :l_sysdate)';
11925                 END IF;
11926         ELSE
11927                 -- Prepare supplies stmt for creation of rollup supplies
11928                 x_sql_stmt := x_sql_stmt ||'
11929                                 plan_id,
11930                                 inventory_item_id,
11931                                 original_item_id,
11932                                 organization_id,
11933                                 sr_instance_id,
11934                                 demand_class,
11935                                 supply_date,
11936                                 parent_transaction_id,
11937                                 allocated_quantity,
11938                                 supply_quantity,
11939                                 order_type,
11940                                 original_order_type,
11941                                 order_number,
11942                                 schedule_designator_id,
11943                                 customer_id,
11944                                 ship_to_site_id,
11945                                 created_by,
11946                                 creation_date,
11947                                 last_updated_by,
11948                                 last_update_date)
11949         		(
11950                         select  :p_plan_id,
11951                                 decode(sign(TRUNC(s.new_schedule_date) - i.aggregate_time_fence_date),
11952                                         1, i.product_family_id, s.inventory_item_id),
11953                                 s.inventory_item_id,
11954                                 s.organization_id,
11955                                 s.sr_instance_id,
11956                                 s.demand_class,
11957                                 TRUNC(s.new_schedule_date),
11958                                 s.transaction_id,
11959                                 s.new_order_quantity,
11960                                 s.new_order_quantity,
11961                                 50,
11962                                 s.order_type,
11963                                 s.order_number,
11964                                 s.schedule_designator_id,
11965                                 s.customer_id,
11966                                 s.ship_to_site_id,
11967                                 :l_user_id,
11968                                 :l_sysdate,
11969                                 :l_user_id,
11970                                 :l_sysdate
11971                         from    msc_supplies s,
11972                                 msc_system_items i
11973                         where   i.aggregate_time_fence_date is not null
11974                         and     i.bom_item_type <> 5
11975                         and     i.plan_id = :p_plan_id
11976                         and     s.inventory_item_id = i.inventory_item_id
11977                         and     s.organization_id = i.organization_id
11978                         and     s.sr_instance_id = i.sr_instance_id
11979                         and     s.plan_id = i.plan_id
11980                         )';
11981         END IF;
11982 
11983 EXCEPTION
11984         WHEN OTHERS THEN
11985                 IF PG_DEBUG in ('Y', 'C') THEN
11986                         msc_util.msc_log('Prepare_Supplies_Stmt1: ' || 'Error occurred: ' || to_char(sqlcode) || ':' || SQLERRM);
11987                 END IF;
11988                 x_return_status := FND_API.G_RET_STS_ERROR;
11989 
11990 END Prepare_Supplies_Stmt1;
11991 
11992 /*--Prepare_Supplies_Stmt2-----------------------------------------------------
11993 |  o  Called from Pf_Post_Plan_Proc procedure to:
11994 |       -  Prepare supplies stmt for preallocation + supplies rollup for
11995 |            supplies NOT pegged to excess/safety stock.(Demand priority AATP)
11996 |  o  Prepares supplies stmt for both share plan partition "yes" and "no".
11997 +----------------------------------------------------------------------------*/
11998 /*PROCEDURE Prepare_Supplies_Stmt2(
11999 	p_share_partition               IN      VARCHAR2,
12000 	p_temp_table                    IN      VARCHAR2,
12001 	p_parallel_degree               IN      NUMBER,
12002 	x_sql_stmt                      OUT 	NOCOPY VARCHAR2,
12003         x_return_status                 OUT     NOCOPY VARCHAR2
12004 )
12005 IS
12006 
12007 BEGIN
12008         -- Initializing API return code
12009         x_return_status := FND_API.G_RET_STS_SUCCESS;
12010 
12011         IF p_share_partition = 'Y' THEN
12012            x_sql_stmt := '
12013                 INSERT INTO MSC_ALLOC_SUPPLIES(';
12014         ELSE
12015            x_sql_stmt := '
12016                 INSERT INTO ' || p_temp_table || '(';
12017         END IF;
12018 
12019         x_sql_stmt := x_sql_stmt ||'
12020                         plan_id,
12021                         inventory_item_id,
12022                         original_item_id,
12023                         organization_id,
12024                         sr_instance_id,
12025                         demand_class,
12026                         supply_date,
12027                         parent_transaction_id,
12028                         allocated_quantity,
12029                         supply_quantity,
12030                         order_type,
12031                         original_order_type,
12032                         order_number,
12033                         schedule_designator_id,
12034                         customer_id, -- not really required only used in rule based
12035                         ship_to_site_id, -- not really required only used in rule based
12036                         created_by,
12037                         creation_date,
12038                         last_updated_by,
12039                         last_update_date)
12040 		(
12041 		SELECT	/*+  use_hash(peg1 mv) parallel(mv,' || to_char(p_parallel_degree) || ')  */
12042 /*                        pegging_v.plan_id,
12043                         pegging_v.inventory_item_id,
12044                         pegging_v.original_item_id,
12045                         pegging_v.organization_id,
12046                         pegging_v.sr_instance_id,
12047                         NVL(mv.demand_class, :def_num) demand_class,
12048                         pegging_v.supply_date,
12049                         pegging_v.transaction_id,
12050                         SUM(pegging_v.allocated_quantity),
12051                         MIN(pegging_v.supply_quantity),
12052                         pegging_v.order_type,
12053                         pegging_v.original_order_type,
12054                         pegging_v.order_number,
12055                         pegging_v.schedule_designator_id,
12056                         pegging_v.customer_id,
12057                         pegging_v.ship_to_site_id,
12058                         :l_user_id,
12059                         :l_sysdate,
12060                         :l_user_id,
12061                         :l_sysdate
12062 		FROM
12063 			(SELECT /*+  ordered use_hash(s peg2 peg1 d tp cal)
12064 					parallel(peg2,' || to_char(p_parallel_degree) || ')
12065 					parallel(peg1,' || to_char(p_parallel_degree) || ')
12066 					parallel(s,' || to_char(p_parallel_degree) || ')
12067 					parallel(d,' || to_char(p_parallel_degree) || ')
12068                                         parallel(tp,' || to_char(p_parallel_degree) || ') */
12069 /*                                peg2.plan_id plan_id,
12070                                 decode(msi.aggregate_time_fence_date,
12071                                            NULL, msi.inventory_item_id,
12072                                            decode(sign(TRUNC(s.new_schedule_date) - msi.aggregate_time_fence_date),
12073                                                1, msi.product_family_id,
12074                                                msi.inventory_item_id)) inventory_item_id,
12075                                 msi.inventory_item_id original_item_id,
12076                                 peg2.organization_id,
12077                                 peg2.sr_instance_id,
12078                                 NVL(d.demand_class, :def_num) demand_class,
12079                                 TRUNC(s.new_schedule_date) supply_date,
12080                                 decode(msi.aggregate_time_fence_date,
12081                                        NULL, peg2.allocated_quantity,
12082                                        decode(msi.bom_item_type,
12083                                               5, 0,
12084                                               peg2.allocated_quantity)) allocated_quantity,
12085                                 s.new_order_quantity supply_quantity,
12086                                 peg2.transaction_id,
12087                                 decode(msi.aggregate_time_fence_date,
12088                                            NULL, s.order_type, 50) order_type,
12089                                 s.order_type original_order_type,
12090                                 s.order_number,
12091                                 s.schedule_designator_id,
12092                                 s.customer_id,
12093                                 s.ship_to_site_id,
12094                                 decode(msi.aggregate_time_fence_date,
12095                                            NULL, msi.inventory_item_id,
12096                                            msi.product_family_id) product_family_id
12097 			FROM	msc_supplies s,
12098 				msc_full_pegging peg2,
12099 				msc_full_pegging peg1,
12100 				msc_demands d,
12101                                 msc_system_items msi
12102 			WHERE	peg2.plan_id = :p_plan_id
12103 			  AND   peg2.plan_id = peg1.plan_id
12104 			  AND	peg2.end_pegging_id = peg1.pegging_id
12105 			  AND	d.plan_id = peg1.plan_id
12106 			  AND	d.demand_id = peg1.demand_id
12107 			  AND	d.sr_instance_id = peg1.sr_instance_id
12108 			  AND	d.inventory_item_id = peg1.inventory_item_id
12109 			  AND	s.plan_id = peg2.plan_id
12110 			  AND	s.transaction_id = peg2.transaction_id
12111 			  AND	s.sr_instance_id = peg2.sr_instance_id
12112                           AND   msi.sr_instance_id = s.sr_instance_id
12113                           AND   msi.plan_id = s.plan_id
12114                           AND   msi.organization_id = s.organization_id
12115                           AND   msi.inventory_item_id = s.inventory_item_id
12116                         ) pegging_v,
12117 			msc_item_hierarchy_mv mv
12118 		WHERE	pegging_v.product_family_id = mv.inventory_item_id(+)
12119 		AND     pegging_v.organization_id = mv.organization_id (+)
12120 		AND     pegging_v.sr_instance_id = mv.sr_instance_id (+)
12121 		AND     pegging_v.supply_date >=  mv.effective_date (+)
12122 		AND     pegging_v.supply_date <=  mv.disable_date (+)
12123 		AND	pegging_v.demand_class = mv.demand_class (+)
12124 		AND     mv.level_id (+) = -1
12125 		AND     pegging_v.allocated_quantity <> 0
12126 		GROUP BY
12127                         pegging_v.plan_id,
12128                         pegging_v.inventory_item_id,
12129                         pegging_v.original_item_id,
12130                         pegging_v.organization_id,
12131                         pegging_v.sr_instance_id,
12132                         NVL(mv.demand_class, :def_num),
12133                         pegging_v.supply_date,
12134                         pegging_v.transaction_id,
12135                         pegging_v.order_type,
12136                         pegging_v.original_order_type,
12137                         pegging_v.order_number,
12138                         pegging_v.schedule_designator_id,
12139                         pegging_v.customer_id,
12140                         pegging_v.ship_to_site_id,
12141                         :l_user_id,
12142                         :l_sysdate,
12143                         :l_user_id,
12144                         :l_sysdate)';
12145 
12146 EXCEPTION
12147         WHEN OTHERS THEN
12148                 IF PG_DEBUG in ('Y', 'C') THEN
12149                         msc_util.msc_log('Prepare_Supplies_Stmt2: ' || 'Error occurred: ' || to_char(sqlcode) || ':' || SQLERRM);
12150                 END IF;
12151                 x_return_status := FND_API.G_RET_STS_ERROR;
12152 
12153 END Prepare_Supplies_Stmt2;
12154 
12155 /*--Update_Pf_Display_Flag-----------------------------------------------------
12156 |  o  Called from Pf_Post_Plan_Proc procedure to update Pf_Display_Flag to
12157 |       handle scenario when a demand on one side of ATF is satisfied fully
12158 |       from supplies on the other side of ATF.
12159 +----------------------------------------------------------------------------*/
12160 PROCEDURE Update_Pf_Display_Flag(
12161 	p_plan_id                       IN      NUMBER,
12162         x_return_status                 OUT     NOCOPY VARCHAR2
12163 )
12164 IS
12165         l_return_status                 VARCHAR2(1);
12166 
12167 BEGIN
12168         IF PG_DEBUG in ('Y', 'C') THEN
12169                 msc_util.msc_log('Update_Pf_Display_Flag: ' || 'p_plan_id: ' || p_plan_id);
12170         END IF;
12171 
12172         -- Initializing API return code
12173         x_return_status := FND_API.G_RET_STS_SUCCESS;
12174 
12175         -- Performance tuning pending
12176         /*
12177         UPDATE  MSC_ALLOC_DEMANDS AD
12178         SET     Pf_Display_Flag = 1
12179         WHERE   AD.plan_id = p_plan_id
12180         --AND     AD.allocated_quantity = Demand_Quantity
12181         AND     AD.pf_display_flag is NULL
12182         AND     (AD.parent_demand_id, AD.demand_class, 1) in
12183                     (SELECT AD2.parent_demand_id, AD2.demand_class, count(*)
12184                      FROM   MSC_ALLOC_DEMANDS AD2
12185                      WHERE  AD2.plan_id = p_plan_id
12186                      GROUP BY AD2.parent_demand_id, AD2.demand_class
12187                     )
12188         AND     EXISTS (SELECT  1
12189                         FROM    MSC_SYSTEM_ITEMS I
12190                         WHERE   I.inventory_item_id = AD.inventory_item_id
12191                         AND     I.organization_id   = AD.organization_id
12192                         AND     I.sr_instance_id    = AD.sr_instance_id
12193                         AND     I.plan_id           = AD.plan_id
12194                         AND     I.aggregate_time_fence_date is not null);
12195        */
12196         --5631956 Modified SQL tuned for better performance.
12197         UPDATE  MSC_ALLOC_DEMANDS AD
12198         SET     Pf_Display_Flag = 1
12199         WHERE   AD.plan_id = p_plan_id
12200         AND     AD.pf_display_flag is NULL
12201         AND     EXISTS (SELECT 1
12202                         FROM   MSC_ALLOC_DEMANDS AD2
12203                         WHERE  AD2.plan_id = p_plan_id
12204                         AND    AD.parent_demand_id = AD2.parent_demand_id
12205                         AND    AD.demand_class = AD2.demand_class
12206                         GROUP BY AD2.parent_demand_id, AD2.demand_class
12207                         HAVING count(*) = 1)
12208         AND     EXISTS (SELECT  1
12209                         FROM    MSC_SYSTEM_ITEMS I
12210                         WHERE   I.inventory_item_id = AD.inventory_item_id
12211                         AND     I.organization_id   = AD.organization_id
12212                         AND     I.sr_instance_id    = AD.sr_instance_id
12213                         AND     I.plan_id           = AD.plan_id
12214                         AND     I.aggregate_time_fence_date is not null);
12215 EXCEPTION
12216         WHEN OTHERS THEN
12217                 IF PG_DEBUG in ('Y', 'C') THEN
12218                         msc_util.msc_log('Update_Pf_Display_Flag: ' || 'Error occurred: ' || to_char(sqlcode) || ':' || SQLERRM);
12219                 END IF;
12220                 x_return_status := FND_API.G_RET_STS_ERROR;
12221 
12222 END Update_Pf_Display_Flag;
12223 
12224 -- CTO-PF start
12225 /*--Create_PF_DP_Alloc_Reliefs-----------------------------------------------------
12226 |  o  Called from Gen_Atp_Pegging procedure to insert bucketed demands and
12227 |       rollup supplies in MSC_ATP_PEGGING in demand priority cases
12228 +----------------------------------------------------------------------------*/
12229 
12230 PROCEDURE Create_PF_DP_Alloc_Reliefs (p_plan_id         IN          NUMBER,
12231                                          p_insert_table    IN          VARCHAR2,
12232                                          p_user_id         IN          NUMBER,
12233                                          p_sysdate         IN          DATE,
12234                                          x_return_status   OUT NOCOPY  VARCHAR2
12235                                         )
12236 IS
12237 
12238 l_sql_stmt                      VARCHAR2(800);
12239 l_sql_stmt_1                    VARCHAR2(7000);
12240 l_sql_stmt_2                    VARCHAR2(7000);
12241 -- Default Demand Class
12242 l_def_dmd_class                 VARCHAR2(3) := '-1';
12243 
12244 
12245 BEGIN
12246 
12247   IF PG_DEBUG in ('Y', 'C') THEN
12248      msc_sch_wb.atp_debug('***** Begin Create_PF_DP_Alloc_Reliefs Procedure *****');
12249      msc_sch_wb.atp_debug(' Plan Id : ' || p_plan_id );
12250      msc_sch_wb.atp_debug(' Insert Table parameter : ' || p_insert_table );
12251      msc_sch_wb.atp_debug(' User Id Paramenter : ' || p_user_id );
12252      msc_sch_wb.atp_debug(' Date Parameter : ' || p_sysdate );
12253   END IF;
12254 
12255   x_return_status := FND_API.G_RET_STS_SUCCESS;
12256 
12257     IF PG_DEBUG in ('Y', 'C') THEN
12258        msc_sch_wb.atp_debug(' Inserting Demands');
12259     END IF;
12260 
12261     l_sql_stmt_1 := 'INSERT INTO  ' || p_insert_table ||
12262              '(reference_item_id,
12263              inventory_item_id,
12264              original_item_id,
12265              original_date,
12266              plan_id,
12267              sr_instance_id,
12268              organization_id,
12269              sales_order_line_id,
12270              demand_source_type,
12271              end_demand_id,
12272              bom_item_type,
12273              sales_order_qty,
12274              transaction_date,
12275              demand_id,
12276              demand_quantity,
12277              disposition_id,
12278              demand_class,
12279              consumed_qty,
12280              overconsumption_qty,
12281              supply_id,
12282              supply_quantity,
12283              allocated_quantity,
12284              relief_type,
12285              relief_quantity,
12286              pegging_id,
12287              prev_pegging_id,
12288              end_pegging_id,
12289              created_by,
12290              creation_date,
12291              last_updated_by,
12292              last_update_date,
12293              customer_id,
12294              customer_site_id,
12295  			 offset_type)
12296     SELECT
12297              peg_v.reference_item_id,
12298              peg_v.inventory_item_id,
12299              peg_v.original_item_id,
12300              peg_v.original_date,
12301              peg_v.plan_id,
12302              peg_v.sr_instance_id,
12303              peg_v.organization_id,
12304              peg_v.sales_order_line_id,
12305              peg_v.demand_source_type,
12306              peg_v.end_demand_id,
12307              peg_v.bom_item_type,
12308              peg_v.sales_order_qty,
12309              peg_v.transaction_date,
12310              peg_v.demand_id ,
12311              peg_v.demand_quantity,
12312              peg_v.disposition_id,
12313              NVL(mv.demand_class, :l_def_dmd_class) demand_class ,
12314              peg_v.consumed_qty,
12315              peg_v.overconsumption_qty,
12316              peg_v.supply_id,
12317              peg_v.supply_quantity,
12318              peg_v.allocated_quantity,
12319              peg_v.relief_type,
12320              peg_v.relief_quantity,
12321              peg_v.pegging_id,
12322              peg_v.prev_pegging_id,
12323              peg_v.end_pegging_id,
12324              :p_user_id,
12325              :p_sysdate,
12326              :p_user_id,
12327              :p_sysdate,
12328              mv.partner_id,
12329              mv.partner_site_id,
12330  			 peg_v.offset_type
12331 
12332     FROM
12333         (SELECT mapt.reference_item_id reference_item_id,
12334                 decode(mapt.atf_date,
12335                        NULL, mapt.inventory_item_id,
12336                        decode(sign(trunc(s.new_schedule_date) - mapt.atf_date),
12337                               1, mapt.product_family_id,
12338                               mapt.inventory_item_id
12339                               )
12340                        ) inventory_item_id,
12341                 mapt.inventory_item_id original_item_id,
12342                 mapt.transaction_date original_date,
12343                 mapt.plan_id plan_id,
12344                 mapt.sr_instance_id sr_instance_id,
12345                 mapt.organization_id organization_id,
12346                 mapt.sales_order_line_id sales_order_line_id,
12347                 mapt.demand_source_type demand_source_type,
12348                 mapt.end_demand_id end_demand_id,
12349                 mapt.bom_item_type bom_item_type,
12350                 mapt.sales_order_qty sales_order_qty,
12351                 decode(mapt.atf_date,
12352                        NULL, trunc(mapt.transaction_date),
12353                        decode(sign(trunc(s.new_schedule_date) - mapt.atf_date),
12354                          1, decode(sign(trunc(mapt.transaction_date)- mapt.atf_date),
12355                                         1, trunc(mapt.transaction_date),
12356                                         mapt.atf_date+1
12357                                   ),
12358                          decode(sign(trunc(mapt.transaction_date)- mapt.atf_date),
12359                                      1, mapt.atf_date,
12360                                      trunc(mapt.transaction_date)
12361                                 )
12362                               )
12363                        )transaction_date,
12364                 mapt.demand_id demand_id,
12365                 mapt.demand_quantity demand_quantity,
12366                 mapt.disposition_id disposition_id,
12367                 NVL(mapt.demand_class, :l_def_dmd_class) demand_class ,
12368                 mapt.consumed_qty consumed_qty,
12369                 mapt.overconsumption_qty overconsumption_qty,
12370                 mapt.supply_id supply_id,
12371                 mapt.supply_quantity supply_quantity,
12372                 mapt.allocated_quantity allocated_quantity,
12373                 decode(mapt.atf_date,
12374                        NULL,5,7) relief_type,
12375                 mapt.relief_quantity  relief_quantity,
12376                 mapt.pegging_id pegging_id,
12377                 mapt.prev_pegging_id prev_pegging_id,
12378                 mapt.end_pegging_id end_pegging_id,
12379                 mapt.atf_date atf_date,
12380                 mapt.product_family_id product_family_id,
12381 		mapt.offset_type
12382         FROM    msc_atp_peg_temp mapt,
12383                 msc_supplies s
12384         WHERE   mapt.plan_id = :p_plan_id
12385         AND     mapt.relief_type = 3
12386 
12387         AND     s.sr_instance_id = mapt.sr_instance_id
12388         AND     s.plan_id = mapt.plan_id
12389         AND     s.transaction_id = mapt.supply_id) peg_v,
12390                 msc_item_hierarchy_mv mv
12391     WHERE
12392              decode(peg_v.atf_date,
12393                        NULL,peg_v.inventory_item_id,
12394                        peg_v.product_family_id) = mv.inventory_item_id(+)
12395      AND     peg_v.organization_id = mv.organization_id (+)
12396      AND     peg_v.sr_instance_id = mv.sr_instance_id (+)
12397      AND     peg_v.transaction_date >=  mv.effective_date (+)
12398      AND     peg_v.transaction_date <=  mv.disable_date (+)
12399      AND     peg_v.demand_class = mv.demand_class (+)
12400      AND     mv.level_id (+) = -1';
12401 
12402     IF PG_DEBUG in ('Y', 'C') THEN
12403         msc_sch_wb.atp_debug('SQL statement to be executed ' || length(l_sql_stmt_1) || ':' || l_sql_stmt_1);
12404     END IF;
12405     EXECUTE IMMEDIATE l_sql_stmt_1 USING
12406                         l_def_dmd_class,
12407                         p_user_id, p_sysdate, p_user_id, p_sysdate,
12408                         l_def_dmd_class,p_plan_id;
12409 
12410     IF PG_DEBUG in ('Y', 'C') THEN
12411         msc_sch_wb.atp_debug('Create_PF_DP_Alloc_Reliefs:  Number of Demand rows inserted '||
12412                                SQL%ROWCOUNT);
12413     END IF;
12414 
12415     IF PG_DEBUG in ('Y', 'C') THEN
12416      msc_sch_wb.atp_debug(' Inserting Supplies');
12417     END IF;
12418 
12419     l_sql_stmt_1 := 'INSERT INTO  ' || p_insert_table ||
12420              '(reference_item_id,
12421              inventory_item_id,
12422              plan_id,
12423              sr_instance_id,
12424              organization_id,
12425              sales_order_line_id,
12426              demand_source_type,
12427              end_demand_id,
12428              bom_item_type,
12429              sales_order_qty,
12430              transaction_date,
12431              demand_id,
12432              demand_quantity,
12433              disposition_id,
12434              demand_class,
12435              consumed_qty,
12436              overconsumption_qty,
12437              supply_id,
12438              supply_quantity,
12439              allocated_quantity,
12440              relief_type,
12441              relief_quantity,
12442              pegging_id,
12443              prev_pegging_id,
12444              end_pegging_id,
12445              created_by,
12446              creation_date,
12447              last_updated_by,
12448              last_update_date,
12449              customer_id,
12450              customer_site_id,
12451 		offset_type)
12452     SELECT   mapt.reference_item_id,
12453              mapt.inventory_item_id,
12454              mapt.plan_id,
12455              mapt.sr_instance_id,
12456              mapt.organization_id,
12457              mapt.sales_order_line_id,
12458              mapt.demand_source_type,
12459              mapt.end_demand_id,
12460              mapt.bom_item_type,
12461              mapt.sales_order_qty,
12462              mapt.transaction_date,
12463              mapt.demand_id ,
12464              mapt.demand_quantity,
12465              mapt.disposition_id,
12466              NVL(mv.demand_class, :l_def_dmd_class) demand_class ,
12467              mapt.consumed_qty,
12468              mapt.overconsumption_qty,
12469              mapt.supply_id,
12470              mapt.supply_quantity,
12471              mapt.allocated_quantity ,
12472              6,
12473              mapt.relief_quantity ,
12474              mapt.pegging_id,
12475              mapt.prev_pegging_id,
12476              mapt.end_pegging_id,
12477              :p_user_id,
12478              :p_sysdate,
12479              :p_user_id,
12480              :p_sysdate,
12481              mv.partner_id,
12482              mv.partner_site_id customer_site_id,
12483 		mapt.offset_type
12484     FROM    msc_atp_peg_temp mapt, msc_item_hierarchy_mv mv
12485     WHERE   mapt.plan_id = :p_plan_id
12486     AND     mapt.relief_type = 2
12487     AND     mapt.inventory_item_id = mv.inventory_item_id(+)
12488     AND     mapt.organization_id = mv.organization_id (+)
12489     AND     mapt.sr_instance_id = mv.sr_instance_id (+)
12490     AND     mapt.transaction_date >=  mv.effective_date (+)
12491     AND     mapt.transaction_date <=  mv.disable_date (+)
12492     AND     mapt.demand_class = mv.demand_class (+)
12493     AND     mv.level_id (+) = -1 '
12494     ;
12495 
12496     EXECUTE IMMEDIATE l_sql_stmt_1 USING
12497                         l_def_dmd_class,
12498                         p_user_id, p_sysdate, p_user_id, p_sysdate, p_plan_id;
12499 
12500     IF PG_DEBUG in ('Y', 'C') THEN
12501         msc_sch_wb.atp_debug('Create_PF_DP_Alloc_Reliefs:  Number of Supply rows inserted '||
12502                                SQL%ROWCOUNT);
12503     END IF;
12504 
12505 EXCEPTION
12506     WHEN OTHERS THEN
12507       IF PG_DEBUG in ('Y', 'C') THEN
12508         msc_sch_wb.atp_debug('Inside main exception of Create_PF_DP_Alloc_Reliefs');
12509         msc_sch_wb.atp_debug ('Create_PF_DP_Alloc_Reliefs. Error : ' || sqlcode || ': '|| sqlerrm);
12510       END IF;
12511         x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
12512 
12513 END Create_PF_DP_Alloc_Reliefs;
12514 
12515 /*--Create_PF_Allocation_Reliefs-----------------------------------------------------
12516 |  o  Called from Gen_Atp_Pegging procedure to insert bucketed demands and
12517 |       rollup supplies in MSC_ATP_PEGGING in non demand priority cases
12518 +----------------------------------------------------------------------------*/
12519 
12520 PROCEDURE Create_PF_Allocation_Reliefs (p_plan_id         IN          NUMBER,
12521                                          p_insert_table    IN          VARCHAR2,
12522                                          p_user_id         IN          NUMBER,
12523                                          p_sysdate         IN          DATE,
12524                                          x_return_status   OUT NOCOPY  VARCHAR2
12525                                         )
12526 IS
12527 
12528 l_sql_stmt                      VARCHAR2(800);
12529 l_sql_stmt_1                    VARCHAR2(5000);
12530 BEGIN
12531 
12532   IF PG_DEBUG in ('Y', 'C') THEN
12533      msc_sch_wb.atp_debug('***** Begin Create_PF_Allocation_Reliefs Procedure *****');
12534      msc_sch_wb.atp_debug(' Plan Id : ' || p_plan_id );
12535      msc_sch_wb.atp_debug(' Insert Table parameter : ' || p_insert_table );
12536      msc_sch_wb.atp_debug(' User Id Paramenter : ' || p_user_id );
12537      msc_sch_wb.atp_debug(' Date Parameter : ' || p_sysdate );
12538   END IF;
12539 
12540   x_return_status := FND_API.G_RET_STS_SUCCESS;
12541 
12542     IF PG_DEBUG in ('Y', 'C') THEN
12543        msc_sch_wb.atp_debug(' Inserting Demands');
12544     END IF;
12545 
12546 
12547     l_sql_stmt_1 := 'INSERT INTO  ' || p_insert_table || -- actually the insert table parameter.
12548              '(reference_item_id,
12549              inventory_item_id,
12550              original_item_id,
12551              original_date,
12552              plan_id,
12553              sr_instance_id,
12554              organization_id,
12555              sales_order_line_id,
12556              demand_source_type,
12557              end_demand_id,
12558              bom_item_type,
12559              sales_order_qty,
12560              transaction_date,
12561              demand_id,
12562              demand_quantity,
12563              disposition_id,
12564              consumed_qty,
12565              overconsumption_qty,
12566              supply_id,
12567              supply_quantity,
12568              allocated_quantity,
12569              relief_type,
12570              relief_quantity,
12571              pegging_id,
12572              prev_pegging_id,
12573              end_pegging_id,
12574              created_by,
12575              creation_date,
12576              last_updated_by,
12577              last_update_date,
12578              customer_id,
12579              customer_site_id)
12580     SELECT   mapt.reference_item_id reference_item_id,
12581              decode(sign(trunc(s.new_schedule_date) - mapt.atf_date),
12582                          1, mapt.product_family_id,
12583                             mapt.inventory_item_id) inventory_item_id,
12584              mapt.inventory_item_id,
12585              mapt.transaction_date,
12586              mapt.plan_id plan_id,
12587              mapt.sr_instance_id sr_instance_id,
12588              mapt.organization_id organization_id,
12589              mapt.sales_order_line_id sales_order_line_id,
12590              mapt.demand_source_type demand_source_type,
12591              mapt.end_demand_id end_demand_id,
12592              mapt.bom_item_type bom_item_type,
12593              mapt.sales_order_qty sales_order_qty,
12594              decode(sign(trunc(s.new_schedule_date) - mapt.atf_date),
12595                          1, decode(sign(trunc(mapt.transaction_date)- mapt.atf_date),
12596                                         1, trunc(mapt.transaction_date),
12597                                         mapt.atf_date+1),
12598                          decode(sign(trunc(mapt.transaction_date)- mapt.atf_date),
12599                                      1, mapt.atf_date,
12600                                      trunc(mapt.transaction_date)
12601                                 )
12602                     ) transaction_date,
12603              mapt.demand_id demand_id,
12604              mapt.demand_quantity demand_quantity,
12605              mapt.disposition_id disposition_id,
12606              mapt.consumed_qty consumed_qty,
12607              mapt.overconsumption_qty overconsumption_qty,
12608              mapt.supply_id supply_id,
12609              mapt.supply_quantity supply_quantity,
12610              mapt.allocated_quantity allocated_quantity,
12611              7 relief_type, --PF ATP
12612              mapt.relief_quantity relief_quantity,
12613              mapt.pegging_id pegging_id,
12614              mapt.prev_pegging_id prev_pegging_id,
12615              mapt.end_pegging_id end_pegging_id,
12616              :p_user_id,
12617              :p_sysdate,
12618              :p_user_id,
12619              :p_sysdate,
12620              mapt.customer_id,
12621              mapt.customer_site_id
12622     FROM    msc_atp_peg_temp mapt,
12623             msc_supplies s
12624     WHERE   mapt.plan_id = :p_plan_id
12625     AND     mapt.relief_type = 3
12626 
12627     AND     s.sr_instance_id = mapt.sr_instance_id
12628     AND     s.plan_id = mapt.plan_id
12629     AND     s.transaction_id = mapt.supply_id';
12630 
12631     IF PG_DEBUG in ('Y', 'C') THEN
12632         msc_sch_wb.atp_debug('SQL statement to be executed ' || length(l_sql_stmt_1) || ':' || l_sql_stmt_1);
12633     END IF;
12634     EXECUTE IMMEDIATE l_sql_stmt_1 USING
12635                         p_user_id, p_sysdate, p_user_id, p_sysdate, p_plan_id;
12636 
12637     IF PG_DEBUG in ('Y', 'C') THEN
12638         msc_sch_wb.atp_debug('Create_PF_Allocation_Reliefs:  Number of Demand rows inserted '||
12639                                SQL%ROWCOUNT);
12640     END IF;
12641 
12642 EXCEPTION
12643     WHEN OTHERS THEN
12644       IF PG_DEBUG in ('Y', 'C') THEN
12645         msc_sch_wb.atp_debug('Inside main exception of Create_PF_Allocation_Reliefs');
12646         msc_sch_wb.atp_debug ('Create_PF_Allocation_Reliefs. Error : ' || sqlcode || ': '|| sqlerrm);
12647       END IF;
12648         x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
12649 
12650 END Create_PF_Allocation_Reliefs;
12651 -- CTO-PF end
12652 END MSC_ATP_PF;