DBA Data[Home] [Help]

PACKAGE BODY: APPS.MSC_ATP_PF

Source


1 PACKAGE BODY MSC_ATP_PF AS
2 /* $Header: MSCPFATB.pls 120.7 2007/12/12 10:35:21 sbnaik 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                 ELSE
861                         l_update_mem_bd         := 'Y';
862                         l_mem_display_flag      := null;
863                         l_mem_bd_date           := p_atf_date;
864                         l_mem_bd_qty            := p_atf_date_qty;
865 
866                         l_update_pf_bd          := 'Y';
867                         l_pf_display_flag       := 1;
868                         l_pf_bd_date            := p_new_demand_date;
869                         l_pf_bd_qty             := p_demand_qty - p_atf_date_qty;
870 
871                         IF PG_DEBUG in ('Y', 'C') THEN
872                            msc_sch_wb.atp_debug('Move_PF_Bucketed_Demands: inside else');
873                         END IF;
874                 END IF;
875 
876                 IF PG_DEBUG in ('Y', 'C') THEN
877                         msc_sch_wb.atp_debug('*********  Bucketed Demands  ********');
878                         msc_sch_wb.atp_debug('*    Update member item bucketed demand = ' ||l_update_mem_bd);
879                         msc_sch_wb.atp_debug('*    l_mem_bd_date = ' ||to_char(l_mem_bd_date));
880                         msc_sch_wb.atp_debug('*    l_mem_bd_qty = ' ||to_char(l_mem_bd_qty));
881                         msc_sch_wb.atp_debug('*    l_mem_display_flag = ' ||to_char(l_mem_display_flag));
882                         msc_sch_wb.atp_debug('*    ');
883                         msc_sch_wb.atp_debug('*    Update family item bucketed demand = ' ||l_update_pf_bd);
884                         msc_sch_wb.atp_debug('*    l_pf_bd_date = ' ||to_char(l_pf_bd_date));
885                         msc_sch_wb.atp_debug('*    l_pf_bd_qty = ' ||to_char(l_pf_bd_qty));
886                         msc_sch_wb.atp_debug('*    l_pf_display_flag = ' ||to_char(l_pf_display_flag));
887                         msc_sch_wb.atp_debug('*************************************');
888                 END IF;
889 
890                 IF l_update_mem_bd = 'Y'  THEN
891                         update  msc_alloc_demands
892                                 --bug3697365 added timestamp also
893                         set     demand_date = trunc(l_mem_bd_date) + MSC_ATP_PVT.G_END_OF_DAY,
894                                 allocated_quantity = l_mem_bd_qty,
895                                 demand_quantity = p_demand_qty,
896                                 pf_display_flag = l_mem_display_flag,
897                                 --bug3697365 added timestamp also
898                                 original_demand_date = trunc(p_new_demand_date) + MSC_ATP_PVT.G_END_OF_DAY
899                         where   parent_demand_id = p_parent_demand_id
900                         --bug3693892 added trunc
901                         and     trunc(demand_date) <= p_atf_date
902                         and     plan_id = p_plan_id;
903 
904                         IF (SQL%NOTFOUND) and (nvl(l_mem_bd_qty, 0) > 0) and (l_atp_rec.inventory_item_id is NOT NULL) THEN
905                                 IF PG_DEBUG in ('Y', 'C') THEN
906                                         msc_sch_wb.atp_debug('Move_PF_Bucketed_Demands: Member item bucketed demand not found. Inserting now...');
907                                 END IF;
908                                 l_atp_rec.quantity_ordered := p_demand_qty;
909                                 l_atp_rec.requested_ship_date := p_new_demand_date;
910                                 Insert_Bucketed_Demand(
911                                         l_atp_rec,
912                                         p_plan_id,
913                                         l_mem_bd_date,
914                                         l_mem_bd_qty,
915                                         l_mem_display_flag,
916                                         p_parent_demand_id,
917                                         member, -- member item bd
918                                         l_atp_rec.refresh_number,
919                                         l_return_status
920                                 );
921                                 IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
922                                         IF PG_DEBUG in ('Y', 'C') THEN
923                                                 msc_sch_wb.atp_debug('Move_PF_Bucketed_Demands: ' || 'Error occured in procedure Insert_Bucketed_Demand');
924                                         END IF;
925                                         x_return_status := FND_API.G_RET_STS_ERROR;
926                                         return;
927                                 END IF;
928                         END IF;
929                 END IF;
930 
931                 IF l_update_pf_bd = 'Y' THEN
932                         update  msc_alloc_demands
933                                 --bug3697365 added timestamp also
934                         set     demand_date = trunc(l_pf_bd_date) + MSC_ATP_PVT.G_END_OF_DAY,
935                                 allocated_quantity = l_pf_bd_qty,
936                                 demand_quantity = p_demand_qty,
937                                 pf_display_flag = l_pf_display_flag,
938                                 --bug3697365 added timestamp also
939                                 original_demand_date = trunc(p_new_demand_date) + MSC_ATP_PVT.G_END_OF_DAY
940                         where   parent_demand_id = p_parent_demand_id
941                         --bug3693892 added trunc
942                         and     trunc(demand_date) > p_atf_date
943                         and     plan_id = p_plan_id;
944 
945                         IF (SQL%NOTFOUND) and (nvl(l_pf_bd_qty, 0) > 0) and (l_atp_rec.inventory_item_id is NOT NULL) THEN
946                                 IF PG_DEBUG in ('Y', 'C') THEN
947                                         msc_sch_wb.atp_debug('Move_PF_Bucketed_Demands: Family item bucketed demand not found. Inserting now...');
948                                 END IF;
949                                 l_atp_rec.quantity_ordered := p_demand_qty;
950                                 l_atp_rec.requested_ship_date := p_new_demand_date;
951                                 Insert_Bucketed_Demand(
952                                         l_atp_rec,
953                                         p_plan_id,
954                                         l_pf_bd_date,
955                                         l_pf_bd_qty,
956                                         l_pf_display_flag,
957                                         p_parent_demand_id,
958                                         family, -- family item bd
959                                         l_atp_rec.refresh_number,
960                                         l_return_status
961                                 );
962                                 IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
963                                         IF PG_DEBUG in ('Y', 'C') THEN
964                                                 msc_sch_wb.atp_debug('Move_PF_Bucketed_Demands: ' || 'Error occured in procedure Insert_Bucketed_Demand');
965                                         END IF;
966                                         x_return_status := FND_API.G_RET_STS_ERROR;
967                                         return;
968                                 END IF;
969                         END IF;
970                 END IF;
971                 --bug3555084 end
972         ELSIF (p_atf_date_qty is NULL) THEN
973                 Move_PF_Bd_Dates(
974                         p_plan_id,
975                         p_parent_demand_id,
976                         p_old_demand_date,
977                         p_new_demand_date,
978                         p_atf_date,
979                         l_return_status
980                 );
981                 IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
982                         IF PG_DEBUG in ('Y', 'C') THEN
983                                 msc_sch_wb.atp_debug('Move_PF_Bucketed_Demands: ' || 'Error occured in procedure Move_PF_Bd_Dates');
984                         END IF;
985                         x_return_status := FND_API.G_RET_STS_ERROR;
986                         return;
987                 END IF;
988         ELSE
989                 l_demand_qty := p_demand_qty - nvl(p_bkwd_pass_atf_date_qty,0); --bug3397904
990                 l_new_demand_date_qty := p_new_demand_date_qty - nvl(p_bkwd_pass_atf_date_qty,0); --bug3397904
991                 l_atf_date_qty := p_atf_date_qty - nvl(p_bkwd_pass_atf_date_qty,0); --bug3397904
992 
993                 IF PG_DEBUG in ('Y', 'C') THEN  --bug3397904 start
994                         msc_sch_wb.atp_debug('*********  Bucketed Demands  ********');
995                         msc_sch_wb.atp_debug('*    Backward pass atf date qty = ' ||to_char(p_bkwd_pass_atf_date_qty));
996                         msc_sch_wb.atp_debug('*    l_new_demand_date_qty = ' ||to_char(l_new_demand_date_qty));
997                         msc_sch_wb.atp_debug('*    l_atf_date_qty = ' ||to_char(l_atf_date_qty));
998                         msc_sch_wb.atp_debug('*    ');
999                 END IF; --bug3397904 end
1000                 IF p_new_demand_date <= p_atf_date THEN
1001                         /* Move member item's bucketed demand*/
1002                         l_update_mem_bd         := 'Y';
1003                         l_mem_display_flag      := 1;
1004                         l_mem_bd_date           := p_new_demand_date;
1005                         l_mem_bd_qty            := l_demand_qty;
1006                 ELSIF (l_new_demand_date_qty - l_atf_date_qty >= l_demand_qty) THEN
1007                         /* Delete member item's bucketed demand*/
1008                         IF p_bkwd_pass_atf_date_qty <> 0 THEN --bug3397904 start
1009                          l_update_mem_bd         := 'Y';
1010                          l_mem_display_flag      := null;
1011                          l_mem_bd_date           := p_atf_date;
1012                          l_mem_bd_qty            := 0;
1013                         ELSE
1014                          l_update_mem_bd         := 'D';
1015                         END IF;                              --bug3397904 end
1016 
1017                         /* Move family item's bucketed demand*/
1018                         l_update_pf_bd          := 'Y';
1019                         l_pf_display_flag       := 1;
1020                         l_pf_bd_date            := p_new_demand_date;
1021                         l_pf_bd_qty             := l_demand_qty;
1022                 ELSE
1023                         /* Move member item's bucketed demand*/
1024                         l_update_mem_bd         := 'Y';
1025                         l_mem_display_flag      := null;
1026                         l_mem_bd_date           := p_atf_date;
1027                         l_mem_bd_qty            := l_demand_qty - (l_new_demand_date_qty - l_atf_date_qty);
1028 
1029                         /* Move family item's bucketed demand*/
1030                         l_update_pf_bd          := 'Y';
1031                         l_pf_display_flag       := 1;
1032                         l_pf_bd_date            := p_new_demand_date;
1033                         l_pf_bd_qty             := l_new_demand_date_qty - l_atf_date_qty;
1034                 END IF;
1035 
1036                 l_mem_bd_qty := l_mem_bd_qty + p_bkwd_pass_atf_date_qty; --bug3397904
1037 
1038                 IF PG_DEBUG in ('Y', 'C') THEN
1039                         msc_sch_wb.atp_debug('*********  Bucketed Demands  ********');
1040                         msc_sch_wb.atp_debug('*    Update member item bucketed demand = ' ||l_update_mem_bd);
1041                         msc_sch_wb.atp_debug('*    l_mem_bd_date = ' ||to_char(l_mem_bd_date));
1042                         msc_sch_wb.atp_debug('*    l_mem_bd_qty = ' ||to_char(l_mem_bd_qty));
1043                         msc_sch_wb.atp_debug('*    l_mem_display_flag = ' ||to_char(l_mem_display_flag));
1044                         msc_sch_wb.atp_debug('*    ');
1045                         msc_sch_wb.atp_debug('*    Update family item bucketed demand = ' ||l_update_pf_bd);
1046                         msc_sch_wb.atp_debug('*    l_pf_bd_date = ' ||to_char(l_pf_bd_date));
1047                         msc_sch_wb.atp_debug('*    l_pf_bd_qty = ' ||to_char(l_pf_bd_qty));
1048                         msc_sch_wb.atp_debug('*    l_pf_display_flag = ' ||to_char(l_pf_display_flag));
1049                         msc_sch_wb.atp_debug('*************************************');
1050                 END IF;
1051 
1052                 IF l_update_mem_bd = 'Y' THEN
1053                         update  msc_alloc_demands
1054                                 --bug3697365 added timestamp also
1055                         set     demand_date = trunc(l_mem_bd_date) + MSC_ATP_PVT.G_END_OF_DAY,
1056                                 allocated_quantity = l_mem_bd_qty,
1057                                 demand_quantity = p_demand_qty,
1058                                 pf_display_flag = l_mem_display_flag,
1059                                 --bug3697365 added timestamp also
1060                                 original_demand_date = trunc(p_new_demand_date) + MSC_ATP_PVT.G_END_OF_DAY
1061                         where   parent_demand_id = p_parent_demand_id
1062                         --bug3693892 added trunc
1063                         and     trunc(demand_date) <= p_atf_date
1064                         and     plan_id = p_plan_id;
1065 
1066                         IF (SQL%NOTFOUND) and (nvl(l_mem_bd_qty, 0) > 0) and (l_atp_rec.inventory_item_id is NOT NULL) THEN
1067                                 IF PG_DEBUG in ('Y', 'C') THEN
1068                                         msc_sch_wb.atp_debug('Move_PF_Bucketed_Demands: Member item bucketed demand not found. Inserting now...');
1069                                 END IF;
1070                                 l_atp_rec.quantity_ordered := p_demand_qty;
1071                                 l_atp_rec.requested_ship_date := p_new_demand_date;
1072                                 Insert_Bucketed_Demand(
1073                                         l_atp_rec,
1074                                         p_plan_id,
1075                                         l_mem_bd_date,
1076                                         l_mem_bd_qty,
1077                                         --l_pf_display_flag,
1078                                         l_mem_display_flag, -- Bug 3483954
1079                                         p_parent_demand_id,
1080                                         member, -- member item bd
1081                                         l_atp_rec.refresh_number,
1082                                         l_return_status
1083                                 );
1084                                 IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
1085                                         IF PG_DEBUG in ('Y', 'C') THEN
1086                                                 msc_sch_wb.atp_debug('Move_PF_Bucketed_Demands: ' || 'Error occured in procedure Insert_Bucketed_Demand');
1087                                         END IF;
1088                                         x_return_status := FND_API.G_RET_STS_ERROR;
1089                                         return;
1090                                 END IF;
1091                         END IF;
1092                 ELSIF l_update_mem_bd = 'D' THEN
1093                         delete  msc_alloc_demands
1094                         where   parent_demand_id = p_parent_demand_id
1095                         --bug3693892 added trunc
1096                         and     trunc(demand_date) <= p_atf_date
1097                         and     plan_id = p_plan_id;
1098                 END IF;
1099 
1100                 IF l_update_pf_bd = 'Y' THEN
1101                         update  msc_alloc_demands
1102                                 --bug3697365 added timestamp also
1103                         set     demand_date = trunc(l_pf_bd_date) + MSC_ATP_PVT.G_END_OF_DAY,
1104                                 allocated_quantity = l_pf_bd_qty,
1105                                 demand_quantity = p_demand_qty,
1106                                 pf_display_flag = l_pf_display_flag,
1107                                 --bug3697365 added timestamp also
1108                                 original_demand_date = trunc(p_new_demand_date) + MSC_ATP_PVT.G_END_OF_DAY
1109                         where   parent_demand_id = p_parent_demand_id
1110                         --bug3693892 added trunc
1111                         and     trunc(demand_date) > p_atf_date
1112                         and     plan_id = p_plan_id;
1113 
1114                         IF (SQL%NOTFOUND) and (nvl(l_pf_bd_qty, 0) > 0) and (l_atp_rec.inventory_item_id is NOT NULL) THEN
1115                                 IF PG_DEBUG in ('Y', 'C') THEN
1116                                         msc_sch_wb.atp_debug('Move_PF_Bucketed_Demands: Family item bucketed demand not found. Inserting now...');
1117                                 END IF;
1118                                 l_atp_rec.quantity_ordered := p_demand_qty;
1119                                 l_atp_rec.requested_ship_date := p_new_demand_date;
1120                                 Insert_Bucketed_Demand(
1121                                         l_atp_rec,
1122                                         p_plan_id,
1123                                         l_pf_bd_date,
1124                                         l_pf_bd_qty,
1125                                         l_pf_display_flag,
1126                                         p_parent_demand_id,
1127                                         family, -- family item bd
1128                                         l_atp_rec.refresh_number,
1129                                         l_return_status
1130                                 );
1131                                 IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
1132                                         IF PG_DEBUG in ('Y', 'C') THEN
1133                                                 msc_sch_wb.atp_debug('Move_PF_Bucketed_Demands: ' || 'Error occured in procedure Insert_Bucketed_Demand');
1134                                         END IF;
1135                                         x_return_status := FND_API.G_RET_STS_ERROR;
1136                                         return;
1137                                 END IF;
1138                         END IF;
1139                 END IF;
1140         END IF;
1141        END IF;
1142         IF PG_DEBUG in ('Y', 'C') THEN
1143                 msc_sch_wb.atp_debug('*********End of procedure Move_PF_Bucketed_Demands ********');
1144         END IF;
1145 
1146 EXCEPTION
1147         WHEN OTHERS THEN
1148                 IF PG_DEBUG in ('Y', 'C') THEN
1149                         msc_sch_wb.atp_debug('Move_PF_Bucketed_Demands: ' || 'Error occurred: ' || to_char(sqlcode) || ':' || SQLERRM);
1150                 END IF;
1151                 x_return_status := FND_API.G_RET_STS_ERROR;
1152 
1153 END Move_PF_Bucketed_Demands;
1154 
1155 /*--Move_PF_Bd_Dates--------------------------------------------------------
1156 |  o  This procedure moves bucketed demands dates.
1157 +-------------------------------------------------------------------------*/
1158 PROCEDURE Move_PF_Bd_Dates(
1159         p_plan_id               IN	NUMBER,
1160         p_parent_demand_id      IN	NUMBER,
1161         p_old_demand_date       IN	DATE,
1162         p_new_demand_date       IN	DATE,
1163         p_atf_date              IN      DATE,
1164         x_return_status         OUT     NOCOPY VARCHAR2
1165 ) IS
1166         -- local variables
1167 
1168 BEGIN
1169         IF PG_DEBUG in ('Y', 'C') THEN
1170                 msc_sch_wb.atp_debug('*********Begin procedure Move_PF_Bd_Dates ********');
1171         END IF;
1172 
1173         -- Initializing API return code
1174         x_return_status := FND_API.G_RET_STS_SUCCESS;
1175 
1176         IF (p_old_demand_date < p_atf_date) and (p_new_demand_date <= p_atf_date) THEN
1177                 update  msc_alloc_demands
1178                         --bug3697365 added timestamp also
1179                 set     demand_date = trunc(p_new_demand_date) + MSC_ATP_PVT.G_END_OF_DAY,
1180                         original_demand_date = trunc(p_new_demand_date) + MSC_ATP_PVT.G_END_OF_DAY
1181                 where   parent_demand_id = p_parent_demand_id
1182                 --bug3693892 added trunc
1183                 and     trunc(demand_date) <= p_atf_date
1184                 and     plan_id = p_plan_id;
1185         ELSIF (p_old_demand_date < p_atf_date) and (p_new_demand_date > p_atf_date) THEN
1186                 update  msc_alloc_demands
1187                         --bug3693892 added trunc
1188                 set     demand_date = trunc(p_atf_date) + MSC_ATP_PVT.G_END_OF_DAY,
1189                         original_demand_date = trunc(p_new_demand_date) + MSC_ATP_PVT.G_END_OF_DAY,
1190                         Pf_Display_Flag = null
1191                 where   parent_demand_id = p_parent_demand_id
1192                 --bug3693892 added trunc
1193                 and     trunc(demand_date) <= p_atf_date
1194                 and     plan_id = p_plan_id;
1195 
1196                 update  msc_alloc_demands
1197                         --bug3693892 added trunc
1198                 set     demand_date = trunc(p_new_demand_date) + MSC_ATP_PVT.G_END_OF_DAY,
1199                         original_demand_date = trunc(p_new_demand_date) + MSC_ATP_PVT.G_END_OF_DAY,
1200                         Pf_Display_Flag = 1
1201                 where   parent_demand_id = p_parent_demand_id
1202                 --bug3693892 added trunc
1203                 and     trunc(demand_date) > p_atf_date
1204                 and     plan_id = p_plan_id;
1205         ELSIF (p_old_demand_date > p_atf_date) and (p_new_demand_date > p_atf_date) THEN
1206                 update  msc_alloc_demands
1207                         --bug3693892 added trunc
1208                 set     demand_date = trunc(p_new_demand_date) + MSC_ATP_PVT.G_END_OF_DAY,
1209                         original_demand_date = trunc(p_new_demand_date) + MSC_ATP_PVT.G_END_OF_DAY
1210                 where   parent_demand_id = p_parent_demand_id
1211                 --bug3693892 added trunc
1212                 and     trunc(demand_date) > p_atf_date
1213                 and     plan_id = p_plan_id;
1214         END IF;
1215 
1216         IF PG_DEBUG in ('Y', 'C') THEN
1217                 msc_sch_wb.atp_debug('*********End of procedure Move_PF_Bd_Dates ********');
1218         END IF;
1219 
1220 EXCEPTION
1221         WHEN OTHERS THEN
1222                 IF PG_DEBUG in ('Y', 'C') THEN
1223                         msc_sch_wb.atp_debug('Move_PF_Bd_Dates: ' || 'Error occurred: ' || to_char(sqlcode) || ':' || SQLERRM);
1224                 END IF;
1225                 x_return_status := FND_API.G_RET_STS_ERROR;
1226 
1227 END Move_PF_Bd_Dates;
1228 
1229 /*--Insert_Bucketed_Demand--------------------------------------------------
1230 |  o  This procedure inserts bucketed demand in msc_alloc_demands table
1231 |       with origination type 51 (ATP Bucketed Demand).
1232 +-------------------------------------------------------------------------*/
1233 PROCEDURE Insert_Bucketed_Demand(
1234         p_atp_rec          		IN	MRP_ATP_PVT.AtpRec,
1235         p_plan_id          		IN	NUMBER,
1236         p_bucketed_demand_date          IN	DATE,
1237         p_bucketed_demand_qty           IN	NUMBER,
1238         p_display_flag                  IN	NUMBER,
1239         p_parent_demand_id 		IN	NUMBER,
1240         p_level                         IN      NUMBER,
1241         p_refresh_number                IN      NUMBER,
1242         x_return_status                 OUT     NOCOPY VARCHAR2
1243 ) IS
1244         -- local variables
1245         l_sysdate       date := sysdate;
1246 
1247 BEGIN
1248         IF PG_DEBUG in ('Y', 'C') THEN
1249                 msc_sch_wb.atp_debug('*********Begin procedure Insert_Bucketed_Demand ********');
1250         END IF;
1251 
1252         -- Initializing API return code
1253         x_return_status := FND_API.G_RET_STS_SUCCESS;
1254 
1255         INSERT INTO MSC_ALLOC_DEMANDS(
1256                 PLAN_ID,
1257                 INVENTORY_ITEM_ID,
1258                 ORIGINAL_ITEM_ID,
1259                 USING_ASSEMBLY_ITEM_ID,
1260                 ORGANIZATION_ID,
1261                 SR_INSTANCE_ID,
1262                 DEMAND_CLASS,
1263                 DEMAND_DATE,
1264                 ORIGINAL_DEMAND_DATE,
1265                 PARENT_DEMAND_ID,
1266                 ALLOCATED_QUANTITY,
1267                 DEMAND_QUANTITY,
1268                 ORIGINATION_TYPE,
1269                 ORIGINAL_ORIGINATION_TYPE,
1270                 ORDER_NUMBER,
1271                 SALES_ORDER_LINE_ID,
1272                 DEMAND_SOURCE_TYPE,--cmro
1273                 PF_DISPLAY_FLAG,
1274                 CUSTOMER_ID,
1275                 SHIP_TO_SITE_ID,
1276                 REFRESH_NUMBER,
1277                 CREATED_BY,
1278                 CREATION_DATE,
1279                 LAST_UPDATED_BY,
1280                 LAST_UPDATE_DATE
1281         )
1282         VALUES (
1283                 p_plan_id,
1284                 decode(p_level, member, p_atp_rec.request_item_id,
1285                                 p_atp_rec.inventory_item_id),
1286                 p_atp_rec.request_item_id,
1287                 p_atp_rec.request_item_id,
1288                 p_atp_rec.organization_id,
1289                 p_atp_rec.instance_id,
1290                 nvl(p_atp_rec.demand_class, -1),
1291                 --bug3697365 added timestamp also
1292                 TRUNC(p_bucketed_demand_date) + MSC_ATP_PVT.G_END_OF_DAY,
1293                 TRUNC(p_atp_rec.requested_ship_date) + MSC_ATP_PVT.G_END_OF_DAY,
1294                 p_parent_demand_id,
1295                 p_bucketed_demand_qty,
1296                 p_atp_rec.quantity_ordered,
1297                 51, -- ATP Bucketed Demand
1298                 p_atp_rec.origination_type,
1299                 decode(p_atp_rec.origination_type, 1, p_parent_demand_id,
1300                                                    p_atp_rec.order_number),
1301                 p_atp_rec.demand_source_line,
1302                 p_atp_rec.demand_source_type,--cmro
1303                 p_display_flag,
1304                 decode(p_atp_rec.origination_type, 6, MSC_ATP_PVT.G_PARTNER_ID,
1305                                                    30, MSC_ATP_PVT.G_PARTNER_ID,
1306                                                    null),
1307                 decode(p_atp_rec.origination_type, 6, MSC_ATP_PVT.G_PARTNER_SITE_ID,
1308                                                    30, MSC_ATP_PVT.G_PARTNER_SITE_ID,
1309                                                    null),
1310                 p_refresh_number,
1311                 G_USER_ID,
1312                 l_sysdate,
1313                 G_USER_ID,
1314                 l_sysdate
1315         );
1316 
1317 EXCEPTION
1318         WHEN OTHERS THEN
1319                 IF PG_DEBUG in ('Y', 'C') THEN
1320                         msc_sch_wb.atp_debug('Insert_Bucketed_Demand: ' || 'Error occurred: ' || to_char(sqlcode) || ':' || SQLERRM);
1321                 END IF;
1322                 x_return_status := FND_API.G_RET_STS_ERROR;
1323 
1324 END Insert_Bucketed_Demand;
1325 
1326 /*--Find_PF_Bucketed_Demands--------------------------------------------------
1327 |  o  This procedure returns information about bucketed demands for a demand.
1328 +---------------------------------------------------------------------------*/
1329 PROCEDURE Find_PF_Bucketed_Demands(
1330         p_plan_id               IN	NUMBER,
1331         p_parent_demand_id      IN	NUMBER,
1332         p_bucketed_demands_rec  IN OUT	NOCOPY MSC_ATP_PF.Bucketed_Demands_Rec,
1333         x_return_status         OUT     NOCOPY VARCHAR2
1334 ) IS
1335         -- local variables
1336 
1337 BEGIN
1338         IF PG_DEBUG in ('Y', 'C') THEN
1339                 msc_sch_wb.atp_debug('*********Begin procedure Find_PF_Bucketed_Demands ********');
1340                 msc_sch_wb.atp_debug('Find_PF_Bucketed_Demands: ' ||  'mem_item_id = ' ||to_char(p_bucketed_demands_rec.mem_item_id));
1341                 msc_sch_wb.atp_debug('Find_PF_Bucketed_Demands: ' ||  'p_plan_id = ' ||to_char(p_plan_id));
1342                 msc_sch_wb.atp_debug('Find_PF_Bucketed_Demands: ' ||  'p_parent_demand_id = ' ||to_char(p_parent_demand_id));
1343         END IF;
1344 
1345         -- Initializing API return code
1346         x_return_status := FND_API.G_RET_STS_SUCCESS;
1347 
1348         BEGIN
1349                 SELECT  allocated_quantity,
1350                         demand_date
1351                 INTO    p_bucketed_demands_rec.mem_bd_qty,
1352                         p_bucketed_demands_rec.mem_bd_date
1353                 FROM    msc_alloc_demands
1354                 WHERE   plan_id = p_plan_id
1355                 AND     parent_demand_id = p_parent_demand_id
1356                 AND     inventory_item_id = p_bucketed_demands_rec.mem_item_id
1357                 ;
1358         EXCEPTION
1359                 WHEN NO_DATA_FOUND THEN
1360                         p_bucketed_demands_rec.mem_bd_qty := 0;
1361                         p_bucketed_demands_rec.mem_bd_date := null;
1362         END;
1363         IF PG_DEBUG in ('Y', 'C') THEN
1364                 msc_sch_wb.atp_debug('Find_PF_Bucketed_Demands: ' ||  'pf_item_id = ' ||to_char(p_bucketed_demands_rec.pf_item_id));
1365                 msc_sch_wb.atp_debug('Find_PF_Bucketed_Demands: ' ||  'Member item BD Date = ' ||to_char(p_bucketed_demands_rec.mem_bd_date));
1366                 msc_sch_wb.atp_debug('Find_PF_Bucketed_Demands: ' ||  'Member item BD Qty = ' ||to_char(p_bucketed_demands_rec.mem_bd_qty));
1367         END IF;
1368 
1369         BEGIN
1370                 SELECT  allocated_quantity,
1371                         demand_date
1372                 INTO    p_bucketed_demands_rec.pf_bd_qty,
1373                         p_bucketed_demands_rec.pf_bd_date
1374                 FROM    msc_alloc_demands
1375                 WHERE   plan_id = p_plan_id
1376                 AND     parent_demand_id = p_parent_demand_id
1377                 AND     inventory_item_id = p_bucketed_demands_rec.pf_item_id
1378                 ;
1379         EXCEPTION
1380                 WHEN NO_DATA_FOUND THEN
1381                         p_bucketed_demands_rec.pf_bd_qty := 0;
1382                         p_bucketed_demands_rec.pf_bd_date := null;
1383         END;
1384         IF PG_DEBUG in ('Y', 'C') THEN
1385                 msc_sch_wb.atp_debug('Find_PF_Bucketed_Demands: ' ||  'Family item BD Date = ' ||to_char(p_bucketed_demands_rec.pf_bd_date));
1386                 msc_sch_wb.atp_debug('Find_PF_Bucketed_Demands: ' ||  'Family item BD Qty = ' ||to_char(p_bucketed_demands_rec.pf_bd_qty));
1387                 msc_sch_wb.atp_debug('*********End of procedure Find_PF_Bucketed_Demands ********');
1388         END IF;
1389 
1390 EXCEPTION
1391         WHEN OTHERS THEN
1392                 IF PG_DEBUG in ('Y', 'C') THEN
1393                         msc_sch_wb.atp_debug('Find_PF_Bucketed_Demands: ' || 'Error occurred: ' || to_char(sqlcode) || ':' || SQLERRM);
1394                 END IF;
1395                 x_return_status := FND_API.G_RET_STS_ERROR;
1396 
1397 END Find_PF_Bucketed_Demands;
1398 
1399 /*--Add_PF_Rollup_Supplies--------------------------------------------------
1400 |  o  This procedure adds rollup supplies in msc_alloc_supplies table.
1401 |  o  If the supply is after ATF then it adds rollup supplies to family,
1402 |       else to member item.
1403 +-------------------------------------------------------------------------*/
1404 PROCEDURE Add_PF_Rollup_Supplies(
1405         p_plan_id                       IN	NUMBER,
1406         p_member_item_id                IN	NUMBER,
1407         p_family_item_id                IN      NUMBER,
1408         p_organization_id               IN	NUMBER,
1409         p_instance_id                   IN	NUMBER,
1410         p_demand_class                  IN      VARCHAR2,
1411         p_schedule_date                 IN      DATE,
1412         p_orig_order_type               IN      NUMBER,
1413         p_order_quantity                IN	NUMBER,
1414         p_parent_transaction_id         IN	NUMBER,
1415         p_atf_date                      IN      DATE,
1416         p_refresh_number                IN      NUMBER,
1417         x_return_status                 OUT     NOCOPY VARCHAR2
1418 ) IS
1419         -- local variables
1420         l_sysdate               date := sysdate;
1421 
1422 BEGIN
1423         IF PG_DEBUG in ('Y', 'C') THEN
1424                 msc_sch_wb.atp_debug('*********Begin procedure Add_PF_Rollup_Supplies ********');
1425         END IF;
1426 
1427         -- Initializing API return code
1428         x_return_status := FND_API.G_RET_STS_SUCCESS;
1429 
1430         IF p_schedule_date <= p_atf_date THEN
1431                 INSERT INTO MSC_ALLOC_SUPPLIES(
1432                         PLAN_ID,
1433                         INVENTORY_ITEM_ID,
1434                         ORGANIZATION_ID,
1435                         SR_INSTANCE_ID,
1436                         DEMAND_CLASS,
1437                         SUPPLY_DATE,
1438                         PARENT_TRANSACTION_ID,
1439                         ALLOCATED_QUANTITY,
1440                         SUPPLY_QUANTITY,
1441                         ORDER_TYPE,
1442                         ORIGINAL_ORDER_TYPE,
1443                         ORIGINAL_ITEM_ID,
1444                         REFRESH_NUMBER,
1445                         CREATED_BY,
1446                         CREATION_DATE,
1447                         LAST_UPDATED_BY,
1448                         LAST_UPDATE_DATE,
1449                         CUSTOMER_ID,         -- Bug 3558125
1450                         SHIP_TO_SITE_ID      -- Bug 3558125
1451                 )
1452                 VALUES (
1453                         p_plan_id,
1454                         p_member_item_id,
1455                         p_organization_id,
1456                         p_instance_id,
1457                         nvl(p_demand_class, -1),
1458                         p_schedule_date,
1459                         p_parent_transaction_id,
1460                         p_order_quantity,
1461                         p_order_quantity,
1462                         50,
1463                         p_orig_order_type,
1464                         p_member_item_id,
1465                         p_refresh_number,
1466                         G_USER_ID,
1467                         l_sysdate,
1468                         G_USER_ID,
1469                         l_sysdate,
1470                         NVL(MSC_ATP_PVT.G_PARTNER_ID,-1),       -- Bug 3558125
1471                         NVL(MSC_ATP_PVT.G_PARTNER_SITE_ID,-1)   -- Bug 3558125
1472                 );
1473                 IF PG_DEBUG in ('Y', 'C') THEN
1474                         msc_sch_wb.atp_debug('***********  Rollup Supply  **********');
1475                         msc_sch_wb.atp_debug('*    Add rollup supply for member item ');
1476                         msc_sch_wb.atp_debug('*    Member Item Id = ' ||to_char(p_member_item_id));
1477                         msc_sch_wb.atp_debug('*    Qty = ' ||to_char(p_order_quantity));
1478                         msc_sch_wb.atp_debug('*    Date = ' ||to_char(p_schedule_date));
1479                         msc_sch_wb.atp_debug('**************************************');
1480                 END IF;
1481         ELSE
1482                 INSERT INTO MSC_ALLOC_SUPPLIES(
1483                         PLAN_ID,
1484                         INVENTORY_ITEM_ID,
1485                         ORGANIZATION_ID,
1486                         SR_INSTANCE_ID,
1487                         DEMAND_CLASS,
1488                         SUPPLY_DATE,
1489                         PARENT_TRANSACTION_ID,
1490                         ALLOCATED_QUANTITY,
1491                         SUPPLY_QUANTITY,
1492                         ORDER_TYPE,
1493                         ORIGINAL_ORDER_TYPE,
1494                         ORIGINAL_ITEM_ID,
1495                         REFRESH_NUMBER,
1496                         CREATED_BY,
1497                         CREATION_DATE,
1498                         LAST_UPDATED_BY,
1499                         LAST_UPDATE_DATE,
1500                         CUSTOMER_ID,         -- Bug 3558125
1501                         SHIP_TO_SITE_ID      -- Bug 3558125
1502                 )
1503                 VALUES (
1504                         p_plan_id,
1505                         p_family_item_id,
1506                         p_organization_id,
1507                         p_instance_id,
1508                         nvl(p_demand_class, -1),
1509                         p_schedule_date,
1510                         p_parent_transaction_id,
1511                         p_order_quantity,
1512                         p_order_quantity,
1513                         50,
1514                         p_orig_order_type,
1515                         p_member_item_id,
1516                         p_refresh_number,
1517                         G_USER_ID,
1518                         l_sysdate,
1519                         G_USER_ID,
1520                         l_sysdate,
1521                         NVL(MSC_ATP_PVT.G_PARTNER_ID,-1),       -- Bug 3558125
1522                         NVL(MSC_ATP_PVT.G_PARTNER_SITE_ID,-1)   -- Bug 3558125
1523                 );
1524                 IF PG_DEBUG in ('Y', 'C') THEN
1525                         msc_sch_wb.atp_debug('***********  Rollup Supply  **********');
1526                         msc_sch_wb.atp_debug('*    Add rollup supply for family item ');
1527                         msc_sch_wb.atp_debug('*    Family Item Id = ' ||to_char(p_family_item_id));
1528                         msc_sch_wb.atp_debug('*    Qty = ' ||to_char(p_order_quantity));
1529                         msc_sch_wb.atp_debug('*    Date = ' ||to_char(p_schedule_date));
1530                         msc_sch_wb.atp_debug('**************************************');
1531                 END IF;
1532         END IF;
1533 
1534         IF PG_DEBUG in ('Y', 'C') THEN
1535                 msc_sch_wb.atp_debug('*********End of procedure Add_PF_Rollup_Supplies ********');
1536         END IF;
1537 
1538 EXCEPTION
1539         WHEN OTHERS THEN
1540                 IF PG_DEBUG in ('Y', 'C') THEN
1541                         msc_sch_wb.atp_debug('Add_PF_Rollup_Supplies: ' || 'Error occurred: ' || to_char(sqlcode) || ':' || SQLERRM);
1542                 END IF;
1543                 x_return_status := FND_API.G_RET_STS_ERROR;
1544 
1545 END Add_PF_Rollup_Supplies;
1546 
1547 /*--Update_PF_Rollup_Supplies----------------------------------------------
1548 |  o  This procedure is called from update_planned_order procedure to
1549 |       update PF rollup supplies.
1550 |  o  Updates rollup supplies to passed date and quantity values.
1551 +-------------------------------------------------------------------------*/
1552 PROCEDURE Update_PF_Rollup_Supplies(
1553         p_plan_id          		IN	NUMBER,
1554         p_parent_transaction_id         IN	NUMBER,
1555         p_mem_item_id                   IN	NUMBER,
1556         p_pf_item_id                    IN	NUMBER,
1557         p_date                          IN      DATE,
1558         p_quantity                      IN      NUMBER,
1559         p_atf_date                      IN      DATE,
1560         x_return_status                 OUT     NOCOPY VARCHAR2
1561 ) IS
1562         -- local variables
1563         l_sysdate               date := sysdate;
1564 
1565 BEGIN
1566         IF PG_DEBUG in ('Y', 'C') THEN
1567                 msc_sch_wb.atp_debug('*********Begin procedure Update_PF_Rollup_Supplies ********');
1568                 msc_sch_wb.atp_debug('Update_PF_Rollup_Supplies: ' || 'p_plan_id ='||to_char(p_plan_id));
1569                 msc_sch_wb.atp_debug('Update_PF_Rollup_Supplies: ' || 'p_parent_transaction_id ='||to_char(p_parent_transaction_id));
1570                 msc_sch_wb.atp_debug('Update_PF_Rollup_Supplies: ' || 'p_mem_item_id ='||to_char(p_mem_item_id));
1571                 msc_sch_wb.atp_debug('Update_PF_Rollup_Supplies: ' || 'p_pf_item_id ='||to_char(p_pf_item_id));
1572                 msc_sch_wb.atp_debug('Update_PF_Rollup_Supplies: ' || 'p_date ='||to_char(p_date));
1573                 msc_sch_wb.atp_debug('Update_PF_Rollup_Supplies: ' || 'p_quantity ='||to_char(p_quantity));
1574                 msc_sch_wb.atp_debug('Update_PF_Rollup_Supplies: ' || 'p_atf_date ='||to_char(p_atf_date));
1575         END IF;
1576 
1577         -- Initializing API return code
1578         x_return_status := FND_API.G_RET_STS_SUCCESS;
1579 
1580         IF p_date is NULL THEN
1581                 UPDATE  msc_alloc_supplies
1582                 SET     old_supply_date = supply_date, -- why do we populate old_supply_date and qty??
1583                         old_allocated_quantity = allocated_quantity, --??
1584                         allocated_quantity = NVL(p_quantity, allocated_quantity),
1585                         supply_quantity = NVL(p_quantity, supply_quantity),     -- Bug 3779200
1586                         LAST_UPDATED_BY = G_USER_ID,
1587                         LAST_UPDATE_DATE = l_sysdate
1588                 WHERE   plan_id = p_plan_id
1589                 AND     parent_transaction_id = p_parent_transaction_id;
1590         ELSIF p_date <= p_atf_date THEN
1591                 UPDATE  msc_alloc_supplies
1592                 SET     old_supply_date = supply_date, -- why do we populate old_supply_date and qty??
1593                         old_allocated_quantity = allocated_quantity, --??
1594                         supply_date = NVL(p_date, supply_date),
1595                         allocated_quantity = NVL(p_quantity, allocated_quantity),
1596                         supply_quantity = NVL(p_quantity, supply_quantity),     -- Bug 3779200
1597                         inventory_item_id = p_mem_item_id,
1598                         LAST_UPDATED_BY = G_USER_ID,
1599                         LAST_UPDATE_DATE = l_sysdate
1600                 WHERE   plan_id = p_plan_id
1601                 AND     parent_transaction_id = p_parent_transaction_id;
1602         ELSE
1603                 UPDATE  msc_alloc_supplies
1604                 SET     old_supply_date = supply_date, -- why do we populate old_supply_date and qty??
1605                         old_allocated_quantity = allocated_quantity, --??
1606                         supply_date = NVL(p_date, supply_date),
1607                         allocated_quantity = NVL(p_quantity, allocated_quantity),
1608                         supply_quantity = NVL(p_quantity, supply_quantity),     -- Bug 3779200
1609                         inventory_item_id = p_pf_item_id,
1610                         LAST_UPDATED_BY = G_USER_ID,
1611                         LAST_UPDATE_DATE = l_sysdate
1612                 WHERE   plan_id = p_plan_id
1613                 AND     parent_transaction_id = p_parent_transaction_id;
1614         END IF;
1615 
1616         IF PG_DEBUG in ('Y', 'C') THEN
1617                 msc_sch_wb.atp_debug('*********End of procedure Update_PF_Rollup_Supplies ********');
1618         END IF;
1619 
1620 EXCEPTION
1621         WHEN OTHERS THEN
1622                 IF PG_DEBUG in ('Y', 'C') THEN
1623                         msc_sch_wb.atp_debug('Update_PF_Rollup_Supplies: ' || 'Error occurred: ' || to_char(sqlcode) || ':' || SQLERRM);
1624                 END IF;
1625                 x_return_status := FND_API.G_RET_STS_ERROR;
1626 
1627 END Update_PF_Rollup_Supplies;
1628 
1629 /*--Add_PF_Stealing_Supply_Details------------------------------------------
1630 |  o  This procedure is called from stealing procedure to add stealing
1631 |       supplies records for member item and family.
1632 +-------------------------------------------------------------------------*/
1633 PROCEDURE Add_PF_Stealing_Supply_Details (
1634         p_plan_id                       IN      NUMBER,
1635         p_identifier                    IN      NUMBER,
1636         p_mem_item_id                   IN      NUMBER,
1637         p_pf_item_id                    IN      NUMBER,
1638         p_organization_id               IN      NUMBER,
1639         p_sr_instance_id                IN      NUMBER,
1640         p_mem_stealing_quantity         IN      NUMBER,
1641         p_pf_stealing_quantity          IN      NUMBER,
1642         p_stealing_demand_class         IN      VARCHAR2,
1643         p_stolen_demand_class           IN      VARCHAR2,
1644         p_ship_date                     IN      DATE,
1645         p_atf_date                      IN      DATE,
1646         p_refresh_number                IN      NUMBER, -- for summary enhancement
1647         p_transaction_id                OUT     NOCOPY NUMBER,
1648         p_ato_model_line_id             IN      NUMBER,
1649         p_demand_source_type            IN      NUMBER,--cmro
1650         --bug3684383
1651         p_order_number                  IN      NUMBER,
1652         x_return_status                 OUT     NOCOPY VARCHAR2
1653 ) IS
1654         l_sysdate                       DATE := sysdate;
1655         l_mem_stealing_rec_date         DATE;
1656         l_pf_stealing_rec_date          DATE;
1657         l_rows_proc                     NUMBER := 0;
1658 
1659 BEGIN
1660         IF PG_DEBUG in ('Y', 'C') THEN
1661                 msc_sch_wb.atp_debug('*** Begin Add_PF_Stealing_Supply_Details Procedure ***');
1662                 msc_sch_wb.atp_debug('Add_PF_Stealing_Supply_Details: ' || 'p_plan_id ='||to_char(p_plan_id));
1663                 msc_sch_wb.atp_debug('Add_PF_Stealing_Supply_Details: ' || 'p_identifier ='||to_char(p_identifier));
1664                 msc_sch_wb.atp_debug('Add_PF_Stealing_Supply_Details: ' || 'p_demand_source_type ='||to_char(p_demand_source_type));--cmro
1665                 msc_sch_wb.atp_debug('Add_PF_Stealing_Supply_Details: ' || 'p_mem_item_id ='||to_char(p_mem_item_id));
1666                 msc_sch_wb.atp_debug('Add_PF_Stealing_Supply_Details: ' || 'p_pf_item_id ='||to_char(p_pf_item_id));
1667                 msc_sch_wb.atp_debug('Add_PF_Stealing_Supply_Details: ' || 'p_organization_id = ' ||to_char(p_organization_id));
1668                 msc_sch_wb.atp_debug('Add_PF_Stealing_Supply_Details: ' || 'p_instance_id = ' ||to_char(p_sr_instance_id));
1669                 msc_sch_wb.atp_debug('Add_PF_Stealing_Supply_Details: ' || 'p_mem_stealing_quantity ='||to_char(p_mem_stealing_quantity));
1670                 msc_sch_wb.atp_debug('Add_PF_Stealing_Supply_Details: ' || 'p_pf_stealing_quantity ='||to_char(p_pf_stealing_quantity));
1671                 msc_sch_wb.atp_debug('Add_PF_Stealing_Supply_Details: ' || 'p_stealing_demand_class = '||p_stealing_demand_class);
1672                 msc_sch_wb.atp_debug('Add_PF_Stealing_Supply_Details: ' || 'p_stolen_demand_class = ' ||p_stolen_demand_class);
1673                 msc_sch_wb.atp_debug('Add_PF_Stealing_Supply_Details: ' || 'p_ship_date = ' ||to_char(p_ship_date));
1674                 msc_sch_wb.atp_debug('Add_PF_Stealing_Supply_Details: ' || 'p_atf_date = ' ||to_char(p_atf_date));
1675         END IF;
1676 
1677         -- Initializing API return code
1678         x_return_status := FND_API.G_RET_STS_SUCCESS;
1679 
1680         IF (p_ship_date > p_atf_date) THEN
1681                 l_mem_stealing_rec_date := p_atf_date;
1682                 l_pf_stealing_rec_date  := p_ship_date;
1683         ELSE
1684                 l_mem_stealing_rec_date := p_ship_date;
1685         END IF;
1686 
1687         --bug3555084 using returning clause in place of select
1688         --SELECT msc_supplies_s.nextval into p_transaction_id from dual;
1689 
1690         IF p_mem_stealing_quantity > 0 THEN
1691                 IF PG_DEBUG in ('Y', 'C') THEN
1692                         msc_sch_wb.atp_debug('Add_PF_Stealing_Supply_Details: ' || 'before insert into msc_alloc_supplies-Stealing Info');
1693                 END IF;
1694 
1695                 -- Add Member item
1696                 INSERT INTO MSC_ALLOC_SUPPLIES
1697                         (plan_id, inventory_item_id, organization_id, sr_instance_id,
1698                          demand_class, supply_date, parent_transaction_id,
1699                          allocated_quantity, order_type, sales_order_line_id,demand_source_type,stealing_flag,--cmro
1700                          supply_quantity, original_item_id, original_order_type,
1701                          created_by, creation_date, last_updated_by, last_update_date, from_demand_class, ato_model_line_id, refresh_number, -- For summary enhancement
1702                          --bug3684383
1703                          order_number,customer_id,ship_to_site_id
1704                          )
1705                 VALUES
1706                         (p_plan_id, p_mem_item_id, p_organization_id,
1707                          p_sr_instance_id, p_stealing_demand_class, l_mem_stealing_rec_date,
1708                          --bug3555084 using msc_supplies_s.nextval in place of p_transaction_id
1709                          msc_supplies_s.nextval, p_mem_stealing_quantity, 50, p_identifier,p_demand_source_type, 1,--cmro
1710                          p_mem_stealing_quantity, p_mem_item_id, 46,
1711                          G_USER_ID, l_sysdate, G_USER_ID, l_sysdate, p_stolen_demand_class, p_ato_model_line_id, p_refresh_number,
1712                          --bug3684383
1713                          p_order_number,MSC_ATP_PVT.G_PARTNER_ID,MSC_ATP_PVT.G_PARTNER_SITE_ID) -- For summary enhancement
1714                          RETURNING parent_transaction_id INTO p_transaction_id; --bug3555084
1715 
1716                 l_rows_proc := SQL%ROWCOUNT;
1717 
1718                 -- Next add the Stolen Data.
1719                 IF PG_DEBUG in ('Y', 'C') THEN
1720                         msc_sch_wb.atp_debug('Add_PF_Stealing_Supply_Details: ' || 'before insert into msc_alloc_supplies-Stolen Info');
1721                 END IF;
1722 
1723                 INSERT INTO MSC_ALLOC_SUPPLIES
1724                         (plan_id, inventory_item_id, organization_id, sr_instance_id,
1725                          demand_class, supply_date, parent_transaction_id,
1726                          allocated_quantity, order_type, sales_order_line_id,demand_source_type, stealing_flag,--cmro
1727                          supply_quantity, original_item_id, original_order_type,
1728                          created_by, creation_date, last_updated_by, last_update_date, from_demand_class, ato_model_line_id,  refresh_number, -- For summary enhancement
1729                          --bug3684383
1730                          order_number,customer_id,ship_to_site_id)
1731                 VALUES
1732                         (p_plan_id, p_mem_item_id, p_organization_id,
1733                          p_sr_instance_id, p_stolen_demand_class, l_mem_stealing_rec_date,
1734                          p_transaction_id, -1 * p_mem_stealing_quantity, 50, p_identifier,p_demand_source_type, 1,---cmro
1735                          -1 * p_mem_stealing_quantity, p_mem_item_id, 47,
1736                          G_USER_ID, l_sysdate, G_USER_ID, l_sysdate, p_stealing_demand_class, p_ato_model_line_id, p_refresh_number,
1737                          --bug3684383
1738                          p_order_number,MSC_ATP_PVT.G_PARTNER_ID,MSC_ATP_PVT.G_PARTNER_SITE_ID); -- For summary enhancement
1739 
1740                 l_rows_proc := l_rows_proc + SQL%ROWCOUNT;
1741         END IF;
1742 
1743         IF (l_pf_stealing_rec_date is not null) and (p_pf_stealing_quantity > 0) THEN
1744             IF PG_DEBUG in ('Y', 'C') THEN
1745                msc_sch_wb.atp_debug('Add_PF_Stealing_Supply_Details: ' || 'before insert into msc_alloc_supplies-Stealing Info');
1746             END IF;
1747 
1748             IF p_transaction_id is not null THEN   --bug3555084
1749 
1750                 INSERT INTO MSC_ALLOC_SUPPLIES
1751                         (plan_id, inventory_item_id, organization_id, sr_instance_id,
1752                          demand_class, supply_date, parent_transaction_id,
1753                          allocated_quantity, order_type, sales_order_line_id,demand_source_type, stealing_flag,--cmro
1754                          supply_quantity, original_item_id, original_order_type,
1755                          created_by, creation_date, last_updated_by, last_update_date, from_demand_class, refresh_number, -- For summary enhancement
1756                          --bug3684383
1757                          order_number,customer_id,ship_to_site_id)
1758                 VALUES
1759                         (p_plan_id, p_pf_item_id, p_organization_id,
1760                          p_sr_instance_id, p_stealing_demand_class, l_pf_stealing_rec_date,
1761                          p_transaction_id, p_pf_stealing_quantity, 50, p_identifier,p_demand_source_type, 1,--cmro
1762                          p_pf_stealing_quantity, p_mem_item_id, 46,
1763                          G_USER_ID, l_sysdate, G_USER_ID, l_sysdate, p_stolen_demand_class, p_refresh_number, -- For summary enhancement
1764                          --bug3684383
1765                          p_order_number,MSC_ATP_PVT.G_PARTNER_ID,MSC_ATP_PVT.G_PARTNER_SITE_ID);
1766 
1767                 l_rows_proc := l_rows_proc + SQL%ROWCOUNT;
1768 
1769             ELSE    --bug3555084 start
1770                 INSERT INTO MSC_ALLOC_SUPPLIES
1771                         (plan_id, inventory_item_id, organization_id, sr_instance_id,
1772                          demand_class, supply_date, parent_transaction_id,
1773                          allocated_quantity, order_type, sales_order_line_id,demand_source_type, stealing_flag,--cmro
1774                          supply_quantity, original_item_id, original_order_type,
1775                          created_by, creation_date, last_updated_by, last_update_date, from_demand_class, refresh_number, -- For summary enhancement
1776                          --bug3684383
1777                          order_number,customer_id,ship_to_site_id)
1778                 VALUES
1779                         (p_plan_id, p_pf_item_id, p_organization_id,
1780                          p_sr_instance_id, p_stealing_demand_class, l_pf_stealing_rec_date,
1781                          msc_supplies_s.nextval, p_pf_stealing_quantity, 50, p_identifier,p_demand_source_type, 1,--cmro
1782                          p_pf_stealing_quantity, p_mem_item_id, 46,
1783                          G_USER_ID, l_sysdate, G_USER_ID, l_sysdate, p_stolen_demand_class, p_refresh_number, -- For summary enhancement
1784                          --bug3684383
1785                          p_order_number,MSC_ATP_PVT.G_PARTNER_ID,MSC_ATP_PVT.G_PARTNER_SITE_ID)
1786 
1787                          RETURNING parent_transaction_id INTO p_transaction_id;
1788 
1789                 l_rows_proc := l_rows_proc + SQL%ROWCOUNT;
1790             END IF;
1791             --bug3555084 end
1792                 -- Next add the Stolen Data.
1793             IF PG_DEBUG in ('Y', 'C') THEN
1794                         msc_sch_wb.atp_debug('Add_PF_Stealing_Supply_Details: ' || 'before insert into msc_alloc_supplies-Stolen Info');
1795             END IF;
1796 
1797             INSERT INTO MSC_ALLOC_SUPPLIES
1798                         (plan_id, inventory_item_id, organization_id, sr_instance_id,
1799                          demand_class, supply_date, parent_transaction_id,
1800                          allocated_quantity, order_type, sales_order_line_id,demand_source_type, stealing_flag,--cmro
1801                          supply_quantity, original_item_id, original_order_type,
1802                          created_by, creation_date, last_updated_by, last_update_date, from_demand_class, refresh_number, -- For summary enhancement
1803                          --bug3684383
1804                          order_number,customer_id,ship_to_site_id)
1805             VALUES
1806                         (p_plan_id, p_pf_item_id, p_organization_id,
1807                          p_sr_instance_id, p_stolen_demand_class, l_pf_stealing_rec_date,
1808                          p_transaction_id, -1 * p_pf_stealing_quantity, 50, p_identifier,p_demand_source_type, 1,--cmro
1809                          -1 * p_pf_stealing_quantity, p_mem_item_id, 47,
1810                          G_USER_ID, l_sysdate, G_USER_ID, l_sysdate, p_stealing_demand_class, p_refresh_number, -- For summary enhancement
1811                          --bug3684383
1812                          p_order_number,MSC_ATP_PVT.G_PARTNER_ID,MSC_ATP_PVT.G_PARTNER_SITE_ID);
1813 
1814             l_rows_proc := l_rows_proc + SQL%ROWCOUNT;
1815         END IF;
1816 
1817         IF PG_DEBUG in ('Y', 'C') THEN
1818                 msc_sch_wb.atp_debug('Add_PF_Stealing_Supply_Details: ' || 'Total Rows inserted ' || l_rows_proc);
1819         END IF;
1820 
1821 EXCEPTION
1822         WHEN OTHERS THEN
1823                 IF PG_DEBUG in ('Y', 'C') THEN
1824                         msc_sch_wb.atp_debug('Add_PF_Stealing_Supply_Details: ' || 'Error occurred: ' || to_char(sqlcode) || ':' || SQLERRM);
1825                 END IF;
1826                 x_return_status := FND_API.G_RET_STS_ERROR;
1827 
1828 END Add_PF_Stealing_Supply_Details;
1829 
1830 /*--Get_Mat_Avail_Pf--------------------------------------------------------
1831 |  o  Called from Get_Material_Atp_Info procedure.
1832 |  o  Calls these private procedures:
1833 |       -  Get_Mat_Avail_Pf_Ods - For PF ODS ATP
1834 |       -  Get_Mat_Avail_Pf_Ods_Summ - For PF ATP for ODS summary
1835 |       -  Get_Mat_Avail_Pf_Pds - For Unallocated Time Phased PF ATP
1836 |       -  Get_Mat_Avail_Pf_Pds_Summ - For Unallocated Time Phased PF ATP
1837 |            for PDS summary
1838 +-------------------------------------------------------------------------*/
1839 PROCEDURE Get_Mat_Avail_Pf(
1840         p_summary_flag                  IN      VARCHAR2,
1841         p_item_id                       IN      NUMBER,
1842         p_request_item_id               IN      NUMBER,
1843         p_org_id                        IN      NUMBER,
1844         p_instance_id                   IN      NUMBER,
1845         p_plan_id                       IN      NUMBER,
1846         p_cal_code                      IN      VARCHAR2,
1847         p_sysdate_seq_num               IN      NUMBER,
1848         p_sys_next_date                 IN      DATE,
1849         p_demand_class                  IN      VARCHAR2,
1850         p_default_atp_rule_id           IN      NUMBER,
1851         p_default_dmd_class             IN      VARCHAR2,
1852         p_itf                           IN      DATE,
1853         p_refresh_number                IN      NUMBER,
1854         x_atp_dates                     OUT     NOCOPY MRP_ATP_PUB.date_arr,
1855         x_atp_qtys                      OUT     NOCOPY MRP_ATP_PUB.number_arr,
1856         x_return_status                 OUT     NOCOPY VARCHAR2
1857 ) IS
1858         l_return_status                 VARCHAR2(1);
1859 
1860 BEGIN
1861         IF PG_DEBUG in ('Y', 'C') THEN
1862                 msc_sch_wb.atp_debug('Begin Get_Mat_Avail_Pf');
1863         END IF;
1864 
1865         -- Initializing API return code
1866         x_return_status := FND_API.G_RET_STS_SUCCESS;
1867 
1868         IF MSC_ATP_PVT.G_INV_CTP = 5 THEN
1869                 -- ODS atp
1870                 IF p_summary_flag = 'Y' THEN
1871                         -- summary ODS atp
1872                         Get_Mat_Avail_Pf_Ods_Summ(
1873                                 p_item_id,
1874                                 p_org_id,
1875                                 p_instance_id,
1876                                 p_plan_id,
1877                                 p_demand_class,
1878                                 p_default_atp_rule_id,
1879                                 p_default_dmd_class,
1880                                 p_itf,
1881                                 x_atp_dates,
1882                                 x_atp_qtys,
1883                                 l_return_status
1884                         );
1885                         IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
1886                                 IF PG_DEBUG in ('Y', 'C') THEN
1887                                         msc_sch_wb.atp_debug('Get_Mat_Avail_Pf: ' || 'Error occured in procedure Get_Mat_Avail_Pf_Ods_Summ');
1888                                 END IF;
1889                                 x_return_status := FND_API.G_RET_STS_ERROR;
1890                                 return;
1891                         END IF;
1892                 ELSE
1893                         -- ODS atp
1894                         Get_Mat_Avail_Pf_Ods(
1895                                 p_item_id,
1896                                 p_org_id,
1897                                 p_instance_id,
1898                                 p_plan_id,
1899                                 p_cal_code,
1900                                 p_sysdate_seq_num,
1901                                 p_sys_next_date,
1902                                 p_demand_class,
1903                                 p_default_atp_rule_id,
1904                                 p_default_dmd_class,
1905                                 p_itf,
1906                                 x_atp_dates,
1907                                 x_atp_qtys,
1908                                 l_return_status
1909                         );
1910                         IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
1911                                 IF PG_DEBUG in ('Y', 'C') THEN
1912                                         msc_sch_wb.atp_debug('Get_Mat_Avail_Pf: ' || 'Error occured in procedure Get_Mat_Avail_Pf_Ods');
1913                                 END IF;
1914                                 x_return_status := FND_API.G_RET_STS_ERROR;
1915                                 return;
1916                         END IF;
1917                 END IF;
1918         ELSE
1919                 -- PDS atp
1920                 IF p_summary_flag = 'Y' THEN
1921                         Get_Mat_Avail_Pf_Pds_Summ(
1922                                 p_request_item_id,
1923                                 p_item_id,
1924                                 p_org_id,
1925                                 p_instance_id,
1926                                 p_plan_id,
1927                                 p_itf,
1928                                 p_refresh_number,       -- For summary enhancement
1929                                 x_atp_dates,
1930                                 x_atp_qtys,
1931                                 l_return_status
1932                         );
1933                         IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
1934                                 IF PG_DEBUG in ('Y', 'C') THEN
1935                                         msc_sch_wb.atp_debug('Get_Mat_Avail_Pf: ' || 'Error occured in procedure Get_Mat_Avail_Pf_Pds_Summ');
1936                                 END IF;
1937                                 x_return_status := FND_API.G_RET_STS_ERROR;
1938                                 return;
1939                         END IF;
1940                 ELSE
1941                         Get_Mat_Avail_Pf_Pds(
1942                                 p_request_item_id,
1943                                 p_item_id,
1944                                 p_org_id,
1945                                 p_instance_id,
1946                                 p_plan_id,
1947                                 p_itf,
1948                                 x_atp_dates,
1949                                 x_atp_qtys,
1950                                 l_return_status
1951                         );
1952                         IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
1953                                 IF PG_DEBUG in ('Y', 'C') THEN
1954                                         msc_sch_wb.atp_debug('Get_Mat_Avail_Pf: ' || 'Error occured in procedure Get_Mat_Avail_Pf_Pds');
1955                                 END IF;
1956                                 x_return_status := FND_API.G_RET_STS_ERROR;
1957                                 return;
1958                         END IF;
1959                 END IF; -- summary atp
1960         END IF; -- ODS/PDS
1961 EXCEPTION
1962         WHEN OTHERS THEN
1963                 IF PG_DEBUG in ('Y', 'C') THEN
1964                         msc_sch_wb.atp_debug('Get_Mat_Avail_Pf: ' || 'Error occurred: ' || to_char(sqlcode) || ':' || SQLERRM);
1965                 END IF;
1966                 x_return_status := FND_API.G_RET_STS_ERROR;
1967 
1968 END Get_Mat_Avail_Pf;
1969 
1970 /*--Get_Mat_Avail_Pf_Dtls---------------------------------------------------
1971 |  o  Called from Insert_Details procedure.
1972 |  o  Calls these private procedures:
1973 |       -  Get_Mat_Avail_Pf_Ods_Dtls - For PF ODS ATP
1974 |       -  Get_Mat_Avail_Pf_Pds_Dtls - For Unallocated Time Phased PF ATP
1975 +-------------------------------------------------------------------------*/
1976 PROCEDURE Get_Mat_Avail_Pf_Dtls (
1977         p_item_id                       IN      NUMBER,
1978         p_request_item_id               IN      NUMBER,
1979         p_org_id                        IN      NUMBER,
1980         p_instance_id                   IN      NUMBER,
1981         p_plan_id                       IN      NUMBER,
1982         p_cal_code                      IN      VARCHAR2,
1983         p_sysdate_seq_num               IN      NUMBER,
1984         p_sys_next_date                 IN      DATE,
1985         p_demand_class                  IN      VARCHAR2,
1986         p_default_atp_rule_id           IN      NUMBER,
1987         p_default_dmd_class             IN      VARCHAR2,
1988         p_itf                           IN      DATE,
1989         p_level                         IN      NUMBER,
1990         p_scenario_id                   IN      NUMBER,
1991         p_identifier                    IN      NUMBER,
1992         x_return_status                 OUT     NOCOPY VARCHAR2
1993 ) IS
1994         l_return_status                 VARCHAR2(1);
1995 BEGIN
1996         IF PG_DEBUG in ('Y', 'C') THEN
1997                 msc_sch_wb.atp_debug('Begin Get_Mat_Avail_Pf_Dtls');
1998         END IF;
1999 
2000         -- Initializing API return code
2001         x_return_status := FND_API.G_RET_STS_SUCCESS;
2002 
2003         IF MSC_ATP_PVT.G_INV_CTP = 5 THEN
2004                 -- ODS atp
2005                 Get_Mat_Avail_Pf_Ods_Dtls(
2006                         p_item_id,
2007                         p_request_item_id,
2008                         p_org_id,
2009                         p_instance_id,
2010                         p_plan_id,
2011                         p_cal_code,
2012                         p_sysdate_seq_num,
2013                         p_sys_next_date,
2014                         p_demand_class,
2015                         p_default_atp_rule_id,
2016                         p_default_dmd_class,
2017                         p_itf,
2018                         p_level,
2019                         p_scenario_id,
2020                         p_identifier,
2021                         l_return_status
2022                 );
2023                 IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
2024                         IF PG_DEBUG in ('Y', 'C') THEN
2025                                 msc_sch_wb.atp_debug('Get_Mat_Avail_Pf_Dtls: ' || 'Error occured in procedure Get_Mat_Avail_Pf_Ods_Dtls');
2026                         END IF;
2027                         x_return_status := FND_API.G_RET_STS_ERROR;
2028                         return;
2029                 END IF;
2030         ELSE
2031                 Get_Mat_Avail_Pf_Pds_Dtls(
2032                         p_item_id,
2033                         p_request_item_id,
2034                         p_org_id,
2035                         p_instance_id,
2036                         p_plan_id,
2037                         p_itf,
2038                         p_level,
2039                         p_scenario_id,
2040                         p_identifier,
2041                         l_return_status
2042                 );
2043                 IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
2044                         IF PG_DEBUG in ('Y', 'C') THEN
2045                                 msc_sch_wb.atp_debug('Get_Mat_Avail_Pf_Dtls: ' || 'Error occured in procedure Get_Mat_Avail_Pf_Pds_Dtls');
2046                         END IF;
2047                         x_return_status := FND_API.G_RET_STS_ERROR;
2048                         return;
2049                 END IF;
2050         END IF; -- ODS/PDS
2051 EXCEPTION
2052         WHEN OTHERS THEN
2053                 IF PG_DEBUG in ('Y', 'C') THEN
2054                         msc_sch_wb.atp_debug('Get_Mat_Avail_Pf_Dtls: ' || 'Error occurred: ' || to_char(sqlcode) || ':' || SQLERRM);
2055                 END IF;
2056                 x_return_status := FND_API.G_RET_STS_ERROR;
2057 
2058 END Get_Mat_Avail_Pf_Dtls;
2059 
2060 /*--Get_Mat_Avail_Pf_Ods_Summ-----------------------------------------------
2061 |  o  Existing code for PF ODS summary moved to this procedure.
2062 +-------------------------------------------------------------------------*/
2063 PROCEDURE Get_Mat_Avail_Pf_Ods_Summ(
2064         p_item_id                       IN      NUMBER,
2065         p_org_id                        IN      NUMBER,
2066         p_instance_id                   IN      NUMBER,
2067         p_plan_id                       IN      NUMBER,
2068         p_demand_class                  IN      VARCHAR2,
2069         p_default_atp_rule_id           IN      NUMBER,
2070         p_default_dmd_class             IN      VARCHAR2,
2071         p_itf                           IN      DATE,
2072         x_atp_dates                     OUT     NOCOPY MRP_ATP_PUB.date_arr,
2073         x_atp_qtys                      OUT     NOCOPY MRP_ATP_PUB.number_arr,
2074         x_return_status                 OUT     NOCOPY VARCHAR2
2075 ) IS
2076 
2077 BEGIN
2078         IF PG_DEBUG in ('Y', 'C') THEN
2079                 msc_sch_wb.atp_debug('Begin Get_Mat_Avail_Pf_Ods_Summ');
2080         END IF;
2081 
2082         -- Initializing API return code
2083         x_return_status := FND_API.G_RET_STS_SUCCESS;
2084 
2085         -- in summary approach we store sales ordrers for requested item while
2086         -- demands and supplies are stored on PF level
2087         SELECT SD_DATE, sum(SD_QTY)
2088         BULK COLLECT INTO x_atp_dates, x_atp_qtys
2089         FROM
2090         (SELECT  /*+ INDEX(D MSC_ATP_SUMMARY_SO_U1) */
2091                  D.SD_DATE SD_DATE,
2092                  -1* D.SD_QTY SD_QTY
2093         FROM        MSC_ATP_SUMMARY_SO D,
2094                     MSC_ATP_RULES R,
2095                     MSC_SYSTEM_ITEMS I,
2096                     MSC_SYSTEM_ITEMS I0
2097         WHERE       I0.SR_INVENTORY_ITEM_ID = p_item_id
2098         AND         I0.ORGANIZATION_ID = p_org_id
2099         AND         I0.SR_INSTANCE_ID = p_instance_id
2100         AND         I0.PLAN_ID = p_plan_id
2101         AND         I.PRODUCT_FAMILY_ID = I0.INVENTORY_ITEM_ID
2102         AND         I.ORGANIZATION_ID = I0.ORGANIZATION_ID
2103         AND         I.SR_INSTANCE_ID = I0.SR_INSTANCE_ID
2104         AND         I.PLAN_ID = I0.PLAN_ID
2105         AND         R.RULE_ID (+) = NVL(I.ATP_RULE_ID, p_default_atp_rule_id)
2106         AND	       R.SR_INSTANCE_ID (+)= I.SR_INSTANCE_ID
2107         AND	       D.PLAN_ID = I.PLAN_ID
2108         AND	       D.SR_INSTANCE_ID = I.SR_INSTANCE_ID
2109         AND	       D.INVENTORY_ITEM_ID = I.INVENTORY_ITEM_ID
2110         AND 	       D.ORGANIZATION_ID = I.ORGANIZATION_ID
2111         AND         D.SD_DATE < NVL(p_itf,
2112                          D.SD_DATE + 1)
2113         AND         NVL(D.DEMAND_CLASS, NVL(p_default_dmd_class,'@@@')) =
2114                              DECODE(R.DEMAND_CLASS_ATP_FLAG,
2115                              1, NVL(P_DEMAND_CLASS, NVL(p_default_dmd_class,'@@@')),
2116                              NVL(D.DEMAND_CLASS, NVL(p_default_dmd_class,'@@@')))
2117         AND         D.sd_qty <> 0
2118         UNION ALL
2119 
2120         SELECT      /*+ INDEX(S MSC_ATP_SUMMARY_SD_U1) */
2121                     S.SD_DATE SD_DATE,
2122                     S.SD_QTY SD_QTY
2123         FROM        MSC_ATP_SUMMARY_SD S,
2124                     MSC_ATP_RULES R,
2125                     MSC_SYSTEM_ITEMS I
2126         WHERE       I.SR_INVENTORY_ITEM_ID = p_item_id
2127         AND         I.ORGANIZATION_ID = p_org_id
2128         AND         I.SR_INSTANCE_ID = p_instance_id
2129         AND         I.PLAN_ID = p_plan_id
2130         AND         R.RULE_ID (+) = NVL(I.ATP_RULE_ID, p_default_atp_rule_id)
2131         AND         R.SR_INSTANCE_ID (+)= I.SR_INSTANCE_ID
2132         AND	       S.PLAN_ID = I.PLAN_ID
2133         AND	       S.SR_INSTANCE_ID = I.SR_INSTANCE_ID
2134         AND	       S.INVENTORY_ITEM_ID = I.INVENTORY_ITEM_ID
2135         AND 	       S.ORGANIZATION_ID = I.ORGANIZATION_ID
2136         AND         S.SD_DATE < NVL(p_itf, S.SD_DATE + 1)
2137         AND         NVL(S.DEMAND_CLASS, NVL(p_default_dmd_class,'@@@')) =
2138                              DECODE(R.DEMAND_CLASS_ATP_FLAG,
2139                              1, NVL(P_DEMAND_CLASS, NVL(p_default_dmd_class,'@@@')),
2140                              NVL(S.DEMAND_CLASS, NVL(p_default_dmd_class,'@@@')))
2141         AND         S.SD_QTY <> 0
2142         )
2143         group by  SD_DATE
2144         order by SD_DATE; --4698199
2145 EXCEPTION
2146         WHEN OTHERS THEN
2147                 IF PG_DEBUG in ('Y', 'C') THEN
2148                         msc_sch_wb.atp_debug('Get_Mat_Avail_Pf_Ods_Summ: ' || 'Error occurred: ' || to_char(sqlcode) || ':' || SQLERRM);
2149                 END IF;
2150                 x_return_status := FND_API.G_RET_STS_ERROR;
2151 
2152 END Get_Mat_Avail_Pf_Ods_Summ;
2153 
2154 /*--Get_Mat_Avail_Pf_Ods----------------------------------------------------
2155 |  o  Existing code for PF ODS ATP moved to this procedure.
2156 +-------------------------------------------------------------------------*/
2157 PROCEDURE Get_Mat_Avail_Pf_Ods(
2158         p_item_id                       IN      NUMBER,
2159         p_org_id                        IN      NUMBER,
2160         p_instance_id                   IN      NUMBER,
2161         p_plan_id                       IN      NUMBER,
2162         p_cal_code                      IN      VARCHAR2,
2163         p_sysdate_seq_num               IN      NUMBER,
2164         p_sys_next_date                 IN      DATE,
2165         p_demand_class                  IN      VARCHAR2,
2166         p_default_atp_rule_id           IN      NUMBER,
2167         p_default_dmd_class             IN      VARCHAR2,
2168         p_itf                           IN      DATE,
2169         x_atp_dates                     OUT     NOCOPY MRP_ATP_PUB.date_arr,
2170         x_atp_qtys                      OUT     NOCOPY MRP_ATP_PUB.number_arr,
2171         x_return_status                 OUT     NOCOPY VARCHAR2
2172 ) IS
2173         -- local variables
2174         l_sysdate               date := sysdate;
2175 
2176 BEGIN
2177         IF PG_DEBUG in ('Y', 'C') THEN
2178            msc_sch_wb.atp_debug('Begin Get_Mat_Avail_Pf_Ods');
2179         END IF;
2180 
2181         -- Initializing API return code
2182         x_return_status := FND_API.G_RET_STS_SUCCESS;
2183 
2184         -- SQL Query changes Begin 2640489
2185         SELECT 	SD_DATE, SUM(SD_QTY)
2186         BULK COLLECT INTO x_atp_dates, x_atp_qtys
2187         FROM (
2188         SELECT  C.PRIOR_DATE SD_DATE,
2189                 -1* D.USING_REQUIREMENT_QUANTITY SD_QTY
2190     FROM        MSC_CALENDAR_DATES C,
2191 		MSC_DEMANDS D,
2192                 MSC_ATP_RULES R,
2193                 MSC_SYSTEM_ITEMS I,
2194                 MSC_SYSTEM_ITEMS I0
2195     WHERE       I0.SR_INVENTORY_ITEM_ID = p_item_id
2196     AND         I0.ORGANIZATION_ID = p_org_id
2197     AND         I0.SR_INSTANCE_ID = p_instance_id
2198     AND         I0.PLAN_ID = p_plan_id
2199     AND         I.PRODUCT_FAMILY_ID = I0.INVENTORY_ITEM_ID
2200     AND         I.ORGANIZATION_ID = I0.ORGANIZATION_ID
2201     AND		I.SR_INSTANCE_ID = I0.SR_INSTANCE_ID
2202     AND		I.PLAN_ID = I0.PLAN_ID
2203     AND         R.RULE_ID (+) = NVL(I.ATP_RULE_ID, p_default_atp_rule_id)
2204     AND		R.SR_INSTANCE_ID (+)= I.SR_INSTANCE_ID
2205     AND		D.PLAN_ID = I.PLAN_ID
2206     AND		D.SR_INSTANCE_ID = I.SR_INSTANCE_ID
2207     AND		D.INVENTORY_ITEM_ID = I.INVENTORY_ITEM_ID
2208     AND 	D.ORGANIZATION_ID = I.ORGANIZATION_ID
2209     AND         USING_REQUIREMENT_QUANTITY <> 0
2210     AND         D.ORIGINATION_TYPE in (
2211                 DECODE(R.INCLUDE_DISCRETE_WIP_DEMAND, 1, 3, -1),
2212                 DECODE(R.INCLUDE_FLOW_SCHEDULE_DEMAND, 1, 25, -1),
2213                 DECODE(R.INCLUDE_USER_DEFINED_DEMAND, 1, 42, -1),
2214                 DECODE(R.INCLUDE_NONSTD_WIP_RECEIPTS, 1, 2, -1),
2215                 DECODE(R.INCLUDE_REP_WIP_DEMAND, 1, 4, -1))
2216     AND		C.CALENDAR_CODE = p_cal_code
2217     AND		C.EXCEPTION_SET_ID = G_CAL_EXC_SET_ID
2218     AND         C.SR_INSTANCE_ID = I0.SR_INSTANCE_ID
2219     -- since we store repetitive schedule demand in different ways for
2220     -- ods (total quantity on start date) and pds  (daily quantity from
2221     -- start date to end date), we need to make sure we only select work day
2222     -- for pds's repetitive schedule demand.
2223     AND         C.CALENDAR_DATE BETWEEN TRUNC(D.USING_ASSEMBLY_DEMAND_DATE) AND
2224                 TRUNC(NVL(D.ASSEMBLY_DEMAND_COMP_DATE,
2225                           D.USING_ASSEMBLY_DEMAND_DATE))
2226                 -- new clause 2640489, DECODE is also OR, Explicit OR gives CBO choices
2227     AND         (R.PAST_DUE_DEMAND_CUTOFF_FENCE is NULL OR
2228                  C.PRIOR_SEQ_NUM >= p_sysdate_seq_num - R.PAST_DUE_DEMAND_CUTOFF_FENCE)
2229     AND         C.PRIOR_DATE < NVL(p_itf, C.PRIOR_DATE + 1)
2230                 -- new clause 2640489, DECODE is also OR, Explicit OR gives CBO choices
2231     AND         (R.DEMAND_CLASS_ATP_FLAG <> 1 OR
2232                  NVL(D.DEMAND_CLASS, NVL(p_default_dmd_class,'@@@')) =
2233                    NVL(P_DEMAND_CLASS, NVL(p_default_dmd_class,'@@@')) )
2234     UNION ALL
2235     -- bug 2461071 to_date and trunc
2236     SELECT      DECODE(D.RESERVATION_TYPE, 2, p_sys_next_date, TRUNC(D.REQUIREMENT_DATE)) SD_DATE, --bug 2287148
2237                 -1*(D.PRIMARY_UOM_QUANTITY-GREATEST(NVL(D.RESERVATION_QUANTITY,0),
2238                     D.COMPLETED_QUANTITY)) SD_QTY
2239     FROM
2240                 -- Bug 1756263, performance fix, use EXISTS subquery instead.
2241 		--MSC_CALENDAR_DATES C,
2242 		MSC_SALES_ORDERS D,
2243                 MSC_ATP_RULES R,
2244                 MSC_SYSTEM_ITEMS I,
2245                 MSC_SYSTEM_ITEMS I0,
2246                 MSC_CALENDAR_DATES C
2247     WHERE       I0.SR_INVENTORY_ITEM_ID = p_item_id
2248     AND         I0.ORGANIZATION_ID = p_org_id
2249     AND         I0.SR_INSTANCE_ID = p_instance_id
2250     AND         I0.PLAN_ID = p_plan_id
2251     AND         I.PRODUCT_FAMILY_ID = I0.INVENTORY_ITEM_ID
2252     AND         I.ORGANIZATION_ID = I0.ORGANIZATION_ID
2253     AND         I.SR_INSTANCE_ID = I0.SR_INSTANCE_ID
2254     AND         I.PLAN_ID = I0.PLAN_ID
2255     AND         R.RULE_ID (+) = NVL(I.ATP_RULE_ID, p_default_atp_rule_id)
2256     AND         R.SR_INSTANCE_ID (+)= I.SR_INSTANCE_ID
2257     AND		D.SR_INSTANCE_ID = I.SR_INSTANCE_ID
2258     AND		D.INVENTORY_ITEM_ID = I.INVENTORY_ITEM_ID
2259     AND 	D.ORGANIZATION_ID = I.ORGANIZATION_ID
2260     AND         D.DEMAND_SOURCE_TYPE <> DECODE(R.INCLUDE_SALES_ORDERS,2,2,-1)
2261     AND         D.DEMAND_SOURCE_TYPE <> DECODE(R.INCLUDE_INTERNAL_ORDERS,2,8,-1)
2262     AND         D.PRIMARY_UOM_QUANTITY > GREATEST(NVL(D.RESERVATION_QUANTITY,0),
2263                 D.COMPLETED_QUANTITY)
2264     AND         DECODE(MSC_ATP_PVT.G_APPS_VER,3,D.COMPLETED_QUANTITY,0) = 0 -- 2300767
2265     AND         (D.SUBINVENTORY IS NULL OR D.SUBINVENTORY IN
2266                    (SELECT S.SUB_INVENTORY_CODE
2267                     FROM   MSC_SUB_INVENTORIES S
2268                     WHERE  S.ORGANIZATION_ID=D.ORGANIZATION_ID
2269                     AND    S.PLAN_ID = I.PLAN_ID
2270                     AND    S.SR_INSTANCE_ID = D.SR_INSTANCE_ID
2271                     AND    S.INVENTORY_ATP_CODE =DECODE(R.DEFAULT_ATP_SOURCES,
2272                                    1, 1, NULL, 1, S.INVENTORY_ATP_CODE)
2273                     AND    S.NETTING_TYPE =DECODE(R.DEFAULT_ATP_SOURCES,
2274                                    2, 1, S.NETTING_TYPE)))
2275     AND         (D.RESERVATION_TYPE = 2
2276                  OR D.PARENT_DEMAND_ID IS NULL
2277                  OR (D.RESERVATION_TYPE = 3 AND
2278                      ((R.INCLUDE_DISCRETE_WIP_RECEIPTS = 1) or
2279                       (R.INCLUDE_NONSTD_WIP_RECEIPTS = 1))))
2280                 -- new clause, remove existing Exists Query 2640489
2281     AND      (R.PAST_DUE_DEMAND_CUTOFF_FENCE is NULL OR
2282                  C.PRIOR_SEQ_NUM >= p_sysdate_seq_num - R.PAST_DUE_DEMAND_CUTOFF_FENCE)
2283     AND      C.CALENDAR_CODE = p_cal_code
2284     AND      C.SR_INSTANCE_ID = I.SR_INSTANCE_ID
2285     AND      C.EXCEPTION_SET_ID = -1
2286     AND      C.CALENDAR_DATE = TRUNC(D.REQUIREMENT_DATE)
2287     AND      C.PRIOR_DATE < NVL(p_itf, C.PRIOR_DATE + 1)
2288                 -- new clause 2640489, DECODE is also OR, Explicit OR gives CBO choices
2289      AND        (R.DEMAND_CLASS_ATP_FLAG <> 1
2290                  OR NVL(D.DEMAND_CLASS, NVL(p_default_dmd_class,'@@@'))
2291                   = NVL(P_DEMAND_CLASS, NVL(p_default_dmd_class,'@@@')) )
2292     UNION ALL
2293     SELECT      -- C.NEXT_DATE SD_DATE, -- 2859130
2294                 C.CALENDAR_DATE SD_DATE,
2295                 --- bug 1843471, 2563139
2296                 Decode(order_type,
2297                 30, Decode(Sign(S.Daily_rate * (TRUNC(C.Calendar_date) -  TRUNC(S.FIRST_UNIT_START_DATE))- S.qty_completed),
2298                              -1,S.Daily_rate* (TRUNC(C.Calendar_date) - TRUNC(S.First_Unit_Start_date) +1)- S.qty_completed,
2299                               S.Daily_rate),
2300                 -- Bug 2132288, 2442009
2301                 5, NVL(S.DAILY_RATE, NVL(S.FIRM_QUANTITY,S.NEW_ORDER_QUANTITY)),
2302                 -- End Bug 2132288, 2442009
2303 
2304                  -- Bug 2439264, for OPM, lots with order_processing = "N" will be populated with
2305                  -- non_nettable_qty and need to be excluded from ATP calculations.
2306 
2307                     (NVL(S.FIRM_QUANTITY,S.NEW_ORDER_QUANTITY) - NVL(S.NON_NETTABLE_QTY, 0)) )SD_QTY
2308                 -- NVL(S.FIRM_QUANTITY,S.NEW_ORDER_QUANTITY) )SD_QTY
2309     FROM        MSC_CALENDAR_DATES C,
2310 		MSC_SUPPLIES S,
2311                 MSC_ATP_RULES R,
2312                 MSC_SYSTEM_ITEMS I,
2313                 MSC_SUB_INVENTORIES MSI
2314     WHERE       I.SR_INVENTORY_ITEM_ID = p_item_id
2315     AND         I.ORGANIZATION_ID = p_org_id
2316     AND         I.SR_INSTANCE_ID = p_instance_id
2317     AND         I.PLAN_ID = p_plan_id
2318     AND         R.RULE_ID (+) = NVL(I.ATP_RULE_ID, p_default_atp_rule_id)
2319     AND         R.SR_INSTANCE_ID (+)= I.SR_INSTANCE_ID
2320     AND		S.PLAN_ID = I.PLAN_ID
2321     AND		S.SR_INSTANCE_ID = I.SR_INSTANCE_ID
2322     AND		S.INVENTORY_ITEM_ID = I.INVENTORY_ITEM_ID
2323     AND 	S.ORGANIZATION_ID = I.ORGANIZATION_ID
2324     ---bug 1843471
2325     --AND         NVL(S.FIRM_QUANTITY,S.NEW_ORDER_QUANTITY) <> 0 -- 1243985
2326                 -- Bug 2132288, 2442009, 2453938
2327                 -- Do not include supplies equal to 0 as per 1243985
2328                 -- However at the same time, support negative supplies as per Bug 2362079 use ABS.
2329                 -- Support Repetitive schedules as per 1843471
2330                 -- Support Repetitive MPS as per 2132288, 2442009
2331     AND         Decode(S.order_type, 30, S.Daily_rate* (TRUNC(C.Calendar_date) - TRUNC(S.First_Unit_Start_date) + 1),
2332                                      5, NVL(S.Daily_rate, ABS(NVL(S.FIRM_QUANTITY,S.NEW_ORDER_QUANTITY)) ),
2333                         ABS(NVL(S.FIRM_QUANTITY,S.NEW_ORDER_QUANTITY)) ) >
2334                       Decode(S.order_type, 30, S.qty_completed,0)
2335                 -- End Bug 2132288, 2442009, 2453938
2336     AND         (S.ORDER_TYPE IN (
2337                 DECODE(R.INCLUDE_PURCHASE_ORDERS, 1, 1, -1),
2338                 DECODE(R.INCLUDE_PURCHASE_ORDERS, 1, 8, -1), -- 1882898
2339                 DECODE(R.INCLUDE_DISCRETE_WIP_RECEIPTS, 1, 3, -1),
2340                 DECODE(R.INCLUDE_REP_WIP_RECEIPTS, 1, 30, -1),
2341                 DECODE(R.INCLUDE_NONSTD_WIP_RECEIPTS, 1, 7, -1),
2342                 DECODE(R.INCLUDE_NONSTD_WIP_RECEIPTS, 1, 15, -1),
2343                 DECODE(R.INCLUDE_INTERORG_TRANSFERS, 1, 11, -1),
2344                 DECODE(R.INCLUDE_INTERORG_TRANSFERS, 1, 12, -1),
2345                 DECODE(R.INCLUDE_ONHAND_AVAILABLE, 1, 18, -1),
2346                 DECODE(R.INCLUDE_INTERNAL_REQS, 1, 2, -1),
2347                 DECODE(R.INCLUDE_SUPPLIER_REQS, 1, 2, -1),
2348                 DECODE(R.INCLUDE_USER_DEFINED_SUPPLY, 1, 41, -1),
2349                 DECODE(R.INCLUDE_FLOW_SCHEDULE_RECEIPTS, 1, 27, -1),
2350                 DECODE(R.INCLUDE_FLOW_SCHEDULE_RECEIPTS, 1, 28, -1))
2351                 OR
2352                 ((R.INCLUDE_REP_MPS = 1 OR R.INCLUDE_DISCRETE_MPS = 1) AND
2353                 S.ORDER_TYPE = 5
2354 		-- bug 2461071
2355                 AND exists (SELECT '1'
2356                             FROM    MSC_DESIGNATORS
2357                             WHERE   INVENTORY_ATP_FLAG = 1
2358                             AND     DESIGNATOR_TYPE = 2
2359                             AND     DESIGNATOR_ID = S.SCHEDULE_DESIGNATOR_ID
2360                             AND     DECODE(R.demand_class_atp_flag,1,
2361                                     nvl(demand_class,
2362                                     nvl(p_default_dmd_class,'@@@')),'@@@') =
2363                                     DECODE(R.demand_class_atp_flag,1,
2364                                     nvl(p_demand_class,
2365                                     nvl(p_default_dmd_class,'@@@')),'@@@')
2366 )))
2367                 --AND MSC_ATP_FUNC.MPS_ATP(S.SCHEDULE_DESIGNATOR_ID) = 1))
2368     AND		C.CALENDAR_CODE = p_cal_code
2369     AND		C.EXCEPTION_SET_ID = G_CAL_EXC_SET_ID
2370     AND         C.SR_INSTANCE_ID = I.SR_INSTANCE_ID
2371                  -- Bug 2132288, 2442009
2372     AND         C.CALENDAR_DATE BETWEEN TRUNC(NVL(S.FIRM_DATE,S.NEW_SCHEDULE_DATE))
2373                     AND TRUNC(NVL(DECODE(S.ORDER_TYPE, 5, S.LAST_UNIT_START_DATE,
2374                                    S.LAST_UNIT_COMPLETION_DATE), NVL(S.FIRM_DATE,S.NEW_SCHEDULE_DATE)))
2375     AND         DECODE(DECODE(S.ORDER_TYPE, 5, S.LAST_UNIT_START_DATE,
2376                                    S.LAST_UNIT_COMPLETION_DATE),
2377                        NULL, C.NEXT_SEQ_NUM, C.SEQ_NUM) IS NOT NULL
2378                  -- End Bug 2132288, 2442009
2379                  -- new clause 2640489, SIMPLIFY FOR CBO
2380     AND         (S.ORDER_TYPE = 18
2381                  OR R.PAST_DUE_SUPPLY_CUTOFF_FENCE is NULL
2382                  OR C.NEXT_SEQ_NUM >= p_sysdate_seq_num - R.PAST_DUE_SUPPLY_CUTOFF_FENCE)
2383     AND         C.NEXT_DATE >= DECODE(S.ORDER_TYPE, 27, TRUNC(l_sysdate),
2384                                                 28, TRUNC(l_sysdate),
2385                                                     C.NEXT_DATE)
2386     AND         C.NEXT_DATE < NVL(p_itf, C.NEXT_DATE + 1)
2387     AND         (R.DEMAND_CLASS_ATP_FLAG <> 1
2388                  OR S.ORDER_TYPE = 5
2389                  OR NVL(S.DEMAND_CLASS, NVL(p_default_dmd_class,'@@@')) =
2390                     NVL(P_DEMAND_CLASS, NVL(p_default_dmd_class,'@@@')) )
2391 					 ---bug 1735580
2392                 --- filter out non-atpable sub-inventories
2393     AND          MSI.plan_id (+) =  p_plan_id
2394     AND          MSI.organization_id (+) = p_org_id
2395     AND          MSI.sr_instance_id (+) =  p_instance_id
2396     --aND          S.subinventory_code = (+) MSI.sub_inventory_code
2397     AND          MSI.sub_inventory_code (+) = S.subinventory_code
2398     AND          NVL(MSI.inventory_atp_code,1) <> 2 -- filter out non-atpable subinventories
2399     -- SQL Query changes End 2640489
2400 )
2401 GROUP BY SD_DATE
2402 order by SD_DATE; --4698199
2403 
2404 EXCEPTION
2405         WHEN OTHERS THEN
2406                 IF PG_DEBUG in ('Y', 'C') THEN
2407                         msc_sch_wb.atp_debug('Get_Mat_Avail_Pf_Ods: ' || 'Error occurred: ' || to_char(sqlcode) || ':' || SQLERRM);
2408                 END IF;
2409                 x_return_status := FND_API.G_RET_STS_ERROR;
2410 
2411 END Get_Mat_Avail_Pf_Ods;
2412 
2413 /*--Get_Mat_Avail_Pf_Pds_Summ----------------------------------------------------
2414 |  o Called for unallocated time phased PF atp for PDS summary
2415 |  o Differences from non summary SQL are :
2416 |    - Additional union with MSC_ATP_SUMMARY_SD
2417 |    - Decode in quantity in SQL on msc_alloc_demands to consider unscheduled
2418 |      orders as dummy supplies
2419 |    - Additional join with MSC_PLANS in the SQLs on supplies and demands to
2420 |      filter records based on refresh number
2421 |    - Filter on allocated_quantity=0 and origination_type=51 removed in the
2422 |      demands SQL so as to consider copy SOs and dummy supplies respectiviely.
2423 +-------------------------------------------------------------------------------*/
2424 PROCEDURE Get_Mat_Avail_Pf_Pds_Summ(
2425         p_sr_member_id                  IN      NUMBER,
2426         p_sr_family_id                  IN      NUMBER,
2427         p_org_id                        IN      NUMBER,
2428         p_instance_id                   IN      NUMBER,
2429         p_plan_id                       IN      NUMBER,
2430         p_itf                           IN      DATE,
2431         p_refresh_number                IN      NUMBER,     -- For summary enhancement
2432         x_atp_dates                     OUT     NOCOPY MRP_ATP_PUB.date_arr,
2433         x_atp_qtys                      OUT     NOCOPY MRP_ATP_PUB.number_arr,
2434         x_return_status                 OUT     NOCOPY VARCHAR2
2435 ) IS
2436 
2437 BEGIN
2438         IF PG_DEBUG in ('Y', 'C') THEN
2439            msc_sch_wb.atp_debug('Begin Get_Mat_Avail_Pf_Pds_Summ');
2440         END IF;
2441 
2442         -- Initializing API return code
2443         x_return_status := FND_API.G_RET_STS_SUCCESS;
2444 
2445         SELECT 	SD_DATE, SUM(SD_QTY)
2446         BULK COLLECT INTO x_atp_dates, x_atp_qtys
2447         FROM (
2448             SELECT      /*+ INDEX(S MSC_ATP_SUMMARY_SD_U1) */
2449                         SD_DATE, SD_QTY
2450             FROM        MSC_ATP_SUMMARY_SD S,
2451                         MSC_SYSTEM_ITEMS I
2452             WHERE       I.SR_INVENTORY_ITEM_ID in (p_sr_member_id, p_sr_family_id)
2453             AND         I.ORGANIZATION_ID = p_org_id
2454             AND         I.SR_INSTANCE_ID = p_instance_id
2455             AND         I.PLAN_ID = p_plan_id
2456             AND         S.PLAN_ID = I.PLAN_ID
2457             AND         S.SR_INSTANCE_ID = I.SR_INSTANCE_ID
2458             AND         S.INVENTORY_ITEM_ID = I.INVENTORY_ITEM_ID
2459             AND         S.ORGANIZATION_ID = I.ORGANIZATION_ID
2460             AND         S.SD_DATE < NVL(p_itf, S.SD_DATE + 1)
2461 
2462             UNION ALL
2463             --bug3700564 added trunc
2464             SELECT      TRUNC(AD.DEMAND_DATE) SD_DATE,
2465                         decode(AD.ALLOCATED_QUANTITY,           -- Consider unscheduled orders as dummy supplies
2466                                0, OLD_ALLOCATED_QUANTITY,       -- For summary enhancement
2467                                   -1 * AD.ALLOCATED_QUANTITY) SD_QTY
2468             FROM        MSC_ALLOC_DEMANDS AD,
2469                         MSC_SYSTEM_ITEMS I,
2470                         MSC_PLANS P                             -- For summary enhancement
2471             WHERE       I.SR_INVENTORY_ITEM_ID in (p_sr_member_id, p_sr_family_id)
2472             AND         I.ORGANIZATION_ID = p_org_id
2473             AND         I.SR_INSTANCE_ID = p_instance_id
2474             AND         I.PLAN_ID = p_plan_id
2475             AND         AD.PLAN_ID = I.PLAN_ID
2476             AND         AD.SR_INSTANCE_ID = I.SR_INSTANCE_ID
2477             AND         AD.INVENTORY_ITEM_ID = I.INVENTORY_ITEM_ID
2478             AND         AD.ORGANIZATION_ID = I.ORGANIZATION_ID
2479             --bug3700564 added trunc
2480             AND         TRUNC(AD.DEMAND_DATE) < NVL(p_itf, TRUNC(AD.DEMAND_DATE) + 1)
2481             AND         P.PLAN_ID = AD.PLAN_ID
2482             AND         (AD.REFRESH_NUMBER > P.LATEST_REFRESH_NUMBER
2483                         OR AD.REFRESH_NUMBER = p_refresh_number)
2484 
2485             UNION ALL
2486             --bug3700564 added trunc
2487             SELECT      TRUNC(SA.SUPPLY_DATE) SD_DATE,
2488                         SA.ALLOCATED_QUANTITY SD_QTY
2489             FROM        MSC_ALLOC_SUPPLIES SA,
2490                         MSC_SYSTEM_ITEMS I,
2491                         MSC_PLANS P                             -- For summary enhancement
2492             WHERE       I.SR_INVENTORY_ITEM_ID in (p_sr_member_id, p_sr_family_id)
2493             AND         I.ORGANIZATION_ID = p_org_id
2494             AND         I.SR_INSTANCE_ID = p_instance_id
2495             AND         I.PLAN_ID = p_plan_id
2496             AND         SA.PLAN_ID = I.PLAN_ID
2497             AND         SA.SR_INSTANCE_ID = I.SR_INSTANCE_ID
2498             AND         SA.INVENTORY_ITEM_ID = I.INVENTORY_ITEM_ID
2499             AND         SA.ORGANIZATION_ID = I.ORGANIZATION_ID
2500             AND         SA.ALLOCATED_QUANTITY <> 0
2501             --bug3700564 added trunc
2502             AND         TRUNC(SA.SUPPLY_DATE) < NVL(p_itf, TRUNC(SA.SUPPLY_DATE) + 1)
2503             AND         P.PLAN_ID = SA.PLAN_ID
2504             AND         (SA.REFRESH_NUMBER > P.LATEST_REFRESH_NUMBER
2505                         OR SA.REFRESH_NUMBER = p_refresh_number)
2506         )
2507         GROUP BY SD_DATE
2508         order by SD_DATE; --4698199
2509 
2510 EXCEPTION
2511         WHEN OTHERS THEN
2512                 IF PG_DEBUG in ('Y', 'C') THEN
2513                         msc_sch_wb.atp_debug('Get_Mat_Avail_Pf_Pds_Summ: ' || 'Error occurred: ' || to_char(sqlcode) || ':' || SQLERRM);
2514                 END IF;
2515                 x_return_status := FND_API.G_RET_STS_ERROR;
2516 
2517 END Get_Mat_Avail_Pf_Pds_Summ;
2518 
2519 /*--Get_Mat_Avail_Pf_Pds---------------------------------------------------------
2520 |  o  Called for unallocated Time Phased PF ATP
2521 |  o  The supply demand SQL in this procedure gets following:
2522 |       -  Bucketed demands (origination type 51) for member item upto ATF from
2523 |            msc_alloc_demands table.
2524 |       -  Bucketed demands for family after ATF from msc_alloc_demands table.
2525 |       -  Rollup supplies (order type 50) for member item upto ATF from
2526 |            msc_alloc_supplies table.
2527 |       -  Rollup supplies for family after ATF from msc_alloc_supplies table.
2528 +------------------------------------------------------------------------------*/
2529 PROCEDURE Get_Mat_Avail_Pf_Pds(
2530         p_sr_member_id                  IN      NUMBER,
2531         p_sr_family_id                  IN      NUMBER,
2532         p_org_id                        IN      NUMBER,
2533         p_instance_id                   IN      NUMBER,
2534         p_plan_id                       IN      NUMBER,
2535         p_itf                           IN      DATE,
2536         x_atp_dates                     OUT     NOCOPY MRP_ATP_PUB.date_arr,
2537         x_atp_qtys                      OUT     NOCOPY MRP_ATP_PUB.number_arr,
2538         x_return_status                 OUT     NOCOPY VARCHAR2
2539 ) IS
2540 
2541 BEGIN
2542         IF PG_DEBUG in ('Y', 'C') THEN
2543            msc_sch_wb.atp_debug('Begin Get_Mat_Avail_Pf_Pds');
2544         END IF;
2545 
2546         -- Initializing API return code
2547         x_return_status := FND_API.G_RET_STS_SUCCESS;
2548 
2549         SELECT 	SD_DATE, SUM(SD_QTY)
2550         BULK COLLECT INTO x_atp_dates, x_atp_qtys
2551         FROM (
2552             --bug3700564 added trunc
2553             SELECT      TRUNC(AD.DEMAND_DATE) SD_DATE,
2554                         -1 * AD.ALLOCATED_QUANTITY SD_QTY
2555             FROM        MSC_ALLOC_DEMANDS AD,
2556                         MSC_SYSTEM_ITEMS I
2557             WHERE       I.SR_INVENTORY_ITEM_ID in (p_sr_member_id, p_sr_family_id)
2558             AND         I.ORGANIZATION_ID = p_org_id
2559             AND         I.SR_INSTANCE_ID = p_instance_id
2560             AND         I.PLAN_ID = p_plan_id
2561             AND         AD.PLAN_ID = I.PLAN_ID
2562             AND         AD.SR_INSTANCE_ID = I.SR_INSTANCE_ID
2563             AND         AD.INVENTORY_ITEM_ID = I.INVENTORY_ITEM_ID
2564             AND         AD.ORGANIZATION_ID = I.ORGANIZATION_ID
2565             AND         AD.ORIGINATION_TYPE <> 52
2566             AND         AD.ALLOCATED_QUANTITY <> 0
2567             --bug3700564 added trunc
2568             AND         TRUNC(AD.DEMAND_DATE) < NVL(p_itf, TRUNC(AD.DEMAND_DATE) + 1)
2569             UNION ALL
2570             --bug3700564 added trunc
2571             SELECT      TRUNC(SA.SUPPLY_DATE) SD_DATE,
2572                         SA.ALLOCATED_QUANTITY SD_QTY
2573             FROM        MSC_ALLOC_SUPPLIES SA,
2574                         MSC_SYSTEM_ITEMS I
2575             WHERE       I.SR_INVENTORY_ITEM_ID in (p_sr_member_id, p_sr_family_id)
2576             AND         I.ORGANIZATION_ID = p_org_id
2577             AND         I.SR_INSTANCE_ID = p_instance_id
2578             AND         I.PLAN_ID = p_plan_id
2579             AND         SA.PLAN_ID = I.PLAN_ID
2580             AND         SA.SR_INSTANCE_ID = I.SR_INSTANCE_ID
2581             AND         SA.INVENTORY_ITEM_ID = I.INVENTORY_ITEM_ID
2582             AND         SA.ORGANIZATION_ID = I.ORGANIZATION_ID
2583             AND         SA.ALLOCATED_QUANTITY <> 0
2584             --bug3700564 added trunc
2585             AND         TRUNC(SA.SUPPLY_DATE) >= DECODE(SA.ORIGINAL_ORDER_TYPE,
2586                                                         27, TRUNC(SYSDATE),
2587                                                         28, TRUNC(SYSDATE),
2588                                                         TRUNC(SA.SUPPLY_DATE))
2589             AND         TRUNC(SA.SUPPLY_DATE) < NVL(p_itf, TRUNC(SA.SUPPLY_DATE) + 1)
2590         )
2591         GROUP BY SD_DATE
2592         order by SD_DATE; --4698199
2593 
2594 EXCEPTION
2595         WHEN OTHERS THEN
2596                 IF PG_DEBUG in ('Y', 'C') THEN
2597                         msc_sch_wb.atp_debug('Get_Mat_Avail_Pf_Pds: ' || 'Error occurred: ' || to_char(sqlcode) || ':' || SQLERRM);
2598                 END IF;
2599                 x_return_status := FND_API.G_RET_STS_ERROR;
2600 
2601 END Get_Mat_Avail_Pf_Pds;
2602 
2603 /*--Get_Mat_Avail_Pf_Ods_Dtls-----------------------------------------------
2604 |  o  Existing code for PF ODS details moved to this procedure.
2605 +-------------------------------------------------------------------------*/
2606 PROCEDURE Get_Mat_Avail_Pf_Ods_Dtls (
2607         p_item_id                       IN      NUMBER,
2608         p_request_item_id               IN      NUMBER,
2609         p_org_id                        IN      NUMBER,
2610         p_instance_id                   IN      NUMBER,
2611         p_plan_id                       IN      NUMBER,
2612         p_cal_code                      IN      VARCHAR2,
2613         p_sysdate_seq_num               IN      NUMBER,
2614         p_sys_next_date                 IN      DATE,
2615         p_demand_class                  IN      VARCHAR2,
2616         p_default_atp_rule_id           IN      NUMBER,
2617         p_default_dmd_class             IN      VARCHAR2,
2618         p_itf                           IN      DATE,
2619         p_level                         IN      NUMBER,
2620         p_scenario_id                   IN      NUMBER,
2621         p_identifier                    IN      NUMBER,
2622         x_return_status                 OUT     NOCOPY VARCHAR2
2623 ) IS
2624         l_null_num              NUMBER;
2625         l_null_char             VARCHAR2(1);
2626         l_null_date             DATE; --bug3814584
2627         l_sysdate               DATE := sysdate;
2628 
2629 BEGIN
2630         IF PG_DEBUG in ('Y', 'C') THEN
2631            msc_sch_wb.atp_debug('Begin Get_Mat_Avail_Pf_Ods_Dtls');
2632         END IF;
2633 
2634         -- Initializing API return code
2635         x_return_status := FND_API.G_RET_STS_SUCCESS;
2636 
2637         INSERT INTO msc_atp_sd_details_temp (
2638         	ATP_Level,
2639         	Order_line_id,
2640         	Scenario_Id,
2641         	Inventory_Item_Id,
2642         	Request_Item_Id,
2643         	Organization_Id,
2644         	Department_Id,
2645         	Resource_Id,
2646         	Supplier_Id,
2647         	Supplier_Site_Id,
2648         	From_Organization_Id,
2649         	From_Location_Id,
2650         	To_Organization_Id,
2651         	To_Location_Id,
2652         	Ship_Method,
2653         	UOM_code,
2654         	Supply_Demand_Type,
2655         	Supply_Demand_Source_Type,
2656         	Supply_Demand_Source_Type_Name,
2657         	Identifier1,
2658         	Identifier2,
2659         	Identifier3,
2660         	Identifier4,
2661         	Supply_Demand_Quantity,
2662         	Supply_Demand_Date,
2663         	Disposition_Type,
2664         	Disposition_Name,
2665         	Pegging_Id,
2666         	End_Pegging_Id,
2667         	creation_date,
2668         	created_by,
2669         	last_update_date,
2670         	last_updated_by,
2671         	last_update_login,
2672         	ORIG_CUSTOMER_SITE_NAME,--bug3263368
2673                 ORIG_CUSTOMER_NAME, --bug3263368
2674                 ORIG_DEMAND_CLASS, --bug3263368
2675                 ORIG_REQUEST_DATE --bug3263368
2676         )
2677 
2678         (        -- SQL Query changes Begin 2640489
2679         SELECT      p_level col1,
2680 		p_identifier col2,
2681                 p_scenario_id col3,
2682                 p_item_id col4 ,
2683                 p_request_item_id col5,
2684 		p_org_id col6,
2685                 l_null_num col7,
2686                 l_null_num col8,
2687                 l_null_num col9,
2688                 l_null_num col10,
2689                 l_null_num col11,
2690                 l_null_num col12,
2691                 l_null_num col13,
2692                 l_null_num col14,
2693 		l_null_char col15,
2694 		I.UOM_CODE col16,
2695 		1 col17, -- demand
2696 		D.ORIGINATION_TYPE col18,
2697                 l_null_char col19,
2698 		D.SR_INSTANCE_ID col20,
2699                 l_null_num col21,
2700 		D.DEMAND_ID col22,
2701 		l_null_num col23,
2702                 -1* D.USING_REQUIREMENT_QUANTITY col24,
2703 		C.PRIOR_DATE col25,
2704                 l_null_num col26,
2705                 DECODE(D.ORIGINATION_TYPE, 1, to_char(D.DISPOSITION_ID), D.ORDER_NUMBER) col27,
2706                        -- rajjain 04/25/2003 Bug 2771075
2707                        -- For Planned Order Demands We will populate disposition_id
2708                        -- in disposition_name column
2709                 l_null_num col28,
2710                 l_null_num col29,
2711 		l_sysdate,
2712 		G_USER_ID,
2713 		l_sysdate,
2714 		G_USER_ID,
2715 		G_USER_ID,
2716 		MTPS.LOCATION, --bug3263368
2717                 MTP.PARTNER_NAME, --bug3263368
2718                 D.DEMAND_CLASS, --bug3263368
2719                 DECODE(D.ORDER_DATE_TYPE_CODE,2,D.REQUEST_DATE,
2720                                                 D.REQUEST_SHIP_DATE) --bug3263368
2721     FROM        MSC_CALENDAR_DATES C,
2722 		MSC_DEMANDS D,
2723                 MSC_ATP_RULES R,
2724                 MSC_SYSTEM_ITEMS I,
2725                 MSC_SYSTEM_ITEMS I0,
2726                 MSC_TRADING_PARTNERS    MTP,--bug3263368
2727                 MSC_TRADING_PARTNER_SITES    MTPS --bug3263368
2728     WHERE       I0.SR_INVENTORY_ITEM_ID = p_item_id
2729     AND         I0.ORGANIZATION_ID = p_org_id
2730     AND		I0.SR_INSTANCE_ID = p_instance_id
2731     AND		I0.PLAN_ID = p_plan_id
2732     AND       	I.PRODUCT_FAMILY_ID = I0.INVENTORY_ITEM_ID
2733     AND         I.ORGANIZATION_ID = I0.ORGANIZATION_ID
2734     AND         I.SR_INSTANCE_ID = I0.SR_INSTANCE_ID
2735     AND         I.PLAN_ID = I0.PLAN_ID
2736     AND         R.RULE_ID (+) = NVL(I.ATP_RULE_ID, p_default_atp_rule_id)
2737     AND         R.SR_INSTANCE_ID (+) = I.SR_INSTANCE_ID
2738     AND		D.PLAN_ID = I.PLAN_ID
2739     AND		D.SR_INSTANCE_ID = I.SR_INSTANCE_ID
2740     AND		D.INVENTORY_ITEM_ID = I.INVENTORY_ITEM_ID
2741     AND 	D.ORGANIZATION_ID = I.ORGANIZATION_ID
2742     AND         USING_REQUIREMENT_QUANTITY <> 0
2743     AND	        D.ORIGINATION_TYPE in (
2744                 DECODE(R.INCLUDE_DISCRETE_WIP_DEMAND, 1, 3, -1),
2745                 DECODE(R.INCLUDE_FLOW_SCHEDULE_DEMAND, 1, 25, -1),
2746                 DECODE(R.INCLUDE_USER_DEFINED_DEMAND, 1, 42, -1),
2747                 DECODE(R.INCLUDE_NONSTD_WIP_RECEIPTS, 1, 2, -1),
2748                 DECODE(R.INCLUDE_REP_WIP_DEMAND, 1, 4, -1))
2749     AND         D.SHIP_TO_SITE_ID = MTPS.PARTNER_SITE_ID(+) --bug3263368
2750     AND         D.CUSTOMER_ID = MTP.PARTNER_ID(+)--bug3263368
2751     AND		C.CALENDAR_CODE=p_cal_code
2752     AND		C.EXCEPTION_SET_ID=G_CAL_EXC_SET_ID
2753     AND         C.SR_INSTANCE_ID = p_instance_id
2754     -- since we store repetitive schedule demand in different ways for
2755     -- ods (total quantity on start date) and pds  (daily quantity from
2756     -- start date to end date), we need to make sure we only select work day
2757     -- for pds's repetitive schedule demand.
2758     AND         C.CALENDAR_DATE BETWEEN TRUNC(D.USING_ASSEMBLY_DEMAND_DATE) AND
2759                 TRUNC(NVL(D.ASSEMBLY_DEMAND_COMP_DATE,
2760                           D.USING_ASSEMBLY_DEMAND_DATE))
2761     AND         (R.PAST_DUE_DEMAND_CUTOFF_FENCE is NULL OR
2762                  C.PRIOR_SEQ_NUM >= p_sysdate_seq_num - R.PAST_DUE_DEMAND_CUTOFF_FENCE)
2763     AND         C.PRIOR_DATE < NVL(p_itf, C.PRIOR_DATE + 1)
2764     AND         (R.DEMAND_CLASS_ATP_FLAG <> 1 OR
2765                  NVL(D.DEMAND_CLASS, NVL(p_default_dmd_class,'@@@')) =
2766                    NVL(P_DEMAND_CLASS, NVL(p_default_dmd_class,'@@@')) )
2767     UNION ALL
2768     SELECT      p_level col1,
2769                 p_identifier col2,
2770                 p_scenario_id col3,
2771                 p_item_id col4,
2772                 p_request_item_id col5,
2773                 p_org_id col6,
2774                 l_null_num col7,
2775                 l_null_num col8,
2776                 l_null_num col9,
2777                 l_null_num col10,
2778                 l_null_num col11,
2779                 l_null_num col12,
2780                 l_null_num col13,
2781                 l_null_num col14,
2782                 l_null_char col15,
2783                 I.UOM_CODE col16,
2784                 1 col17, -- demand
2785                 DECODE(D.RESERVATION_TYPE, 1, 6, 10)  col18,
2786                 l_null_char col19,
2787                 D.SR_INSTANCE_ID col20,
2788                 l_null_num col21,
2789                 to_number(D.DEMAND_SOURCE_LINE) col22,
2790                 l_null_num col23,
2791                 -1*(D.PRIMARY_UOM_QUANTITY-
2792                 GREATEST(NVL(D.RESERVATION_QUANTITY,0), D.COMPLETED_QUANTITY))
2793                 col24,
2794                 --C.PRIOR_DATE
2795                 -- bug 2461071 to_date
2796                 DECODE(D.RESERVATION_TYPE,2,p_sys_next_date, TRUNC(D.REQUIREMENT_DATE)) col25 ,
2797                 l_null_num col26,
2798                 D.SALES_ORDER_NUMBER col27,
2799                 l_null_num col28,
2800                 l_null_num col29,
2801 		l_sysdate,
2802 		G_USER_ID,
2803 		l_sysdate,
2804 		G_USER_ID,
2805 		G_USER_ID,
2806 	        MTPS.LOCATION, --bug3263368
2807                 MTP.PARTNER_NAME, --bug3263368
2808                 D.DEMAND_CLASS, --bug3263368
2809                 DECODE(D.ORDER_DATE_TYPE_CODE,2,D.REQUEST_DATE,
2810                                                 D.REQUEST_SHIP_DATE) --bug3263368
2811     FROM
2812 		MSC_SALES_ORDERS D,
2813                 MSC_ATP_RULES R,
2814                 MSC_SYSTEM_ITEMS I,
2815                 MSC_SYSTEM_ITEMS I0,
2816                 MSC_CALENDAR_DATES C,
2817                 MSC_TRADING_PARTNERS    MTP,--bug3263368
2818                 MSC_TRADING_PARTNER_SITES    MTPS --bug3263368
2819     WHERE       I0.SR_INVENTORY_ITEM_ID = p_item_id
2820     AND         I0.ORGANIZATION_ID = p_org_id
2821     AND         I0.SR_INSTANCE_ID = p_instance_id
2822     AND         I0.PLAN_ID = p_plan_id
2823     AND         I.PRODUCT_FAMILY_ID = I0.INVENTORY_ITEM_ID
2824     AND         I.ORGANIZATION_ID = I0.ORGANIZATION_ID
2825     AND         I.SR_INSTANCE_ID = I0.SR_INSTANCE_ID
2826     AND         I.PLAN_ID = I0.PLAN_ID
2827     AND         R.RULE_ID (+) = NVL(I.ATP_RULE_ID, p_default_atp_rule_id)
2828     AND         R.SR_INSTANCE_ID (+) = I.SR_INSTANCE_ID
2829     AND		D.SR_INSTANCE_ID = I.SR_INSTANCE_ID
2830     AND		D.INVENTORY_ITEM_ID = I.INVENTORY_ITEM_ID
2831     AND 	D.ORGANIZATION_ID = I.ORGANIZATION_ID
2832     AND         D.DEMAND_SOURCE_TYPE <> DECODE(R.INCLUDE_SALES_ORDERS,2,2,-1)
2833     AND         D.DEMAND_SOURCE_TYPE <> DECODE(R.INCLUDE_INTERNAL_ORDERS,2,8,-1)
2834     AND         D.PRIMARY_UOM_QUANTITY > GREATEST(NVL(D.RESERVATION_QUANTITY,0),
2835                 D.COMPLETED_QUANTITY)
2836     AND         DECODE(MSC_ATP_PVT.G_APPS_VER,3,D.COMPLETED_QUANTITY,0) = 0 -- 2300767
2837     AND         (D.SUBINVENTORY IS NULL OR D.SUBINVENTORY IN
2838                    (SELECT S.SUB_INVENTORY_CODE
2839                     FROM   MSC_SUB_INVENTORIES S
2840                     WHERE  S.ORGANIZATION_ID=D.ORGANIZATION_ID
2841                     AND    S.PLAN_ID = I.PLAN_ID
2842                     AND    S.SR_INSTANCE_ID = D.SR_INSTANCE_ID
2843                     AND    S.INVENTORY_ATP_CODE =DECODE(R.DEFAULT_ATP_SOURCES,
2844                                    1, 1, NULL, 1, S.INVENTORY_ATP_CODE)
2845                     AND    S.NETTING_TYPE =DECODE(R.DEFAULT_ATP_SOURCES,
2846                                    2, 1, S.NETTING_TYPE)))
2847     AND         (D.RESERVATION_TYPE = 2
2848                  OR D.PARENT_DEMAND_ID IS NULL
2849                  OR (D.RESERVATION_TYPE = 3 AND
2850                      ((R.INCLUDE_DISCRETE_WIP_RECEIPTS = 1) or
2851                       (R.INCLUDE_NONSTD_WIP_RECEIPTS = 1))))
2852                 -- new clause, remove existing Exists Query 2640489
2853     AND         D.SHIP_TO_SITE_USE_ID = MTPS.PARTNER_SITE_ID(+) --bug3263368
2854     AND         D.CUSTOMER_ID = MTP.PARTNER_ID(+) --bug3263368
2855     AND      (R.PAST_DUE_DEMAND_CUTOFF_FENCE is NULL OR
2856                  C.PRIOR_SEQ_NUM >= p_sysdate_seq_num - R.PAST_DUE_DEMAND_CUTOFF_FENCE)
2857     AND      C.CALENDAR_CODE = p_cal_code
2858     AND      C.SR_INSTANCE_ID = I.SR_INSTANCE_ID
2859     AND      C.EXCEPTION_SET_ID = -1
2860     AND      C.CALENDAR_DATE = TRUNC(D.REQUIREMENT_DATE)
2861     AND      C.PRIOR_DATE < NVL(p_itf, C.PRIOR_DATE + 1)
2862      AND        (R.DEMAND_CLASS_ATP_FLAG <> 1
2863                  OR NVL(D.DEMAND_CLASS, NVL(p_default_dmd_class,'@@@'))
2864                   = NVL(P_DEMAND_CLASS, NVL(p_default_dmd_class,'@@@')) )
2865     UNION ALL
2866     SELECT      p_level col1,
2867                 p_identifier col2,
2868                 p_scenario_id col3,
2869                 p_item_id col4 ,
2870                 p_request_item_id col5,
2871                 p_org_id col6,
2872                 l_null_num col7,
2873                 l_null_num col8,
2874                 l_null_num col9,
2875                 l_null_num col10,
2876                 l_null_num col11,
2877                 l_null_num col12,
2878                 l_null_num col13,
2879                 l_null_num col14,
2880                 l_null_char col15,
2881                 I.UOM_CODE col16,
2882                 2 col17, -- supply
2883                 S.ORDER_TYPE col18,
2884                 l_null_char col19,
2885                 S.SR_INSTANCE_ID col20,
2886                 l_null_num col21,
2887                 S.TRANSACTION_ID col22,
2888                 l_null_num col23,
2889                 ---bug 1843471
2890                 --NVL(S.FIRM_QUANTITY,S.NEW_ORDER_QUANTITY) col24,
2891                 Decode(order_type,
2892                 30, Decode(Sign(S.Daily_rate * (TRUNC(C.Calendar_date) -
2893 				TRUNC(S.FIRST_UNIT_START_DATE) )- S.qty_completed),
2894                              -1,S.Daily_rate* (TRUNC(C.Calendar_date) - TRUNC(S.First_Unit_Start_date) +1)- S.qty_completed,
2895                               S.Daily_rate),
2896                 -- Bug 2132288, 2442009, 2563139
2897                 5, NVL(S.DAILY_RATE, NVL(S.FIRM_QUANTITY,S.NEW_ORDER_QUANTITY)),
2898                 -- End Bug 2132288, 2442009
2899 
2900                 -- Bug 2439264, for OPM, lots with order_processing = "N" will be populated with
2901                 -- non_nettable_qty and need to be excluded from ATP calculations.
2902 
2903                 (NVL(S.FIRM_QUANTITY,S.NEW_ORDER_QUANTITY) - NVL(S.NON_NETTABLE_QTY, 0)) ) col24,
2904 
2905                 -- NVL(S.FIRM_QUANTITY,S.NEW_ORDER_QUANTITY) ) col24,
2906                 C.NEXT_DATE col25,
2907                 l_null_num col26,
2908                 DECODE(S.ORDER_TYPE,
2909                        1, S.ORDER_NUMBER,
2910 		       2, S.ORDER_NUMBER,
2911 		       3, S.ORDER_NUMBER,
2912                        7, S.ORDER_NUMBER,
2913                        8, S.ORDER_NUMBER,
2914                        5, MSC_ATP_FUNC.Get_Designator(S.SCHEDULE_DESIGNATOR_ID),
2915                       11, S.ORDER_NUMBER,
2916                       12, S.ORDER_NUMBER,
2917                       14, S.ORDER_NUMBER,
2918                       15, S.ORDER_NUMBER,
2919                       27, S.ORDER_NUMBER,
2920                       28, S.ORDER_NUMBER,
2921                       41, S.ORDER_NUMBER, -- bug 4085497 'User Defined Supply'
2922                       --NULL) col27,
2923                       l_null_char) col27, -- bug 4365873 fixed as a part of this bug
2924                 l_null_num col28,
2925 		l_null_num col29,
2926 		l_sysdate,
2927 		G_USER_ID,
2928 		l_sysdate,
2929 		G_USER_ID,
2930 		G_USER_ID,
2931 		--null,--bug3263368 ORIG_CUSTOMER_SITE_NAME
2932 		--null, --bug3263368 ORIG_CUSTOMER_NAME
2933 		--null, --bug3263368 ORIG_DEMAND_CLASS
2934 		--null  --bug3263368 ORIG_REQUEST_DATE
2935 		l_null_char, --bug3814584
2936                 l_null_char, --bug3814584
2937                 l_null_char, --bug3814584
2938                 l_null_date  --bug3814584
2939     FROM        MSC_CALENDAR_DATES C,
2940 		MSC_SUPPLIES S,
2941                 MSC_ATP_RULES R,
2942                 MSC_SYSTEM_ITEMS I,
2943                 MSC_SUB_INVENTORIES MSI
2944     WHERE       I.SR_INVENTORY_ITEM_ID = p_item_id
2945     AND         I.ORGANIZATION_ID = p_org_id
2946     AND         I.SR_INSTANCE_ID = p_instance_id
2947     AND         I.PLAN_ID = p_plan_id
2948     AND         R.RULE_ID (+) = NVL(I.ATP_RULE_ID, p_default_atp_rule_id)
2949     AND         R.SR_INSTANCE_ID (+) = I.SR_INSTANCE_ID
2950     AND		S.PLAN_ID = I.PLAN_ID
2951     AND		S.SR_INSTANCE_ID = I.SR_INSTANCE_ID
2952     AND		S.INVENTORY_ITEM_ID = I.INVENTORY_ITEM_ID
2953     AND 	S.ORGANIZATION_ID = I.ORGANIZATION_ID
2954     --- bug 1843471
2955     --AND         NVL(S.FIRM_QUANTITY,S.NEW_ORDER_QUANTITY) <> 0 -- 1243985
2956                 -- Bug 2132288, 2442009, 2453938
2957                 -- Do not include supplies equal to 0 as per 1243985
2958                 -- However at the same time, support negative supplies as per Bug 2362079 use ABS.
2959                 -- Support Repetitive schedules as per 1843471
2960                 -- Support Repetitive MPS as per 2132288, 2442009
2961 		-- TRUNC dates 2563139
2962     AND         Decode(S.order_type, 30, S.Daily_rate* (TRUNC(C.Calendar_date)
2963 					- TRUNC(S.First_Unit_Start_date) + 1),
2964                                      5, NVL(S.Daily_rate, ABS(NVL(S.FIRM_QUANTITY,S.NEW_ORDER_QUANTITY)) ),
2965                         ABS(NVL(S.FIRM_QUANTITY,S.NEW_ORDER_QUANTITY)) ) >
2966                       Decode(S.order_type, 30, S.qty_completed,0)
2967                 -- End Bug 2132288, 2442009, 2453938
2968     AND		(S.ORDER_TYPE IN (
2969 		DECODE(R.INCLUDE_PURCHASE_ORDERS, 1, 1, -1),
2970 		DECODE(R.INCLUDE_PURCHASE_ORDERS, 1, 8, -1), -- 1882898
2971 		DECODE(R.INCLUDE_DISCRETE_WIP_RECEIPTS, 1, 3, -1),
2972 		DECODE(R.INCLUDE_REP_WIP_RECEIPTS, 1, 30, -1),
2973 		DECODE(R.INCLUDE_NONSTD_WIP_RECEIPTS, 1, 7, -1),
2974 		DECODE(R.INCLUDE_NONSTD_WIP_RECEIPTS, 1, 15, -1),
2975 		DECODE(R.INCLUDE_INTERORG_TRANSFERS, 1, 11, -1),
2976                 DECODE(R.INCLUDE_INTERORG_TRANSFERS, 1, 12, -1),
2977 		DECODE(R.INCLUDE_ONHAND_AVAILABLE, 1, 18, -1),
2978 		DECODE(R.INCLUDE_INTERNAL_REQS, 1, 2, -1),
2979 		DECODE(R.INCLUDE_SUPPLIER_REQS, 1, 2, -1),
2980                 DECODE(R.INCLUDE_USER_DEFINED_SUPPLY, 1, 41, -1),
2981 		DECODE(R.INCLUDE_FLOW_SCHEDULE_RECEIPTS, 1, 27, -1),
2982 		DECODE(R.INCLUDE_FLOW_SCHEDULE_RECEIPTS, 1, 28, -1))
2983                 OR
2984                 ((R.INCLUDE_REP_MPS = 1 OR R.INCLUDE_DISCRETE_MPS = 1) AND
2985                 S.ORDER_TYPE = 5
2986                  -- bug 2461071
2987                 AND exists (SELECT '1'
2988                             FROM    MSC_DESIGNATORS
2989                             WHERE   INVENTORY_ATP_FLAG = 1
2990                             AND     DESIGNATOR_TYPE = 2
2991                             AND     DESIGNATOR_ID = S.SCHEDULE_DESIGNATOR_ID
2992                             AND     DECODE(R.demand_class_atp_flag,1,
2993                                     nvl(demand_class,
2994                                     nvl(p_default_dmd_class,'@@@')),'@@@') =
2995                                     DECODE(R.demand_class_atp_flag,1,
2996                                     nvl(p_demand_class,
2997                                     nvl(p_default_dmd_class,'@@@')),'@@@')
2998 )))
2999                 --AND MSC_ATP_FUNC.MPS_ATP(S.SCHEDULE_DESIGNATOR_ID) = 1))
3000     AND		C.CALENDAR_CODE = p_cal_code
3001     AND		C.EXCEPTION_SET_ID = G_CAL_EXC_SET_ID
3002     AND         C.SR_INSTANCE_ID = p_instance_id
3003                  -- Bug 2132288, 2442009
3004     AND         C.CALENDAR_DATE BETWEEN TRUNC(NVL(S.FIRM_DATE,S.NEW_SCHEDULE_DATE))
3005                     AND TRUNC(NVL(DECODE(S.ORDER_TYPE, 5, S.LAST_UNIT_START_DATE,
3006                                    S.LAST_UNIT_COMPLETION_DATE), NVL(S.FIRM_DATE,S.NEW_SCHEDULE_DATE)))
3007     AND         DECODE(DECODE(S.ORDER_TYPE, 5, S.LAST_UNIT_START_DATE,
3008                                    S.LAST_UNIT_COMPLETION_DATE),
3009                        NULL, C.NEXT_SEQ_NUM, C.SEQ_NUM) IS NOT NULL
3010                  -- End Bug 2132288, 2442009
3011                  -- new clause 2640489, SIMPLIFY FOR CBO
3012     AND         (S.ORDER_TYPE = 18
3013                  OR R.PAST_DUE_SUPPLY_CUTOFF_FENCE is NULL
3014                  OR C.NEXT_SEQ_NUM >= p_sysdate_seq_num - R.PAST_DUE_SUPPLY_CUTOFF_FENCE)
3015     AND         C.NEXT_DATE >= DECODE(S.ORDER_TYPE, 27, TRUNC(l_sysdate),
3016                                                 28, TRUNC(l_sysdate),
3017                                                     C.NEXT_DATE)
3018     AND         C.NEXT_DATE < NVL(p_itf, C.NEXT_DATE + 1)
3019     AND         (R.DEMAND_CLASS_ATP_FLAG <> 1
3020                  OR S.ORDER_TYPE = 5
3021                  OR NVL(S.DEMAND_CLASS, NVL(p_default_dmd_class,'@@@')) =
3022                     NVL(P_DEMAND_CLASS, NVL(p_default_dmd_class,'@@@')) )
3023                 --- filter out non-atpable sub-inventories
3024     AND          MSI.plan_id (+) = p_plan_id
3025     AND          MSI.organization_id (+) = p_org_id
3026     AND          MSI.sr_instance_id (+) = p_instance_id
3027     -- AND          S.subinventory_code = MSI.sub_inventory_code
3028     AND          MSI.sub_inventory_code (+) = S.subinventory_code
3029     AND          NVL(MSI.inventory_atp_code,1)  <> 2  -- filter out non-atpable subinventories
3030     -- SQL Query changes End 2640489
3031 )
3032 ;
3033 
3034 EXCEPTION
3035         WHEN OTHERS THEN
3036                 IF PG_DEBUG in ('Y', 'C') THEN
3037                         msc_sch_wb.atp_debug('Get_Mat_Avail_Pf_Ods_Dtls: ' || 'Error occurred: ' || to_char(sqlcode) || ':' || SQLERRM);
3038                 END IF;
3039                 x_return_status := FND_API.G_RET_STS_ERROR;
3040 
3041 END Get_Mat_Avail_Pf_Ods_Dtls;
3042 
3043 /*--Get_Mat_Avail_Pf_Pds_Dtls-----------------------------------------------------------
3044 |  o  Called for unallocated Time Phased PF ATP with Details.
3045 |  o  The supply demand SQL inserts following in msc_atp_sd_details_temp table:
3046 |       -  Bucketed demands (origination type 51) for member item upto ATF from
3047 |            msc_alloc_demands table.
3048 |       -  Bucketed demands for family after ATF from msc_alloc_demands table.
3049 |       -  Rollup supplies (order type 50) for member item upto ATF from
3050 |            msc_alloc_supplies table.
3051 |       -  Rollup supplies for family after ATF from msc_alloc_supplies table.
3052 |  o  Other important differences from non PF SQLs are:
3053 |       -  Columns Pf_Display_Flag, Original_Demand_Quantity and Original_Demand_Date
3054 |            in msc_atp_sd_details_temp table are populated for demands.
3055 |       -  Column Original_Supply_Demand_Type is populated for demands and supplies
3056 |            and stores the supply demand type of parent supplies and demands.
3057 +-------------------------------------------------------------------------------------*/
3058 PROCEDURE Get_Mat_Avail_Pf_Pds_Dtls (
3059         p_sr_member_id                  IN      NUMBER,
3060         p_sr_family_id                  IN      NUMBER,
3061         p_org_id                        IN      NUMBER,
3062         p_instance_id                   IN      NUMBER,
3063         p_plan_id                       IN      NUMBER,
3064         p_itf                           IN      DATE,
3065         p_level                         IN      NUMBER,
3066         p_scenario_id                   IN      NUMBER,
3067         p_identifier                    IN      NUMBER,
3068         x_return_status                 OUT     NOCOPY VARCHAR2
3069 ) IS
3070         l_null_num              NUMBER;
3071         l_null_char             VARCHAR2(1);
3072         l_null_date             DATE; --bug3814584
3073         l_sysdate               DATE := sysdate;
3074 
3075 BEGIN
3076         IF PG_DEBUG in ('Y', 'C') THEN
3077            msc_sch_wb.atp_debug('Begin Get_Mat_Avail_Pf_Pds_Dtls');
3078         END IF;
3079 
3080         -- Initializing API return code
3081         x_return_status := FND_API.G_RET_STS_SUCCESS;
3082 
3083         INSERT INTO msc_atp_sd_details_temp (
3084         	ATP_Level,
3085         	Order_line_id,
3086         	Scenario_Id,
3087         	Inventory_Item_Id,
3088         	Request_Item_Id,
3089         	Organization_Id,
3090         	Department_Id,
3091         	Resource_Id,
3092         	Supplier_Id,
3093         	Supplier_Site_Id,
3094         	From_Organization_Id,
3095         	From_Location_Id,
3096         	To_Organization_Id,
3097         	To_Location_Id,
3098         	Ship_Method,
3099         	UOM_code,
3100         	Supply_Demand_Type,
3101         	Supply_Demand_Source_Type,
3102         	Supply_Demand_Source_Type_Name,
3103         	Identifier1,
3104         	Identifier2,
3105         	Identifier3,
3106         	Identifier4,
3107         	Allocated_Quantity,
3108         	Supply_Demand_Date,
3109         	Disposition_Type,
3110         	Disposition_Name,
3111         	Pegging_Id,
3112         	End_Pegging_Id,
3113         	Pf_Display_Flag,
3114         	Supply_Demand_Quantity,
3115         	Original_Demand_Quantity,
3116         	Original_Demand_Date,
3117         	Original_Item_Id,
3118         	Original_Supply_Demand_Type,
3119         	creation_date,
3120         	created_by,
3121         	last_update_date,
3122         	last_updated_by,
3123         	last_update_login,
3124         	ORIG_CUSTOMER_SITE_NAME,--bug3263368
3125                 ORIG_CUSTOMER_NAME, --bug3263368
3126                 ORIG_DEMAND_CLASS, --bug3263368
3127                 ORIG_REQUEST_DATE, --bug3263368
3128                 Inventory_Item_Name --bug3579625
3129         )
3130         (
3131             SELECT      p_level col1,
3132         		p_identifier col2,
3133                         p_scenario_id col3,
3134                         p_sr_family_id col4,
3135                         p_sr_member_id col5,
3136         		p_org_id col6,
3137                         l_null_num col7,
3138                         l_null_num col8,
3139                         l_null_num col9,
3140                         l_null_num col10,
3141                         l_null_num col11,
3142                         l_null_num col12,
3143                         l_null_num col13,
3144                         l_null_num col14,
3145         		l_null_char col15,
3146         		I.UOM_CODE col16,
3147         		1 col17, -- demand
3148         		AD.ORIGINATION_TYPE col18,
3149                         l_null_char col19,
3150         		AD.SR_INSTANCE_ID col20,
3151                         l_null_num col21,
3152         		AD.PARENT_DEMAND_ID col22,
3153         		l_null_num col23,
3154                         -1 * AD.ALLOCATED_QUANTITY col24,
3155                         TRUNC(AD.DEMAND_DATE) col25, --bug3693892 added trunc
3156                         l_null_num col26,
3157                         AD.ORDER_NUMBER col27,
3158                         l_null_num col28,
3159                         l_null_num col29,
3160                         AD.Pf_Display_Flag,
3161                         -1* NVL(AD.Demand_Quantity, AD.ALLOCATED_QUANTITY),
3162                         -1* NVL(AD.Demand_Quantity, AD.ALLOCATED_QUANTITY),
3163                         trunc(AD.Original_Demand_Date), --Bug_3693892 added trunc
3164                         AD.Original_Item_Id,
3165                         AD.Original_Origination_Type,
3166         		l_sysdate,
3167         		G_USER_ID,
3168         		l_sysdate,
3169         		G_USER_ID,
3170         		G_USER_ID,
3171         		MTPS.LOCATION,   --bug3263368
3172                         MTP.PARTNER_NAME, --bug3263368
3173                         AD.DEMAND_CLASS, --bug3263368
3174                         AD.REQUEST_DATE, --bug3263368
3175                         I2.Item_Name  --bug3579625
3176 
3177             FROM        MSC_SYSTEM_ITEMS I,
3178                         MSC_SYSTEM_ITEMS I2,  --bug3579625
3179         		MSC_ALLOC_DEMANDS AD,
3180         		MSC_TRADING_PARTNERS    MTP,--bug3263368
3181                         MSC_TRADING_PARTNER_SITES    MTPS --bug3263368
3182             WHERE       I.SR_INVENTORY_ITEM_ID in (p_sr_member_id, p_sr_family_id)
3183             AND         I.ORGANIZATION_ID = p_org_id
3184             AND         I.SR_INSTANCE_ID = p_instance_id
3185             AND         I.PLAN_ID = p_plan_id
3186             AND         AD.PLAN_ID = I.PLAN_ID
3187             AND         AD.SR_INSTANCE_ID = I.SR_INSTANCE_ID
3188             AND         AD.INVENTORY_ITEM_ID = I.INVENTORY_ITEM_ID
3189             AND         AD.ORGANIZATION_ID = I.ORGANIZATION_ID
3190             -- bug3579625 Addition join with MSC_SYSTEM_ITEMS (I2)
3191             AND         AD.PLAN_ID = I2.PLAN_ID
3192             AND         AD.SR_INSTANCE_ID = I2.SR_INSTANCE_ID
3193             AND         AD.ORIGINAL_ITEM_ID = I2.INVENTORY_ITEM_ID
3194             AND         AD.ORGANIZATION_ID = I2.ORGANIZATION_ID
3195             AND         AD.ORIGINATION_TYPE <> 52
3196             AND         AD.ALLOCATED_QUANTITY <> 0
3197             --bug3700564 added trunc
3198             AND         TRUNC(AD.DEMAND_DATE) < NVL(p_itf, TRUNC(AD.DEMAND_DATE) + 1)
3199             AND         AD.SHIP_TO_SITE_ID = MTPS.PARTNER_SITE_ID(+) --bug3263368
3200             AND         AD.CUSTOMER_ID = MTP.PARTNER_ID(+)--bug3263368
3201             UNION ALL
3202             SELECT      p_level col1,
3203                         p_identifier col2,
3204                         p_scenario_id col3,
3205                         p_sr_family_id col4 ,
3206                         p_sr_member_id col5,
3207                         p_org_id col6,
3208                         l_null_num col7,
3209                         l_null_num col8,
3210                         l_null_num col9,
3211                         l_null_num col10,
3212                         l_null_num col11,
3213                         l_null_num col12,
3214                         l_null_num col13,
3215                         l_null_num col14,
3216                         l_null_char col15,
3217                         I.UOM_CODE col16,
3218                         2 col17,
3219                         SA.ORDER_TYPE col18,
3220                         l_null_char col19,
3221                         SA.SR_INSTANCE_ID col20,
3222                         l_null_num col21,
3223                         SA.PARENT_TRANSACTION_ID col22,
3224                         l_null_num col23,
3225         		SA.ALLOCATED_QUANTITY col24,
3226                         trunc(SA.SUPPLY_DATE) col25,  --bug3693892 added trunc
3227                         l_null_num col26,
3228         		DECODE(SA.ORDER_TYPE, 5, to_char(SA.PARENT_TRANSACTION_ID), SA.ORDER_NUMBER) col27,
3229                         l_null_num col28,
3230         		l_null_num col29,
3231         		l_null_num,
3232         		NVL(SA.Supply_Quantity, SA.ALLOCATED_QUANTITY),
3233         		l_null_num,
3234         		to_date(null),
3235         		SA.Original_Item_Id,
3236         		SA.Original_Order_Type,
3237         		l_sysdate,
3238         		G_USER_ID,
3239         		l_sysdate,
3240         		G_USER_ID,
3241         		G_USER_ID,
3242         		--null, --bug3263368 ORIG_CUSTOMER_SITE_NAME
3243         		--null, --bug3263368 ORIG_CUSTOMER_NAME
3244         		--null, --bug3263368 ORIG_DEMAND_CLASS
3245         		--null, --bug3263368 ORIG_REQUEST_DATE
3246         		l_null_char, --bug3814584
3247                         l_null_char, --bug3814584
3248                         l_null_char, --bug3814584
3249                         l_null_date,  --bug3814584
3250                         I2.Item_Name  --bug3579625
3251             FROM        MSC_ALLOC_SUPPLIES SA,
3252                         MSC_SYSTEM_ITEMS I,
3253                         MSC_SYSTEM_ITEMS I2 --bug3579625
3254             WHERE       I.SR_INVENTORY_ITEM_ID in (p_sr_member_id, p_sr_family_id)
3255             AND         I.ORGANIZATION_ID = p_org_id
3256             AND         I.SR_INSTANCE_ID = p_instance_id
3257             AND         I.PLAN_ID = p_plan_id
3258             AND         SA.PLAN_ID = I.PLAN_ID
3259             AND         SA.SR_INSTANCE_ID = I.SR_INSTANCE_ID
3260             AND         SA.INVENTORY_ITEM_ID = I.INVENTORY_ITEM_ID
3261             AND         SA.ORGANIZATION_ID = I.ORGANIZATION_ID
3262             -- bug3579625 Addition join with MSC_SYSTEM_ITEMS (I2)
3263             AND         SA.PLAN_ID = I2.PLAN_ID
3264             AND         SA.SR_INSTANCE_ID = I2.SR_INSTANCE_ID
3265             AND         SA.ORIGINAL_ITEM_ID = I2.INVENTORY_ITEM_ID
3266             AND         SA.ORGANIZATION_ID = I2.ORGANIZATION_ID
3267             --bug3700564 added trunc
3268             AND         TRUNC(SA.SUPPLY_DATE) >= DECODE(SA.ORIGINAL_ORDER_TYPE,
3269                                                         27, TRUNC(SYSDATE),
3270                                                         28, TRUNC(SYSDATE),
3271                                                         TRUNC(SA.SUPPLY_DATE))
3272             AND         SA.ALLOCATED_QUANTITY <> 0
3273             AND         TRUNC(SA.SUPPLY_DATE) < NVL(p_itf, TRUNC(SA.SUPPLY_DATE) + 1)
3274         );
3275 
3276 EXCEPTION
3277         WHEN OTHERS THEN
3278                 IF PG_DEBUG in ('Y', 'C') THEN
3279                         msc_sch_wb.atp_debug('Get_Mat_Avail_Pf_Pds_Dtls: ' || 'Error occurred: ' || to_char(sqlcode) || ':' || SQLERRM);
3280                 END IF;
3281                 x_return_status := FND_API.G_RET_STS_ERROR;
3282 
3283 END Get_Mat_Avail_Pf_Pds_Dtls;
3284 
3285 /*--Set_Alloc_Rule_Variables------------------------------------------------------
3286 |  o  Called from Atp_Check procedure for Allocated Time Phased PF ATP.
3287 |  o  This procedure sets global variables that tells:
3288 |       -  Allocation rule to be used for member item inside ATF
3289 |       -  Allocation rule to be used for family item outside ATF
3290 +-------------------------------------------------------------------------------*/
3291 PROCEDURE Set_Alloc_Rule_Variables (
3292         p_member_id                     IN      NUMBER,
3293         p_family_id                     IN      NUMBER,
3294         p_org_id                        IN      NUMBER,
3295         p_instance_id                   IN      NUMBER,
3296         p_demand_class                  IN      VARCHAR2,
3297         p_atf_date                      IN      DATE,
3298         x_return_status                 OUT     NOCOPY VARCHAR2
3299 ) IS
3300         l_alloc_percent         NUMBER;
3301 BEGIN
3302         IF PG_DEBUG in ('Y', 'C') THEN
3303                 msc_sch_wb.atp_debug('******* Begin Set_Alloc_Rule_Variables **********');
3304                 msc_sch_wb.atp_debug('Set_Alloc_Rule_Variables: p_member_id: ' || p_member_id);
3305                 msc_sch_wb.atp_debug('Set_Alloc_Rule_Variables: p_family_id: ' || p_family_id);
3306                 msc_sch_wb.atp_debug('Set_Alloc_Rule_Variables: p_instance_id: ' || p_instance_id);
3307                 msc_sch_wb.atp_debug('Set_Alloc_Rule_Variables: p_org_id: ' || p_org_id);
3308                 msc_sch_wb.atp_debug('Set_Alloc_Rule_Variables: p_demand_class: ' || p_demand_class);
3309                 msc_sch_wb.atp_debug('Set_Alloc_Rule_Variables: p_atf_date: ' || p_atf_date);
3310                 msc_sch_wb.atp_debug('Set_Alloc_Rule_Variables: G_ALLOCATION_METHOD: ' || MSC_ATP_PVT.G_ALLOCATION_METHOD);
3311                 msc_sch_wb.atp_debug('Set_Alloc_Rule_Variables: G_HIERARCHY_PROFILE: ' || MSC_AATP_PVT.G_HIERARCHY_PROFILE);
3312         END IF;
3313 
3314         -- Initializing API return code
3315         x_return_status := FND_API.G_RET_STS_SUCCESS;
3316 
3317         IF MSC_ATP_PVT.G_ALLOCATION_METHOD = 1 THEN
3318                 /* Demand priority allocated ATP
3319                    Here we always use allocation rule from family inside/outside ATF
3320                 */
3321                 IF MSC_AATP_PVT.G_HIERARCHY_PROFILE = 1 THEN
3322                         MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF := 'N';
3323                         MSC_ATP_PVT.G_PF_RULE_OUTSIDE_ATF := 'Y';
3324                 END IF;
3325         ELSE
3326                 /* Rule based allocated ATP
3327                    Here we support following scenarios:
3328                      -  Allocation rule defined only at family item
3329                      -  Allocation rule defined for the member and PF item
3330 
3331                    ATP logic:
3332                      -  Check allocation rule on ATF date for member item.
3333                           o IF defined use allocation rule from member within ATF
3334                             ELSE use allocation rule from family within ATF
3335                      -  Always use allocation rule from family outside ATF
3336                 */
3337                 IF PG_DEBUG in ('Y', 'C') THEN
3338                     msc_sch_wb.atp_debug('Set_Alloc_Rule_Variables: ' || 'Determine whether rule exist for member item within ATF');
3339                 END IF;
3340 
3341                 IF MSC_AATP_PVT.G_HIERARCHY_PROFILE = 1 THEN
3342                         BEGIN
3343                                 SELECT allocation_percent
3344                                 INTO   l_alloc_percent
3345                                 FROM   msc_item_hierarchy_mv
3346                                 WHERE  inventory_item_id = p_member_id
3347                                 AND    organization_id = p_org_id
3348                                 AND    sr_instance_id = p_instance_id
3349                                 AND    p_atf_date BETWEEN effective_date AND disable_date
3350                                 AND    level_id = -1
3351                                 AND    rownum = 1;
3352 
3353                                 IF l_alloc_percent is not null THEN
3354                                     MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF := 'Y';
3355                                 ELSE
3356                                     MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF := 'N';
3357                                 END IF;
3358                         EXCEPTION
3359                                 WHEN NO_DATA_FOUND THEN
3360                                     IF PG_DEBUG in ('Y', 'C') THEN
3361                                         msc_sch_wb.atp_debug('Set_Alloc_Rule_Variables: ' || 'Alloc Rule not found at member level');
3362                                     END IF;
3363                                     MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF := 'N';
3364                         END;
3365                 ELSE
3366                         BEGIN
3367                                 SELECT allocation_percent
3368                                 INTO   l_alloc_percent
3369                                 FROM   msc_item_hierarchy_mv
3370                                 WHERE  inventory_item_id = p_member_id
3371                                 AND    organization_id = p_org_id
3372                                 AND    sr_instance_id = p_instance_id
3373                                 AND    p_atf_date BETWEEN effective_date AND disable_date
3374                                 AND    level_id <> -1
3375                                 AND    rownum = 1;
3376 
3377                                 IF l_alloc_percent is not null THEN
3378                                     MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF := 'Y';
3379                                 ELSE
3380                                     MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF := 'N';
3381                                 END IF;
3382                         EXCEPTION
3383                                 WHEN NO_DATA_FOUND THEN
3384                                     IF PG_DEBUG in ('Y', 'C') THEN
3385                                         msc_sch_wb.atp_debug('Set_Alloc_Rule_Variables: ' || 'Alloc Rule not found for member within ATF');
3386                                     END IF;
3387                                     MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF := 'N';
3388                         END;
3389                 END IF;
3390 
3391                 IF PG_DEBUG in ('Y', 'C') THEN
3392                     msc_sch_wb.atp_debug('Set_Alloc_Rule_Variables: ' || 'Always use rule for family item outside ATF');
3393                 END IF;
3394                 MSC_ATP_PVT.G_PF_RULE_OUTSIDE_ATF := 'Y';
3395         END IF;
3396 
3397         IF PG_DEBUG in ('Y', 'C') THEN
3398             msc_sch_wb.atp_debug('Set_Alloc_Rule_Variables: ' || 'G_MEM_RULE_WITHIN_ATF = ' || MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF);
3399             msc_sch_wb.atp_debug('Set_Alloc_Rule_Variables: ' || 'G_PF_RULE_OUTSIDE_ATF = ' || MSC_ATP_PVT.G_PF_RULE_OUTSIDE_ATF);
3400         END IF;
3401 
3402 EXCEPTION
3403         WHEN OTHERS THEN
3404                 IF PG_DEBUG in ('Y', 'C') THEN
3405                         msc_sch_wb.atp_debug('Set_Alloc_Rule_Variables: ' || 'Error occurred: ' || to_char(sqlcode) || ':' || SQLERRM);
3406                 END IF;
3407                 x_return_status := FND_API.G_RET_STS_ERROR;
3408 
3409 END Set_Alloc_Rule_Variables;
3410 
3411 /*--Item_Alloc_Avail_Pf-----------------------------------------------------------
3412 |  o  Called from Item_Alloc_Cum_Atp procedure for Rule based Allocated
3413 |       Time Phased PF ATP.
3414 |  o  The supply demand SQL in this procedure gets following:
3415 |       -  Allocated Bucketed demands (origination type 51) for member item
3416 |            upto ATF from msc_alloc_demands table.
3417 |       -  Allocated Bucketed demands for family after ATF from msc_alloc_demands
3418 |            table.
3419 |       -  Allocated Rollup supplies (order type 50) for member item upto ATF
3420 |            from msc_alloc_supplies table.
3421 |       -  Allocated Rollup supplies for family after ATF from msc_alloc_supplies
3422 |            table.
3423 +-------------------------------------------------------------------------------*/
3424 PROCEDURE Item_Alloc_Avail_Pf (
3425         p_member_id                     IN      NUMBER,
3426         p_family_id                     IN      NUMBER,
3427         p_org_id                        IN      NUMBER,
3428         p_instance_id                   IN      NUMBER,
3429         p_plan_id                       IN      NUMBER,
3430         p_demand_class                  IN      VARCHAR2,
3431         p_level_id                      IN      NUMBER,
3432         p_itf                           IN      DATE,
3433         p_sys_next_date			IN 	DATE, --bug3099066
3434         p_atf_date                      IN      DATE,
3435         x_atp_dates                     OUT     NOCOPY MRP_ATP_PUB.date_arr,
3436         x_atp_qtys                      OUT     NOCOPY MRP_ATP_PUB.number_arr,
3437         x_return_status                 OUT     NOCOPY VARCHAR2
3438 ) IS
3439 
3440 BEGIN
3441         IF PG_DEBUG in ('Y', 'C') THEN
3442                 msc_sch_wb.atp_debug('******* Begin Item_Alloc_Avail_Pf **********');
3443                 msc_sch_wb.atp_debug('Item_Alloc_Avail_Pf: p_member_id: ' || p_member_id);
3444                 msc_sch_wb.atp_debug('Item_Alloc_Avail_Pf: p_family_id: ' || p_family_id);
3445                 msc_sch_wb.atp_debug('Item_Alloc_Avail_Pf: p_instance_id: ' || p_instance_id);
3446                 msc_sch_wb.atp_debug('Item_Alloc_Avail_Pf: p_plan_id: ' || p_plan_id);
3447                 msc_sch_wb.atp_debug('Item_Alloc_Avail_Pf: p_demand_class: ' || p_demand_class);
3448                 msc_sch_wb.atp_debug('Item_Alloc_Avail_Pf: p_level_id: ' || p_level_id);
3449         END IF;
3450 
3451         -- Initializing API return code
3452         x_return_status := FND_API.G_RET_STS_SUCCESS;
3453 
3454              SELECT        SD_DATE,
3455                            SUM(SD_QTY)
3456              BULK COLLECT INTO
3457                            x_atp_dates,
3458                            x_atp_qtys
3459              FROM (
3460                    SELECT  --TRUNC(AD.DEMAND_DATE) SD_DATE, 	--bug3099066
3461                            GREATEST(TRUNC(AD.DEMAND_DATE),p_sys_next_date) SD_DATE,--3099066
3462                            --bug3333114 removed trunc from p_sys_next_date as it is already trucate
3463                            -1* AD.ALLOCATED_QUANTITY*
3464                             DECODE(DECODE(MSC_AATP_PVT.G_HIERARCHY_PROFILE,
3465                               1, decode(AD.Original_Origination_Type,
3466                                  6, decode(AD.SOURCE_ORGANIZATION_ID,
3467                                     NULL, DECODE(AD.DEMAND_CLASS, null, null,
3468                                        DECODE(p_demand_class, '-1',
3469                                           MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(
3470                                              null, null, Decode(sign(trunc(AD.Demand_Date) - p_atf_date),
3471                                                                 1, p_family_id,
3472                                                                 Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
3473                                                                         'Y', AD.Original_Item_Id,
3474                                                                         p_family_id)), p_org_id,
3475                                              p_instance_id, trunc(AD.Demand_Date),
3476                                              p_level_id, AD.DEMAND_CLASS),
3477                                              AD.DEMAND_CLASS)),
3478                                     -23453, DECODE(AD.DEMAND_CLASS, null, null,
3479                                        DECODE(p_demand_class, '-1',
3480                                           MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(
3481                                              null, null, Decode(sign(trunc(AD.Demand_Date) - p_atf_date),
3482                                                                 1, p_family_id,
3483                                                                 Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
3484                                                                         'Y', AD.Original_Item_Id,
3485                                                                         p_family_id)), p_org_id,
3486                                              p_instance_id, trunc(AD.Demand_Date),
3487                                              p_level_id, AD.DEMAND_CLASS),
3488                                              AD.DEMAND_CLASS)),
3489                                     AD.ORGANIZATION_ID, DECODE(AD.DEMAND_CLASS, null, null,
3490                                        DECODE(p_demand_class, '-1',
3491                                           MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(
3492                                              null, null, Decode(sign(trunc(AD.Demand_Date) - p_atf_date),
3493                                                                 1, p_family_id,
3494                                                                 Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
3495                                                                         'Y', AD.Original_Item_Id,
3496                                                                         p_family_id)), p_org_id,
3497                                              p_instance_id, trunc(AD.Demand_Date),
3498                                              p_level_id, AD.DEMAND_CLASS),
3499                                              AD.DEMAND_CLASS)), TO_CHAR(NULL)),
3500                                  30, decode(AD.SOURCE_ORGANIZATION_ID,
3501                                     NULL, DECODE(AD.DEMAND_CLASS, null, null,
3502                                        DECODE(p_demand_class, '-1',
3503                                           MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(
3504                                              null, null, Decode(sign(trunc(AD.Demand_Date) - p_atf_date),
3505                                                                 1, p_family_id,
3506                                                                 Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
3507                                                                         'Y', AD.Original_Item_Id,
3508                                                                         p_family_id)), p_org_id,
3509                                              p_instance_id, trunc(AD.Demand_Date),
3510                                              p_level_id, AD.DEMAND_CLASS),
3511                                              AD.DEMAND_CLASS)),
3512                                     -23453, DECODE(AD.DEMAND_CLASS, null, null,
3513                                        DECODE(p_demand_class, '-1',
3514                                           MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(
3515                                              null, null, Decode(sign(trunc(AD.Demand_Date) - p_atf_date),
3516                                                                 1, p_family_id,
3517                                                                 Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
3518                                                                         'Y', AD.Original_Item_Id,
3519                                                                         p_family_id)), p_org_id,
3520                                              p_instance_id, trunc(AD.Demand_Date),
3521                                              p_level_id, AD.DEMAND_CLASS),
3522                                              AD.DEMAND_CLASS)),
3523                                     AD.ORGANIZATION_ID, DECODE(AD.DEMAND_CLASS, null, null,
3524                                        DECODE(p_demand_class, '-1',
3525                                           MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(
3526                                              null, null, Decode(sign(trunc(AD.Demand_Date) - p_atf_date),
3527                                                                 1, p_family_id,
3528                                                                 Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
3529                                                                         'Y', AD.Original_Item_Id,
3530                                                                         p_family_id)), p_org_id,
3531                                              p_instance_id, trunc(AD.Demand_Date),
3532                                              p_level_id, AD.DEMAND_CLASS),
3533                                              AD.DEMAND_CLASS)), TO_CHAR(NULL)),
3534                                  DECODE(AD.DEMAND_CLASS, null, null,
3535                                     DECODE(p_demand_class, '-1',
3536                                        MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(
3537                                           null, null, Decode(sign(trunc(AD.Demand_Date) - p_atf_date),
3538                                                                 1, p_family_id,
3539                                                                 Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
3540                                                                         'Y', AD.Original_Item_Id,
3541                                                                         p_family_id)), p_org_id,
3542                                           p_instance_id, trunc(AD.Demand_Date),
3543                                           p_level_id, AD.DEMAND_CLASS),
3544                                           AD.DEMAND_CLASS))),
3545                               2, DECODE(AD.CUSTOMER_ID, NULL, TO_CHAR(NULL),
3546                                                    0, TO_CHAR(NULL),
3547                                  decode(AD.Original_Origination_Type,
3548                                     6, decode(AD.SOURCE_ORGANIZATION_ID,
3549                                        NULL, MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(
3550                                              AD.CUSTOMER_ID, AD.SHIP_TO_SITE_ID, Decode(sign(trunc(AD.Demand_Date) - p_atf_date),
3551                                                                                         1, p_family_id,
3552                                                                                         Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
3553                                                                                                 'Y', AD.Original_Item_Id,
3554                                                                                                 p_family_id)),
3555                                              p_org_id, p_instance_id, trunc(AD.Demand_Date),
3556                                              p_level_id, NULL),
3557                                        -23453, MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(
3558                                              AD.CUSTOMER_ID, AD.SHIP_TO_SITE_ID, Decode(sign(trunc(AD.Demand_Date) - p_atf_date),
3559                                                                                         1, p_family_id,
3560                                                                                         Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
3561                                                                                                 'Y', AD.Original_Item_Id,
3562                                                                                                 p_family_id)),
3563                                              p_org_id, p_instance_id, trunc(AD.Demand_Date),
3564                                              p_level_id, NULL),
3565                                        AD.ORGANIZATION_ID, MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(
3566                                              AD.CUSTOMER_ID, AD.SHIP_TO_SITE_ID, Decode(sign(trunc(AD.Demand_Date) - p_atf_date),
3567                                                                                         1, p_family_id,
3568                                                                                         Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
3569                                                                                                 'Y', AD.Original_Item_Id,
3570                                                                                                 p_family_id)),
3571                                              p_org_id, p_instance_id, trunc(AD.Demand_Date),
3572                                              p_level_id, NULL),
3573                                        TO_CHAR(NULL)),
3574                                     30, decode(AD.SOURCE_ORGANIZATION_ID,
3575                                        NULL, MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(
3576                                              AD.CUSTOMER_ID, AD.SHIP_TO_SITE_ID, Decode(sign(trunc(AD.Demand_Date) - p_atf_date),
3577                                                                                         1, p_family_id,
3578                                                                                         Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
3579                                                                                                 'Y', AD.Original_Item_Id,
3580                                                                                                 p_family_id)),
3581                                              p_org_id, p_instance_id, trunc(AD.Demand_Date),
3582                                              p_level_id, NULL),
3583                                        -23453, MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(
3584                                              AD.CUSTOMER_ID, AD.SHIP_TO_SITE_ID, Decode(sign(trunc(AD.Demand_Date) - p_atf_date),
3585                                                                                         1, p_family_id,
3586                                                                                         Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
3587                                                                                                 'Y', AD.Original_Item_Id,
3588                                                                                                 p_family_id)),
3589                                              p_org_id, p_instance_id, trunc(AD.Demand_Date),
3590                                              p_level_id, NULL),
3591                                        AD.ORGANIZATION_ID, MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(
3592                                              AD.CUSTOMER_ID, AD.SHIP_TO_SITE_ID, Decode(sign(trunc(AD.Demand_Date) - p_atf_date),
3593                                                                                         1, p_family_id,
3594                                                                                         Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
3595                                                                                                 'Y', AD.Original_Item_Id,
3596                                                                                                 p_family_id)),
3597                                              p_org_id, p_instance_id, trunc(AD.Demand_Date),
3598                                              p_level_id, NULL),
3599                                        TO_CHAR(NULL)),
3600                                     MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(
3601                                        AD.CUSTOMER_ID, AD.SHIP_TO_SITE_ID,
3602                                        Decode(sign(trunc(AD.Demand_Date) - p_atf_date),
3603                                                 1, p_family_id,
3604                                                 Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
3605                                                         'Y', AD.Original_Item_Id,
3606                                                         p_family_id)), p_org_id, p_instance_id,
3607                                        trunc(AD.Demand_Date),p_level_id, NULL)))),
3608                            p_demand_class, 1,
3609                               Decode(AD.Demand_Class, NULL, --4365873 If l_demand_class is not null and demand class is populated
3610                              -- on  supplies record then 0 should be allocated.
3611                               MSC_AATP_FUNC.Get_Item_Demand_Alloc_Percent(p_plan_id,
3612                                  AD.PARENT_DEMAND_ID,
3613                                  trunc(AD.Demand_Date),
3614                                  AD.USING_ASSEMBLY_ITEM_ID,
3615                                  DECODE(AD.SOURCE_ORGANIZATION_ID,
3616                                     -23453, null,
3617                                     AD.SOURCE_ORGANIZATION_ID),
3618                                  Decode(sign(trunc(AD.Demand_Date) - p_atf_date),
3619                                         1, p_family_id,
3620                                         Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
3621                                                 'Y', AD.Original_Item_Id,
3622                                                 p_family_id)),
3623                                  p_org_id,
3624                                  p_instance_id,
3625                                  AD.Original_Origination_Type,
3626                                  DECODE(MSC_AATP_PVT.G_HIERARCHY_PROFILE,
3627                                     1, decode(AD.Original_Origination_Type,
3628                                        6, decode(AD.SOURCE_ORGANIZATION_ID,
3629                                           NULL, DECODE(AD.DEMAND_CLASS, null, null,
3630                                              DECODE(p_demand_class, '-1',
3631                                                 MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(
3632                                                    null, null, Decode(sign(trunc(AD.Demand_Date) - p_atf_date),
3633                                                                         1, p_family_id,
3634                                                                         Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
3635                                                                                 'Y', AD.Original_Item_Id,
3636                                                                                 p_family_id)), p_org_id,
3637                                                    p_instance_id, trunc(AD.Demand_Date),
3638                                                    p_level_id, AD.DEMAND_CLASS),
3639                                                 AD.DEMAND_CLASS)),
3640                                           -23453, DECODE(AD.DEMAND_CLASS, null, null,
3641                                              DECODE(p_demand_class, '-1',
3642                                                 MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(
3643                                                    null, null, Decode(sign(trunc(AD.Demand_Date) - p_atf_date),
3644                                                                         1, p_family_id,
3645                                                                         Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
3646                                                                                 'Y', AD.Original_Item_Id,
3647                                                                                 p_family_id)), p_org_id,
3648                                                    p_instance_id, trunc(AD.Demand_Date),
3649                                                    p_level_id, AD.DEMAND_CLASS),
3650                                                 AD.DEMAND_CLASS)),
3651                                           AD.ORGANIZATION_ID, DECODE(AD.DEMAND_CLASS, null, null,
3652                                              DECODE(p_demand_class, '-1',
3653                                                 MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(
3654                                                    null, null, Decode(sign(trunc(AD.Demand_Date) - p_atf_date),
3655                                                                         1, p_family_id,
3656                                                                         Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
3657                                                                                 'Y', AD.Original_Item_Id,
3658                                                                                 p_family_id)), p_org_id,
3659                                                    p_instance_id, trunc(AD.Demand_Date),
3660                                                    p_level_id, AD.DEMAND_CLASS),
3661                                                 AD.DEMAND_CLASS)),
3662                                           p_demand_class),
3663                                     30, decode(AD.SOURCE_ORGANIZATION_ID,
3664                                        NULL, DECODE(AD.DEMAND_CLASS, null, null,
3665                                           DECODE(p_demand_class, '-1',
3666                                              MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(
3667                                                 null, null, Decode(sign(trunc(AD.Demand_Date) - p_atf_date),
3668                                                                         1, p_family_id,
3669                                                                         Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
3670                                                                                 'Y', AD.Original_Item_Id,
3671                                                                                 p_family_id)), p_org_id,
3672                                                 p_instance_id, trunc(AD.Demand_Date),
3673                                                 p_level_id, AD.DEMAND_CLASS),
3674                                              AD.DEMAND_CLASS)),
3675                                        -23453, DECODE(AD.DEMAND_CLASS, null, null,
3676                                           DECODE(p_demand_class, '-1',
3677                                              MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(
3678                                                 null, null, Decode(sign(trunc(AD.Demand_Date) - p_atf_date),
3679                                                                         1, p_family_id,
3680                                                                         Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
3681                                                                                 'Y', AD.Original_Item_Id,
3682                                                                                 p_family_id)), p_org_id,
3683                                                 p_instance_id, trunc(AD.Demand_Date),
3684                                                 p_level_id, AD.DEMAND_CLASS),
3685                                              AD.DEMAND_CLASS)),
3686                                        AD.ORGANIZATION_ID, DECODE(AD.DEMAND_CLASS, null, null,
3687                                           DECODE(p_demand_class, '-1',
3688                                              MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(
3689                                                 null, null, Decode(sign(trunc(AD.Demand_Date) - p_atf_date),
3690                                                                         1, p_family_id,
3691                                                                         Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
3692                                                                                 'Y', AD.Original_Item_Id,
3693                                                                                 p_family_id)), p_org_id,
3694                                                 p_instance_id, trunc(AD.Demand_Date),
3695                                                 p_level_id, AD.DEMAND_CLASS),
3696                                              AD.DEMAND_CLASS)),
3697                                        p_demand_class),
3698                                     DECODE(AD.DEMAND_CLASS, null, null,
3699                                        DECODE(p_demand_class, '-1',
3700                                           MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(
3701                                              null, null, Decode(sign(trunc(AD.Demand_Date) - p_atf_date),
3702                                                                 1, p_family_id,
3703                                                                 Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
3704                                                                         'Y', AD.Original_Item_Id,
3705                                                                         p_family_id)), p_org_id,
3706                                              p_instance_id, trunc(AD.Demand_Date),
3707                                              p_level_id, AD.DEMAND_CLASS),
3708                                           AD.DEMAND_CLASS))),
3709                                     2, DECODE(AD.CUSTOMER_ID, NULL, p_demand_class,
3710                                                    0, p_demand_class,
3711                                        decode(AD.Original_Origination_Type,
3712                                           6, decode(AD.SOURCE_ORGANIZATION_ID,
3713                                              NULL, MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(
3714                                                    AD.CUSTOMER_ID, AD.SHIP_TO_SITE_ID, Decode(sign(trunc(AD.Demand_Date) - p_atf_date),
3715                                                                                                 1, p_family_id,
3716                                                                                                 Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
3717                                                                                                         'Y', AD.Original_Item_Id,
3718                                                                                                         p_family_id)),
3719                                                    p_org_id, p_instance_id, trunc(AD.Demand_Date),
3720                                                    p_level_id, NULL),
3721                                              -23453, MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(
3722                                                    AD.CUSTOMER_ID, AD.SHIP_TO_SITE_ID, Decode(sign(trunc(AD.Demand_Date) - p_atf_date),
3723                                                                                                 1, p_family_id,
3724                                                                                                 Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
3725                                                                                                         'Y', AD.Original_Item_Id,
3726                                                                                                         p_family_id)),
3727                                                    p_org_id, p_instance_id, trunc(AD.Demand_Date),
3728                                                    p_level_id, NULL),
3729                                              AD.ORGANIZATION_ID, MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(
3730                                                    AD.CUSTOMER_ID, AD.SHIP_TO_SITE_ID, Decode(sign(trunc(AD.Demand_Date) - p_atf_date),
3731                                                                                                 1, p_family_id,
3732                                                                                                 Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
3733                                                                                                         'Y', AD.Original_Item_Id,
3734                                                                                                         p_family_id)),
3735                                                    p_org_id, p_instance_id, trunc(AD.Demand_Date),
3736                                                    p_level_id, NULL),
3737                                              p_demand_class),
3738                                           30, decode(AD.SOURCE_ORGANIZATION_ID,
3739                                              NULL, MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(
3740                                                    AD.CUSTOMER_ID, AD.SHIP_TO_SITE_ID, Decode(sign(trunc(AD.Demand_Date) - p_atf_date),
3741                                                                                                 1, p_family_id,
3742                                                                                                 Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
3743                                                                                                         'Y', AD.Original_Item_Id,
3744                                                                                                         p_family_id)),
3745                                                    p_org_id, p_instance_id, trunc(AD.Demand_Date),
3746                                                    p_level_id, NULL),
3747                                              -23453, MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(
3748                                                    AD.CUSTOMER_ID, AD.SHIP_TO_SITE_ID, Decode(sign(trunc(AD.Demand_Date) - p_atf_date),
3749                                                                                                 1, p_family_id,
3750                                                                                                 Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
3751                                                                                                         'Y', AD.Original_Item_Id,
3752                                                                                                         p_family_id)),
3753                                                    p_org_id, p_instance_id, trunc(AD.Demand_Date),
3754                                                    p_level_id, NULL),
3755                                              AD.ORGANIZATION_ID, MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(
3756                                                    AD.CUSTOMER_ID, AD.SHIP_TO_SITE_ID, Decode(sign(trunc(AD.Demand_Date) - p_atf_date),
3757                                                                                         1, p_family_id,
3758                                                                                         Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
3759                                                                                                 'Y', AD.Original_Item_Id,
3760                                                                                                 p_family_id)),
3761                                                    p_org_id, p_instance_id, trunc(AD.Demand_Date),
3762                                                    p_level_id, NULL),
3763                                              p_demand_class),
3764                                           MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(AD.CUSTOMER_ID, AD.SHIP_TO_SITE_ID,
3765                                              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)), p_org_id, p_instance_id,
3770                                              trunc(AD.Demand_Date),p_level_id, NULL)))),
3771                                        p_demand_class,
3772                                        p_level_id),0)) SD_QTY --4365873
3773                    FROM        MSC_ALLOC_DEMANDS AD
3774                    WHERE       AD.PLAN_ID = p_plan_id
3775                    AND         AD.SR_INSTANCE_ID = p_instance_id
3776                    AND         AD.INVENTORY_ITEM_ID in (p_member_id,p_family_id)
3777                    AND         AD.ORGANIZATION_ID = p_org_id
3778                    AND         AD.ORIGINATION_TYPE <> 52
3779                    AND         AD.ALLOCATED_QUANTITY <> 0
3780                    --bug3700564 added trunc
3781                    AND         TRUNC(AD.DEMAND_DATE) < NVL(p_itf, TRUNC(AD.DEMAND_DATE) + 1)
3782                    UNION ALL
3783                    SELECT  --TRUNC(SA.SUPPLY_DATE) SD_DATE,			--bug3099066
3784                    	   GREATEST(TRUNC(SA.SUPPLY_DATE),p_sys_next_date) SD_DATE,--3099066
3785                            SA.ALLOCATED_QUANTITY*
3786                               DECODE(DECODE(MSC_AATP_PVT.G_HIERARCHY_PROFILE,
3787                                      1, DECODE(SA.DEMAND_CLASS, null, null,
3788                                         DECODE(p_demand_class, '-1',
3789                                            MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(
3790                                                          null,
3791                                                          null,
3792                                                          Decode(sign(trunc(SA.Supply_Date) - p_atf_date),
3793                                                                 1, p_family_id,
3794                                                                 Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
3795                                                                         'Y', SA.Original_Item_Id,
3796                                                                         p_family_id)),
3797                                                          p_org_id,
3798                                                          p_instance_id,
3799                                                          TRUNC(SA.SUPPLY_DATE),
3800                                                          p_level_id,
3801                                                          SA.DEMAND_CLASS),
3802                                            SA.DEMAND_CLASS)),
3803                                      2, DECODE(SA.CUSTOMER_ID, NULL, TO_CHAR(NULL),
3804                                                        0, TO_CHAR(NULL),
3805                                                        MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(
3806                                                          SA.CUSTOMER_ID,
3807                                                          SA.SHIP_TO_SITE_ID,
3808                                                          Decode(sign(trunc(SA.Supply_Date) - p_atf_date),
3809                                                                 1, p_family_id,
3810                                                                 Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
3811                                                                         'Y', SA.Original_Item_Id,
3812                                                                         p_family_id)),
3813                                                          p_org_id,
3814                                                          p_instance_id,
3815                                                          TRUNC(SA.SUPPLY_DATE),
3816                                                          p_level_id,
3817                                                          NULL))),
3818                                  p_demand_class, 1,
3819                                  NULL,  nvl(MIHM.allocation_percent/100,1), --4365873
3820                                  /*NVL(MSC_AATP_FUNC.Get_DC_Alloc_Percent(
3821                                            p_instance_id,
3822                                            Decode(sign(trunc(SA.Supply_Date) - p_atf_date),
3823                                                 1, p_family_id,
3824                                                 Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
3825                                                         'Y', SA.Original_Item_Id,
3826                                                         p_family_id)),
3827                                            p_org_id,
3828                                            null,
3829                                            null,
3830                                            p_demand_class,
3831                                            TRUNC(SA.SUPPLY_DATE)),
3832                                         1),*/
3833                                  DECODE(
3834                                   MIHM.allocation_percent/100, --4365873
3835                                  /*DECODE(MSC_AATP_FUNC.Get_DC_Alloc_Percent(
3836                                            p_instance_id,
3837                                            Decode(sign(trunc(SA.Supply_Date) - p_atf_date),
3838                                                 1, p_family_id,
3839                                                 Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
3840                                                         'Y', SA.Original_Item_Id,
3841                                                         p_family_id)),
3842                                            p_org_id,
3843                                            null,
3844                                            null,
3845                                            p_demand_class,
3846                                            TRUNC(SA.SUPPLY_DATE)),*/
3847                                    NULL, 1,
3848                                  0)) SD_QTY
3849                    FROM    MSC_ALLOC_SUPPLIES SA, MSC_ITEM_HIERARCHY_MV MIHM --4365873
3850                    WHERE   SA.PLAN_ID = p_plan_id
3851                    AND     SA.SR_INSTANCE_ID = p_instance_id
3852                    AND     SA.INVENTORY_ITEM_ID in (p_member_id, p_family_id)
3853                    AND     SA.ORGANIZATION_ID = p_org_id
3854                    AND     SA.ALLOCATED_QUANTITY <> 0
3855                    --bug3700564 added trunc
3856                    AND     TRUNC(SA.SUPPLY_DATE) >= DECODE(SA.ORIGINAL_ORDER_TYPE,
3857                                                         27, TRUNC(SYSDATE),
3858                                                         28, TRUNC(SYSDATE),
3859                                                         TRUNC(SA.SUPPLY_DATE))
3860                    AND     TRUNC(SA.SUPPLY_DATE) < NVL(p_itf, TRUNC(SA.SUPPLY_DATE) + 1)
3861 		--4365873
3862                    AND    SA.INVENTORY_ITEM_ID = MIHM.INVENTORY_ITEM_ID(+)
3863                    AND    SA.SR_INSTANCE_ID = MIHM.SR_INSTANCE_ID (+)
3864                    AND    SA.ORGANIZATION_ID = MIHM.ORGANIZATION_ID (+)
3865                 AND    decode(MIHM.level_id (+),-1,1,2) = decode(MSC_AATP_PVT.G_HIERARCHY_PROFILE,1,1,2)
3866                    AND    TRUNC(SA.SUPPLY_DATE) >= MIHM.effective_date (+)
3867                    AND    TRUNC(SA.SUPPLY_DATE) <= MIHM.disable_date (+)
3868                 AND    MIHM.demand_class (+) = p_demand_class
3869                    )
3870              GROUP BY SD_DATE
3871              order by SD_DATE; --4698199
3872 EXCEPTION
3873         WHEN OTHERS THEN
3874                 IF PG_DEBUG in ('Y', 'C') THEN
3875                         msc_sch_wb.atp_debug('Item_Alloc_Avail_Pf: ' || 'Error occurred: ' || to_char(sqlcode) || ':' || SQLERRM);
3876                 END IF;
3877                 x_return_status := FND_API.G_RET_STS_ERROR;
3878 
3879 END Item_Alloc_Avail_Pf;
3880 
3881 /*--Item_Alloc_Avail_Pf_Unalloc------------------------------------------------
3882 |  o  Called from Item_Alloc_Cum_Atp procedure for Rule based Allocated Time
3883 |       Phased PF ATP (AATP Forward Consumption Method 2).
3884 |  o  This is similar to previous procedure only difference being that we
3885 |       also return unallocated quantities.
3886 +----------------------------------------------------------------------------*/
3887 PROCEDURE Item_Alloc_Avail_Pf_Unalloc (
3888         p_member_id                     IN      NUMBER,
3889         p_family_id                     IN      NUMBER,
3890         p_org_id                        IN      NUMBER,
3891         p_instance_id                   IN      NUMBER,
3892         p_plan_id                       IN      NUMBER,
3893         p_demand_class                  IN      VARCHAR2,
3894         p_level_id                      IN      NUMBER,
3895         p_itf                           IN      DATE,
3896         p_sys_next_date			IN	DATE, --3099066
3897         p_atf_date                      IN      DATE,
3898         x_atp_dates                     OUT     NOCOPY MRP_ATP_PUB.date_arr,
3899         x_atp_qtys                      OUT     NOCOPY MRP_ATP_PUB.number_arr,
3900         x_atp_unalloc_qtys              OUT     NOCOPY MRP_ATP_PUB.number_arr,
3901         x_return_status                 OUT     NOCOPY VARCHAR2
3902 ) IS
3903 
3904 BEGIN
3905         IF PG_DEBUG in ('Y', 'C') THEN
3906                 msc_sch_wb.atp_debug('******* Begin Item_Alloc_Avail_Pf_Unalloc **********');
3907                 msc_sch_wb.atp_debug('Item_Alloc_Avail_Pf_Unalloc: p_member_id: ' || p_member_id);
3908                 msc_sch_wb.atp_debug('Item_Alloc_Avail_Pf_Unalloc: p_family_id: ' || p_family_id);
3909                 msc_sch_wb.atp_debug('Item_Alloc_Avail_Pf_Unalloc: p_instance_id: ' || p_instance_id);
3910                 msc_sch_wb.atp_debug('Item_Alloc_Avail_Pf_Unalloc: p_plan_id: ' || p_plan_id);
3911                 msc_sch_wb.atp_debug('Item_Alloc_Avail_Pf_Unalloc: p_demand_class: ' || p_demand_class);
3912                 msc_sch_wb.atp_debug('Item_Alloc_Avail_Pf_Unalloc: p_level_id: ' || p_level_id);
3913         END IF;
3914 
3915         -- Initializing API return code
3916         x_return_status := FND_API.G_RET_STS_SUCCESS;
3917 
3918              SELECT        SD_DATE,
3919                            SUM(UNALLOC_SD_QTY),
3920                            SUM(SD_QTY)
3921              BULK COLLECT INTO
3922                            x_atp_dates,
3923                            x_atp_unalloc_qtys,
3924                            x_atp_qtys
3925              FROM (
3926                    SELECT  --TRUNC(AD.DEMAND_DATE) SD_DATE,
3927                    	   GREATEST(TRUNC(AD.DEMAND_DATE),p_sys_next_date) SD_DATE,--3099066
3928                            -1* AD.ALLOCATED_QUANTITY UNALLOC_SD_QTY,
3929                            -1* AD.ALLOCATED_QUANTITY*
3930                             DECODE(DECODE(MSC_AATP_PVT.G_HIERARCHY_PROFILE,
3931                               1, decode(AD.Original_Origination_Type,
3932                                  6, decode(AD.SOURCE_ORGANIZATION_ID,
3933                                     NULL, DECODE(AD.DEMAND_CLASS, null, null,
3934                                        DECODE(p_demand_class, '-1',
3935                                           MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(
3936                                              null, null, Decode(sign(trunc(AD.Demand_Date) - p_atf_date),
3937                                                                 1, p_family_id,
3938                                                                 Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
3939                                                                         'Y', AD.Original_Item_Id,
3940                                                                         p_family_id)), p_org_id,
3941                                              p_instance_id, trunc(AD.Demand_Date),
3942                                              p_level_id, AD.DEMAND_CLASS),
3943                                              AD.DEMAND_CLASS)),
3944                                     -23453, DECODE(AD.DEMAND_CLASS, null, null,
3945                                        DECODE(p_demand_class, '-1',
3946                                           MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(
3947                                              null, null, Decode(sign(trunc(AD.Demand_Date) - p_atf_date),
3948                                                                 1, p_family_id,
3949                                                                 Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
3950                                                                         'Y', AD.Original_Item_Id,
3951                                                                         p_family_id)), p_org_id,
3952                                              p_instance_id, trunc(AD.Demand_Date),
3953                                              p_level_id, AD.DEMAND_CLASS),
3954                                              AD.DEMAND_CLASS)),
3955                                     AD.ORGANIZATION_ID, DECODE(AD.DEMAND_CLASS, null, null,
3956                                        DECODE(p_demand_class, '-1',
3957                                           MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(
3958                                              null, null, Decode(sign(trunc(AD.Demand_Date) - p_atf_date),
3959                                                                 1, p_family_id,
3960                                                                 Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
3961                                                                         'Y', AD.Original_Item_Id,
3962                                                                         p_family_id)), p_org_id,
3963                                              p_instance_id, trunc(AD.Demand_Date),
3964                                              p_level_id, AD.DEMAND_CLASS),
3965                                              AD.DEMAND_CLASS)), TO_CHAR(NULL)),
3966                                  30, decode(AD.SOURCE_ORGANIZATION_ID,
3967                                     NULL, DECODE(AD.DEMAND_CLASS, null, null,
3968                                        DECODE(p_demand_class, '-1',
3969                                           MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(
3970                                              null, null, Decode(sign(trunc(AD.Demand_Date) - p_atf_date),
3971                                                                 1, p_family_id,
3972                                                                 Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
3973                                                                         'Y', AD.Original_Item_Id,
3974                                                                         p_family_id)), p_org_id,
3975                                              p_instance_id, trunc(AD.Demand_Date),
3976                                              p_level_id, AD.DEMAND_CLASS),
3977                                              AD.DEMAND_CLASS)),
3978                                     -23453, DECODE(AD.DEMAND_CLASS, null, null,
3979                                        DECODE(p_demand_class, '-1',
3980                                           MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(
3981                                              null, null, Decode(sign(trunc(AD.Demand_Date) - p_atf_date),
3982                                                                 1, p_family_id,
3983                                                                 Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
3984                                                                         'Y', AD.Original_Item_Id,
3985                                                                         p_family_id)), p_org_id,
3986                                              p_instance_id, trunc(AD.Demand_Date),
3987                                              p_level_id, AD.DEMAND_CLASS),
3988                                              AD.DEMAND_CLASS)),
3989                                     AD.ORGANIZATION_ID, DECODE(AD.DEMAND_CLASS, null, null,
3990                                        DECODE(p_demand_class, '-1',
3991                                           MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(
3992                                              null, null, Decode(sign(trunc(AD.Demand_Date) - p_atf_date),
3993                                                                 1, p_family_id,
3994                                                                 Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
3995                                                                         'Y', AD.Original_Item_Id,
3996                                                                         p_family_id)), p_org_id,
3997                                              p_instance_id, trunc(AD.Demand_Date),
3998                                              p_level_id, AD.DEMAND_CLASS),
3999                                              AD.DEMAND_CLASS)), TO_CHAR(NULL)),
4000                                  DECODE(AD.DEMAND_CLASS, null, null,
4001                                     DECODE(p_demand_class, '-1',
4002                                        MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(
4003                                           null, null, Decode(sign(trunc(AD.Demand_Date) - p_atf_date),
4004                                                                 1, p_family_id,
4005                                                                 Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
4006                                                                         'Y', AD.Original_Item_Id,
4007                                                                         p_family_id)), p_org_id,
4008                                           p_instance_id, trunc(AD.Demand_Date),
4009                                           p_level_id, AD.DEMAND_CLASS),
4010                                           AD.DEMAND_CLASS))),
4011                               2, DECODE(AD.CUSTOMER_ID, NULL, TO_CHAR(NULL),
4012                                                    0, TO_CHAR(NULL),
4013                                  decode(AD.Original_Origination_Type,
4014                                     6, decode(AD.SOURCE_ORGANIZATION_ID,
4015                                        NULL, MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(
4016                                              AD.CUSTOMER_ID, AD.SHIP_TO_SITE_ID, Decode(sign(trunc(AD.Demand_Date) - p_atf_date),
4017                                                                                         1, p_family_id,
4018                                                                                         Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
4019                                                                                                 'Y', AD.Original_Item_Id,
4020                                                                                                 p_family_id)),
4021                                              p_org_id, p_instance_id, trunc(AD.Demand_Date),
4022                                              p_level_id, NULL),
4023                                        -23453, MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(
4024                                              AD.CUSTOMER_ID, AD.SHIP_TO_SITE_ID, Decode(sign(trunc(AD.Demand_Date) - p_atf_date),
4025                                                                                         1, p_family_id,
4026                                                                                         Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
4027                                                                                                 'Y', AD.Original_Item_Id,
4028                                                                                                 p_family_id)),
4029                                              p_org_id, p_instance_id, trunc(AD.Demand_Date),
4030                                              p_level_id, NULL),
4031                                        AD.ORGANIZATION_ID, MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(
4032                                              AD.CUSTOMER_ID, AD.SHIP_TO_SITE_ID, Decode(sign(trunc(AD.Demand_Date) - p_atf_date),
4033                                                                                         1, p_family_id,
4034                                                                                         Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
4035                                                                                                 'Y', AD.Original_Item_Id,
4036                                                                                                 p_family_id)),
4037                                              p_org_id, p_instance_id, trunc(AD.Demand_Date),
4038                                              p_level_id, NULL),
4039                                        TO_CHAR(NULL)),
4040                                     30, decode(AD.SOURCE_ORGANIZATION_ID,
4041                                        NULL, MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(
4042                                              AD.CUSTOMER_ID, AD.SHIP_TO_SITE_ID, Decode(sign(trunc(AD.Demand_Date) - p_atf_date),
4043                                                                                         1, p_family_id,
4044                                                                                         Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
4045                                                                                                 'Y', AD.Original_Item_Id,
4046                                                                                                 p_family_id)),
4047                                              p_org_id, p_instance_id, trunc(AD.Demand_Date),
4048                                              p_level_id, NULL),
4049                                        -23453, MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(
4050                                              AD.CUSTOMER_ID, AD.SHIP_TO_SITE_ID, Decode(sign(trunc(AD.Demand_Date) - p_atf_date),
4051                                                                                         1, p_family_id,
4052                                                                                         Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
4053                                                                                                 'Y', AD.Original_Item_Id,
4054                                                                                                 p_family_id)),
4055                                              p_org_id, p_instance_id, trunc(AD.Demand_Date),
4056                                              p_level_id, NULL),
4057                                        AD.ORGANIZATION_ID, MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(
4058                                              AD.CUSTOMER_ID, AD.SHIP_TO_SITE_ID, Decode(sign(trunc(AD.Demand_Date) - p_atf_date),
4059                                                                                         1, p_family_id,
4060                                                                                         Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
4061                                                                                                 'Y', AD.Original_Item_Id,
4062                                                                                                 p_family_id)),
4063                                              p_org_id, p_instance_id, trunc(AD.Demand_Date),
4064                                              p_level_id, NULL),
4065                                        TO_CHAR(NULL)),
4066                                     MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(
4067                                        AD.CUSTOMER_ID, AD.SHIP_TO_SITE_ID,
4068                                        Decode(sign(trunc(AD.Demand_Date) - p_atf_date),
4069                                                 1, p_family_id,
4070                                                 Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
4071                                                         'Y', AD.Original_Item_Id,
4072                                                         p_family_id)), p_org_id, p_instance_id,
4073                                        trunc(AD.Demand_Date),p_level_id, NULL)))),
4074                            p_demand_class, 1,
4075                            Decode(AD.Demand_Class, NULL, --4365873
4076                               MSC_AATP_FUNC.Get_Item_Demand_Alloc_Percent(p_plan_id,
4077                                  AD.PARENT_DEMAND_ID,
4078                                  trunc(AD.Demand_Date),
4079                                  AD.USING_ASSEMBLY_ITEM_ID,
4080                                  DECODE(AD.SOURCE_ORGANIZATION_ID,
4081                                     -23453, null,
4082                                     AD.SOURCE_ORGANIZATION_ID),
4083                                  Decode(sign(trunc(AD.Demand_Date) - p_atf_date),
4084                                         1, p_family_id,
4085                                         Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
4086                                                 'Y', AD.Original_Item_Id,
4087                                                 p_family_id)),
4088                                  p_org_id,
4089                                  p_instance_id,
4090                                  AD.Original_Origination_Type,
4091                                  DECODE(MSC_AATP_PVT.G_HIERARCHY_PROFILE,
4092                                     1, decode(AD.Original_Origination_Type,
4093                                        6, decode(AD.SOURCE_ORGANIZATION_ID,
4094                                           NULL, DECODE(AD.DEMAND_CLASS, null, null,
4095                                              DECODE(p_demand_class, '-1',
4096                                                 MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(
4097                                                    null, null, Decode(sign(trunc(AD.Demand_Date) - p_atf_date),
4098                                                                         1, p_family_id,
4099                                                                         Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
4100                                                                                 'Y', AD.Original_Item_Id,
4101                                                                                 p_family_id)), p_org_id,
4102                                                    p_instance_id, trunc(AD.Demand_Date),
4103                                                    p_level_id, AD.DEMAND_CLASS),
4104                                                 AD.DEMAND_CLASS)),
4105                                           -23453, DECODE(AD.DEMAND_CLASS, null, null,
4106                                              DECODE(p_demand_class, '-1',
4107                                                 MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(
4108                                                    null, null, Decode(sign(trunc(AD.Demand_Date) - p_atf_date),
4109                                                                         1, p_family_id,
4110                                                                         Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
4111                                                                                 'Y', AD.Original_Item_Id,
4112                                                                                 p_family_id)), p_org_id,
4113                                                    p_instance_id, trunc(AD.Demand_Date),
4114                                                    p_level_id, AD.DEMAND_CLASS),
4115                                                 AD.DEMAND_CLASS)),
4116                                           AD.ORGANIZATION_ID, DECODE(AD.DEMAND_CLASS, null, null,
4117                                              DECODE(p_demand_class, '-1',
4118                                                 MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(
4119                                                    null, null, Decode(sign(trunc(AD.Demand_Date) - p_atf_date),
4120                                                                         1, p_family_id,
4121                                                                         Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
4122                                                                                 'Y', AD.Original_Item_Id,
4123                                                                                 p_family_id)), p_org_id,
4124                                                    p_instance_id, trunc(AD.Demand_Date),
4125                                                    p_level_id, AD.DEMAND_CLASS),
4126                                                 AD.DEMAND_CLASS)),
4127                                           p_demand_class),
4128                                     30, decode(AD.SOURCE_ORGANIZATION_ID,
4129                                        NULL, DECODE(AD.DEMAND_CLASS, null, null,
4130                                           DECODE(p_demand_class, '-1',
4131                                              MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(
4132                                                 null, null, Decode(sign(trunc(AD.Demand_Date) - p_atf_date),
4133                                                                         1, p_family_id,
4134                                                                         Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
4135                                                                                 'Y', AD.Original_Item_Id,
4136                                                                                 p_family_id)), p_org_id,
4137                                                 p_instance_id, trunc(AD.Demand_Date),
4138                                                 p_level_id, AD.DEMAND_CLASS),
4139                                              AD.DEMAND_CLASS)),
4140                                        -23453, DECODE(AD.DEMAND_CLASS, null, null,
4141                                           DECODE(p_demand_class, '-1',
4142                                              MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(
4143                                                 null, null, Decode(sign(trunc(AD.Demand_Date) - p_atf_date),
4144                                                                         1, p_family_id,
4145                                                                         Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
4146                                                                                 'Y', AD.Original_Item_Id,
4147                                                                                 p_family_id)), p_org_id,
4148                                                 p_instance_id, trunc(AD.Demand_Date),
4149                                                 p_level_id, AD.DEMAND_CLASS),
4150                                              AD.DEMAND_CLASS)),
4151                                        AD.ORGANIZATION_ID, DECODE(AD.DEMAND_CLASS, null, null,
4152                                           DECODE(p_demand_class, '-1',
4153                                              MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(
4154                                                 null, null, Decode(sign(trunc(AD.Demand_Date) - p_atf_date),
4155                                                                         1, p_family_id,
4156                                                                         Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
4157                                                                                 'Y', AD.Original_Item_Id,
4158                                                                                 p_family_id)), p_org_id,
4159                                                 p_instance_id, trunc(AD.Demand_Date),
4160                                                 p_level_id, AD.DEMAND_CLASS),
4161                                              AD.DEMAND_CLASS)),
4162                                        p_demand_class),
4163                                     DECODE(AD.DEMAND_CLASS, null, null,
4164                                        DECODE(p_demand_class, '-1',
4165                                           MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(
4166                                              null, null, Decode(sign(trunc(AD.Demand_Date) - p_atf_date),
4167                                                                         1, p_family_id,
4168                                                                         Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
4169                                                                                 'Y', AD.Original_Item_Id,
4170                                                                                 p_family_id)), p_org_id,
4171                                              p_instance_id, trunc(AD.Demand_Date),
4172                                              p_level_id, AD.DEMAND_CLASS),
4173                                           AD.DEMAND_CLASS))),
4174                                     2, DECODE(AD.CUSTOMER_ID, NULL, p_demand_class,
4175                                                    0, p_demand_class,
4176                                        decode(AD.Original_Origination_Type,
4177                                           6, decode(AD.SOURCE_ORGANIZATION_ID,
4178                                              NULL, MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(
4179                                                    AD.CUSTOMER_ID, AD.SHIP_TO_SITE_ID, Decode(sign(trunc(AD.Demand_Date) - p_atf_date),
4180                                                                                                 1, p_family_id,
4181                                                                                                 Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
4182                                                                                                         'Y', AD.Original_Item_Id,
4183                                                                                                         p_family_id)),
4184                                                    p_org_id, p_instance_id, trunc(AD.Demand_Date),
4185                                                    p_level_id, NULL),
4186                                              -23453, MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(
4187                                                    AD.CUSTOMER_ID, AD.SHIP_TO_SITE_ID, Decode(sign(trunc(AD.Demand_Date) - p_atf_date),
4188                                                                                                 1, p_family_id,
4189                                                                                                 Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
4190                                                                                                         'Y', AD.Original_Item_Id,
4191                                                                                                         p_family_id)),
4192                                                    p_org_id, p_instance_id, trunc(AD.Demand_Date),
4193                                                    p_level_id, NULL),
4194                                              AD.ORGANIZATION_ID, MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(
4195                                                    AD.CUSTOMER_ID, AD.SHIP_TO_SITE_ID, Decode(sign(trunc(AD.Demand_Date) - p_atf_date),
4196                                                                                                 1, p_family_id,
4197                                                                                                 Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
4198                                                                                                         'Y', AD.Original_Item_Id,
4199                                                                                                         p_family_id)),
4200                                                    p_org_id, p_instance_id, trunc(AD.Demand_Date),
4201                                                    p_level_id, NULL),
4202                                              p_demand_class),
4203                                           30, decode(AD.SOURCE_ORGANIZATION_ID,
4204                                              NULL, MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(
4205                                                    AD.CUSTOMER_ID, AD.SHIP_TO_SITE_ID, Decode(sign(trunc(AD.Demand_Date) - p_atf_date),
4206                                                                                                 1, p_family_id,
4207                                                                                                 Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
4208                                                                                                         'Y', AD.Original_Item_Id,
4209                                                                                                         p_family_id)),
4210                                                    p_org_id, p_instance_id, trunc(AD.Demand_Date),
4211                                                    p_level_id, NULL),
4212                                              -23453, MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(
4213                                                    AD.CUSTOMER_ID, AD.SHIP_TO_SITE_ID, Decode(sign(trunc(AD.Demand_Date) - p_atf_date),
4214                                                                                                 1, p_family_id,
4215                                                                                                 Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
4216                                                                                                         'Y', AD.Original_Item_Id,
4217                                                                                                         p_family_id)),
4218                                                    p_org_id, p_instance_id, trunc(AD.Demand_Date),
4219                                                    p_level_id, NULL),
4220                                              AD.ORGANIZATION_ID, MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(
4221                                                    AD.CUSTOMER_ID, AD.SHIP_TO_SITE_ID, Decode(sign(trunc(AD.Demand_Date) - p_atf_date),
4222                                                                                                 1, p_family_id,
4223                                                                                                 Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
4224                                                                                                         'Y', AD.Original_Item_Id,
4225                                                                                                         p_family_id)),
4226                                                    p_org_id, p_instance_id, trunc(AD.Demand_Date),
4227                                                    p_level_id, NULL),
4228                                              p_demand_class),
4229                                           MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(
4230                                              AD.CUSTOMER_ID, AD.SHIP_TO_SITE_ID,
4231                                              Decode(sign(trunc(AD.Demand_Date) - p_atf_date),
4232                                                         1, p_family_id,
4233                                                         Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
4234                                                                 'Y', AD.Original_Item_Id,
4235                                                                 p_family_id)), p_org_id, p_instance_id,
4236                                              trunc(AD.Demand_Date),p_level_id, NULL)))),
4237                                        p_demand_class,
4238                                        p_level_id),0)) SD_QTY --4365873
4239                    FROM        MSC_ALLOC_DEMANDS AD
4240                    WHERE       AD.PLAN_ID = p_plan_id
4241                    AND         AD.SR_INSTANCE_ID = p_instance_id
4242                    AND         AD.INVENTORY_ITEM_ID in (p_member_id,p_family_id)
4243                    AND         AD.ORGANIZATION_ID = p_org_id
4244                    AND         AD.ORIGINATION_TYPE <> 52
4245                    AND         AD.ALLOCATED_QUANTITY <> 0
4246                    --bug3700564 added trunc
4247                    AND         TRUNC(AD.DEMAND_DATE) < NVL(p_itf, TRUNC(AD.DEMAND_DATE) + 1)
4248                    UNION ALL
4249                    SELECT  --TRUNC(SA.SUPPLY_DATE) SD_DATE,
4250                    	   GREATEST(TRUNC(SA.SUPPLY_DATE),p_sys_next_date) SD_DATE,--3099066
4251                            SA.ALLOCATED_QUANTITY UNALLOC_SD_QTY,
4252                            SA.ALLOCATED_QUANTITY*
4253                               DECODE(DECODE(MSC_AATP_PVT.G_HIERARCHY_PROFILE,
4254                                      1, DECODE(SA.DEMAND_CLASS, null, null,
4255                                         DECODE(p_demand_class, '-1',
4256                                            MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(
4257                                                          null,
4258                                                          null,
4259                                                          Decode(sign(trunc(SA.Supply_Date) - p_atf_date),
4260                                                                 1, p_family_id,
4261                                                                 Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
4262                                                                         'Y', SA.Original_Item_Id,
4263                                                                         p_family_id)),
4264                                                          p_org_id,
4265                                                          p_instance_id,
4266                                                          TRUNC(sa.SUPPLY_DATE),
4267                                                          p_level_id,
4268                                                          sa.DEMAND_CLASS),
4269                                            sa.DEMAND_CLASS)),
4270                                      2, DECODE(sa.CUSTOMER_ID, NULL, TO_CHAR(NULL),
4271                                                        0, TO_CHAR(NULL),
4272                                                        MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(
4273                                                          sa.CUSTOMER_ID,
4274                                                          sa.SHIP_TO_SITE_ID,
4275                                                          Decode(sign(trunc(sa.Supply_Date) - p_atf_date),
4276                                                                 1, p_family_id,
4277                                                                 Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
4278                                                                         'Y', sa.Original_Item_Id,
4279                                                                         p_family_id)),
4280                                                          p_org_id,
4281                                                          p_instance_id,
4282                                                          TRUNC(sa.SUPPLY_DATE),
4283                                                          p_level_id,
4284                                                          NULL))),
4285                                  p_demand_class, 1,
4286                                  NULL,  nvl(MIHM.allocation_percent/100,1), --4365873
4287                                  /*NVL(MSC_AATP_FUNC.Get_DC_Alloc_Percent(
4288                                            p_instance_id,
4289                                            Decode(sign(trunc(sa.Supply_Date) - p_atf_date),
4290                                                 1, p_family_id,
4291                                                 Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
4292                                                         'Y', sa.Original_Item_Id,
4293                                                         p_family_id)),
4294                                            p_org_id,
4295                                            null,
4296                                            null,
4297                                            p_demand_class,
4298                                            TRUNC(sa.SUPPLY_DATE)),
4299                                        1),*/
4300                                  DECODE(
4301                                   MIHM.allocation_percent/100, --4365873
4302                                  /*DECODE(MSC_AATP_FUNC.Get_DC_Alloc_Percent(
4303                                            p_instance_id,
4304                                            Decode(sign(trunc(sa.Supply_Date) - p_atf_date),
4305                                                 1, p_family_id,
4306                                                 Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
4307                                                         'Y', sa.Original_Item_Id,
4308                                                         p_family_id)),
4309                                            p_org_id,
4310                                            null,
4311                                            null,
4312                                            p_demand_class,
4313                                            TRUNC(sa.SUPPLY_DATE)),*/
4314                                    NULL, 1,
4315                                  0)) SD_QTY
4316                    FROM    MSC_ALLOC_SUPPLIES SA,MSC_ITEM_HIERARCHY_MV MIHM
4317                    WHERE   SA.PLAN_ID = p_plan_id
4318                    AND     SA.SR_INSTANCE_ID = p_instance_id
4319                    AND     SA.INVENTORY_ITEM_ID in (p_member_id, p_family_id)
4320                    AND     SA.ORGANIZATION_ID = p_org_id
4321                    AND     SA.ALLOCATED_QUANTITY <> 0
4322                    --bug3700564 added trunc
4323                    AND     TRUNC(SA.SUPPLY_DATE) >= DECODE(SA.ORIGINAL_ORDER_TYPE,
4324                                                         27, TRUNC(SYSDATE),
4325                                                         28, TRUNC(SYSDATE),
4326                                                         TRUNC(SA.SUPPLY_DATE))
4327                    AND     TRUNC(SA.SUPPLY_DATE) < NVL(p_itf, TRUNC(SA.SUPPLY_DATE) + 1)
4328 		--4365873
4329                   AND    sa.INVENTORY_ITEM_ID = MIHM.INVENTORY_ITEM_ID(+)
4330                   AND    sa.SR_INSTANCE_ID = MIHM.SR_INSTANCE_ID (+)
4331                   AND    sa.ORGANIZATION_ID = MIHM.ORGANIZATION_ID (+)
4332                 AND    decode(MIHM.level_id (+),-1,1,2) = decode(MSC_AATP_PVT.G_HIERARCHY_PROFILE,1,1,2)
4333                   AND    TRUNC(sa.SUPPLY_DATE) >= MIHM.effective_date (+)
4334                   AND    TRUNC(sa.SUPPLY_DATE) <= MIHM.disable_date (+)
4335                 AND    MIHM.demand_class (+) = p_demand_class
4336                    )
4337              GROUP BY SD_DATE
4338              order by SD_DATE; --4698199
4339 
4340 EXCEPTION
4341         WHEN OTHERS THEN
4342                 IF PG_DEBUG in ('Y', 'C') THEN
4343                         msc_sch_wb.atp_debug('Item_Alloc_Avail_Pf_Unalloc: ' || 'Error occurred: ' || to_char(sqlcode) || ':' || SQLERRM);
4344                 END IF;
4345                 x_return_status := FND_API.G_RET_STS_ERROR;
4346 
4347 END Item_Alloc_Avail_Pf_Unalloc;
4348 
4349 /*--Item_Alloc_Avail_Pf_Dtls-------------------------------------------------------------
4350 |  o  Called from Item_Alloc_Cum_Atp procedure for Time Phased Rule Based AATP
4351 |       scenarios.
4352 |  o  The supply demand SQL inserts following in msc_atp_sd_details_temp table:
4353 |       -  Allocated Bucketed demands (origination type 51) for member item upto ATF
4354 |            from msc_alloc_demands table.
4355 |       -  Allocated Bucketed demands for family after ATF from msc_alloc_demands table.
4356 |       -  Allocated Rollup supplies (order type 50) for member item upto ATF from
4357 |            msc_alloc_supplies table.
4358 |       -  Allocated Rollup supplies for family after ATF from msc_alloc_supplies table.
4359 |  o  Other important differences from non PF SQLs are:
4360 |       -  Columns Pf_Display_Flag, Original_Demand_Quantity and Original_Demand_Date
4361 |            in msc_atp_sd_details_temp table are populated for demands.
4362 |       -  Column Original_Supply_Demand_Type is populated for demands and supplies
4363 |            and stores the supply demand type of parent supplies and demands.
4364 +--------------------------------------------------------------------------------------*/
4365 PROCEDURE Item_Alloc_Avail_Pf_Dtls (
4366         p_member_id                     IN      NUMBER,
4367         p_family_id                     IN      NUMBER,
4368         p_sr_member_id                  IN      NUMBER,
4369         p_sr_family_id                  IN      NUMBER,
4370         p_org_id                        IN      NUMBER,
4371         p_instance_id                   IN      NUMBER,
4372         p_plan_id                       IN      NUMBER,
4373         p_demand_class                  IN      VARCHAR2,
4374         p_level_id                      IN      NUMBER,
4375         p_itf                           IN      DATE,
4376         p_level                         IN      NUMBER,
4377         p_identifier                    IN      NUMBER,
4378         p_scenario_id                   IN      NUMBER,
4379         p_uom_code                      IN      VARCHAR2,
4380         p_sys_next_date			IN 	DATE, --bug3099066
4381         p_atf_date                      IN      DATE,
4382         x_return_status                 OUT     NOCOPY VARCHAR2
4383 ) IS
4384         l_null_num              NUMBER;
4385         l_null_char             VARCHAR2(1);
4386         l_null_date             DATE; --bug3814584
4387         l_sysdate               DATE := sysdate;
4388 
4389 BEGIN
4390         IF PG_DEBUG in ('Y', 'C') THEN
4391                 msc_sch_wb.atp_debug('******* Begin Item_Alloc_Avail_Pf_Dtls **********');
4392                 msc_sch_wb.atp_debug('Item_Alloc_Avail_Pf_Dtls: p_member_id: ' || p_member_id);
4393                 msc_sch_wb.atp_debug('Item_Alloc_Avail_Pf_Dtls: p_family_id: ' || p_family_id);
4394                 msc_sch_wb.atp_debug('Item_Alloc_Avail_Pf_Dtls: p_sr_member_id: ' || p_sr_member_id);
4395                 msc_sch_wb.atp_debug('Item_Alloc_Avail_Pf_Dtls: p_sr_family_id: ' || p_sr_family_id);
4396                 msc_sch_wb.atp_debug('Item_Alloc_Avail_Pf_Dtls: p_instance_id: ' || p_instance_id);
4397                 msc_sch_wb.atp_debug('Item_Alloc_Avail_Pf_Dtls: p_plan_id: ' || p_plan_id);
4398                 msc_sch_wb.atp_debug('Item_Alloc_Avail_Pf_Dtls: p_demand_class: ' || p_demand_class);
4399                 msc_sch_wb.atp_debug('Item_Alloc_Avail_Pf_Dtls: p_level_id: ' || p_level_id);
4400                 msc_sch_wb.atp_debug('Item_Alloc_Avail_Pf_Dtls: p_identifier: ' || p_identifier);
4401                 msc_sch_wb.atp_debug('Item_Alloc_Avail_Pf_Dtls: p_scenario_id: ' || p_scenario_id);
4402                 msc_sch_wb.atp_debug('Item_Alloc_Avail_Pf_Dtls: p_uom_code: ' || p_uom_code);
4403         END IF;
4404 
4405         -- Initializing API return code
4406         x_return_status := FND_API.G_RET_STS_SUCCESS;
4407 
4408         INSERT INTO msc_atp_sd_details_temp (
4409                 ATP_Level,
4410                 Order_line_id,
4411                 Scenario_Id,
4412                 Inventory_Item_Id,
4413                 Request_Item_Id,
4414                 Organization_Id,
4415                 Department_Id,
4416                 Resource_Id,
4417                 Supplier_Id,
4418                 Supplier_Site_Id,
4419                 From_Organization_Id,
4420                 From_Location_Id,
4421                 To_Organization_Id,
4422                 To_Location_Id,
4423                 Ship_Method,
4424                 UOM_code,
4425                 Supply_Demand_Type,
4426                 Supply_Demand_Source_Type,
4427                 Supply_Demand_Source_Type_Name,
4428                 Identifier1,
4429                 Identifier2,
4430                 Identifier3,
4431                 Identifier4,
4432                 Allocated_Quantity,
4433                 Supply_Demand_Date,
4434                 Disposition_Type,
4435                 Disposition_Name,
4436                 Pegging_Id,
4437                 End_Pegging_Id,
4438         	Pf_Display_Flag,
4439                 Supply_Demand_Quantity,
4440         	Original_Demand_Quantity,
4441         	Original_Demand_Date,
4442         	Original_Item_Id,
4443         	Original_Supply_Demand_Type,
4444                 creation_date,
4445                 created_by,
4446                 last_update_date,
4447                 last_updated_by,
4448                 last_update_login,
4449                 Unallocated_Quantity,
4450                 ORIG_CUSTOMER_SITE_NAME,--bug3263368
4451                 ORIG_CUSTOMER_NAME, --bug3263368
4452                 ORIG_DEMAND_CLASS, --bug3263368
4453                 ORIG_REQUEST_DATE, --bug3263368
4454                 Inventory_Item_Name --bug3579625
4455                 )
4456            (
4457             SELECT      p_level col1,
4458                         p_identifier col2,
4459                         p_scenario_id col3,
4460                         p_sr_family_id col4,
4461                         p_sr_member_id col5,
4462                         p_org_id col6,
4463                         l_null_num col7,
4464                         l_null_num col8,
4465                         l_null_num col9,
4466                         l_null_num col10,
4467                         l_null_num col11,
4468                         l_null_num col12,
4469                         l_null_num col13,
4470                         l_null_num col14,
4471                         l_null_char col15,
4472                         p_uom_code col16,
4473                         1 col17,
4474                         AD.ORIGINATION_TYPE col18,
4475                         l_null_char col19,
4476                         AD.SR_INSTANCE_ID col20,
4477                         l_null_num col21,
4478                         AD.PARENT_DEMAND_ID col22,
4479                         l_null_num col23,
4480                         -1* AD.ALLOCATED_QUANTITY *
4481                             DECODE(DECODE(MSC_AATP_PVT.G_HIERARCHY_PROFILE,
4482                               1, decode(AD.Original_Origination_Type,
4483                                  6, decode(AD.SOURCE_ORGANIZATION_ID,
4484                                     NULL, DECODE(AD.DEMAND_CLASS, null, null,
4485                                        DECODE(p_demand_class, '-1',
4486                                           MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(
4487                                              null, null, Decode(sign(trunc(AD.Demand_Date) - p_atf_date),
4488                                                                 1, p_family_id,
4489                                                                 Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
4490                                                                         'Y', AD.Original_Item_Id,
4491                                                                         p_family_id)), p_org_id,
4492                                              p_instance_id, trunc(AD.Demand_Date),
4493                                              p_level_id, AD.DEMAND_CLASS),
4494                                              AD.DEMAND_CLASS)),
4495                                     -23453, DECODE(AD.DEMAND_CLASS, null, null,
4496                                        DECODE(p_demand_class, '-1',
4497                                           MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(
4498                                              null, null, Decode(sign(trunc(AD.Demand_Date) - p_atf_date),
4499                                                                 1, p_family_id,
4500                                                                 Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
4501                                                                         'Y', AD.Original_Item_Id,
4502                                                                         p_family_id)), p_org_id,
4503                                              p_instance_id, trunc(AD.Demand_Date),
4504                                              p_level_id, AD.DEMAND_CLASS),
4505                                              AD.DEMAND_CLASS)),
4506                                     AD.ORGANIZATION_ID, DECODE(AD.DEMAND_CLASS, null, null,
4507                                        DECODE(p_demand_class, '-1',
4508                                           MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(
4509                                              null, null, Decode(sign(trunc(AD.Demand_Date) - p_atf_date),
4510                                                                 1, p_family_id,
4511                                                                 Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
4512                                                                         'Y', AD.Original_Item_Id,
4513                                                                         p_family_id)), p_org_id,
4514                                              p_instance_id, trunc(AD.Demand_Date),
4515                                              p_level_id, AD.DEMAND_CLASS),
4516                                              AD.DEMAND_CLASS)), TO_CHAR(NULL)),
4517                                  30, decode(AD.SOURCE_ORGANIZATION_ID,
4518                                     NULL, 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                                     -23453, 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)),
4540                                     AD.ORGANIZATION_ID, DECODE(AD.DEMAND_CLASS, null, null,
4541                                        DECODE(p_demand_class, '-1',
4542                                           MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(
4543                                              null, null, Decode(sign(trunc(AD.Demand_Date) - p_atf_date),
4544                                                                 1, p_family_id,
4545                                                                 Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
4546                                                                         'Y', AD.Original_Item_Id,
4547                                                                         p_family_id)), p_org_id,
4548                                              p_instance_id, trunc(AD.Demand_Date),
4549                                              p_level_id, AD.DEMAND_CLASS),
4550                                              AD.DEMAND_CLASS)), TO_CHAR(NULL)),
4551                                  DECODE(AD.DEMAND_CLASS, null, null,
4552                                     DECODE(p_demand_class, '-1',
4553                                        MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(
4554                                           null, null, Decode(sign(trunc(AD.Demand_Date) - p_atf_date),
4555                                                                 1, p_family_id,
4556                                                                 Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
4557                                                                         'Y', AD.Original_Item_Id,
4558                                                                         p_family_id)), p_org_id,
4559                                           p_instance_id, trunc(AD.Demand_Date),
4560                                           p_level_id, AD.DEMAND_CLASS),
4561                                           AD.DEMAND_CLASS))),
4562                               2, DECODE(AD.CUSTOMER_ID, NULL, TO_CHAR(NULL),
4563                                                    0, TO_CHAR(NULL),
4564                                  decode(AD.Original_Origination_Type,
4565                                     6, decode(AD.SOURCE_ORGANIZATION_ID,
4566                                        NULL, MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(
4567                                              AD.CUSTOMER_ID, AD.SHIP_TO_SITE_ID, Decode(sign(trunc(AD.Demand_Date) - p_atf_date),
4568                                                                                         1, p_family_id,
4569                                                                                         Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
4570                                                                                                 'Y', AD.Original_Item_Id,
4571                                                                                                 p_family_id)),
4572                                              p_org_id, p_instance_id, trunc(AD.Demand_Date),
4573                                              p_level_id, NULL),
4574                                        -23453, MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(
4575                                              AD.CUSTOMER_ID, AD.SHIP_TO_SITE_ID, Decode(sign(trunc(AD.Demand_Date) - p_atf_date),
4576                                                                                         1, p_family_id,
4577                                                                                         Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
4578                                                                                                 'Y', AD.Original_Item_Id,
4579                                                                                                 p_family_id)),
4580                                              p_org_id, p_instance_id, trunc(AD.Demand_Date),
4581                                              p_level_id, NULL),
4582                                        AD.ORGANIZATION_ID, MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(
4583                                              AD.CUSTOMER_ID, AD.SHIP_TO_SITE_ID, Decode(sign(trunc(AD.Demand_Date) - p_atf_date),
4584                                                                                         1, p_family_id,
4585                                                                                         Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
4586                                                                                                 'Y', AD.Original_Item_Id,
4587                                                                                                 p_family_id)),
4588                                              p_org_id, p_instance_id, trunc(AD.Demand_Date),
4589                                              p_level_id, NULL),
4590                                        TO_CHAR(NULL)),
4591                                     30, decode(AD.SOURCE_ORGANIZATION_ID,
4592                                        NULL, MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(
4593                                              AD.CUSTOMER_ID, AD.SHIP_TO_SITE_ID, Decode(sign(trunc(AD.Demand_Date) - p_atf_date),
4594                                                                                         1, p_family_id,
4595                                                                                         Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
4596                                                                                                 'Y', AD.Original_Item_Id,
4597                                                                                                 p_family_id)),
4598                                              p_org_id, p_instance_id, trunc(AD.Demand_Date),
4599                                              p_level_id, NULL),
4600                                        -23453, MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(
4601                                              AD.CUSTOMER_ID, AD.SHIP_TO_SITE_ID, Decode(sign(trunc(AD.Demand_Date) - p_atf_date),
4602                                                                                         1, p_family_id,
4603                                                                                         Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
4604                                                                                                 'Y', AD.Original_Item_Id,
4605                                                                                                 p_family_id)),
4606                                              p_org_id, p_instance_id, trunc(AD.Demand_Date),
4607                                              p_level_id, NULL),
4608                                        AD.ORGANIZATION_ID, MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(
4609                                              AD.CUSTOMER_ID, AD.SHIP_TO_SITE_ID, Decode(sign(trunc(AD.Demand_Date) - p_atf_date),
4610                                                                                         1, p_family_id,
4611                                                                                         Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
4612                                                                                                 'Y', AD.Original_Item_Id,
4613                                                                                                 p_family_id)),
4614                                              p_org_id, p_instance_id, trunc(AD.Demand_Date),
4615                                              p_level_id, NULL),
4616                                        TO_CHAR(NULL)),
4617                                     MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(
4618                                        AD.CUSTOMER_ID, AD.SHIP_TO_SITE_ID,
4619                                        Decode(sign(trunc(AD.Demand_Date) - p_atf_date),
4620                                                 1, p_family_id,
4621                                                 Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
4622                                                         'Y', AD.Original_Item_Id,
4623                                                         p_family_id)), p_org_id, p_instance_id,
4624                                        trunc(AD.Demand_Date),p_level_id, NULL)))),
4625                            p_demand_class, 1,
4626                              Decode(AD.Demand_Class, NULL, --4365873 If l_demand_class is not null and demand class is populated
4627                              -- on  supplies record then 0 should be allocated.
4628                               MSC_AATP_FUNC.Get_Item_Demand_Alloc_Percent(p_plan_id,
4629                                  AD.PARENT_DEMAND_ID,
4630                                  trunc(AD.Demand_Date),
4631                                  AD.USING_ASSEMBLY_ITEM_ID,
4632                                  DECODE(AD.SOURCE_ORGANIZATION_ID,
4633                                     -23453, null,
4634                                     AD.SOURCE_ORGANIZATION_ID),
4635                                  Decode(sign(trunc(AD.Demand_Date) - p_atf_date),
4636                                         1, p_family_id,
4637                                         Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
4638                                                 'Y', AD.Original_Item_Id,
4639                                                 p_family_id)),
4640                                  p_org_id,
4641                                  p_instance_id,
4642                                  AD.Original_Origination_Type,
4643                                  DECODE(MSC_AATP_PVT.G_HIERARCHY_PROFILE,
4644                                     1, decode(AD.Original_Origination_Type,
4645                                        6, decode(AD.SOURCE_ORGANIZATION_ID,
4646                                           NULL, DECODE(AD.DEMAND_CLASS, null, null,
4647                                              DECODE(p_demand_class, '-1',
4648                                                 MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(
4649                                                    null, null, Decode(sign(trunc(AD.Demand_Date) - p_atf_date),
4650                                                                         1, p_family_id,
4651                                                                         Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
4652                                                                                 'Y', AD.Original_Item_Id,
4653                                                                                 p_family_id)), p_org_id,
4654                                                    p_instance_id, trunc(AD.Demand_Date),
4655                                                    p_level_id, AD.DEMAND_CLASS),
4656                                                 AD.DEMAND_CLASS)),
4657                                           -23453, DECODE(AD.DEMAND_CLASS, null, null,
4658                                              DECODE(p_demand_class, '-1',
4659                                                 MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(
4660                                                    null, null, Decode(sign(trunc(AD.Demand_Date) - p_atf_date),
4661                                                                         1, p_family_id,
4662                                                                         Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
4663                                                                                 'Y', AD.Original_Item_Id,
4664                                                                                 p_family_id)), p_org_id,
4665                                                    p_instance_id, trunc(AD.Demand_Date),
4666                                                    p_level_id, AD.DEMAND_CLASS),
4667                                                 AD.DEMAND_CLASS)),
4668                                           AD.ORGANIZATION_ID, DECODE(AD.DEMAND_CLASS, null, null,
4669                                              DECODE(p_demand_class, '-1',
4670                                                 MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(
4671                                                    null, null, Decode(sign(trunc(AD.Demand_Date) - p_atf_date),
4672                                                                         1, p_family_id,
4673                                                                         Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
4674                                                                                 'Y', AD.Original_Item_Id,
4675                                                                                 p_family_id)), p_org_id,
4676                                                    p_instance_id, trunc(AD.Demand_Date),
4677                                                    p_level_id, AD.DEMAND_CLASS),
4678                                                 AD.DEMAND_CLASS)),
4679                                           p_demand_class),
4680                                     30, decode(AD.SOURCE_ORGANIZATION_ID,
4681                                        NULL, DECODE(AD.DEMAND_CLASS, null, null,
4682                                           DECODE(p_demand_class, '-1',
4683                                              MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(
4684                                                 null, null, Decode(sign(trunc(AD.Demand_Date) - p_atf_date),
4685                                                                         1, p_family_id,
4686                                                                         Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
4687                                                                                 'Y', AD.Original_Item_Id,
4688                                                                                 p_family_id)), p_org_id,
4689                                                 p_instance_id, trunc(AD.Demand_Date),
4690                                                    p_level_id, AD.DEMAND_CLASS),
4691                                              AD.DEMAND_CLASS)),
4692                                        -23453, DECODE(AD.DEMAND_CLASS, null, null,
4693                                           DECODE(p_demand_class, '-1',
4694                                              MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(
4695                                                 null, null, Decode(sign(trunc(AD.Demand_Date) - p_atf_date),
4696                                                                         1, p_family_id,
4697                                                                         Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
4698                                                                                 'Y', AD.Original_Item_Id,
4699                                                                                 p_family_id)), p_org_id,
4700                                                 p_instance_id, trunc(AD.Demand_Date),
4701                                                    p_level_id, AD.DEMAND_CLASS),
4702                                              AD.DEMAND_CLASS)),
4703                                        AD.ORGANIZATION_ID, DECODE(AD.DEMAND_CLASS, null, null,
4704                                           DECODE(p_demand_class, '-1',
4705                                              MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(
4706                                                 null, null, Decode(sign(trunc(AD.Demand_Date) - p_atf_date),
4707                                                                         1, p_family_id,
4708                                                                         Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
4709                                                                                 'Y', AD.Original_Item_Id,
4710                                                                                 p_family_id)), p_org_id,
4711                                                 p_instance_id, trunc(AD.Demand_Date),
4712                                                    p_level_id, AD.DEMAND_CLASS),
4713                                              AD.DEMAND_CLASS)),
4714                                        p_demand_class),
4715                                     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                                     2, DECODE(AD.CUSTOMER_ID, NULL, p_demand_class,
4727                                                    0, p_demand_class,
4728                                        decode(AD.Original_Origination_Type,
4729                                           6, decode(AD.SOURCE_ORGANIZATION_ID,
4730                                              NULL, MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(
4731                                                    AD.CUSTOMER_ID, AD.SHIP_TO_SITE_ID, Decode(sign(trunc(AD.Demand_Date) - p_atf_date),
4732                                                                                                 1, p_family_id,
4733                                                                                                 Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
4734                                                                                                         'Y', AD.Original_Item_Id,
4735                                                                                                         p_family_id)),
4736                                                    p_org_id, p_instance_id, trunc(AD.Demand_Date),
4737                                                    p_level_id, NULL),
4738                                              -23453, MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(
4739                                                    AD.CUSTOMER_ID, AD.SHIP_TO_SITE_ID, Decode(sign(trunc(AD.Demand_Date) - p_atf_date),
4740                                                                                                 1, p_family_id,
4741                                                                                                 Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
4742                                                                                                         'Y', AD.Original_Item_Id,
4743                                                                                                         p_family_id)),
4744                                                    p_org_id, p_instance_id, trunc(AD.Demand_Date),
4745                                                    p_level_id, NULL),
4746                                              AD.ORGANIZATION_ID, MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(
4747                                                    AD.CUSTOMER_ID, AD.SHIP_TO_SITE_ID, Decode(sign(trunc(AD.Demand_Date) - p_atf_date),
4748                                                                                                 1, p_family_id,
4749                                                                                                 Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
4750                                                                                                         'Y', AD.Original_Item_Id,
4751                                                                                                         p_family_id)),
4752                                                    p_org_id, p_instance_id, trunc(AD.Demand_Date),
4753                                                    p_level_id, NULL),
4754                                              p_demand_class),
4755                                           30, decode(AD.SOURCE_ORGANIZATION_ID,
4756                                              NULL, MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(
4757                                                    AD.CUSTOMER_ID, AD.SHIP_TO_SITE_ID, Decode(sign(trunc(AD.Demand_Date) - p_atf_date),
4758                                                                                                 1, p_family_id,
4759                                                                                                 Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
4760                                                                                                         'Y', AD.Original_Item_Id,
4761                                                                                                         p_family_id)),
4762                                                    p_org_id, p_instance_id, trunc(AD.Demand_Date),
4763                                                    p_level_id, NULL),
4764                                              -23453, MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(
4765                                                    AD.CUSTOMER_ID, AD.SHIP_TO_SITE_ID, Decode(sign(trunc(AD.Demand_Date) - p_atf_date),
4766                                                                                                 1, p_family_id,
4767                                                                                                 Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
4768                                                                                                         'Y', AD.Original_Item_Id,
4769                                                                                                         p_family_id)),
4770                                                    p_org_id, p_instance_id, trunc(AD.Demand_Date),
4771                                                    p_level_id, NULL),
4772                                              AD.ORGANIZATION_ID, MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(
4773                                                    AD.CUSTOMER_ID, AD.SHIP_TO_SITE_ID, Decode(sign(trunc(AD.Demand_Date) - p_atf_date),
4774                                                                                                 1, p_family_id,
4775                                                                                                 Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
4776                                                                                                         'Y', AD.Original_Item_Id,
4777                                                                                                         p_family_id)),
4778                                                    p_org_id, p_instance_id, trunc(AD.Demand_Date),
4779                                                    p_level_id, NULL),
4780                                              p_demand_class),
4781                                           MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(
4782                                              AD.CUSTOMER_ID, AD.SHIP_TO_SITE_ID,
4783                                              Decode(sign(trunc(AD.Demand_Date) - p_atf_date),
4784                                                         1, p_family_id,
4785                                                         Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
4786                                                                 'Y', AD.Original_Item_Id,
4787                                                                 p_family_id)), p_org_id, p_instance_id,
4788                                              trunc(AD.Demand_Date),p_level_id, NULL)))),
4789                                        p_demand_class,
4790                                        p_level_id),0)) col24, --4365873
4791                         --TRUNC(AD.DEMAND_DATE) col25,
4792                         GREATEST(TRUNC(AD.DEMAND_DATE),p_sys_next_date) col25, --3099066
4793                         l_null_num col26,
4794                         AD.ORDER_NUMBER col27,
4795                         l_null_num col28,
4796                         l_null_num col29,
4797                 	Decode(AD.inventory_item_id, p_family_id,
4798                 	        Decode(AD.original_item_id, p_member_id,
4799                 	                AD.Pf_Display_Flag,
4800                 	                Decode(sign(trunc(AD.Original_Demand_Date) - p_atf_date),
4801                 	                        1, AD.Pf_Display_Flag,
4802                 	                        1)),
4803                 	        AD.Pf_Display_Flag),
4804                 	-1* NVL(AD.Demand_Quantity, AD.ALLOCATED_QUANTITY),
4805                         -1* NVL(AD.Demand_Quantity, AD.ALLOCATED_QUANTITY) *
4806                             DECODE(DECODE(MSC_AATP_PVT.G_HIERARCHY_PROFILE,
4807                               1, decode(AD.Original_Origination_Type,
4808                                  6, decode(AD.SOURCE_ORGANIZATION_ID,
4809                                     NULL, DECODE(AD.DEMAND_CLASS, null, null,
4810                                        DECODE(p_demand_class, '-1',
4811                                           MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(
4812                                              null, null, Decode(sign(trunc(AD.Demand_Date) - p_atf_date),
4813                                                                 1, p_family_id,
4814                                                                 Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
4815                                                                         'Y', AD.Original_Item_Id,
4816                                                                         p_family_id)), p_org_id,
4817                                              p_instance_id, trunc(AD.Demand_Date),
4818                                              p_level_id, AD.DEMAND_CLASS),
4819                                              AD.DEMAND_CLASS)),
4820                                     -23453, DECODE(AD.DEMAND_CLASS, null, null,
4821                                        DECODE(p_demand_class, '-1',
4822                                           MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(
4823                                              null, null, Decode(sign(trunc(AD.Demand_Date) - p_atf_date),
4824                                                                 1, p_family_id,
4825                                                                 Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
4826                                                                         'Y', AD.Original_Item_Id,
4827                                                                         p_family_id)), p_org_id,
4828                                              p_instance_id, trunc(AD.Demand_Date),
4829                                              p_level_id, AD.DEMAND_CLASS),
4830                                              AD.DEMAND_CLASS)),
4831                                     AD.ORGANIZATION_ID, DECODE(AD.DEMAND_CLASS, null, null,
4832                                        DECODE(p_demand_class, '-1',
4833                                           MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(
4834                                              null, null, Decode(sign(trunc(AD.Demand_Date) - p_atf_date),
4835                                                                 1, p_family_id,
4836                                                                 Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
4837                                                                         'Y', AD.Original_Item_Id,
4838                                                                         p_family_id)), p_org_id,
4839                                              p_instance_id, trunc(AD.Demand_Date),
4840                                              p_level_id, AD.DEMAND_CLASS),
4841                                              AD.DEMAND_CLASS)), TO_CHAR(NULL)),
4842                                  30, decode(AD.SOURCE_ORGANIZATION_ID,
4843                                     NULL, 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                                     -23453, 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)),
4865                                     AD.ORGANIZATION_ID, DECODE(AD.DEMAND_CLASS, null, null,
4866                                        DECODE(p_demand_class, '-1',
4867                                           MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(
4868                                              null, null, Decode(sign(trunc(AD.Demand_Date) - p_atf_date),
4869                                                                 1, p_family_id,
4870                                                                 Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
4871                                                                         'Y', AD.Original_Item_Id,
4872                                                                         p_family_id)), p_org_id,
4873                                              p_instance_id, trunc(AD.Demand_Date),
4874                                              p_level_id, AD.DEMAND_CLASS),
4875                                              AD.DEMAND_CLASS)), TO_CHAR(NULL)),
4876                                  DECODE(AD.DEMAND_CLASS, null, null,
4877                                     DECODE(p_demand_class, '-1',
4878                                        MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(
4879                                           null, null, Decode(sign(trunc(AD.Demand_Date) - p_atf_date),
4880                                                                 1, p_family_id,
4881                                                                 Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
4882                                                                         'Y', AD.Original_Item_Id,
4883                                                                         p_family_id)), p_org_id,
4884                                           p_instance_id, trunc(AD.Demand_Date),
4885                                           p_level_id, AD.DEMAND_CLASS),
4886                                           AD.DEMAND_CLASS))),
4887                               2, DECODE(AD.CUSTOMER_ID, NULL, TO_CHAR(NULL),
4888                                                    0, TO_CHAR(NULL),
4889                                  decode(AD.Original_Origination_Type,
4890                                     6, decode(AD.SOURCE_ORGANIZATION_ID,
4891                                        NULL, MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(
4892                                              AD.CUSTOMER_ID, AD.SHIP_TO_SITE_ID, Decode(sign(trunc(AD.Demand_Date) - p_atf_date),
4893                                                                                         1, p_family_id,
4894                                                                                         Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
4895                                                                                                 'Y', AD.Original_Item_Id,
4896                                                                                                 p_family_id)),
4897                                              p_org_id, p_instance_id, trunc(AD.Demand_Date),
4898                                              p_level_id, NULL),
4899                                        -23453, MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(
4900                                              AD.CUSTOMER_ID, AD.SHIP_TO_SITE_ID, Decode(sign(trunc(AD.Demand_Date) - p_atf_date),
4901                                                                                         1, p_family_id,
4902                                                                                         Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
4903                                                                                                 'Y', AD.Original_Item_Id,
4904                                                                                                 p_family_id)),
4905                                              p_org_id, p_instance_id, trunc(AD.Demand_Date),
4906                                              p_level_id, NULL),
4907                                        AD.ORGANIZATION_ID, MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(
4908                                              AD.CUSTOMER_ID, AD.SHIP_TO_SITE_ID, Decode(sign(trunc(AD.Demand_Date) - p_atf_date),
4909                                                                                         1, p_family_id,
4910                                                                                         Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
4911                                                                                                 'Y', AD.Original_Item_Id,
4912                                                                                                 p_family_id)),
4913                                              p_org_id, p_instance_id, trunc(AD.Demand_Date),
4914                                              p_level_id, NULL),
4915                                        TO_CHAR(NULL)),
4916                                     30, decode(AD.SOURCE_ORGANIZATION_ID,
4917                                        NULL, MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(
4918                                              AD.CUSTOMER_ID, AD.SHIP_TO_SITE_ID, Decode(sign(trunc(AD.Demand_Date) - p_atf_date),
4919                                                                                         1, p_family_id,
4920                                                                                         Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
4921                                                                                                 'Y', AD.Original_Item_Id,
4922                                                                                                 p_family_id)),
4923                                              p_org_id, p_instance_id, trunc(AD.Demand_Date),
4924                                              p_level_id, NULL),
4925                                        -23453, MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(
4926                                              AD.CUSTOMER_ID, AD.SHIP_TO_SITE_ID, Decode(sign(trunc(AD.Demand_Date) - p_atf_date),
4927                                                                                         1, p_family_id,
4928                                                                                         Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
4929                                                                                                 'Y', AD.Original_Item_Id,
4930                                                                                                 p_family_id)),
4931                                              p_org_id, p_instance_id, trunc(AD.Demand_Date),
4932                                              p_level_id, NULL),
4933                                        AD.ORGANIZATION_ID, MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(
4934                                              AD.CUSTOMER_ID, AD.SHIP_TO_SITE_ID, Decode(sign(trunc(AD.Demand_Date) - p_atf_date),
4935                                                                                         1, p_family_id,
4936                                                                                         Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
4937                                                                                                 'Y', AD.Original_Item_Id,
4938                                                                                                 p_family_id)),
4939                                              p_org_id, p_instance_id, trunc(AD.Demand_Date),
4940                                              p_level_id, NULL),
4941                                        TO_CHAR(NULL)),
4942                                     MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(
4943                                        AD.CUSTOMER_ID, AD.SHIP_TO_SITE_ID,
4944                                        Decode(sign(trunc(AD.Demand_Date) - p_atf_date),
4945                                                 1, p_family_id,
4946                                                 Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
4947                                                         'Y', AD.Original_Item_Id,
4948                                                         p_family_id)), p_org_id, p_instance_id,
4949                                        trunc(AD.Demand_Date),p_level_id, NULL)))),
4950                            p_demand_class, 1,
4951                               MSC_AATP_FUNC.Get_Item_Demand_Alloc_Percent(p_plan_id,
4952                                  AD.PARENT_DEMAND_ID,
4953                                  trunc(AD.Demand_Date),
4954                                  AD.USING_ASSEMBLY_ITEM_ID,
4955                                  DECODE(AD.SOURCE_ORGANIZATION_ID,
4956                                     -23453, null,
4957                                     AD.SOURCE_ORGANIZATION_ID),
4958                                  Decode(sign(trunc(AD.Demand_Date) - p_atf_date),
4959                                         1, p_family_id,
4960                                         Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
4961                                                 'Y', AD.Original_Item_Id,
4962                                                 p_family_id)),
4963                                  p_org_id,
4964                                  p_instance_id,
4965                                  AD.Original_Origination_Type,
4966                                  DECODE(MSC_AATP_PVT.G_HIERARCHY_PROFILE,
4967                                     1, decode(AD.Original_Origination_Type,
4968                                        6, decode(AD.SOURCE_ORGANIZATION_ID,
4969                                           NULL, DECODE(AD.DEMAND_CLASS, null, null,
4970                                              DECODE(p_demand_class, '-1',
4971                                                 MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(
4972                                                    null, null, Decode(sign(trunc(AD.Demand_Date) - p_atf_date),
4973                                                                         1, p_family_id,
4974                                                                         Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
4975                                                                                 'Y', AD.Original_Item_Id,
4976                                                                                 p_family_id)), p_org_id,
4977                                                    p_instance_id, trunc(AD.Demand_Date),
4978                                                    p_level_id, AD.DEMAND_CLASS),
4979                                                 AD.DEMAND_CLASS)),
4980                                           -23453, DECODE(AD.DEMAND_CLASS, null, null,
4981                                              DECODE(p_demand_class, '-1',
4982                                                 MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(
4983                                                    null, null, Decode(sign(trunc(AD.Demand_Date) - p_atf_date),
4984                                                                         1, p_family_id,
4985                                                                         Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
4986                                                                                 'Y', AD.Original_Item_Id,
4987                                                                                 p_family_id)), p_org_id,
4988                                                    p_instance_id, trunc(AD.Demand_Date),
4989                                                    p_level_id, AD.DEMAND_CLASS),
4990                                                 AD.DEMAND_CLASS)),
4991                                           AD.ORGANIZATION_ID, DECODE(AD.DEMAND_CLASS, null, null,
4992                                              DECODE(p_demand_class, '-1',
4993                                                 MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(
4994                                                    null, null, Decode(sign(trunc(AD.Demand_Date) - p_atf_date),
4995                                                                         1, p_family_id,
4996                                                                         Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
4997                                                                                 'Y', AD.Original_Item_Id,
4998                                                                                 p_family_id)), p_org_id,
4999                                                    p_instance_id, trunc(AD.Demand_Date),
5000                                                    p_level_id, AD.DEMAND_CLASS),
5001                                                 AD.DEMAND_CLASS)),
5002                                           p_demand_class),
5003                                     30, decode(AD.SOURCE_ORGANIZATION_ID,
5004                                        NULL, DECODE(AD.DEMAND_CLASS, null, null,
5005                                           DECODE(p_demand_class, '-1',
5006                                              MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(
5007                                                 null, null, Decode(sign(trunc(AD.Demand_Date) - p_atf_date),
5008                                                                         1, p_family_id,
5009                                                                         Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
5010                                                                                 'Y', AD.Original_Item_Id,
5011                                                                                 p_family_id)), p_org_id,
5012                                                 p_instance_id, trunc(AD.Demand_Date),
5013                                                    p_level_id, AD.DEMAND_CLASS),
5014                                              AD.DEMAND_CLASS)),
5015                                        -23453, DECODE(AD.DEMAND_CLASS, null, null,
5016                                           DECODE(p_demand_class, '-1',
5017                                              MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(
5018                                                 null, null, Decode(sign(trunc(AD.Demand_Date) - p_atf_date),
5019                                                                         1, p_family_id,
5020                                                                         Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
5021                                                                                 'Y', AD.Original_Item_Id,
5022                                                                                 p_family_id)), p_org_id,
5023                                                 p_instance_id, trunc(AD.Demand_Date),
5024                                                    p_level_id, AD.DEMAND_CLASS),
5025                                              AD.DEMAND_CLASS)),
5026                                        AD.ORGANIZATION_ID, DECODE(AD.DEMAND_CLASS, null, null,
5027                                           DECODE(p_demand_class, '-1',
5028                                              MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(
5029                                                 null, null, Decode(sign(trunc(AD.Demand_Date) - p_atf_date),
5030                                                                         1, p_family_id,
5031                                                                         Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
5032                                                                                 'Y', AD.Original_Item_Id,
5033                                                                                 p_family_id)), p_org_id,
5034                                                 p_instance_id, trunc(AD.Demand_Date),
5035                                                    p_level_id, AD.DEMAND_CLASS),
5036                                              AD.DEMAND_CLASS)),
5037                                        p_demand_class),
5038                                     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                                     2, DECODE(AD.CUSTOMER_ID, NULL, p_demand_class,
5050                                                    0, p_demand_class,
5051                                        decode(AD.Original_Origination_Type,
5052                                           6, decode(AD.SOURCE_ORGANIZATION_ID,
5053                                              NULL, MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(
5054                                                    AD.CUSTOMER_ID, AD.SHIP_TO_SITE_ID, Decode(sign(trunc(AD.Demand_Date) - p_atf_date),
5055                                                                                                 1, p_family_id,
5056                                                                                                 Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
5057                                                                                                         'Y', AD.Original_Item_Id,
5058                                                                                                         p_family_id)),
5059                                                    p_org_id, p_instance_id, trunc(AD.Demand_Date),
5060                                                    p_level_id, NULL),
5061                                              -23453, MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(
5062                                                    AD.CUSTOMER_ID, AD.SHIP_TO_SITE_ID, Decode(sign(trunc(AD.Demand_Date) - p_atf_date),
5063                                                                                                 1, p_family_id,
5064                                                                                                 Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
5065                                                                                                         'Y', AD.Original_Item_Id,
5066                                                                                                         p_family_id)),
5067                                                    p_org_id, p_instance_id, trunc(AD.Demand_Date),
5068                                                    p_level_id, NULL),
5069                                              AD.ORGANIZATION_ID, MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(
5070                                                    AD.CUSTOMER_ID, AD.SHIP_TO_SITE_ID, Decode(sign(trunc(AD.Demand_Date) - p_atf_date),
5071                                                                                                 1, p_family_id,
5072                                                                                                 Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
5073                                                                                                         'Y', AD.Original_Item_Id,
5074                                                                                                         p_family_id)),
5075                                                    p_org_id, p_instance_id, trunc(AD.Demand_Date),
5076                                                    p_level_id, NULL),
5077                                              p_demand_class),
5078                                           30, decode(AD.SOURCE_ORGANIZATION_ID,
5079                                              NULL, MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(
5080                                                    AD.CUSTOMER_ID, AD.SHIP_TO_SITE_ID, Decode(sign(trunc(AD.Demand_Date) - p_atf_date),
5081                                                                                                 1, p_family_id,
5082                                                                                                 Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
5083                                                                                                         'Y', AD.Original_Item_Id,
5084                                                                                                         p_family_id)),
5085                                                    p_org_id, p_instance_id, trunc(AD.Demand_Date),
5086                                                    p_level_id, NULL),
5087                                              -23453, MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(
5088                                                    AD.CUSTOMER_ID, AD.SHIP_TO_SITE_ID, Decode(sign(trunc(AD.Demand_Date) - p_atf_date),
5089                                                                                                 1, p_family_id,
5090                                                                                                 Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
5091                                                                                                         'Y', AD.Original_Item_Id,
5092                                                                                                         p_family_id)),
5093                                                    p_org_id, p_instance_id, trunc(AD.Demand_Date),
5094                                                    p_level_id, NULL),
5095                                              AD.ORGANIZATION_ID, MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(
5096                                                    AD.CUSTOMER_ID, AD.SHIP_TO_SITE_ID, Decode(sign(trunc(AD.Demand_Date) - p_atf_date),
5097                                                                                                 1, p_family_id,
5098                                                                                                 Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
5099                                                                                                         'Y', AD.Original_Item_Id,
5100                                                                                                         p_family_id)),
5101                                                    p_org_id, p_instance_id, trunc(AD.Demand_Date),
5102                                                    p_level_id, NULL),
5103                                              p_demand_class),
5104                                           MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(
5105                                              AD.CUSTOMER_ID, AD.SHIP_TO_SITE_ID,
5106                                              Decode(sign(trunc(AD.Demand_Date) - p_atf_date),
5107                                                         1, p_family_id,
5108                                                         Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
5109                                                                 'Y', AD.Original_Item_Id,
5110                                                                 p_family_id)), p_org_id, p_instance_id,
5111                                              trunc(AD.Demand_Date),p_level_id, NULL)))),
5112                                        p_demand_class,
5113                                        p_level_id)),
5114                 	trunc(AD.Original_Demand_Date),
5115                 	AD.Original_Item_Id,
5116                 	AD.Original_Origination_Type,
5117                         l_sysdate,
5118                         G_USER_ID,
5119                         l_sysdate,
5120                         G_USER_ID,
5121                         G_USER_ID,
5122                         -1* AD.ALLOCATED_QUANTITY, -- bug 3282426
5123                         MTPS.LOCATION,   --bug3263368
5124                         MTP.PARTNER_NAME, --bug3263368
5125                         AD.DEMAND_CLASS, --bug3263368
5126                         AD.REQUEST_DATE, --bug3263368
5127                         I.Item_Name -- bug3579625
5128             FROM        MSC_ALLOC_DEMANDS AD,
5129                         MSC_TRADING_PARTNERS    MTP,--bug3263368
5130                         MSC_TRADING_PARTNER_SITES    MTPS, --bug3263368
5131                         MSC_SYSTEM_ITEMS I --bug3579625
5132             WHERE       AD.PLAN_ID = p_plan_id
5133             AND         AD.SR_INSTANCE_ID = p_instance_id
5134             AND         AD.INVENTORY_ITEM_ID in (p_member_id,p_family_id)
5135             AND         AD.ORGANIZATION_ID = p_org_id
5136             AND         AD.ORIGINATION_TYPE <> 52
5137             AND         AD.ALLOCATED_QUANTITY <> 0
5138             --bug3700564 added trunc
5139             AND         TRUNC(AD.DEMAND_DATE) < NVL(p_itf, TRUNC(AD.DEMAND_DATE) + 1)
5140             AND         AD.SHIP_TO_SITE_ID = MTPS.PARTNER_SITE_ID(+) --bug3263368
5141             AND         AD.CUSTOMER_ID = MTP.PARTNER_ID(+)--bug3263368
5142             -- bug3579625 Addition join with MSC_SYSTEM_ITEMS (I)
5143             AND         AD.PLAN_ID = I.PLAN_ID
5144             AND         AD.SR_INSTANCE_ID = I.SR_INSTANCE_ID
5145             AND         AD.ORIGINAL_ITEM_ID = I.INVENTORY_ITEM_ID
5146             AND         AD.ORGANIZATION_ID = I.ORGANIZATION_ID
5147 
5148             UNION ALL
5149             SELECT      p_level col1,
5150                         p_identifier col2,
5151                         p_scenario_id col3,
5152                         p_sr_family_id col4 ,
5153                         p_sr_member_id col5,
5154                         p_org_id col6,
5155                         l_null_num col7,
5156                         l_null_num col8,
5157                         l_null_num col9,
5158                         l_null_num col10,
5159                         l_null_num col11,
5160                         l_null_num col12,
5161                         l_null_num col13,
5162                         l_null_num col14,
5163                         l_null_char col15,
5164                         p_uom_code col16,
5165                         2 col17,
5166                         CSA.ORDER_TYPE col18,
5167                         l_null_char col19,
5168                         CSA.SR_INSTANCE_ID col20,
5169                         l_null_num col21,
5170                         CSA.PARENT_TRANSACTION_ID col22,
5171                         l_null_num col23,
5172                         CSA.ALLOCATED_QUANTITY*
5173                               DECODE(DECODE(MSC_AATP_PVT.G_HIERARCHY_PROFILE,
5174                                      1, DECODE(CSA.DEMAND_CLASS, null, null,
5175                                         DECODE(p_demand_class, '-1',
5176                                            MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(
5177                                                          null,
5178                                                          null,
5179                                                          Decode(sign(trunc(CSA.Supply_Date) - p_atf_date),
5180                                                                 1, p_family_id,
5181                                                                 Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
5182                                                                         'Y', CSA.Original_Item_Id,
5183                                                                         p_family_id)),
5184                                                          p_org_id,
5185                                                          p_instance_id,
5186                                                          TRUNC(CSA.SUPPLY_DATE),
5187                                                          p_level_id,
5188                                                          CSA.DEMAND_CLASS),
5189                                            CSA.DEMAND_CLASS)),
5190                                      2, DECODE(CSA.CUSTOMER_ID, NULL, TO_CHAR(NULL),
5191                                                        0, TO_CHAR(NULL),
5192                                                        MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(
5193                                                          CSA.CUSTOMER_ID,
5194                                                          CSA.SHIP_TO_SITE_ID,
5195                                                          Decode(sign(trunc(CSA.Supply_Date) - p_atf_date),
5196                                                                 1, p_family_id,
5197                                                                 Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
5198                                                                         'Y', CSA.Original_Item_Id,
5199                                                                         p_family_id)),
5200                                                          p_org_id,
5201                                                          p_instance_id,
5202                                                          TRUNC(CSA.SUPPLY_DATE),
5203                                                          p_level_id,
5204                                                          NULL))),
5205                                  p_demand_class, 1,
5206                                  NULL,  nvl(MIHM.allocation_percent/100,1), --4365873
5207                                  /*NVL(MSC_AATP_FUNC.Get_DC_Alloc_Percent(
5208                                            p_instance_id,
5209                                            Decode(sign(trunc(CSA.Supply_Date) - p_atf_date),
5210                                                 1, p_family_id,
5211                                                 Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
5212                                                         'Y', CSA.Original_Item_Id,
5213                                                         p_family_id)),
5214                                            p_org_id,
5215                                            null,
5216                                            null,
5217                                            p_demand_class,
5218                                            TRUNC(CSA.SUPPLY_DATE)),
5219                                        1),*/
5220                                  DECODE(
5221                                  MIHM.allocation_percent/100, --4365873
5222                                  /*DECODE(MSC_AATP_FUNC.Get_DC_Alloc_Percent(
5223                                            p_instance_id,
5224                                            Decode(sign(trunc(CSA.Supply_Date) - p_atf_date),
5225                                                 1, p_family_id,
5226                                                 Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
5227                                                         'Y', CSA.Original_Item_Id,
5228                                                         p_family_id)),
5229                                            p_org_id,
5230                                            null,
5231                                            null,
5232                                            p_demand_class,
5233                                            TRUNC(CSA.SUPPLY_DATE)),*/
5234                                    NULL, 1,
5235                                  0)) col24,
5236                         --TRUNC(SA.SUPPLY_DATE) col25,
5237                         GREATEST(TRUNC(CSA.SUPPLY_DATE),p_sys_next_date) col25, --3099066
5238                         l_null_num col26,
5239                         CSA.ORDER_NUMBER col27,
5240                         l_null_num col28,
5241                         l_null_num col29,
5242         		l_null_num,
5243         		NVL(CSA.Supply_Quantity, CSA.ALLOCATED_QUANTITY),
5244         		l_null_num,
5245         		to_date(null),
5246         		CSA.Original_Item_Id,
5247         		CSA.Original_Order_Type,
5248                         l_sysdate,
5249                         G_USER_ID,
5250                         l_sysdate,
5251                         G_USER_ID,
5252                         G_USER_ID,
5253                         CSA.ALLOCATED_QUANTITY, -- bug 3282426
5254                         --null,
5255                         --null,
5256                         --null,
5257                         --null,
5258                         l_null_char, --bug3814584
5259                         l_null_char, --bug3814584
5260                         l_null_char, --bug3814584
5261                         l_null_date,  --bug3814584
5262                         CSA.Item_Name -- bug3579625
5263             FROM
5264                 (
5265                 select
5266                 	SA.SUPPLY_DATE,
5267 			SA.DEMAND_CLASS,
5268 			SA.Original_Item_Id,
5269 			SA.CUSTOMER_ID,
5270 			SA.SHIP_TO_SITE_ID,
5271 			SA.ORGANIZATION_ID,
5272 			SA.SR_INSTANCE_ID,
5273 			SA.INVENTORY_ITEM_ID,
5274 			SA.ORIGINAL_ORDER_TYPE,
5275 			SA.ORDER_NUMBER,
5276 			I.Item_Name,
5277 			SA.Supply_Quantity,
5278 			SA.ALLOCATED_QUANTITY,
5279 			SA.PARENT_TRANSACTION_ID,
5280 			SA.ORDER_TYPE
5281             FROM        MSC_ALLOC_SUPPLIES SA,
5282                         MSC_SYSTEM_ITEMS I
5283             WHERE       SA.PLAN_ID = p_plan_id
5284             AND         SA.SR_INSTANCE_ID = p_instance_id
5285             AND         SA.INVENTORY_ITEM_ID in (p_member_id, p_family_id)
5286             AND         SA.ORGANIZATION_ID = p_org_id
5287             AND         SA.ALLOCATED_QUANTITY <> 0
5288             AND         TRUNC(SA.SUPPLY_DATE) >= DECODE(SA.ORIGINAL_ORDER_TYPE,
5289                                                         27, TRUNC(SYSDATE),
5290                                                         28, TRUNC(SYSDATE),
5291                                                         TRUNC(SA.SUPPLY_DATE))
5292             --bug3700564 added trunc
5293             AND         TRUNC(SA.SUPPLY_DATE) < NVL(p_itf, TRUNC(SA.SUPPLY_DATE) + 1)
5294             -- bug3579625 Addition join with MSC_SYSTEM_ITEMS (I)
5295             AND         SA.PLAN_ID = I.PLAN_ID
5296             AND         SA.SR_INSTANCE_ID = I.SR_INSTANCE_ID
5297             AND         SA.ORIGINAL_ITEM_ID = I.INVENTORY_ITEM_ID
5298             AND         SA.ORGANIZATION_ID = I.ORGANIZATION_ID) CSA,
5299                    MSC_ITEM_HIERARCHY_MV MIHM
5300 	WHERE
5301 		--4365873
5302                CSA.INVENTORY_ITEM_ID = MIHM.INVENTORY_ITEM_ID(+)
5303         AND    CSA.SR_INSTANCE_ID = MIHM.SR_INSTANCE_ID (+)
5304         AND    CSA.ORGANIZATION_ID = MIHM.ORGANIZATION_ID (+)
5305         AND    decode(MIHM.level_id (+),-1,1,2) = decode(MSC_AATP_PVT.G_HIERARCHY_PROFILE,1,1,2)
5306         AND    TRUNC(CSA.SUPPLY_DATE) >= MIHM.effective_date (+)
5307         AND    TRUNC(CSA.SUPPLY_DATE) <= MIHM.disable_date (+)
5308         AND    MIHM.demand_class (+) = p_demand_class
5309            )
5310            ;
5311 EXCEPTION
5312         WHEN OTHERS THEN
5313                 IF PG_DEBUG in ('Y', 'C') THEN
5314                         msc_sch_wb.atp_debug('Item_Alloc_Avail_Pf_Dtls: ' || 'Error occurred: ' || to_char(sqlcode) || ':' || SQLERRM);
5315                 END IF;
5316                 x_return_status := FND_API.G_RET_STS_ERROR;
5317 
5318 END Item_Alloc_Avail_Pf_Dtls;
5319 
5320 /*--Item_Prealloc_Avail_Pf--------------------------------------------------------
5321 |  o  Called from Item_Pre_Allocated_Atp procedure for Demand Priority based
5322 |       Allocated Time Phased PF ATP.
5323 +-------------------------------------------------------------------------------*/
5324 PROCEDURE Item_Prealloc_Avail_Pf (
5325         p_member_id                     IN      NUMBER,
5326         p_family_id                     IN      NUMBER,
5327         p_org_id                        IN      NUMBER,
5328         p_instance_id                   IN      NUMBER,
5329         p_plan_id                       IN      NUMBER,
5330         p_demand_class                  IN      VARCHAR2,
5331         p_itf                           IN      DATE,
5332         x_atp_dates                     OUT     NOCOPY MRP_ATP_PUB.date_arr,
5333         x_atp_qtys                      OUT     NOCOPY MRP_ATP_PUB.number_arr,
5334         x_return_status                 OUT     NOCOPY VARCHAR2
5335 ) IS
5336 
5337 BEGIN
5338         IF PG_DEBUG in ('Y', 'C') THEN
5339                 msc_sch_wb.atp_debug('******* Begin Item_Prealloc_Avail_Pf **********');
5340                 msc_sch_wb.atp_debug('Item_Prealloc_Avail_Pf: p_member_id: ' || p_member_id);
5341                 msc_sch_wb.atp_debug('Item_Prealloc_Avail_Pf: p_family_id: ' || p_family_id);
5342                 msc_sch_wb.atp_debug('Item_Prealloc_Avail_Pf: p_instance_id: ' || p_instance_id);
5343                 msc_sch_wb.atp_debug('Item_Prealloc_Avail_Pf: p_plan_id: ' || p_plan_id);
5344                 msc_sch_wb.atp_debug('Item_Prealloc_Avail_Pf p_demand_class: ' || p_demand_class);
5345         END IF;
5346 
5347         -- Initializing API return code
5348         x_return_status := FND_API.G_RET_STS_SUCCESS;
5349 
5350         SELECT 	SD_DATE,
5351                 SUM(SD_QTY)
5352         BULK COLLECT INTO
5353                 x_atp_dates,
5354                 x_atp_qtys
5355         FROM (
5356                 SELECT  TRUNC(AD.DEMAND_DATE) SD_DATE,
5357                         -1 * AD.ALLOCATED_QUANTITY SD_QTY
5358                 FROM    MSC_ALLOC_DEMANDS AD
5359                 WHERE   AD.PLAN_ID = p_plan_id
5360                 AND     AD.SR_INSTANCE_ID = p_instance_id
5361                 AND     AD.INVENTORY_ITEM_ID in (p_member_id, p_family_id)
5362                 AND     AD.ORIGINATION_TYPE <> 52 -- ATP Bucketed Demand
5363                 AND     AD.ORGANIZATION_ID = p_org_id
5364                 AND     AD.DEMAND_CLASS = NVL(p_demand_class, AD.DEMAND_CLASS)
5365                 AND     AD.ALLOCATED_QUANTITY  <> 0 --4501434
5366                 AND     TRUNC(AD.DEMAND_DATE) < p_itf
5367                 UNION ALL
5368                 SELECT  TRUNC(SA.SUPPLY_DATE) SD_DATE,
5369                         SA.ALLOCATED_QUANTITY SD_QTY
5370                 FROM    MSC_ALLOC_SUPPLIES SA
5371                 WHERE   SA.PLAN_ID = p_plan_id
5372                 AND     SA.SR_INSTANCE_ID = p_instance_id
5373                 AND     SA.INVENTORY_ITEM_ID in (p_member_id, p_family_id)
5374                 AND     TRUNC(SA.SUPPLY_DATE) >= DECODE(SA.ORIGINAL_ORDER_TYPE,
5375                                                         27, TRUNC(SYSDATE),
5376                                                         28, TRUNC(SYSDATE),
5377                                                         TRUNC(SA.SUPPLY_DATE))
5378                 AND     SA.ORGANIZATION_ID = p_org_id
5379                 AND     SA.ALLOCATED_QUANTITY <> 0
5380                 AND     SA.DEMAND_CLASS = NVL(p_demand_class, SA.DEMAND_CLASS)
5381                 AND     TRUNC(SA.SUPPLY_DATE) < p_itf
5382         )
5383         GROUP BY SD_DATE
5384         order by SD_DATE; --4698199
5385 
5386 EXCEPTION
5387         WHEN OTHERS THEN
5388                 IF PG_DEBUG in ('Y', 'C') THEN
5389                         msc_sch_wb.atp_debug('Item_Prealloc_Avail_Pf: ' || 'Error occurred: ' || to_char(sqlcode) || ':' || SQLERRM);
5390                 END IF;
5391                 x_return_status := FND_API.G_RET_STS_ERROR;
5392 
5393 END Item_Prealloc_Avail_Pf;
5394 
5395 /*--Item_Prealloc_Avail_Pf_Summ---------------------------------------------------
5396 |  o  Called from Item_Pre_Allocated_Atp procedure for Demand Priority based
5397 |       Allocated Time Phased PF ATP.
5398 +-------------------------------------------------------------------------------*/
5399 PROCEDURE Item_Prealloc_Avail_Pf_Summ (
5400         p_member_id                     IN      NUMBER,
5401         p_family_id                     IN      NUMBER,
5402         p_org_id                        IN      NUMBER,
5403         p_instance_id                   IN      NUMBER,
5404         p_plan_id                       IN      NUMBER,
5405         p_demand_class                  IN      VARCHAR2,
5406         p_itf                           IN      DATE,
5407         p_refresh_number                IN      NUMBER,
5408         x_atp_dates                     OUT     NOCOPY MRP_ATP_PUB.date_arr,
5409         x_atp_qtys                      OUT     NOCOPY MRP_ATP_PUB.number_arr,
5410         x_return_status                 OUT     NOCOPY VARCHAR2
5411 ) IS
5412 
5413 BEGIN
5414         IF PG_DEBUG in ('Y', 'C') THEN
5415                 msc_sch_wb.atp_debug('******* Begin Item_Prealloc_Avail_Pf_Summ **********');
5416                 msc_sch_wb.atp_debug('Item_Prealloc_Avail_Pf_Summ: p_member_id: ' || p_member_id);
5417                 msc_sch_wb.atp_debug('Item_Prealloc_Avail_Pf_Summ: p_family_id: ' || p_family_id);
5418                 msc_sch_wb.atp_debug('Item_Prealloc_Avail_Pf_Summ: p_instance_id: ' || p_instance_id);
5419                 msc_sch_wb.atp_debug('Item_Prealloc_Avail_Pf_Summ: p_plan_id: ' || p_plan_id);
5420                 msc_sch_wb.atp_debug('Item_Prealloc_Avail_Pf_Summ p_demand_class: ' || p_demand_class);
5421         END IF;
5422 
5423         -- Initializing API return code
5424         x_return_status := FND_API.G_RET_STS_SUCCESS;
5425 
5426         -- SQL changed for summary enhancement
5427         SELECT  SD_DATE,
5428                 SUM(SD_QTY)
5429         BULK COLLECT INTO
5430                 x_atp_dates,
5431                 x_atp_qtys
5432         FROM
5433             (
5434                 SELECT  /*+ INDEX(S MSC_ATP_SUMMARY_SD_U1) */
5435                         SD_DATE, SD_QTY
5436                 FROM    MSC_ATP_SUMMARY_SD S
5437                 WHERE   S.PLAN_ID = p_plan_id
5438                 AND     S.SR_INSTANCE_ID = p_instance_id
5439                 AND     S.INVENTORY_ITEM_ID in (p_member_id, p_family_id)
5440                 AND     S.ORGANIZATION_ID = p_org_id
5441                 AND     S.DEMAND_CLASS = NVL(p_demand_class, S.DEMAND_CLASS)
5442                 AND     S.SD_DATE < p_itf
5443 
5444                 UNION ALL
5445 
5446                 SELECT  TRUNC(AD.DEMAND_DATE) SD_DATE,
5447                         decode(AD.ALLOCATED_QUANTITY,           -- Consider unscheduled orders as dummy supplies
5448                                0, OLD_ALLOCATED_QUANTITY,-- For summary enhancement
5449                                   -1 * AD.ALLOCATED_QUANTITY) SD_QTY
5450                 FROM    MSC_ALLOC_DEMANDS AD,
5451                         MSC_PLANS P                             -- For summary enhancement
5452                 WHERE   AD.PLAN_ID = p_plan_id
5453                 AND     AD.SR_INSTANCE_ID = p_instance_id
5454                 AND     AD.INVENTORY_ITEM_ID in (p_member_id, p_family_id)
5455                 AND     AD.ORGANIZATION_ID = p_org_id
5456                 AND     AD.DEMAND_CLASS = NVL(p_demand_class, AD.DEMAND_CLASS)
5457                 AND     TRUNC(AD.DEMAND_DATE) < p_itf
5458                 AND     P.PLAN_ID = AD.PLAN_ID
5459                 AND     (AD.REFRESH_NUMBER > P.LATEST_REFRESH_NUMBER
5460                         OR AD.REFRESH_NUMBER = p_refresh_number)
5461                 -- since repetitive schedule demand is not supported in this case
5462                 -- join to msc_calendar_dates is not needed.
5463 
5464                 UNION ALL
5465 
5466                 SELECT  TRUNC(SA.SUPPLY_DATE) SD_DATE,
5467                         decode(SA.ALLOCATED_QUANTITY,           -- Consider deleted stealing records as dummy demands
5468                                0, -1 * OLD_ALLOCATED_QUANTITY,   -- For summary enhancement
5469                                   SA.ALLOCATED_QUANTITY) SD_QTY
5470                 FROM    MSC_ALLOC_SUPPLIES SA,
5471                         MSC_PLANS P                                     -- For summary enhancement
5472                 WHERE   SA.PLAN_ID = p_plan_id
5473                 AND	    SA.SR_INSTANCE_ID = p_instance_id
5474                 AND	    SA.INVENTORY_ITEM_ID in (p_member_id, p_family_id)
5475                 AND     SA.ORGANIZATION_ID = p_org_id
5476                 AND     SA.DEMAND_CLASS = NVL(p_demand_class, SA.DEMAND_CLASS)
5477                 AND     TRUNC(SA.SUPPLY_DATE) < p_itf
5478                 AND     P.PLAN_ID = SA.PLAN_ID
5479                 AND     TRUNC(SA.SUPPLY_DATE) >= DECODE(SA.ORIGINAL_ORDER_TYPE,
5480                                                         27, TRUNC(SYSDATE),
5481                                                         28, TRUNC(SYSDATE),
5482                                                         TRUNC(SA.SUPPLY_DATE))
5483                 AND     (SA.REFRESH_NUMBER > P.LATEST_REFRESH_NUMBER
5484                         OR SA.REFRESH_NUMBER = p_refresh_number)
5485             )
5486         GROUP BY SD_DATE
5487         order by SD_DATE; --4698199
5488 
5489 EXCEPTION
5490         WHEN OTHERS THEN
5491                 IF PG_DEBUG in ('Y', 'C') THEN
5492                         msc_sch_wb.atp_debug('Item_Prealloc_Avail_Pf_Summ: ' || 'Error occurred: ' || to_char(sqlcode) || ':' || SQLERRM);
5493                 END IF;
5494                 x_return_status := FND_API.G_RET_STS_ERROR;
5495 
5496 END Item_Prealloc_Avail_Pf_Summ;
5497 
5498 /*--Item_Prealloc_Avail_Pf_Dtls---------------------------------------------------
5499 |  o  Called from Item_Pre_Allocated_Atp procedure for Demand Priority based
5500 |       Allocated Time Phased PF ATP.
5501 +-------------------------------------------------------------------------------*/
5502 PROCEDURE Item_Prealloc_Avail_Pf_Dtls (
5503         p_member_id                     IN      NUMBER,
5504         p_family_id                     IN      NUMBER,
5505         p_sr_member_id                  IN      NUMBER,
5506         p_sr_family_id                  IN      NUMBER,
5507         p_org_id                        IN      NUMBER,
5508         p_instance_id                   IN      NUMBER,
5509         p_plan_id                       IN      NUMBER,
5510         p_demand_class                  IN      VARCHAR2,
5511         p_itf                           IN      DATE,
5512         p_atf_date                      IN      DATE,
5513         p_level                         IN      NUMBER,
5514         p_identifier                    IN      NUMBER,
5515         p_scenario_id                   IN      NUMBER,
5516         p_uom_code                      IN      VARCHAR2,
5517         x_return_status                 OUT     NOCOPY VARCHAR2
5518 ) IS
5519         l_sysdate               DATE := sysdate;
5520         l_null_num              NUMBER;
5521         l_null_char             VARCHAR2(1);
5522         l_null_date             DATE; --bug3814584
5523         l_return_status         VARCHAR2(1);
5524 BEGIN
5525         IF PG_DEBUG in ('Y', 'C') THEN
5526                 msc_sch_wb.atp_debug('******* Begin Item_Prealloc_Avail_Pf_Dtls **********');
5527                 msc_sch_wb.atp_debug('Item_Prealloc_Avail_Pf_Dtls: p_member_id: ' || p_member_id);
5528                 msc_sch_wb.atp_debug('Item_Prealloc_Avail_Pf_Dtls: p_family_id: ' || p_family_id);
5529                 msc_sch_wb.atp_debug('Item_Prealloc_Avail_Pf_Dtls: p_instance_id: ' || p_instance_id);
5530                 msc_sch_wb.atp_debug('Item_Prealloc_Avail_Pf_Dtls: p_plan_id: ' || p_plan_id);
5531                 msc_sch_wb.atp_debug('Item_Prealloc_Avail_Pf_Dtls p_demand_class: ' || p_demand_class);
5532         END IF;
5533 
5534         -- Initializing API return code
5535         x_return_status := FND_API.G_RET_STS_SUCCESS;
5536 
5537 	INSERT INTO msc_atp_sd_details_temp (
5538 		ATP_Level,
5539 		Order_line_id,
5540 		Scenario_Id,
5541 		Inventory_Item_Id,
5542 		Request_Item_Id,
5543 		Organization_Id,
5544 		Department_Id,
5545 		Resource_Id,
5546 		Supplier_Id,
5547 		Supplier_Site_Id,
5548 		From_Organization_Id,
5549 		From_Location_Id,
5550 		To_Organization_Id,
5551 		To_Location_Id,
5552 		Ship_Method,
5553 		UOM_code,
5554 		Supply_Demand_Type,
5555 		Supply_Demand_Source_Type,
5556 		Supply_Demand_Source_Type_Name,
5557 		Identifier1,
5558 		Identifier2,
5559 		Identifier3,
5560 		Identifier4,
5561 		Allocated_Quantity,
5562 		Supply_Demand_Date,
5563 		Disposition_Type,
5564 		Disposition_Name,
5565 		Pegging_Id,
5566 		End_Pegging_Id,
5567         	Pf_Display_Flag,
5568                 Supply_Demand_Quantity,
5569         	Original_Demand_Quantity,
5570         	Original_Demand_Date,
5571         	Original_Item_Id,
5572         	Original_Supply_Demand_Type,
5573 		creation_date,
5574 		created_by,
5575 		last_update_date,
5576 		last_updated_by,
5577 		last_update_login,
5578                 ORIG_CUSTOMER_SITE_NAME,--bug3263368
5579                 ORIG_CUSTOMER_NAME, --bug3263368
5580                 ORIG_DEMAND_CLASS, --bug3263368
5581                 ORIG_REQUEST_DATE, --bug3263368
5582                 Inventory_Item_Name --bug3579625
5583 	)
5584         (
5585            SELECT   p_level col1,
5586 		    p_identifier col2,
5587                     p_scenario_id col3,
5588                     p_sr_family_id col4 ,
5589                     p_sr_member_id col5,
5590 		    p_org_id col6,
5591                     l_null_num col7,
5592                     l_null_num col8,
5593                     l_null_num col9,
5594                     l_null_num col10,
5595                     l_null_num col11,
5596                     l_null_num col12,
5597                     l_null_num col13,
5598                     l_null_num col14,
5599 		    l_null_char col15,
5600 		    p_uom_code col16,
5601 		    1 col17, -- demand
5602 		    AD.ORIGINATION_TYPE col18,
5603                     l_null_char col19,
5604 		    AD.SR_INSTANCE_ID col20,
5605                     l_null_num col21,
5606 		    AD.PARENT_DEMAND_ID col22,
5607 		    l_null_num col23,
5608                     -1 * AD.ALLOCATED_QUANTITY col24,
5609 		    TRUNC(AD.DEMAND_DATE) col25,
5610                     l_null_num col26,
5611                     AD.ORDER_NUMBER col27,
5612                     l_null_num col28,
5613                     l_null_num col29,
5614                     Decode(AD.inventory_item_id, p_family_id,
5615                         Decode(AD.original_item_id, p_member_id,
5616                                 AD.Pf_Display_Flag,
5617                                 Decode(sign(trunc(AD.Original_Demand_Date) - p_atf_date),
5618                                         1, AD.Pf_Display_Flag,
5619                                         1)),
5620                         AD.Pf_Display_Flag),
5621                     -1* NVL(AD.Demand_Quantity, AD.ALLOCATED_QUANTITY),
5622                     -1* NVL(AD.Demand_Quantity, AD.ALLOCATED_QUANTITY),
5623 		    TRUNC(AD.Original_Demand_Date),
5624                     AD.Original_Item_Id,
5625                     AD.Original_Origination_Type,
5626                     l_sysdate,
5627 		    G_USER_ID,
5628 		    l_sysdate,
5629 		    G_USER_ID,
5630 		    G_USER_ID,
5631 		    MTPS.LOCATION,   --bug3263368
5632                     MTP.PARTNER_NAME, --bug3263368
5633                     AD.DEMAND_CLASS, --bug3263368
5634                     AD.REQUEST_DATE, --bug3263368
5635                     I.Item_Name  --bug3579625
5636            FROM     MSC_ALLOC_DEMANDS AD,
5637                     MSC_TRADING_PARTNERS    MTP,--bug3263368
5638                     MSC_TRADING_PARTNER_SITES    MTPS, --bug3263368
5639                     MSC_SYSTEM_ITEMS I  --bug3579625
5640            WHERE    AD.PLAN_ID = p_plan_id
5641            AND      AD.SR_INSTANCE_ID = p_instance_id
5642            AND      AD.INVENTORY_ITEM_ID in (p_member_id, p_family_id)
5643            AND      AD.ORIGINATION_TYPE <> 52
5644            AND      AD.ORGANIZATION_ID = p_org_id
5645            AND      AD.ALLOCATED_QUANTITY  <> 0 --4501434
5646            AND      AD.DEMAND_CLASS = NVL(p_demand_class, AD.DEMAND_CLASS)
5647            AND      TRUNC(AD.DEMAND_DATE) < p_itf
5648            AND      AD.SHIP_TO_SITE_ID = MTPS.PARTNER_SITE_ID(+) --bug3263368
5649            AND      AD.CUSTOMER_ID = MTP.PARTNER_ID(+)--bug3263368
5650            -- bug3579625 Addition join with MSC_SYSTEM_ITEMS (I)
5651            AND       AD.PLAN_ID = I.PLAN_ID
5652            AND       AD.SR_INSTANCE_ID = I.SR_INSTANCE_ID
5653            AND       AD.ORIGINAL_ITEM_ID = I.INVENTORY_ITEM_ID
5654            AND       AD.ORGANIZATION_ID = I.ORGANIZATION_ID
5655 
5656       UNION ALL
5657            SELECT   p_level col1,
5658                     p_identifier col2,
5659                     p_scenario_id col3,
5660                     p_sr_family_id col4 ,
5661                     p_sr_member_id col5,
5662                     p_org_id col6,
5663                     l_null_num col7,
5664                     l_null_num col8,
5665                     l_null_num col9,
5666                     l_null_num col10,
5667                     l_null_num col11,
5668                     l_null_num col12,
5669                     l_null_num col13,
5670                     l_null_num col14,
5671                     l_null_char col15,
5672                     p_uom_code col16,
5673                     2 col17, -- supply
5674                     SA.ORDER_TYPE col18,
5675                     l_null_char col19,
5676                     SA.SR_INSTANCE_ID col20,
5677                     l_null_num col21,
5678                     SA.PARENT_TRANSACTION_ID col22,
5679                     l_null_num col23,
5680                     SA.ALLOCATED_QUANTITY col24,
5681                     TRUNC(SA.SUPPLY_DATE) col25,
5682                     l_null_num col26,
5683                     DECODE(SA.ORDER_TYPE, 5, to_char(SA.PARENT_TRANSACTION_ID), SA.ORDER_NUMBER) col27,
5684                     l_null_num col28,
5685 		    l_null_num col29,
5686 		    l_null_num,
5687         	    NVL(SA.Supply_Quantity, SA.ALLOCATED_QUANTITY),
5688         	    l_null_num,
5689         	    to_date(null),
5690         	    SA.Original_Item_Id,
5691                     DECODE(SA.ORIGINAL_ORDER_TYPE,
5692                                 46, 48,                 -- Change Supply due to Stealing to Supply Adjustment
5693                                 47, 48,                 -- Change Demand due to Stealing to Supply Adjustment
5694                         SA.ORIGINAL_ORDER_TYPE),
5695         	    l_sysdate,
5696 		    G_USER_ID,
5697 		    l_sysdate,
5698 		    G_USER_ID,
5699 		    G_USER_ID,
5700 		    MTPS.LOCATION,   --bug3684383
5701                     MTP.PARTNER_NAME, --bug3684383
5702                     SA.DEMAND_CLASS, --bug3684383
5703                     --null,         --bug3684383
5704                     l_null_date,  --bug3814584
5705                     I.Item_Name --bug3579625
5706 
5707            FROM     MSC_ALLOC_SUPPLIES SA,
5708                     MSC_SYSTEM_ITEMS I,  --bug3579625
5709                     MSC_TRADING_PARTNERS    MTP,--bug3684383
5710                     MSC_TRADING_PARTNER_SITES    MTPS --bug3684383
5711 
5712            WHERE    SA.PLAN_ID = p_plan_id
5713            AND      SA.SR_INSTANCE_ID = p_instance_id
5714            AND      SA.INVENTORY_ITEM_ID in (p_member_id, p_family_id)
5715            AND      TRUNC(SA.SUPPLY_DATE) >= DECODE(SA.ORIGINAL_ORDER_TYPE,
5716                                                         27, TRUNC(SYSDATE),
5717                                                         28, TRUNC(SYSDATE),
5718                                                         TRUNC(SA.SUPPLY_DATE))
5719            AND      SA.ORGANIZATION_ID = p_org_id
5720            AND      SA.ALLOCATED_QUANTITY <> 0
5721            AND      SA.DEMAND_CLASS = NVL(p_demand_class, SA.DEMAND_CLASS )
5722            AND      TRUNC(SA.SUPPLY_DATE) < p_itf
5723            -- bug3579625 Addition join with MSC_SYSTEM_ITEMS (I)
5724            AND         SA.PLAN_ID = I.PLAN_ID
5725            AND         SA.SR_INSTANCE_ID = I.SR_INSTANCE_ID
5726            AND         SA.ORIGINAL_ITEM_ID = I.INVENTORY_ITEM_ID
5727            AND         SA.ORGANIZATION_ID = I.ORGANIZATION_ID
5728            AND      SA.SHIP_TO_SITE_ID = MTPS.PARTNER_SITE_ID(+) --bug3684383
5729            AND      SA.CUSTOMER_ID = MTP.PARTNER_ID(+)--bug3684383
5730           );
5731 
5732           /* Now populate Original_Demand_Qty*/
5733           Populate_Original_Demand_Qty(
5734         	MASDDT,
5735         	NULL,
5736         	p_plan_id,
5737         	p_demand_class,
5738                 l_return_status
5739           );
5740 
5741           IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
5742                 IF PG_DEBUG in ('Y', 'C') THEN
5743                         msc_sch_wb.atp_debug('Item_Prealloc_Avail_Pf_Dtls: ' || 'Error occured in procedure Populate_Original_Demand_Qty');
5744                 END IF;
5745                 x_return_status := FND_API.G_RET_STS_ERROR;
5746                 return;
5747           END IF;
5748 
5749 EXCEPTION
5750         WHEN OTHERS THEN
5751                 IF PG_DEBUG in ('Y', 'C') THEN
5752                         msc_sch_wb.atp_debug('Item_Prealloc_Avail_Pf_Dtls: ' || 'Error occurred: ' || to_char(sqlcode) || ':' || SQLERRM);
5753                 END IF;
5754                 x_return_status := FND_API.G_RET_STS_ERROR;
5755 
5756 END Item_Prealloc_Avail_Pf_Dtls;
5757 
5758 /*--Get_Forward_Mat_Pf------------------------------------------------------------
5759 |  o  Called from Item_Pre_Allocated_Atp procedure for Demand Priority based
5760 |       Allocated Time Phased PF ATP.
5761 +-------------------------------------------------------------------------------*/
5762 PROCEDURE Get_Forward_Mat_Pf (
5763         p_member_id                     IN      NUMBER,
5764         p_family_id                     IN      NUMBER,
5765         p_org_id                        IN      NUMBER,
5766         p_instance_id                   IN      NUMBER,
5767         p_plan_id                       IN      NUMBER,
5768         p_itf                           IN      DATE,
5769         x_atp_dates                     OUT     NOCOPY MRP_ATP_PUB.date_arr,
5770         x_atp_qtys                      OUT     NOCOPY MRP_ATP_PUB.number_arr,
5771         x_atp_dcs                       OUT     NOCOPY MRP_ATP_PUB.char80_arr,
5772         x_return_status                 OUT     NOCOPY VARCHAR2
5773 ) IS
5774 
5775 BEGIN
5776         IF PG_DEBUG in ('Y', 'C') THEN
5777                 msc_sch_wb.atp_debug('******* Begin Get_Forward_Mat_Pf **********');
5778                 msc_sch_wb.atp_debug('Get_Forward_Mat_Pf: p_member_id: ' || p_member_id);
5779                 msc_sch_wb.atp_debug('Get_Forward_Mat_Pf: p_family_id: ' || p_family_id);
5780                 msc_sch_wb.atp_debug('Get_Forward_Mat_Pf: p_instance_id: ' || p_instance_id);
5781                 msc_sch_wb.atp_debug('Get_Forward_Mat_Pf: p_plan_id: ' || p_plan_id);
5782         END IF;
5783 
5784         -- Initializing API return code
5785         x_return_status := FND_API.G_RET_STS_SUCCESS;
5786 
5787         SELECT 	SD_DATE,
5788                 SUM(SD_QTY),
5789                 DEMAND_CLASS
5790         BULK COLLECT INTO
5791                 x_atp_dates,
5792                 x_atp_qtys,
5793                 x_atp_dcs
5794         FROM
5795             (
5796                 SELECT  TRUNC(AD.DEMAND_DATE) SD_DATE,
5797                         -1 * AD.ALLOCATED_QUANTITY SD_QTY,
5798                         AD.DEMAND_CLASS
5799                 FROM    MSC_ALLOC_DEMANDS AD
5800                 WHERE   AD.PLAN_ID = p_plan_id
5801                 AND     AD.SR_INSTANCE_ID = p_instance_id
5802                 AND     AD.INVENTORY_ITEM_ID in (p_member_id, p_family_id)
5803                 AND     AD.ORGANIZATION_ID = p_org_id
5804                 AND     AD.ALLOCATED_QUANTITY  <> 0 --4501434
5805                 AND     AD.ORIGINATION_TYPE <> 52   -- Ignore copy SO and copy stealing records for summary enhancement
5806                 AND     AD.DEMAND_CLASS IN (
5807                         SELECT  demand_class
5808                         FROM    msc_alloc_temp
5809                         WHERE   demand_class IS NOT NULL)
5810                 --bug3700564 added trunc
5811                 AND     TRUNC(AD.DEMAND_DATE) < p_itf
5812 
5813                 UNION ALL
5814 
5815                 SELECT  TRUNC(SA.SUPPLY_DATE) SD_DATE,
5816                         SA.ALLOCATED_QUANTITY SD_QTY,
5817                         SA.DEMAND_CLASS
5818                 FROM    MSC_ALLOC_SUPPLIES SA
5819                 WHERE   SA.PLAN_ID = p_plan_id
5820                 AND     SA.SR_INSTANCE_ID = p_instance_id
5821                 AND     SA.INVENTORY_ITEM_ID in (p_member_id, p_family_id)
5822                 AND     SA.ORGANIZATION_ID = p_org_id
5823                 AND     SA.ALLOCATED_QUANTITY <> 0
5824                 -- fixed as part of time_phased_atp chagnes
5825                 AND     TRUNC(SA.SUPPLY_DATE) >= DECODE(SA.ORIGINAL_ORDER_TYPE,
5826                                                         27, TRUNC(SYSDATE),
5827                                                         28, TRUNC(SYSDATE),
5828                                                         TRUNC(SA.SUPPLY_DATE))
5829                 AND     SA.DEMAND_CLASS IN (
5830                         SELECT  demand_class
5831                         FROM    msc_alloc_temp
5832                         WHERE   demand_class IS NOT NULL)
5833                 --bug3700564 added trunc
5834                 AND     TRUNC(SA.SUPPLY_DATE) < p_itf
5835             )
5836         GROUP BY DEMAND_CLASS, SD_DATE
5837         order by DEMAND_CLASS, SD_DATE; --4698199 --5353882
5838 
5839 EXCEPTION
5840         WHEN OTHERS THEN
5841                 IF PG_DEBUG in ('Y', 'C') THEN
5842                         msc_sch_wb.atp_debug('Get_Forward_Mat_Pf: ' || 'Error occurred: ' || to_char(sqlcode) || ':' || SQLERRM);
5843                 END IF;
5844                 x_return_status := FND_API.G_RET_STS_ERROR;
5845 
5846 END Get_Forward_Mat_Pf;
5847 
5848 /*--Get_Forward_Mat_Pf_Summ---------------------------------------------------
5849 |  o  Called from Item_Pre_Allocated_Atp procedure for Demand Priority based
5850 |       Allocated Time Phased PF ATP.
5851 +-------------------------------------------------------------------------------*/
5852 PROCEDURE Get_Forward_Mat_Pf_Summ (
5853         p_member_id                     IN      NUMBER,
5854         p_family_id                     IN      NUMBER,
5855         p_org_id                        IN      NUMBER,
5856         p_instance_id                   IN      NUMBER,
5857         p_plan_id                       IN      NUMBER,
5858         p_itf                           IN      DATE,
5859         p_refresh_number                IN      NUMBER,
5860         x_atp_dates                     OUT     NOCOPY MRP_ATP_PUB.date_arr,
5861         x_atp_qtys                      OUT     NOCOPY MRP_ATP_PUB.number_arr,
5862         x_atp_dcs                       OUT     NOCOPY MRP_ATP_PUB.char80_arr,
5863         x_return_status                 OUT     NOCOPY VARCHAR2
5864 ) IS
5865 
5866 BEGIN
5867         IF PG_DEBUG in ('Y', 'C') THEN
5868                 msc_sch_wb.atp_debug('******* Begin Get_Forward_Mat_Pf_Summ **********');
5869                 msc_sch_wb.atp_debug('Get_Forward_Mat_Pf_Summ: p_member_id: ' || p_member_id);
5870                 msc_sch_wb.atp_debug('Get_Forward_Mat_Pf_Summ: p_family_id: ' || p_family_id);
5871                 msc_sch_wb.atp_debug('Get_Forward_Mat_Pf_Summ: p_instance_id: ' || p_instance_id);
5872                 msc_sch_wb.atp_debug('Get_Forward_Mat_Pf_Summ: p_plan_id: ' || p_plan_id);
5873         END IF;
5874 
5875         -- Initializing API return code
5876         x_return_status := FND_API.G_RET_STS_SUCCESS;
5877 
5878         -- Summary SQL can be used
5879         SELECT 	SD_DATE,
5880                 SUM(SD_QTY),
5881                 DEMAND_CLASS
5882         BULK COLLECT INTO
5883                 x_atp_dates,
5884                 x_atp_qtys,
5885                 x_atp_dcs
5886         FROM
5887             (
5888                 SELECT  /*+ INDEX(S MSC_ATP_SUMMARY_SD_U1) */
5889                         SD_DATE, SD_QTY, DEMAND_CLASS
5890                 FROM    MSC_ATP_SUMMARY_SD S
5891                 WHERE   S.PLAN_ID = p_plan_id
5892                 AND     S.SR_INSTANCE_ID = p_instance_id
5893                 AND     S.INVENTORY_ITEM_ID in (p_member_id, p_family_id)
5894                 AND     S.ORGANIZATION_ID = p_org_id
5895                 AND     S.DEMAND_CLASS IN (
5896                         SELECT  demand_class
5897                         FROM    msc_alloc_temp
5898                         WHERE   demand_class IS NOT NULL)
5899                 AND     S.SD_DATE < p_itf
5900 
5901                 UNION ALL
5902 
5903                 SELECT  TRUNC(AD.DEMAND_DATE) SD_DATE,
5904                         decode(AD.ALLOCATED_QUANTITY,           -- Consider unscheduled orders as dummy supplies
5905                                0, nvl(OLD_ALLOCATED_QUANTITY,0), --4658238        -- For summary enhancement
5906                                   -1 * AD.ALLOCATED_QUANTITY) SD_QTY,
5907                         AD.DEMAND_CLASS
5908                 FROM    MSC_ALLOC_DEMANDS AD,
5909                         MSC_PLANS P                                     -- For summary enhancement
5910                 WHERE   AD.PLAN_ID = p_plan_id
5911                 AND     AD.SR_INSTANCE_ID = p_instance_id
5912                 AND     AD.INVENTORY_ITEM_ID in (p_member_id, p_family_id)
5913                 AND     AD.ORGANIZATION_ID = p_org_id
5914                 AND     AD.DEMAND_CLASS IN (
5915                         SELECT  demand_class
5916                         FROM    msc_alloc_temp
5917                         WHERE   demand_class IS NOT NULL)
5918                 --bug3700564 added trunc
5919                 AND     TRUNC(AD.DEMAND_DATE) < p_itf
5920                         AND     P.PLAN_ID = AD.PLAN_ID
5921                         AND     (AD.REFRESH_NUMBER > P.LATEST_REFRESH_NUMBER
5922                                 OR AD.REFRESH_NUMBER = p_refresh_number)
5923 
5924                 UNION ALL
5925 
5926                 SELECT  TRUNC(SA.SUPPLY_DATE) SD_DATE,
5927                         decode(SA.ALLOCATED_QUANTITY,           -- Consider deleted stealing records as dummy demands
5928                                0, -1 * OLD_ALLOCATED_QUANTITY,   -- For summary enhancement
5929                                   SA.ALLOCATED_QUANTITY) SD_QTY ,
5930                         SA.DEMAND_CLASS
5931                 FROM    MSC_ALLOC_SUPPLIES SA,
5932                         MSC_PLANS P                                     -- For summary enhancement
5933                 WHERE   SA.PLAN_ID = p_plan_id
5934                 AND     SA.SR_INSTANCE_ID = p_instance_id
5935                 AND     SA.INVENTORY_ITEM_ID in (p_member_id, p_family_id)
5936                 AND     SA.ORGANIZATION_ID = p_org_id
5937                 AND     SA.DEMAND_CLASS IN (
5938                         SELECT  demand_class
5939                         FROM    msc_alloc_temp
5940                         WHERE   demand_class IS NOT NULL)
5941                 --bug3700564 added trunc
5942                 AND     TRUNC(SA.SUPPLY_DATE) < p_itf
5943                 AND     P.PLAN_ID = SA.PLAN_ID
5944                 AND     (SA.REFRESH_NUMBER > P.LATEST_REFRESH_NUMBER
5945                         OR SA.REFRESH_NUMBER = p_refresh_number)
5946             )
5947         GROUP BY DEMAND_CLASS, SD_DATE
5948         order by DEMAND_CLASS, SD_DATE; --4698199;
5949 
5950 EXCEPTION
5951         WHEN OTHERS THEN
5952                 IF PG_DEBUG in ('Y', 'C') THEN
5953                         msc_sch_wb.atp_debug('Get_Forward_Mat_Pf_Summ: ' || 'Error occurred: ' || to_char(sqlcode) || ':' || SQLERRM);
5954                 END IF;
5955                 x_return_status := FND_API.G_RET_STS_ERROR;
5956 
5957 END Get_Forward_Mat_Pf_Summ;
5958 
5959 /*--Insert_SD_Into_Details_Temp-----------------------------------------------
5960 |  o  Called from Item_Alloc_Cum_Atp procedure for Rule based Allocated Time
5961 |  o  This is similar to previous procedure only difference being that we
5962 +---------------------------------------------------------------------------*/
5963 PROCEDURE Insert_SD_Into_Details_Temp(
5964         p_type                          IN      INTEGER,
5965         p_member_id                     IN      NUMBER,
5966         p_family_id                     IN      NUMBER,
5967         p_sr_member_id                  IN      NUMBER,
5968         p_sr_family_id                  IN      NUMBER,
5969         p_org_id                        IN      NUMBER,
5970         --bug3671294 now we donot need this as we will join with msc_system_items
5971         --p_inv_item_name                 IN      VARCHAR2,
5972         p_org_code                      IN      VARCHAR2,
5973         p_instance_id                   IN      NUMBER,
5974         p_plan_id                       IN      NUMBER,
5975         p_itf                           IN      DATE,
5976         p_level_id                      IN      PLS_INTEGER,
5977         p_session_id                    IN      NUMBER,
5978         p_record_type                   IN      PLS_INTEGER,
5979         p_scenario_id                   IN      NUMBER,
5980         p_uom_code                      IN      VARCHAR2,
5981         x_insert_count                  OUT     NOCOPY NUMBER,
5982         x_return_status                 OUT     NOCOPY VARCHAR2
5983 ) IS
5984         l_null_num                      NUMBER;
5985         l_null_date                     DATE;   -- Bug 3875786
5986         l_null_char                     VARCHAR(1); -- Bug 3875786
5987         l_return_status                 VARCHAR2(1);
5988 BEGIN
5989 
5990         IF PG_DEBUG in ('Y', 'C') THEN
5991                 msc_sch_wb.atp_debug('******* Begin Insert_SD_Into_Details_Temp **********');
5992                 msc_sch_wb.atp_debug('Insert_SD_Into_Details_Temp: p_type: ' || p_type);
5993                 msc_sch_wb.atp_debug('Insert_SD_Into_Details_Temp: p_member_id: ' || p_member_id);
5994                 msc_sch_wb.atp_debug('Insert_SD_Into_Details_Temp: p_family_id: ' || p_family_id);
5995                 msc_sch_wb.atp_debug('Insert_SD_Into_Details_Temp: p_sr_member_id: ' || p_sr_member_id);
5996                 msc_sch_wb.atp_debug('Insert_SD_Into_Details_Temp: p_sr_family_id: ' || p_sr_family_id);
5997                 msc_sch_wb.atp_debug('Insert_SD_Into_Details_Temp: p_org_id: ' || p_org_id);
5998                 --bug3671294
5999                 --msc_sch_wb.atp_debug('Insert_SD_Into_Details_Temp: p_inv_item_name: ' || p_inv_item_name);
6000                 msc_sch_wb.atp_debug('Insert_SD_Into_Details_Temp: p_org_code: ' || p_org_code);
6001                 msc_sch_wb.atp_debug('Insert_SD_Into_Details_Temp: p_instance_id: ' || p_instance_id);
6002                 msc_sch_wb.atp_debug('Insert_SD_Into_Details_Temp: p_plan_id: ' || p_plan_id);
6003                 msc_sch_wb.atp_debug('Insert_SD_Into_Details_Temp: p_itf: ' || p_itf);
6004                 msc_sch_wb.atp_debug('Insert_SD_Into_Details_Temp: p_level_id: ' || p_level_id);
6005                 msc_sch_wb.atp_debug('Insert_SD_Into_Details_Temp: p_session_id: ' || p_session_id);
6006                 msc_sch_wb.atp_debug('Insert_SD_Into_Details_Temp: p_record_type: ' || p_record_type);
6007                 msc_sch_wb.atp_debug('Insert_SD_Into_Details_Temp: p_scenario_id: ' || p_scenario_id);
6008                 msc_sch_wb.atp_debug('Insert_SD_Into_Details_Temp: p_uom_code: ' || p_uom_code);
6009         END IF;
6010 
6011         -- initialize API return status to success
6012         x_return_status := FND_API.G_RET_STS_SUCCESS;
6013 
6014         IF p_type = Demand_Priority THEN
6015                 INSERT INTO MRP_ATP_DETAILS_TEMP
6016                 (session_id, atp_level, inventory_item_id, organization_id, identifier1, identifier3,
6017                 supply_demand_type, supply_demand_date, supply_demand_quantity, supply_demand_source_type,
6018                 allocated_quantity, record_type, scenario_id, disposition_name, demand_class, char1,
6019                 uom_code, plan_id, inventory_item_name, organization_code,
6020                 pf_display_flag, original_demand_quantity, original_demand_date,
6021                 original_item_id, original_supply_demand_type, request_item_id,
6022                 ORIG_CUSTOMER_SITE_NAME,ORIG_CUSTOMER_NAME,ORIG_DEMAND_CLASS,ORIG_REQUEST_DATE )--bug3263368
6023                 SELECT col1, col2, col3, col4, col5, col6, col7, col8, col9, col10,
6024                 col11, col12, col13, col14, col15, col16, col17, col18, col19, col20,
6025                 col21, col22, col23, col24, col25, col26,col27,col28,col29,col30
6026                 FROM
6027                 (SELECT p_session_id                    col1, -- session_id
6028                         p_level_id                      col2, -- level_id
6029                         p_sr_family_id                  col3, -- inventory_item_id
6030                         p_org_id                        col4, -- organization_id
6031                         p_instance_id                   col5, -- Identifier1
6032                         AD.PARENT_DEMAND_ID             col6, -- Identifier3
6033                         1                               col7, -- supply_demand_type
6034                         TRUNC(AD.DEMAND_DATE)           col8, -- supply_demand_date
6035                         -1 * NVL(AD.DEMAND_QUANTITY,
6036                         AD.ALLOCATED_QUANTITY)          col9, -- supply_demand_quantity
6037                         AD.ORIGINATION_TYPE             col10, -- supply_demand_source_type
6038                         -1 * AD.ALLOCATED_QUANTITY      col11, -- allocated_quantity
6039                         p_record_type                   col12, -- record_type
6040                         p_scenario_id                   col13, -- scenario_id
6041                         AD.ORDER_NUMBER                 col14, -- disposition_name
6042                         AD.DEMAND_CLASS                 col15, -- demand_class
6043                         l_null_char                     col16, -- from_demand_class  --Bug 3875786
6044                         p_uom_code                      col17, -- UOM Code
6045                         p_plan_id                       col18, -- Plan id
6046                         --bug3671294
6047                         msi.item_name                   col19, -- Item name
6048                         --p_inv_item_name                 col19, -- Item name
6049                         p_org_code                      col20,  -- Organization code
6050                 	Decode(AD.inventory_item_id, p_family_id,
6051                 	        Decode(AD.original_item_id, p_member_id,
6052                 	                AD.Pf_Display_Flag,
6053                 	                Decode(sign(trunc(AD.Original_Demand_Date) - MSC_ATP_ALLOC.G_Atf_Date),
6054                 	                        1, AD.Pf_Display_Flag,
6055                 	                        1)),
6056                 	        AD.Pf_Display_Flag)     col21,
6057                         -1 * NVL(AD.DEMAND_QUANTITY,
6058                                  AD.ALLOCATED_QUANTITY) col22,
6059                         trunc(AD.original_demand_date)  col23, --Bug_3693892 added trunc
6060                         AD.original_item_id             col24,
6061                         AD.original_origination_type    col25,
6062                         p_sr_member_id                  col26,
6063                         MTPS.LOCATION                   col27, --bug3263368
6064                         MTP.PARTNER_NAME                col28, --bug3263368
6065                         AD.DEMAND_CLASS                 col29, --bug3263368
6066                         AD.REQUEST_DATE                 col30  --bug3263368
6067                 FROM
6068                         MSC_ALLOC_DEMANDS AD,
6069                         MSC_ALLOC_TEMP TEMP,
6070                         MSC_TRADING_PARTNERS    MTP,--bug3263368
6071                         MSC_TRADING_PARTNER_SITES    MTPS, --bug3263368
6072                         MSC_SYSTEM_ITEMS    msi --bug3671294
6073                 WHERE
6074                         AD.PLAN_ID = p_plan_id
6075                         AND      AD.SR_INSTANCE_ID = p_instance_id
6076                         AND      AD.INVENTORY_ITEM_ID in (p_member_id, p_family_id)
6077                         AND      AD.ORGANIZATION_ID = p_org_id
6078                         AND      AD.ALLOCATED_QUANTITY <> 0
6079                         AND      AD.DEMAND_CLASS = TEMP.DEMAND_CLASS
6080                         --bug3671294 start
6081                         AND      msi.PLAN_ID = AD.PLAN_ID
6082                         AND      msi.SR_INSTANCE_ID = AD.SR_INSTANCE_ID
6083                         AND      msi.ORGANIZATION_ID = AD.ORGANIZATION_ID
6084                         AND      msi.INVENTORY_ITEM_ID = AD.ORIGINAL_ITEM_ID
6085                         --bug3671294 end
6086                         --bug3700564 added trunc
6087                         AND      TRUNC(AD.DEMAND_DATE) < NVL(p_itf, TRUNC(AD.DEMAND_DATE) + 1)
6088                         AND      AD.ORIGINATION_TYPE <> 52  -- Ignore copy SO and copy stealing records for allocation WB - summary enhancement
6089                         AND      AD.SHIP_TO_SITE_ID = MTPS.PARTNER_SITE_ID(+) --bug3263368
6090                         AND      AD.CUSTOMER_ID = MTP.PARTNER_ID(+) --bug3263368
6091                 UNION ALL
6092                 SELECT  p_session_id                    col1,
6093                         p_level_id                      col2,
6094                         p_sr_family_id                  col3 ,
6095                         p_org_id                        col4,
6096                         p_instance_id                   col5,
6097                         SA.PARENT_TRANSACTION_ID        col6,
6098                         2                               col7, -- supply
6099                         TRUNC(SA.SUPPLY_DATE)           col8,
6100                         NVL(SA.SUPPLY_QUANTITY,
6101                         SA.ALLOCATED_QUANTITY)          col9,
6102                         SA.ORDER_TYPE                   col10,
6103                         SA.ALLOCATED_QUANTITY           col11,
6104                         p_record_type                   col12, -- record_type
6105                         p_scenario_id                   col13, -- scenario_id
6106                         DECODE(SA.ORIGINAL_ORDER_TYPE, -- SA.ORDER_TYPE, /*bug 3229032*/
6107                                 5, to_char(SA.PARENT_TRANSACTION_ID),
6108                                 SA.ORDER_NUMBER)        col14,
6109                         SA.DEMAND_CLASS                 col15,
6110                         SA.FROM_DEMAND_CLASS            col16,
6111                         p_uom_code                      col17,
6112                         p_plan_id                       col18,
6113                         --bug3671294
6114                         msi.item_name                   col19, -- Item name
6115                         --p_inv_item_name                 col19, -- Item name
6116                         p_org_code                      col20,  -- Organization code
6117                         l_null_num                      col21, -- Bug 3875786 - local variable used for NULL
6118                         l_null_num                      col22, -- Bug 3875786 - local variable used for NULL
6119                         l_null_date                     col23, -- Bug 3875786 - local variable used for NULL
6120                         SA.original_item_id             col24,
6121                         /*bug 3229032*/
6122                         DECODE(SA.ORIGINAL_ORDER_TYPE,
6123                                 46, 48,                 -- Change Supply due to Stealing to Supply Adjustment
6124                                 47, 48,                 -- Change Demand due to Stealing to Supply Adjustment
6125                                 SA.ORIGINAL_ORDER_TYPE
6126                                )                        col25,
6127                         p_sr_member_id                  col26,
6128                         MTPS.LOCATION                  col27, --bug3684383
6129                         MTP.PARTNER_NAME               col28, --bug3684383
6130                         SA.DEMAND_CLASS                col29, --bug3684383
6131                         l_null_date                     col30  --bug3684383 -- Bug 3875786 - local variable used for NULL
6132                 FROM
6133                         MSC_ALLOC_SUPPLIES SA,
6134                         MSC_ALLOC_TEMP TEMP,
6135                         MSC_SYSTEM_ITEMS    msi, --bug3671294
6136                         MSC_TRADING_PARTNER_SITES    MTPS, --bug3684383
6137                         MSC_TRADING_PARTNERS    MTP --bug3684383
6138                 WHERE
6139                         SA.PLAN_ID = p_plan_id
6140                         AND      SA.SR_INSTANCE_ID = p_instance_id
6141                         AND      SA.INVENTORY_ITEM_ID in (p_member_id, p_family_id)
6142                         AND      SA.ORGANIZATION_ID = p_org_id
6143                         AND      SA.ALLOCATED_QUANTITY <> 0
6144                         --bug3671294 start
6145                         AND      msi.PLAN_ID = SA.PLAN_ID
6146                         AND      msi.SR_INSTANCE_ID = SA.SR_INSTANCE_ID
6147                         AND      msi.ORGANIZATION_ID = SA.ORGANIZATION_ID
6148                         AND      msi.INVENTORY_ITEM_ID = SA.ORIGINAL_ITEM_ID
6149                         --bug3671294 end
6150                         AND      TRUNC(SA.SUPPLY_DATE) >= DECODE(SA.ORIGINAL_ORDER_TYPE,
6151                                                         27, TRUNC(SYSDATE),
6152                                                         28, TRUNC(SYSDATE),
6153                                                         TRUNC(SA.SUPPLY_DATE))
6154                         AND      SA.DEMAND_CLASS = TEMP.DEMAND_CLASS
6155                         AND      TRUNC(SA.SUPPLY_DATE) < NVL(p_itf, TRUNC(SA.SUPPLY_DATE) + 1)
6156                         AND      SA.SHIP_TO_SITE_ID = MTPS.PARTNER_SITE_ID(+) --bug3684383
6157                         AND      SA.CUSTOMER_ID = MTP.PARTNER_ID(+) --bug3684383
6158                 );
6159 
6160         ELSIF p_type = User_Defined_DC THEN
6161                 INSERT INTO MRP_ATP_DETAILS_TEMP
6162                 (session_id, atp_level, inventory_item_id, organization_id, identifier1, identifier3,
6163                 supply_demand_type, supply_demand_date, supply_demand_quantity, supply_demand_source_type,
6164                 allocated_quantity, record_type, scenario_id, disposition_name, demand_class, uom_code,
6165                 inventory_item_name, organization_code, identifier2, identifier4, request_item_id,
6166                 pf_display_flag, original_demand_quantity, original_demand_date, original_item_id,
6167                 original_supply_demand_type, unallocated_quantity,
6168                 ORIG_CUSTOMER_SITE_NAME,ORIG_CUSTOMER_NAME,ORIG_DEMAND_CLASS,ORIG_REQUEST_DATE )--bug3263368
6169                 SELECT col1, col2, col3, col4, col5, col6, col7, col8, col9, col10,
6170                 col11, col12, col13, col14, col15, col16, col17, col18, col19, col20,
6171                 col21, col22, col23, col24, col25, col26, col27,col28,col29,col30,col31
6172                 FROM
6173                 (SELECT p_session_id                    col1, -- session_id
6174                         p_level_id                      col2, -- level_id
6175                         p_sr_family_id                  col3, -- inventory_item_id
6176                         p_org_id                        col4, -- organization_id
6177                         p_instance_id                   col5, -- Identifier1
6178                         AD.PARENT_DEMAND_ID             col6, -- Identifier3
6179                         1                               col7, -- supply_demand_type
6180                         TRUNC(AD.DEMAND_DATE)           col8, -- supply_demand_date
6181                         -1 * NVL(AD.DEMAND_QUANTITY,
6182                                  AD.ALLOCATED_QUANTITY) col9, -- supply_demand_quantity
6183                         AD.ORIGINAL_ORIGINATION_TYPE    col10,-- supply_demand_source_type
6184                         -1 * AD.ALLOCATED_QUANTITY*
6185                           DECODE(decode(AD.ORIGINAL_ORIGINATION_TYPE,
6186                                 6, decode(AD.source_organization_id,
6187                                         NULL, DECODE(AD.DEMAND_CLASS, null, null,
6188                                                 DECODE(TEMP.DEMAND_CLASS, '-1',
6189                                                         MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(
6190                                                                 null, null,
6191                                                                 Decode(sign(trunc(AD.Demand_Date) - MSC_ATP_ALLOC.G_Atf_Date),
6192                                                                         1, p_family_id,
6193                                                                         Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
6194                                                                                 'Y', AD.Original_Item_Id,
6195                                                                                 p_family_id)),
6196                                                                 p_org_id,
6197                                                                 p_instance_id, trunc(AD.DEMAND_DATE),
6198                                                                 p_level_id, AD.DEMAND_CLASS),
6199                                                         AD.DEMAND_CLASS)),
6200                                         -23453, DECODE(AD.DEMAND_CLASS, null, null,
6201                                                 DECODE(TEMP.DEMAND_CLASS, '-1',
6202                                                         MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(
6203                                                                 null, null,
6204                                                                 Decode(sign(trunc(AD.Demand_Date) - MSC_ATP_ALLOC.G_Atf_Date),
6205                                                                         1, p_family_id,
6206                                                                         Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
6207                                                                                 'Y', AD.Original_Item_Id,
6208                                                                                 p_family_id)),
6209                                                                 p_org_id,
6210                                                                 p_instance_id, trunc(AD.DEMAND_DATE),
6211                                                                 p_level_id, AD.DEMAND_CLASS),
6212                                                         AD.DEMAND_CLASS)),
6213                                         AD.organization_id, 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)), NULL),
6226                                 30, decode(AD.source_organization_id,
6227                                         NULL, DECODE(AD.DEMAND_CLASS, null, null,
6228                                                 DECODE(TEMP.DEMAND_CLASS, '-1',
6229                                                         MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(
6230                                                                 null, null,
6231                                                                 Decode(sign(trunc(AD.Demand_Date) - MSC_ATP_ALLOC.G_Atf_Date),
6232                                                                         1, p_family_id,
6233                                                                         Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
6234                                                                                 'Y', AD.Original_Item_Id,
6235                                                                                 p_family_id)),
6236                                                                 p_org_id,
6237                                                                 p_instance_id, trunc(AD.DEMAND_DATE),
6238                                                                 p_level_id, AD.DEMAND_CLASS),
6239                                                         AD.DEMAND_CLASS)),
6240                                         -23453, DECODE(AD.DEMAND_CLASS, null, null,
6241                                                 DECODE(TEMP.DEMAND_CLASS, '-1',
6242                                                         MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(
6243                                                                 null, null,
6244                                                                 Decode(sign(trunc(AD.Demand_Date) - MSC_ATP_ALLOC.G_Atf_Date),
6245                                                                         1, p_family_id,
6246                                                                         Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
6247                                                                                 'Y', AD.Original_Item_Id,
6248                                                                                 p_family_id)),
6249                                                                 p_org_id,
6250                                                                 p_instance_id, trunc(AD.DEMAND_DATE),
6251                                                                 p_level_id, AD.DEMAND_CLASS),
6252                                                         AD.DEMAND_CLASS)),
6253                                         AD.organization_id, 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)), NULL),
6266                                 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                                 TEMP.DEMAND_CLASS, 1,
6280                                 MSC_AATP_FUNC.Get_Item_Demand_Alloc_Percent(p_plan_id,
6281                                         AD.PARENT_DEMAND_ID,
6282                                         trunc(AD.DEMAND_DATE),
6283                                         AD.USING_ASSEMBLY_ITEM_ID,
6284                                         DECODE(AD.SOURCE_ORGANIZATION_ID,
6285                                         -23453, null,
6286                                         AD.SOURCE_ORGANIZATION_ID),
6287                                         Decode(sign(trunc(AD.Demand_Date) - MSC_ATP_ALLOC.G_Atf_Date),
6288                                                 1, p_family_id,
6289                                                 Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
6290                                                         'Y', AD.Original_Item_Id,
6291                                                         p_family_id)),
6292                                         p_org_id,
6293                                         p_instance_id,
6294                                         AD.ORIGINAL_ORIGINATION_TYPE,
6295                                         decode(AD.ORIGINAL_ORIGINATION_TYPE,
6296                                                 6, decode(AD.source_organization_id,
6297                                                         NULL, DECODE(AD.DEMAND_CLASS, null, null,
6298                                                                 DECODE(TEMP.DEMAND_CLASS, '-1',
6299                                                                         MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(
6300                                                                                 null, null,
6301                                                                                 Decode(sign(trunc(AD.Demand_Date) - MSC_ATP_ALLOC.G_Atf_Date),
6302                                                                                         1, p_family_id,
6303                                                                                         Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
6304                                                                                                 'Y', AD.Original_Item_Id,
6305                                                                                                 p_family_id)),
6306                                                                                 p_org_id,
6307                                                                                 p_instance_id, trunc(AD.DEMAND_DATE),
6308                                                                                 p_level_id, AD.DEMAND_CLASS),
6309                                                                                 AD.DEMAND_CLASS)),
6310                                                         -23453, DECODE(AD.DEMAND_CLASS, null, null,
6311                                                                 DECODE(TEMP.DEMAND_CLASS, '-1',
6312                                                                         MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(
6313                                                                                 null, null,
6314                                                                                 Decode(sign(trunc(AD.Demand_Date) - MSC_ATP_ALLOC.G_Atf_Date),
6315                                                                                         1, p_family_id,
6316                                                                                         Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
6317                                                                                                 'Y', AD.Original_Item_Id,
6318                                                                                                 p_family_id)),
6319                                                                                 p_org_id,
6320                                                                                 p_instance_id, trunc(AD.DEMAND_DATE),
6321                                                                                 p_level_id, AD.DEMAND_CLASS),
6322                                                                                 AD.DEMAND_CLASS)),
6323                                                         AD.organization_id, 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)), TEMP.DEMAND_CLASS),
6336                                                 30, decode(AD.source_organization_id,
6337                                                         NULL, DECODE(AD.DEMAND_CLASS, null, null,
6338                                                                 DECODE(TEMP.DEMAND_CLASS, '-1',
6339                                                                         MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(
6340                                                                                 null, null,
6341                                                                                 Decode(sign(trunc(AD.Demand_Date) - MSC_ATP_ALLOC.G_Atf_Date),
6342                                                                                         1, p_family_id,
6343                                                                                         Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
6344                                                                                                 'Y', AD.Original_Item_Id,
6345                                                                                                 p_family_id)),
6346                                                                                 p_org_id,
6347                                                                                 p_instance_id, trunc(AD.DEMAND_DATE),
6348                                                                                 p_level_id, AD.DEMAND_CLASS),
6349                                                                                 AD.DEMAND_CLASS)),
6350                                                         -23453, DECODE(AD.DEMAND_CLASS, null, null,
6351                                                                 DECODE(TEMP.DEMAND_CLASS, '-1',
6352                                                                         MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(
6353                                                                                 null, null,
6354                                                                                 Decode(sign(trunc(AD.Demand_Date) - MSC_ATP_ALLOC.G_Atf_Date),
6355                                                                                         1, p_family_id,
6356                                                                                         Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
6357                                                                                                 'Y', AD.Original_Item_Id,
6358                                                                                                 p_family_id)),
6359                                                                                 p_org_id,
6360                                                                                 p_instance_id, trunc(AD.DEMAND_DATE),
6361                                                                                 p_level_id, AD.DEMAND_CLASS),
6362                                                                                 AD.DEMAND_CLASS)),
6363                                                         AD.organization_id, 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)), TEMP.DEMAND_CLASS),
6376                                                 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                                         TEMP.DEMAND_CLASS,
6390                                         p_level_id))   col11, -- allocated_quantity
6391                         p_record_type                   col12, -- record_type
6392                         p_scenario_id                   col13, -- scenario_id
6393                         AD.ORDER_NUMBER                 col14, -- disposition_name
6394                         TEMP.DEMAND_CLASS               col15, -- demand_class
6395                         p_uom_code                      col16, -- UOM Code
6396                         --bug3671294
6397                         msi.item_name                   col17, -- Item name
6398                         --p_inv_item_name                 col17, -- Item name
6399                         p_org_code                      col18, -- Organization code
6400                         TEMP.PRIORITY                   col19, -- sysdate priroty
6401                         TEMP.ALLOCATION_PERCENT         col20, -- sysdate allocation percent
6402                         -- time_phased_atp
6403                         p_sr_member_id                  col21, -- request_item_id
6404                 	Decode(AD.inventory_item_id, p_family_id,
6405                 	        Decode(AD.original_item_id, p_member_id,
6406                 	                AD.Pf_Display_Flag,
6407                 	                Decode(sign(trunc(AD.Original_Demand_Date) - MSC_ATP_ALLOC.G_Atf_Date),
6408                 	                        1, AD.Pf_Display_Flag,
6409                 	                        1)),
6410                 	        AD.Pf_Display_Flag)     col22,
6411                         -1 * NVL(AD.DEMAND_QUANTITY,
6412                                  AD.ALLOCATED_QUANTITY)*
6413                         DECODE(decode(AD.ORIGINAL_ORIGINATION_TYPE,
6414                                 6, decode(AD.source_organization_id,
6415                                         NULL, DECODE(AD.DEMAND_CLASS, null, null,
6416                                                 DECODE(TEMP.DEMAND_CLASS, '-1',
6417                                                         MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(
6418                                                                 null, null,
6419                                                                 Decode(sign(trunc(AD.Demand_Date) - MSC_ATP_ALLOC.G_Atf_Date),
6420                                                                         1, p_family_id,
6421                                                                         Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
6422                                                                                 'Y', AD.Original_Item_Id,
6423                                                                                 p_family_id)),
6424                                                                 p_org_id,
6425                                                                 p_instance_id, trunc(AD.DEMAND_DATE),
6426                                                                 p_level_id, AD.DEMAND_CLASS),
6427                                                         AD.DEMAND_CLASS)),
6428                                         -23453, DECODE(AD.DEMAND_CLASS, null, null,
6429                                                 DECODE(TEMP.DEMAND_CLASS, '-1',
6430                                                         MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(
6431                                                                 null, null,
6432                                                                 Decode(sign(trunc(AD.Demand_Date) - MSC_ATP_ALLOC.G_Atf_Date),
6433                                                                         1, p_family_id,
6434                                                                         Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
6435                                                                                 'Y', AD.Original_Item_Id,
6436                                                                                 p_family_id)),
6437                                                                 p_org_id,
6438                                                                 p_instance_id, trunc(AD.DEMAND_DATE),
6439                                                                 p_level_id, AD.DEMAND_CLASS),
6440                                                         AD.DEMAND_CLASS)),
6441                                         AD.organization_id, 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)), NULL),
6454                                 30, decode(AD.source_organization_id,
6455                                         NULL, DECODE(AD.DEMAND_CLASS, null, null,
6456                                                 DECODE(TEMP.DEMAND_CLASS, '-1',
6457                                                         MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(
6458                                                                 null, null,
6459                                                                 Decode(sign(trunc(AD.Demand_Date) - MSC_ATP_ALLOC.G_Atf_Date),
6460                                                                         1, p_family_id,
6461                                                                         Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
6462                                                                                 'Y', AD.Original_Item_Id,
6463                                                                                 p_family_id)),
6464                                                                 p_org_id,
6465                                                                 p_instance_id, trunc(AD.DEMAND_DATE),
6466                                                                 p_level_id, AD.DEMAND_CLASS),
6467                                                         AD.DEMAND_CLASS)),
6468                                         -23453, DECODE(AD.DEMAND_CLASS, null, null,
6469                                                 DECODE(TEMP.DEMAND_CLASS, '-1',
6470                                                         MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(
6471                                                                 null, null,
6472                                                                 Decode(sign(trunc(AD.Demand_Date) - MSC_ATP_ALLOC.G_Atf_Date),
6473                                                                         1, p_family_id,
6474                                                                         Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
6475                                                                                 'Y', AD.Original_Item_Id,
6476                                                                                 p_family_id)),
6477                                                                 p_org_id,
6478                                                                 p_instance_id, trunc(AD.DEMAND_DATE),
6479                                                                 p_level_id, AD.DEMAND_CLASS),
6480                                                         AD.DEMAND_CLASS)),
6481                                         AD.organization_id, 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)), NULL),
6494                                 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                                 TEMP.DEMAND_CLASS, 1,
6508                                 MSC_AATP_FUNC.Get_Item_Demand_Alloc_Percent(p_plan_id,
6509                                         AD.PARENT_DEMAND_ID,
6510                                         trunc(AD.DEMAND_DATE),
6511                                         AD.USING_ASSEMBLY_ITEM_ID,
6512                                         DECODE(AD.SOURCE_ORGANIZATION_ID,
6513                                         -23453, null,
6514                                         AD.SOURCE_ORGANIZATION_ID),
6515                                         Decode(sign(trunc(AD.Demand_Date) - MSC_ATP_ALLOC.G_Atf_Date),
6516                                                 1, p_family_id,
6517                                                 Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
6518                                                         'Y', AD.Original_Item_Id,
6519                                                         p_family_id)),
6520                                         p_org_id,
6521                                         p_instance_id,
6522                                         AD.ORIGINAL_ORIGINATION_TYPE,
6523                                         decode(AD.ORIGINAL_ORIGINATION_TYPE,
6524                                                 6, decode(AD.source_organization_id,
6525                                                         NULL, DECODE(AD.DEMAND_CLASS, null, null,
6526                                                                 DECODE(TEMP.DEMAND_CLASS, '-1',
6527                                                                         MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(
6528                                                                                 null, null,
6529                                                                                 Decode(sign(trunc(AD.Demand_Date) - MSC_ATP_ALLOC.G_Atf_Date),
6530                                                                                         1, p_family_id,
6531                                                                                         Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
6532                                                                                                 'Y', AD.Original_Item_Id,
6533                                                                                                 p_family_id)),
6534                                                                                 p_org_id,
6535                                                                                 p_instance_id, trunc(AD.DEMAND_DATE),
6536                                                                                 p_level_id, AD.DEMAND_CLASS),
6537                                                                                 AD.DEMAND_CLASS)),
6538                                                         -23453, DECODE(AD.DEMAND_CLASS, null, null,
6539                                                                 DECODE(TEMP.DEMAND_CLASS, '-1',
6540                                                                         MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(
6541                                                                                 null, null,
6542                                                                                 Decode(sign(trunc(AD.Demand_Date) - MSC_ATP_ALLOC.G_Atf_Date),
6543                                                                                         1, p_family_id,
6544                                                                                         Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
6545                                                                                                 'Y', AD.Original_Item_Id,
6546                                                                                                 p_family_id)),
6547                                                                                 p_org_id,
6548                                                                                 p_instance_id, trunc(AD.DEMAND_DATE),
6549                                                                                 p_level_id, AD.DEMAND_CLASS),
6550                                                                                 AD.DEMAND_CLASS)),
6551                                                         AD.organization_id, 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)), TEMP.DEMAND_CLASS),
6564                                                 30, decode(AD.source_organization_id,
6565                                                         NULL, DECODE(AD.DEMAND_CLASS, null, null,
6566                                                                 DECODE(TEMP.DEMAND_CLASS, '-1',
6567                                                                         MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(
6568                                                                                 null, null,
6569                                                                                 Decode(sign(trunc(AD.Demand_Date) - MSC_ATP_ALLOC.G_Atf_Date),
6570                                                                                         1, p_family_id,
6571                                                                                         Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
6572                                                                                                 'Y', AD.Original_Item_Id,
6573                                                                                                 p_family_id)),
6574                                                                                 p_org_id,
6575                                                                                 p_instance_id, trunc(AD.DEMAND_DATE),
6576                                                                                 p_level_id, AD.DEMAND_CLASS),
6577                                                                                 AD.DEMAND_CLASS)),
6578                                                         -23453, DECODE(AD.DEMAND_CLASS, null, null,
6579                                                                 DECODE(TEMP.DEMAND_CLASS, '-1',
6580                                                                         MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(
6581                                                                                 null, null,
6582                                                                                 Decode(sign(trunc(AD.Demand_Date) - MSC_ATP_ALLOC.G_Atf_Date),
6583                                                                                         1, p_family_id,
6584                                                                                         Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
6585                                                                                                 'Y', AD.Original_Item_Id,
6586                                                                                                 p_family_id)),
6587                                                                                 p_org_id,
6588                                                                                 p_instance_id, trunc(AD.DEMAND_DATE),
6589                                                                                 p_level_id, AD.DEMAND_CLASS),
6590                                                                                 AD.DEMAND_CLASS)),
6591                                                         AD.organization_id, 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)), TEMP.DEMAND_CLASS),
6604                                                 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                                         TEMP.DEMAND_CLASS,
6618                                         p_level_id))    col23, -- original demand quantity
6619                         trunc(AD.original_demand_date)  col24, --Bug_3693892 added trunc
6620                         AD.original_item_id             col25,
6621                         AD.original_origination_type    col26,
6622                         -1 * AD.ALLOCATED_QUANTITY      col27,  -- unallocated quantity
6623                         MTPS.LOCATION                   col28, --bug3263368
6624                         MTP.PARTNER_NAME                col29, --bug3263368
6625                         AD.DEMAND_CLASS                 col30, --bug3263368
6626                         AD.REQUEST_DATE                 col31  --bug3263368
6627                 FROM
6628                         MSC_ALLOC_DEMANDS AD,
6629                         MSC_ALLOC_TEMP TEMP,
6630                         MSC_TRADING_PARTNERS    MTP,--bug3263368
6631                         MSC_TRADING_PARTNER_SITES    MTPS, --bug3263368
6632                         MSC_SYSTEM_ITEMS    msi --bug3671294
6633                 WHERE
6634                          AD.PLAN_ID = p_plan_id
6635                 AND      AD.SR_INSTANCE_ID = p_instance_id
6636                 AND      AD.INVENTORY_ITEM_ID in (p_member_id, p_family_id)
6637                 AND      AD.ORGANIZATION_ID = p_org_id
6638                 AND      AD.ALLOCATED_QUANTITY <> 0
6639                 --bug3671294 start
6640                 AND      msi.PLAN_ID = AD.PLAN_ID
6641                 AND      msi.SR_INSTANCE_ID = AD.SR_INSTANCE_ID
6642                 AND      msi.ORGANIZATION_ID = AD.ORGANIZATION_ID
6643                 AND      msi.INVENTORY_ITEM_ID = AD.ORIGINAL_ITEM_ID
6644                 --bug3671294 end
6645                 AND      TRUNC(AD.DEMAND_DATE) < NVL(p_itf, TRUNC(AD.DEMAND_DATE) + 1)
6646                 AND      AD.ORIGINATION_TYPE <> 52  -- Ignore copy SO and copy stealing records for allocation WB
6647                 AND      AD.SHIP_TO_SITE_ID  = MTPS.PARTNER_SITE_ID(+) --bug3263368
6648                 AND      AD.CUSTOMER_ID = MTP.PARTNER_ID(+) --bug3263368
6649 
6650                 UNION ALL
6651 
6652                 SELECT  p_session_id                    col1,
6653                         p_level_id                      col2,
6654                         p_sr_member_id                  col3 ,
6655                         p_org_id                        col4,
6656                         p_instance_id                   col5,
6657                         SA.PARENT_TRANSACTION_ID        col6,
6658                         2                               col7, -- supply
6659                         TRUNC(SA.SUPPLY_DATE)           col8,
6660                         NVL(SA.SUPPLY_QUANTITY,
6661                           SA.ALLOCATED_QUANTITY)        col9,
6662                         SA.ORDER_TYPE                   col10,
6663                         SA.ALLOCATED_QUANTITY
6664                          * DECODE(DECODE(SA.DEMAND_CLASS, null, null,
6665                                      DECODE(TEMP.DEMAND_CLASS,'-1',
6666                                         MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(
6667                                           null,
6668                                           null,
6669                                           Decode(sign(trunc(SA.Supply_Date) - MSC_ATP_ALLOC.G_Atf_Date),
6670                                                 1, p_family_id,
6671                                                 Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
6672                                                         'Y', SA.Original_Item_Id,
6673                                                         p_family_id)),
6674                                           p_org_id,
6675                                           p_instance_id,
6676                                           TRUNC(SA.SUPPLY_DATE),
6677                                           p_level_id,
6678                                           SA.DEMAND_CLASS),
6679                                         SA.DEMAND_CLASS)),
6680                                 TEMP.DEMAND_CLASS,
6681                                         1,
6682                                 NULL,
6683                                         NVL(MSC_AATP_FUNC.Get_DC_Alloc_Percent(
6684                                         p_instance_id,
6685                                         Decode(sign(trunc(SA.Supply_Date) - MSC_ATP_ALLOC.G_Atf_Date),
6686                                                 1, p_family_id,
6687                                                 Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
6688                                                         'Y', SA.Original_Item_Id,
6689                                                         p_family_id)),
6690                                         p_org_id,
6691                                         null,
6692                                         null,
6693                                         TEMP.DEMAND_CLASS,
6694                                         TRUNC(SA.SUPPLY_DATE)),
6695                                         1),
6696                                 DECODE(MSC_AATP_FUNC.Get_DC_Alloc_Percent(
6697                                         p_instance_id,
6698                                         Decode(sign(trunc(SA.Supply_Date) - MSC_ATP_ALLOC.G_Atf_Date),
6699                                                 1, p_family_id,
6700                                                 Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
6701                                                         'Y', SA.Original_Item_Id,
6702                                                         p_family_id)),
6703                                         p_org_id,
6704                                         null,
6705                                         null,
6706                                         TEMP.DEMAND_CLASS,
6707                                         TRUNC(SA.SUPPLY_DATE)),
6708                                         NULL,
6709                                         1,
6710                                         0)
6711                                 )                       col11, -- allocated_quantity
6712                         p_record_type                   col12, -- record_type
6713                         p_scenario_id                   col13, -- scenario_id
6714                         DECODE(SA.ORIGINAL_ORDER_TYPE,
6715                                 5, to_char(SA.PARENT_TRANSACTION_ID),
6716                                 SA.ORDER_NUMBER)        col14, -- disposition_name
6717                         TEMP.DEMAND_CLASS               col15, -- demand_class
6718                         p_uom_code                      col16, -- UOM Code
6719                         --bug3671294
6720                         msi.item_name                   col17, -- Item name
6721                         --p_inv_item_name                 col17, -- Item name
6722                         p_org_code                      col18, -- Org code
6723                         TEMP.PRIORITY                   col19, -- sysdate priroty
6724                         TEMP.ALLOCATION_PERCENT         col20,  -- sysdate allocation percent
6725                         p_sr_family_id                  col21,
6726                         l_null_num                      col22, -- Bug 3875786 - local variable used for NULL
6727                         l_null_num                      col23, -- Bug 3875786 - local variable used for NULL
6728                         l_null_date                     col24, -- Bug 3875786 - local variable used for NULL
6729                         SA.original_item_id             col25,
6730                         SA.ORIGINAL_ORDER_TYPE          col26,
6731                         SA.ALLOCATED_QUANTITY           col27,  -- unallocated quantity
6732                         l_null_char                     col28, --bug3263368 ORIG_CUSTOMER_SITE_NAME --Bug 3875786
6733                         l_null_char                     col29, --bug3263368 ORIG_CUSTOMER_NAME --Bug 3875786
6734                         l_null_char                     col30, --bug3263368 ORIG_DEMAND_CLASS --Bug 3875786
6735                         l_null_date                     col31  --bug3263368 ORIG_REQUEST_DATE -- Bug 3875786 - local variable used for NULL
6736 
6737                 FROM
6738                         MSC_ALLOC_SUPPLIES SA,
6739                         MSC_ALLOC_TEMP TEMP,
6740                         MSC_SYSTEM_ITEMS    msi --bug3671294
6741                 WHERE
6742                          SA.PLAN_ID = p_plan_id
6743                 AND      SA.SR_INSTANCE_ID = p_instance_id
6744                 AND      SA.INVENTORY_ITEM_ID in (p_member_id, p_family_id)
6745                 AND      SA.ORGANIZATION_ID = p_org_id
6746                 AND      SA.ALLOCATED_QUANTITY <> 0
6747                 --bug3671294 start
6748                 AND      msi.PLAN_ID = SA.PLAN_ID
6749                 AND      msi.SR_INSTANCE_ID = SA.SR_INSTANCE_ID
6750                 AND      msi.ORGANIZATION_ID = SA.ORGANIZATION_ID
6751                 AND      msi.INVENTORY_ITEM_ID = SA.ORIGINAL_ITEM_ID
6752                 --bug3671294 end
6753                 AND      TRUNC(SA.SUPPLY_DATE) >= DECODE(SA.ORIGINAL_ORDER_TYPE,
6754                                                         27, TRUNC(SYSDATE),
6755                                                         28, TRUNC(SYSDATE),
6756                                                         TRUNC(SA.SUPPLY_DATE))
6757                 AND      TRUNC(SA.SUPPLY_DATE) < NVL(p_itf, TRUNC(SA.SUPPLY_DATE) + 1)
6758                 );
6759         ELSIF p_type = User_Defined_CC THEN
6760                 INSERT INTO MRP_ATP_DETAILS_TEMP
6761                 (session_id, atp_level, inventory_item_id, organization_id, identifier1, identifier3,
6762                 supply_demand_type, supply_demand_date, supply_demand_quantity, supply_demand_source_type,
6763                 allocated_quantity, record_type, scenario_id, disposition_name, demand_class, class, customer_id,
6764                 customer_site_id, uom_code, inventory_item_name, organization_code, identifier2, identifier4,
6765                 Customer_Name, Customer_Site_Name, request_item_id, pf_display_flag, original_demand_quantity,
6766                 original_demand_date, original_item_id, original_supply_demand_type, unallocated_quantity,
6767                 ORIG_CUSTOMER_SITE_NAME,ORIG_CUSTOMER_NAME,ORIG_DEMAND_CLASS,ORIG_REQUEST_DATE ) --bug3263368
6768                 SELECT col1, col2, col3, col4, col5, col6, col7, col8, col9, col10,
6769                 col11, col12, col13, col14, col15, col16, col17, col18, col19, col20, col21, col22, col23, col24, col25,
6770                 col26, col27, col28, col29, col30, col31, col32,col33,col34,col35,col36
6771                 FROM
6772                 (SELECT p_session_id                            col1, -- session_id
6773                         p_level_id                              col2, -- level_id
6774                         p_sr_member_id                          col3, -- inventory_item_id
6775                         p_org_id                                col4, -- organization_id
6776                         p_instance_id                           col5, -- Identifier1
6777                         AD.PARENT_DEMAND_ID                     col6, -- Identifier3
6778                         1                                       col7, -- supply_demand_type
6779                         TRUNC(AD.DEMAND_DATE)                   col8, -- supply_demand_date
6780                         -1 * NVL(AD.DEMAND_QUANTITY,
6781                              AD.ALLOCATED_QUANTITY)             col9, -- supply_demand_quantity
6782                         AD.ORIGINATION_TYPE                     col10,-- supply_demand_source_type
6783                         -1 * AD.ALLOCATED_QUANTITY *
6784                                 DECODE(DECODE(AD.CUSTOMER_ID, NULL, NULL,
6785                                         0, NULL,
6786                                         decode(AD.origination_type,
6787                                                 6, decode(AD.source_organization_id,
6788                                                         NULL, MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(
6789                                                                 AD.CUSTOMER_ID, AD.SHIP_TO_SITE_ID,
6790                                                                 Decode(sign(trunc(AD.Demand_Date) - MSC_ATP_ALLOC.G_Atf_Date),
6791                                                                         1, p_family_id,
6792                                                                         Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
6793                                                                                 'Y', AD.Original_Item_Id,
6794                                                                                 p_family_id)),
6795                                                                 p_org_id, p_instance_id, TRUNC(AD.ORIGINAL_DEMAND_DATE),
6796                                                                 p_level_id, NULL),
6797                                                         -23453, MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(
6798                                                                 AD.CUSTOMER_ID, AD.SHIP_TO_SITE_ID,
6799                                                                 Decode(sign(trunc(AD.Demand_Date) - MSC_ATP_ALLOC.G_Atf_Date),
6800                                                                         1, p_family_id,
6801                                                                         Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
6802                                                                                 'Y', AD.Original_Item_Id,
6803                                                                                 p_family_id)),
6804                                                                 p_org_id, p_instance_id, TRUNC(AD.ORIGINAL_DEMAND_DATE),
6805                                                                 p_level_id, NULL),
6806                                                         AD.organization_id, MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(
6807                                                                 AD.CUSTOMER_ID, AD.SHIP_TO_SITE_ID,
6808                                                                 Decode(sign(trunc(AD.Demand_Date) - MSC_ATP_ALLOC.G_Atf_Date),
6809                                                                         1, p_family_id,
6810                                                                         Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
6811                                                                                 'Y', AD.Original_Item_Id,
6812                                                                                 p_family_id)),
6813                                                                 p_org_id, p_instance_id, TRUNC(AD.ORIGINAL_DEMAND_DATE),
6814                                                                 p_level_id, NULL),
6815                                                         NULL),
6816                                                 30, decode(AD.source_organization_id,
6817                                                         NULL, MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(
6818                                                                 AD.CUSTOMER_ID, AD.SHIP_TO_SITE_ID,
6819                                                                 Decode(sign(trunc(AD.Demand_Date) - MSC_ATP_ALLOC.G_Atf_Date),
6820                                                                         1, p_family_id,
6821                                                                         Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
6822                                                                                 'Y', AD.Original_Item_Id,
6823                                                                                 p_family_id)),
6824                                                                 p_org_id, p_instance_id, TRUNC(AD.ORIGINAL_DEMAND_DATE),
6825                                                                 p_level_id, NULL),
6826                                                         -23453, MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(
6827                                                                 AD.CUSTOMER_ID, AD.SHIP_TO_SITE_ID,
6828                                                                 Decode(sign(trunc(AD.Demand_Date) - MSC_ATP_ALLOC.G_Atf_Date),
6829                                                                         1, p_family_id,
6830                                                                         Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
6831                                                                                 'Y', AD.Original_Item_Id,
6832                                                                                 p_family_id)),
6833                                                                 p_org_id, p_instance_id, TRUNC(AD.ORIGINAL_DEMAND_DATE),
6834                                                                 p_level_id, NULL),
6835                                                         AD.organization_id, MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(
6836                                                                 AD.CUSTOMER_ID, AD.SHIP_TO_SITE_ID,
6837                                                                 Decode(sign(trunc(AD.Demand_Date) - MSC_ATP_ALLOC.G_Atf_Date),
6838                                                                         1, p_family_id,
6839                                                                         Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
6840                                                                                 'Y', AD.Original_Item_Id,
6841                                                                                 p_family_id)),
6842                                                                 p_org_id, p_instance_id, TRUNC(AD.ORIGINAL_DEMAND_DATE),
6843                                                                 p_level_id, NULL),
6844                                                         NULL),
6845                                                 MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(
6846                                                         AD.CUSTOMER_ID, AD.SHIP_TO_SITE_ID,
6847                                                         Decode(sign(trunc(AD.Demand_Date) - MSC_ATP_ALLOC.G_Atf_Date),
6848                                                                 1, p_family_id,
6849                                                                 Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
6850                                                                         'Y', AD.Original_Item_Id,
6851                                                                         p_family_id)),
6852                                                         p_org_id, p_instance_id,
6853                                                         TRUNC(AD.ORIGINAL_DEMAND_DATE),
6854                                                         p_level_id, NULL))),
6855                                         TEMP.LEVEL_3_DEMAND_CLASS, 1,
6856                                         MSC_AATP_FUNC.Get_Item_Demand_Alloc_Percent(p_plan_id,
6857                                                 AD.PARENT_DEMAND_ID,
6858                                                 TRUNC(AD.ORIGINAL_DEMAND_DATE),
6859                                                 AD.USING_ASSEMBLY_ITEM_ID,
6860                                                 DECODE(AD.SOURCE_ORGANIZATION_ID,
6861                                                 -23453, null,
6862                                                 AD.SOURCE_ORGANIZATION_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,
6869                                                 p_instance_id,
6870                                                 AD.ORIGINATION_TYPE,
6871                                                 DECODE(AD.CUSTOMER_ID, NULL, TEMP.LEVEL_3_DEMAND_CLASS,
6872                                                         0, TEMP.LEVEL_3_DEMAND_CLASS,
6873                                                         decode(AD.origination_type,
6874                                                                 6, decode(AD.source_organization_id,
6875                                                                         NULL, MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(
6876                                                                                 AD.CUSTOMER_ID, AD.SHIP_TO_SITE_ID,
6877                                                                                 Decode(sign(trunc(AD.Demand_Date) - MSC_ATP_ALLOC.G_Atf_Date),
6878                                                                                         1, p_family_id,
6879                                                                                         Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
6880                                                                                                 'Y', AD.Original_Item_Id,
6881                                                                                                 p_family_id)),
6882                                                                                 p_org_id, p_instance_id, TRUNC(AD.ORIGINAL_DEMAND_DATE),
6883                                                                                 p_level_id, NULL),
6884                                                                         -23453, MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(
6885                                                                                 AD.CUSTOMER_ID, AD.SHIP_TO_SITE_ID,
6886                                                                                 Decode(sign(trunc(AD.Demand_Date) - MSC_ATP_ALLOC.G_Atf_Date),
6887                                                                                         1, p_family_id,
6888                                                                                         Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
6889                                                                                                 'Y', AD.Original_Item_Id,
6890                                                                                                 p_family_id)),
6891                                                                                 p_org_id, p_instance_id, TRUNC(AD.ORIGINAL_DEMAND_DATE),
6892                                                                                 p_level_id, NULL),
6893                                                                         AD.organization_id, MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(
6894                                                                                 AD.CUSTOMER_ID, AD.SHIP_TO_SITE_ID,
6895                                                                                 Decode(sign(trunc(AD.Demand_Date) - MSC_ATP_ALLOC.G_Atf_Date),
6896                                                                                         1, p_family_id,
6897                                                                                         Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
6898                                                                                                 'Y', AD.Original_Item_Id,
6899                                                                                                 p_family_id)),
6900                                                                                 p_org_id, p_instance_id, TRUNC(AD.ORIGINAL_DEMAND_DATE),
6901                                                                                 p_level_id, NULL),
6902                                                                         TEMP.LEVEL_3_DEMAND_CLASS),
6903                                                                 30, decode(AD.source_organization_id,
6904                                                                         NULL, MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(
6905                                                                                 AD.CUSTOMER_ID, AD.SHIP_TO_SITE_ID,
6906                                                                                 Decode(sign(trunc(AD.Demand_Date) - MSC_ATP_ALLOC.G_Atf_Date),
6907                                                                                         1, p_family_id,
6908                                                                                         Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
6909                                                                                                 'Y', AD.Original_Item_Id,
6910                                                                                                 p_family_id)),
6911                                                                                 p_org_id, p_instance_id, TRUNC(AD.ORIGINAL_DEMAND_DATE),
6912                                                                                 p_level_id, NULL),
6913                                                                         -23453, MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(
6914                                                                                 AD.CUSTOMER_ID, AD.SHIP_TO_SITE_ID,
6915                                                                                 Decode(sign(trunc(AD.Demand_Date) - MSC_ATP_ALLOC.G_Atf_Date),
6916                                                                                         1, p_family_id,
6917                                                                                         Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
6918                                                                                                 'Y', AD.Original_Item_Id,
6919                                                                                                 p_family_id)),
6920                                                                                 p_org_id, p_instance_id, TRUNC(AD.ORIGINAL_DEMAND_DATE),
6921                                                                                 p_level_id, NULL),
6922                                                                         AD.organization_id, MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(
6923                                                                                 AD.CUSTOMER_ID, AD.SHIP_TO_SITE_ID,
6924                                                                                 Decode(sign(trunc(AD.Demand_Date) - MSC_ATP_ALLOC.G_Atf_Date),
6925                                                                                         1, p_family_id,
6926                                                                                         Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
6927                                                                                                 'Y', AD.Original_Item_Id,
6928                                                                                                 p_family_id)),
6929                                                                                 p_org_id, p_instance_id, TRUNC(AD.ORIGINAL_DEMAND_DATE),
6930                                                                                 p_level_id, NULL),
6931                                                                         TEMP.LEVEL_3_DEMAND_CLASS),
6932                                                                 MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(
6933                                                                         AD.CUSTOMER_ID, AD.SHIP_TO_SITE_ID,
6934                                                                         Decode(sign(trunc(AD.Demand_Date) - MSC_ATP_ALLOC.G_Atf_Date),
6935                                                                                 1, p_family_id,
6936                                                                                 Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
6937                                                                                         'Y', AD.Original_Item_Id,
6938                                                                                         p_family_id)),
6939                                                                         p_org_id, p_instance_id,
6940                                                                         TRUNC(AD.ORIGINAL_DEMAND_DATE),
6941                                                                         p_level_id, NULL))),
6942                                                 TEMP.LEVEL_3_DEMAND_CLASS,
6943                                                 p_level_id))    col11, -- allocated_quantity
6944                         p_record_type                           col12, -- record_type
6945                         p_scenario_id                           col13, -- scenario_id
6946                         AD.ORDER_NUMBER                         col14, -- disposition_name
6947                         TEMP.LEVEL_3_DEMAND_CLASS               col15, -- demand_class
6948                         TEMP.LEVEL_1_DEMAND_CLASS               col16, -- class
6949                         TEMP.PARTNER_ID                         col17, -- partner_id
6950                         TEMP.PARTNER_SITE_ID                    col18, -- partner_site_id
6951                         p_uom_code                              col19, -- UOM Code
6952                         --bug3671294
6953                         msi.item_name                           col20, -- Item name
6954                         --p_inv_item_name                         col20, -- Item name
6955                         p_org_code                              col21, -- Org code
6956                         TEMP.LEVEL_3_DEMAND_CLASS_PRIORITY      col22, -- Level 3 priority
6957                         TEMP.ALLOCATION_PERCENT                 col23, -- Sysdate allocation percent
6958                         TEMP.customer_name                      col24, -- Customer Name
6959                         TEMP.customer_site_name                 col25, -- Customer Site Name
6960                         p_sr_member_id                          col26, -- request_item_id
6961                 	Decode(AD.inventory_item_id, p_family_id,
6962                 	        Decode(AD.original_item_id, p_member_id,
6963                 	                AD.Pf_Display_Flag,
6964                 	                Decode(sign(trunc(AD.Original_Demand_Date) - MSC_ATP_ALLOC.G_Atf_Date),
6965                 	                        1, AD.Pf_Display_Flag,
6966                 	                        1)),
6967                 	        AD.Pf_Display_Flag)             col27,
6968                         -1 * NVL(AD.DEMAND_QUANTITY,
6969                              AD.ALLOCATED_QUANTITY)*
6970                                 DECODE(DECODE(AD.CUSTOMER_ID, NULL, NULL,
6971                                         0, NULL,
6972                                         decode(AD.origination_type,
6973                                                 6, decode(AD.source_organization_id,
6974                                                         NULL, MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(
6975                                                                 AD.CUSTOMER_ID, AD.SHIP_TO_SITE_ID,
6976                                                                 Decode(sign(trunc(AD.Demand_Date) - MSC_ATP_ALLOC.G_Atf_Date),
6977                                                                         1, p_family_id,
6978                                                                         Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
6979                                                                                 'Y', AD.Original_Item_Id,
6980                                                                                 p_family_id)),
6981                                                                 p_org_id, p_instance_id, TRUNC(AD.ORIGINAL_DEMAND_DATE),
6982                                                                 p_level_id, NULL),
6983                                                         -23453, MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(
6984                                                                 AD.CUSTOMER_ID, AD.SHIP_TO_SITE_ID,
6985                                                                 Decode(sign(trunc(AD.Demand_Date) - MSC_ATP_ALLOC.G_Atf_Date),
6986                                                                         1, p_family_id,
6987                                                                         Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
6988                                                                                 'Y', AD.Original_Item_Id,
6989                                                                                 p_family_id)),
6990                                                                 p_org_id, p_instance_id, TRUNC(AD.ORIGINAL_DEMAND_DATE),
6991                                                                 p_level_id, NULL),
6992                                                         AD.organization_id, MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(
6993                                                                 AD.CUSTOMER_ID, AD.SHIP_TO_SITE_ID,
6994                                                                 Decode(sign(trunc(AD.Demand_Date) - MSC_ATP_ALLOC.G_Atf_Date),
6995                                                                         1, p_family_id,
6996                                                                         Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
6997                                                                                 'Y', AD.Original_Item_Id,
6998                                                                                 p_family_id)),
6999                                                                 p_org_id, p_instance_id, TRUNC(AD.ORIGINAL_DEMAND_DATE),
7000                                                                 p_level_id, NULL),
7001                                                         NULL),
7002                                                 30, decode(AD.source_organization_id,
7003                                                         NULL, MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(
7004                                                                 AD.CUSTOMER_ID, AD.SHIP_TO_SITE_ID,
7005                                                                 Decode(sign(trunc(AD.Demand_Date) - MSC_ATP_ALLOC.G_Atf_Date),
7006                                                                         1, p_family_id,
7007                                                                         Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
7008                                                                                 'Y', AD.Original_Item_Id,
7009                                                                                 p_family_id)),
7010                                                                 p_org_id, p_instance_id, TRUNC(AD.ORIGINAL_DEMAND_DATE),
7011                                                                 p_level_id, NULL),
7012                                                         -23453, MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(
7013                                                                 AD.CUSTOMER_ID, AD.SHIP_TO_SITE_ID,
7014                                                                 Decode(sign(trunc(AD.Demand_Date) - MSC_ATP_ALLOC.G_Atf_Date),
7015                                                                         1, p_family_id,
7016                                                                         Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
7017                                                                                 'Y', AD.Original_Item_Id,
7018                                                                                 p_family_id)),
7019                                                                 p_org_id, p_instance_id, TRUNC(AD.ORIGINAL_DEMAND_DATE),
7020                                                                 p_level_id, NULL),
7021                                                         AD.organization_id, MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(
7022                                                                 AD.CUSTOMER_ID, AD.SHIP_TO_SITE_ID,
7023                                                                 Decode(sign(trunc(AD.Demand_Date) - MSC_ATP_ALLOC.G_Atf_Date),
7024                                                                         1, p_family_id,
7025                                                                         Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
7026                                                                                 'Y', AD.Original_Item_Id,
7027                                                                                 p_family_id)),
7028                                                                 p_org_id, p_instance_id, TRUNC(AD.ORIGINAL_DEMAND_DATE),
7029                                                                 p_level_id, NULL),
7030                                                         NULL),
7031                                                 MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(
7032                                                         AD.CUSTOMER_ID, AD.SHIP_TO_SITE_ID,
7033                                                         Decode(sign(trunc(AD.Demand_Date) - MSC_ATP_ALLOC.G_Atf_Date),
7034                                                                 1, p_family_id,
7035                                                                 Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
7036                                                                         'Y', AD.Original_Item_Id,
7037                                                                         p_family_id)),
7038                                                         p_org_id, p_instance_id,
7039                                                         TRUNC(AD.ORIGINAL_DEMAND_DATE),
7040                                                         p_level_id, NULL))),
7041                                         TEMP.LEVEL_3_DEMAND_CLASS, 1,
7042                                         MSC_AATP_FUNC.Get_Item_Demand_Alloc_Percent(p_plan_id,
7043                                                 AD.PARENT_DEMAND_ID,
7044                                                 TRUNC(AD.ORIGINAL_DEMAND_DATE),
7045                                                 AD.USING_ASSEMBLY_ITEM_ID,
7046                                                 DECODE(AD.SOURCE_ORGANIZATION_ID,
7047                                                 -23453, null,
7048                                                 AD.SOURCE_ORGANIZATION_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,
7055                                                 p_instance_id,
7056                                                 AD.ORIGINATION_TYPE,
7057                                                 DECODE(AD.CUSTOMER_ID, NULL, TEMP.LEVEL_3_DEMAND_CLASS,
7058                                                         0, TEMP.LEVEL_3_DEMAND_CLASS,
7059                                                         decode(AD.origination_type,
7060                                                                 6, decode(AD.source_organization_id,
7061                                                                         NULL, MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(
7062                                                                                 AD.CUSTOMER_ID, AD.SHIP_TO_SITE_ID,
7063                                                                                 Decode(sign(trunc(AD.Demand_Date) - MSC_ATP_ALLOC.G_Atf_Date),
7064                                                                                         1, p_family_id,
7065                                                                                         Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
7066                                                                                                 'Y', AD.Original_Item_Id,
7067                                                                                                 p_family_id)),
7068                                                                                 p_org_id, p_instance_id, TRUNC(AD.ORIGINAL_DEMAND_DATE),
7069                                                                                 p_level_id, NULL),
7070                                                                         -23453, MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(
7071                                                                                 AD.CUSTOMER_ID, AD.SHIP_TO_SITE_ID,
7072                                                                                 Decode(sign(trunc(AD.Demand_Date) - MSC_ATP_ALLOC.G_Atf_Date),
7073                                                                                         1, p_family_id,
7074                                                                                         Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
7075                                                                                                 'Y', AD.Original_Item_Id,
7076                                                                                                 p_family_id)),
7077                                                                                 p_org_id, p_instance_id, TRUNC(AD.ORIGINAL_DEMAND_DATE),
7078                                                                                 p_level_id, NULL),
7079                                                                         AD.organization_id, MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(
7080                                                                                 AD.CUSTOMER_ID, AD.SHIP_TO_SITE_ID,
7081                                                                                 Decode(sign(trunc(AD.Demand_Date) - MSC_ATP_ALLOC.G_Atf_Date),
7082                                                                                         1, p_family_id,
7083                                                                                         Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
7084                                                                                                 'Y', AD.Original_Item_Id,
7085                                                                                                 p_family_id)),
7086                                                                                 p_org_id, p_instance_id, TRUNC(AD.ORIGINAL_DEMAND_DATE),
7087                                                                                 p_level_id, NULL),
7088                                                                         TEMP.LEVEL_3_DEMAND_CLASS),
7089                                                                 30, decode(AD.source_organization_id,
7090                                                                         NULL, MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(
7091                                                                                 AD.CUSTOMER_ID, AD.SHIP_TO_SITE_ID,
7092                                                                                 Decode(sign(trunc(AD.Demand_Date) - MSC_ATP_ALLOC.G_Atf_Date),
7093                                                                                         1, p_family_id,
7094                                                                                         Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
7095                                                                                                 'Y', AD.Original_Item_Id,
7096                                                                                                 p_family_id)),
7097                                                                                 p_org_id, p_instance_id, TRUNC(AD.ORIGINAL_DEMAND_DATE),
7098                                                                                 p_level_id, NULL),
7099                                                                         -23453, MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(
7100                                                                                 AD.CUSTOMER_ID, AD.SHIP_TO_SITE_ID,
7101                                                                                 Decode(sign(trunc(AD.Demand_Date) - MSC_ATP_ALLOC.G_Atf_Date),
7102                                                                                         1, p_family_id,
7103                                                                                         Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
7104                                                                                                 'Y', AD.Original_Item_Id,
7105                                                                                                 p_family_id)),
7106                                                                                 p_org_id, p_instance_id, TRUNC(AD.ORIGINAL_DEMAND_DATE),
7107                                                                                 p_level_id, NULL),
7108                                                                         AD.organization_id, MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(
7109                                                                                 AD.CUSTOMER_ID, AD.SHIP_TO_SITE_ID,
7110                                                                                 Decode(sign(trunc(AD.Demand_Date) - MSC_ATP_ALLOC.G_Atf_Date),
7111                                                                                         1, p_family_id,
7112                                                                                         Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
7113                                                                                                 'Y', AD.Original_Item_Id,
7114                                                                                                 p_family_id)),
7115                                                                                 p_org_id, p_instance_id, TRUNC(AD.ORIGINAL_DEMAND_DATE),
7116                                                                                 p_level_id, NULL),
7117                                                                         TEMP.LEVEL_3_DEMAND_CLASS),
7118                                                                 MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(
7119                                                                         AD.CUSTOMER_ID, AD.SHIP_TO_SITE_ID,
7120                                                                         Decode(sign(trunc(AD.Demand_Date) - MSC_ATP_ALLOC.G_Atf_Date),
7121                                                                                 1, p_family_id,
7122                                                                                 Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
7123                                                                                         'Y', AD.Original_Item_Id,
7124                                                                                         p_family_id)),
7125                                                                         p_org_id, p_instance_id,
7126                                                                         TRUNC(AD.ORIGINAL_DEMAND_DATE),
7127                                                                         p_level_id, NULL))),
7128                                                 TEMP.LEVEL_3_DEMAND_CLASS,
7129                                                 p_level_id))    col28, -- original demand quantity
7130                         trunc(AD.original_demand_date)          col29, --Bug_3693892 added trunc
7131                         AD.original_item_id                     col30,
7132                         AD.original_origination_type            col31,
7133                         -1 * AD.ALLOCATED_QUANTITY              col32,  -- unallocated quantity
7134                         MTPS.LOCATION                           col33, --bug3263368
7135                         MTP.PARTNER_NAME                        col34, --bug3263368
7136                         AD.DEMAND_CLASS                         col35, --bug3263368
7137                         AD.REQUEST_DATE                         col36  --bug3263368
7138                 FROM
7139                         MSC_ALLOC_DEMANDS        AD,
7140                         MSC_ALLOC_HIERARCHY_TEMP TEMP,
7141                         MSC_TRADING_PARTNERS    MTP,--bug3263368
7142                         MSC_TRADING_PARTNER_SITES    MTPS, --bug3263368
7143                         MSC_SYSTEM_ITEMS    msi --bug3671294
7144                 WHERE
7145                         AD.PLAN_ID = p_plan_id
7146                         AND AD.SR_INSTANCE_ID = p_instance_id
7147                         AND AD.INVENTORY_ITEM_ID in (p_member_id, p_family_id)
7148                         AND AD.ORGANIZATION_ID = p_org_id
7149                         AND AD.ORIGINATION_TYPE <> 52 -- For summary enhancement
7150                         AND TRUNC(AD.DEMAND_DATE) < NVL(p_itf, TRUNC(AD.DEMAND_DATE) + 1)
7151                         AND AD.ALLOCATED_QUANTITY <> 0
7152                         --bug3671294 start
7153                         AND      msi.PLAN_ID = AD.PLAN_ID
7154                         AND      msi.SR_INSTANCE_ID = AD.SR_INSTANCE_ID
7155                         AND      msi.ORGANIZATION_ID = AD.ORGANIZATION_ID
7156                         AND      msi.INVENTORY_ITEM_ID = AD.ORIGINAL_ITEM_ID
7157                         --bug3671294 end
7158                         AND AD.SHIP_TO_SITE_ID  = MTPS.PARTNER_SITE_ID(+) --bug3263368
7159                         AND AD.CUSTOMER_ID = MTP.PARTNER_ID(+)--bug3263368
7160                 UNION ALL
7161                 SELECT  p_session_id                            col1, -- session_id
7162                         p_level_id                              col2, -- level_id
7163                         p_sr_member_id                          col3, -- inventory_item_id
7164                         p_org_id                                col4, -- organization_id
7165                         p_instance_id                           col5, -- Identifier1
7166                         SA.PARENT_TRANSACTION_ID                col6, -- Identifier3
7167                         2                                       col7, -- supply_demand_type
7168                         TRUNC(SA.SUPPLY_DATE)                   col8, -- supply_demand_date
7169                         NVL(SA.SUPPLY_QUANTITY,
7170                                 SA.ALLOCATED_QUANTITY)          col9, -- supply_demand_source_quantity
7171                         SA.ORDER_TYPE                           col10, -- supply_demand_source_type
7172                         SA.ALLOCATED_QUANTITY
7173                                 * DECODE(DECODE(SA.CUSTOMER_ID, NULL, NULL,
7174                                                 MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(
7175                                                   SA.CUSTOMER_ID,
7176                                                   SA.SHIP_TO_SITE_ID,
7177                                                   Decode(sign(trunc(SA.Supply_Date) - MSC_ATP_ALLOC.G_Atf_Date),
7178                                                         1, p_family_id,
7179                                                         Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
7180                                                                 'Y', SA.Original_Item_Id,
7181                                                                 p_family_id)),
7182                                                   p_org_id,
7183                                                   p_instance_id,
7184                                                   TRUNC(SA.SUPPLY_DATE),
7185                                                   p_level_id,
7186                                                   NULL)),
7187                                         TEMP.LEVEL_3_DEMAND_CLASS,
7188                                                 1,
7189                                         NULL,
7190                                                 NVL(MSC_AATP_FUNC.Get_DC_Alloc_Percent(
7191                                                 p_instance_id,
7192                                                 Decode(sign(trunc(SA.Supply_Date) - MSC_ATP_ALLOC.G_Atf_Date),
7193                                                         1, p_family_id,
7194                                                         Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
7195                                                                 'Y', SA.Original_Item_Id,
7196                                                                 p_family_id)),
7197                                                 p_org_id,
7198                                                 null,
7199                                                 null,
7200                                                 TEMP.LEVEL_3_DEMAND_CLASS,
7201                                                 TRUNC(SA.SUPPLY_DATE)), 1),
7202                                         DECODE(MSC_AATP_FUNC.Get_DC_Alloc_Percent(
7203                                                 p_instance_id,
7204                                                 Decode(sign(trunc(SA.Supply_Date) - MSC_ATP_ALLOC.G_Atf_Date),
7205                                                         1, p_family_id,
7206                                                         Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
7207                                                                 'Y', SA.Original_Item_Id,
7208                                                                 p_family_id)),
7209                                                 p_org_id,
7210                                                 null,
7211                                                 null,
7212                                                 TEMP.LEVEL_3_DEMAND_CLASS,
7213                                                 TRUNC(SA.SUPPLY_DATE)),
7214                                                 NULL, 1, 0)
7215                                         )                       col11, -- allocated_quantity
7216                         p_record_type                           col12, -- record_type
7217                         p_scenario_id                           col13, -- scenario_id
7218                         DECODE(SA.ORIGINAL_ORDER_TYPE,
7219                                 5, to_char(SA.PARENT_TRANSACTION_ID),
7220                                 SA.ORDER_NUMBER)                col14, -- disposition_name
7221                         TEMP.LEVEL_3_DEMAND_CLASS               col15, -- demand_class
7222                         TEMP.LEVEL_1_DEMAND_CLASS               col16, -- class
7223                         TEMP.PARTNER_ID                         col17, -- partner_id
7224                         TEMP.PARTNER_SITE_ID                    col18, -- partner_site_id
7225                         p_uom_code                              col19, -- UOM Code
7226                         --bug3671294
7227                         msi.item_name                           col20, -- Item name
7228                         --p_inv_item_name                         col20, -- Item name
7229                         p_org_code                              col21, -- Org code
7230                         TEMP.LEVEL_3_DEMAND_CLASS_PRIORITY      col22, -- Level 3 priority
7231                         TEMP.ALLOCATION_PERCENT                 col23, -- Sysdate allocation percent
7232                         TEMP.customer_name                      col24, -- Customer Name
7233                         TEMP.customer_site_name                 col25, -- Customer Site Name
7234                         p_sr_member_id                          col26, -- request_item_id
7235 		        l_null_num                              col27,
7236         	        l_null_num                              col28,
7237         	        l_null_date                             col29, -- Bug 3875786 - local variable used for NULL
7238         	        SA.Original_Item_Id                     col30,
7239         	        SA.ORIGINAL_ORDER_TYPE                  col31,
7240         	        SA.ALLOCATED_QUANTITY                   col32,  -- unallocated quantity
7241         	        l_null_char                             col33, --bug3263368 ORIG_CUSTOMER_SITE_NAME --Bug 3875786
7242         	        l_null_char                             col34, --bug3263368 ORIG_CUSTOMER_NAME --Bug 3875786
7243         	        l_null_char                             col35, --bug3263368 ORIG_DEMAND_CLASS --Bug 3875786
7244         	        l_null_date                             col36  --bug3263368 ORIG_REQUEST_DATE -- Bug 3875786 - local variable used for NULL
7245         	FROM
7246                         MSC_ALLOC_SUPPLIES       SA,
7247                         MSC_ALLOC_HIERARCHY_TEMP TEMP,
7248                         MSC_SYSTEM_ITEMS    msi --bug3671294
7249                 WHERE
7250                         SA.PLAN_ID = p_plan_id
7251                         AND SA.SR_INSTANCE_ID = p_instance_id
7252                         AND SA.INVENTORY_ITEM_ID in (p_member_id, p_family_id)
7253                         AND SA.ORGANIZATION_ID = p_org_id
7254                         AND SA.ALLOCATED_QUANTITY <> 0
7255                         --bug3671294 start
7256                         AND      msi.PLAN_ID = SA.PLAN_ID
7257                         AND      msi.SR_INSTANCE_ID = SA.SR_INSTANCE_ID
7258                         AND      msi.ORGANIZATION_ID = SA.ORGANIZATION_ID
7259                         AND      msi.INVENTORY_ITEM_ID = SA.ORIGINAL_ITEM_ID
7260                         --bug3671294 end
7261                         AND TRUNC(SA.SUPPLY_DATE) >= DECODE(SA.ORIGINAL_ORDER_TYPE,
7262                                                         27, TRUNC(SYSDATE),
7263                                                         28, TRUNC(SYSDATE),
7264                                                         TRUNC(SA.SUPPLY_DATE))
7265                         AND TRUNC(SA.SUPPLY_DATE) < NVL(p_itf, TRUNC(SA.SUPPLY_DATE) + 1)
7266                 );
7267         END IF;
7268 
7269         x_insert_count := SQL%ROWCOUNT;
7270 
7271 EXCEPTION
7272         WHEN OTHERS THEN
7273                 IF PG_DEBUG in ('Y', 'C') THEN
7274                         msc_sch_wb.atp_debug('Insert_SD_Into_Details_Temp: ' || 'Error code:' || to_char(sqlcode));
7275                 END IF;
7276                 x_return_status := FND_API.G_RET_STS_ERROR;
7277 
7278 END Insert_SD_Into_Details_Temp;
7279 
7280 /*--Populate_Original_Demand_Qty--------------------------------------------
7281 |  o  Called for population of original_demand_quantity column in
7282 |       demand priority AATP scenarios
7283 +-------------------------------------------------------------------------*/
7284 PROCEDURE Populate_Original_Demand_Qty(
7285 	p_table                         IN      NUMBER,
7286 	p_session_id                    IN      NUMBER,
7287         p_plan_id                       IN      NUMBER,
7288         p_demand_class                  IN      VARCHAR2,
7289         x_return_status                 OUT     NOCOPY VARCHAR2
7290 )
7291 IS
7292         -- local variables
7293 BEGIN
7294 
7295         IF PG_DEBUG in ('Y', 'C') THEN
7296                 msc_sch_wb.atp_debug('********** Begin Populate_Original_Demand_Qty Procedure **********');
7297                 msc_sch_wb.atp_debug('Populate_Original_Demand_Qty: ' || 'p_table: '|| to_char(p_table));
7298                 msc_sch_wb.atp_debug('Populate_Original_Demand_Qty: ' || 'p_session_id: '|| to_char(p_session_id));
7299         END IF;
7300 
7301         -- Initializing API return code
7302         x_return_status := FND_API.G_RET_STS_SUCCESS;
7303 
7304         /* Clear msc_alloc_temp before use */
7305         DELETE msc_alloc_temp;
7306 
7307         IF p_table = MADT THEN
7308 
7309                 /* Do netting in SQL and insert original demand qtys in alloc temp table*/
7310                 INSERT INTO MSC_ALLOC_TEMP(
7311                         demand_class,
7312                         demand_id,
7313                         supply_demand_quantity
7314                 )
7315                 (SELECT demand_class,
7316                         parent_demand_id,
7317                         sum(allocated_quantity)
7318                  FROM   msc_alloc_demands
7319                  WHERE  (demand_class, parent_demand_id) in
7320                                 (SELECT  demand_class,
7321                                          identifier3
7322                                  FROM    mrp_atp_details_temp
7323                                  WHERE   session_id = p_session_id
7324                                  AND     supply_demand_type = 1
7325                                  AND     record_type = 2)
7326                  AND    plan_id = p_plan_id
7327                  GROUP BY
7328                         demand_class,
7329                         parent_demand_id
7330                 );
7331 
7332                 /* Now update original demand qtys in mrp_atp_details_temp table*/
7333                 UPDATE  mrp_atp_details_temp madt
7334                 SET     madt.original_demand_quantity =
7335                                (select  -1*mat.supply_demand_quantity
7336                                 from    msc_alloc_temp mat
7337                                 where   mat.demand_class = madt.demand_class
7338                                 and     mat.demand_id = madt.identifier3)
7339                 WHERE   madt.session_id = p_session_id
7340                 AND     madt.supply_demand_type = 1
7341                 AND     madt.record_type = 2;
7342 
7343         ELSIF p_table = MASDDT THEN
7344 
7345                 /* Do netting in SQL and insert original demand qtys in alloc temp table*/
7346                 INSERT INTO MSC_ALLOC_TEMP(
7347                         demand_id,
7348                         supply_demand_quantity
7349                 )
7350                 SELECT  parent_demand_id,
7351                         sum(allocated_quantity)
7352                 FROM    msc_alloc_demands
7353                 WHERE   parent_demand_id in
7354                                 (SELECT  identifier3
7355                                  FROM    msc_atp_sd_details_temp
7356                                  WHERE   supply_demand_type = 1)
7357                 AND     plan_id = p_plan_id
7358                 AND     demand_class = nvl(p_demand_class, demand_class)
7359                 GROUP BY
7360                         parent_demand_id;
7361 
7362                 /* Now update original demand qtys in msc_atp_sd_details_temp table*/
7363                 UPDATE  msc_atp_sd_details_temp masddt
7364                 SET     masddt.original_demand_quantity =
7365                                (select  -1*mat.supply_demand_quantity
7366                                 from    msc_alloc_temp mat
7367                                 where   mat.demand_id = masddt.identifier3)
7368                 WHERE   masddt.supply_demand_type = 1;
7369 
7370         END IF;
7371 
7372         IF PG_DEBUG in ('Y', 'C') THEN
7373                 msc_sch_wb.atp_debug('**********End Populate_Original_Demand_Qty Procedure************');
7374         END IF;
7375 
7376 EXCEPTION
7377         WHEN OTHERS THEN
7378                 IF PG_DEBUG in ('Y', 'C') THEN
7379                         msc_sch_wb.atp_debug('Populate_Original_Demand_Qty: ' || 'Error occurred: ' || to_char(sqlcode) || ':' || SQLERRM);
7380                 END IF;
7381                 x_return_status := FND_API.G_RET_STS_ERROR;
7382 
7383 END Populate_Original_Demand_Qty;
7384 
7385 /*--PF_Atp_Consume----------------------------------------------------------
7386 |  o  Called for consumption in product family scenarios.
7387 |  o  This procedure combines various procedures for consumption we have in
7388 |       one procedure.
7389 |  o  Logic is similar only difference being that we do not do b/w and f/w
7390 |       consumption across aggregate time fence. So for a negative bucket
7391 |       we exit from inner loop during backward consumption when crossing
7392 |       aggregate time fence.
7393 |  o  Also this procedure incorporates better algorithm for consumption.
7394 |  o  This procedure does following depending on the value of input variable
7395 |       p_consumption_type:
7396 |       - Backward(1) : Backward consumption
7397 |       - Forward(2) : Forward consumption
7398 |       - Cum(3) : Accumulation
7399 |       - Bw_Fw_Cum(4) : Backward consumption, forward consumption and accumulation
7400 |       - Bw_Fw(5) : Backward consumption and forward consumption
7401 +-------------------------------------------------------------------------*/
7402 PROCEDURE PF_Atp_Consume(
7403         p_atp_qty                       IN OUT  NOCOPY MRP_ATP_PUB.number_arr,
7404         x_return_status                 OUT     NOCOPY VARCHAR2,
7405         p_atp_period                    IN      MRP_ATP_PUB.date_arr  :=NULL,
7406         p_consumption_type              IN      NUMBER := Bw_Fw_Cum,
7407         p_atf_date                      IN      DATE := NULL
7408 )
7409 IS
7410         -- local variables
7411         i                               NUMBER;
7412         j                               NUMBER;
7413         l_fw_nullifying_bucket_index    NUMBER := 1;
7414 
7415 
7416 BEGIN
7417 
7418         IF PG_DEBUG in ('Y', 'C') THEN
7419                 msc_sch_wb.atp_debug('********** Begin PF_Atp_Consume Procedure **********');
7420                 msc_sch_wb.atp_debug('PF_Atp_Consume: ' || 'p_consumption_type: '|| to_char(p_consumption_type));
7421                 msc_sch_wb.atp_debug('PF_Atp_Consume: ' || 'p_atf_date: '|| to_char(p_atf_date));
7422         END IF;
7423 
7424         -- Initializing API return code
7425         x_return_status := FND_API.G_RET_STS_SUCCESS;
7426 
7427         /* p_consumption_type
7428          * 1 = b/w consumption
7429          * 2 = f/w consumption
7430          * 3 = accumulation
7431          * 4 = b/w, f/w consumption and accumulation
7432          * 5 = b/w and f/w consumption
7433          */
7434         IF p_consumption_type = Backward THEN
7435                 -- this for loop will do backward consumption
7436                 FOR i in 2..p_atp_qty.COUNT LOOP
7437                         -- backward consumption when neg atp quantity occurs
7438                         IF (p_atp_qty(i) < 0 ) THEN
7439                                 j := i - 1;
7440                                 WHILE ((j>0) and (p_atp_qty(j)>=0))  LOOP
7441                                         IF ((p_atp_period(i)>p_atf_date) and (p_atp_period(j)<=p_atf_date)) THEN
7442                                                 -- exit loop when crossing time fence
7443                                                 j := 0;
7444                                         ELSIF (p_atp_qty(j) = 0) THEN
7445                                                 --  backward one more period
7446                                                 j := j-1 ;
7447                                         ELSE
7448                                                 IF (p_atp_qty(j) + p_atp_qty(i) < 0) THEN
7449                                                         -- not enough to cover the shortage
7450                                                         p_atp_qty(i) := p_atp_qty(i) + p_atp_qty(j);
7451                                                         p_atp_qty(j) := 0;
7452                                                         j := j-1;
7453                                                 ELSE
7454                                                         -- enough to cover the shortage
7455                                                         p_atp_qty(j) := p_atp_qty(j) + p_atp_qty(i);
7456                                                         p_atp_qty(i) := 0;
7457                                                         j := -1;
7458                                                 END IF;
7459                                         END IF;
7460                                 END LOOP;
7461                         END IF;
7462                 END LOOP;
7463         ELSIF p_consumption_type = Forward THEN
7464                 -- this for loop will do forward consumption
7465                 FOR i in 1..p_atp_qty.COUNT LOOP
7466                         -- forward consumption when neg atp quantity occurs
7467                         IF (p_atp_qty(i) < 0 ) THEN
7468                                 j := i + 1;
7469                                 WHILE (j <= p_atp_qty.COUNT)  LOOP
7470                                         IF ((p_atp_period(i)<=p_atf_date) and (p_atp_period(j)>p_atf_date)) THEN
7471                                                 -- exit loop when crossing time fence
7472                                                 j := p_atp_qty.COUNT+1;
7473                                         ELSIF (p_atp_qty(j) <= 0 OR j < l_fw_nullifying_bucket_index) THEN
7474                                                 --  forward one more period if next period is negative or
7475                                                 -- less than nullifying bucket index
7476                                                 j := j+1 ;
7477                                         ELSE
7478                                                 -- You can get something from here. So set the nullifying bucket index
7479                                                 l_fw_nullifying_bucket_index := j;
7480                                                 IF (p_atp_qty(j) + p_atp_qty(i) < 0) THEN
7481                                                         -- not enough to cover the shortage
7482                                                         p_atp_qty(i) := p_atp_qty(i) + p_atp_qty(j);
7483                                                         p_atp_qty(j) := 0;
7484                                                         j := j+1;
7485                                                 ELSE
7486                                                         -- enough to cover the shortage
7487                                                         p_atp_qty(j) := p_atp_qty(j) + p_atp_qty(i);
7488                                                         p_atp_qty(i) := 0;
7489                                                         j := p_atp_qty.COUNT + 1;
7490                                                 END IF;
7491                                         END IF;
7492                                 END LOOP;
7493                         END IF;
7494                 END LOOP;
7495         ELSIF (p_consumption_type = Bw_Fw_Cum) OR (p_consumption_type = Bw_Fw) THEN
7496                 -- this for loop will do backward consumption
7497                 FOR i in 1..p_atp_qty.COUNT LOOP
7498                         -- Do backward consumption only when neg bucket and current index
7499                         -- greater l_fw_nullifying_bucket_index.
7500                         IF (p_atp_qty(i) < 0 AND i > l_fw_nullifying_bucket_index) THEN
7501                                 j := i - 1;
7502                                 WHILE ((j >= l_fw_nullifying_bucket_index) and (p_atp_qty(j)>=0))  LOOP
7503                                         IF ((p_atp_period(i)>p_atf_date) and (p_atp_period(j)<=p_atf_date)) THEN
7504                                                 -- exit loop when crossing time fence
7505                                                 j := 0;
7506                                         ELSIF (p_atp_qty(j) = 0) THEN
7507                                                 --  backward one more period
7508                                                 j := j-1 ;
7509                                         ELSE
7510                                                 IF (p_atp_qty(j) + p_atp_qty(i) < 0) THEN
7511                                                         -- not enough to cover the shortage
7512                                                         p_atp_qty(i) := p_atp_qty(i) + p_atp_qty(j);
7513                                                         p_atp_qty(j) := 0;
7514                                                         j := j-1;
7515                                                 ELSE
7516                                                         -- enough to cover the shortage
7517                                                         p_atp_qty(j) := p_atp_qty(j) + p_atp_qty(i);
7518                                                         p_atp_qty(i) := 0;
7519                                                         j := -1;
7520                                                 END IF;
7521                                         END IF;
7522                                 END LOOP;
7523                         END IF;
7524 
7525                         -- forward consumption when neg atp quantity occurs
7526                         IF (p_atp_qty(i) < 0 ) THEN
7527                                 j := i + 1;
7528                                 WHILE (j <= p_atp_qty.COUNT)  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 := p_atp_qty.COUNT+1;
7532                                         ELSIF (p_atp_qty(j) <= 0 OR j < l_fw_nullifying_bucket_index) THEN
7533                                                 --  forward one more period if next period is negative or
7534                                                 -- less than nullifying bucket index
7535                                                 j := j+1 ;
7536                                         ELSE
7537                                                 -- You can get something from here. So set the nullifying bucket index
7538                                                 l_fw_nullifying_bucket_index := j;
7539                                                 IF (p_atp_qty(j) + p_atp_qty(i) < 0) THEN
7540                                                         -- not enough to cover the shortage
7541                                                         p_atp_qty(i) := p_atp_qty(i) + p_atp_qty(j);
7542                                                         p_atp_qty(j) := 0;
7543                                                         j := j+1;
7544                                                 ELSE
7545                                                         -- enough to cover the shortage
7546                                                         p_atp_qty(j) := p_atp_qty(j) + p_atp_qty(i);
7547                                                         p_atp_qty(i) := 0;
7548                                                         j := p_atp_qty.COUNT + 1;
7549                                                 END IF;
7550                                         END IF;
7551                                 END LOOP;
7552                         END IF;
7553                 END LOOP;
7554         END IF;
7555 
7556         IF (p_consumption_type = Cum) or (p_consumption_type = Bw_Fw_Cum) THEN
7557         --Bug 3919388 (Cum is decreasing)
7558           IF ( p_atp_qty.count > 0 ) THEN
7559              IF ( p_atp_qty(1) < 0) THEN
7560                  p_atp_qty(1) := 0;
7561              END IF;
7562           END IF;
7563            -- this for loop will do the acculumation
7564           FOR i in 2..p_atp_qty.COUNT LOOP
7565              p_atp_qty(i) := GREATEST(p_atp_qty(i), 0) + GREATEST(p_atp_qty(i-1), 0); --Bug 3919388 (Cum is decreasing)
7566           END LOOP;
7567        END IF;
7568 
7569         IF PG_DEBUG in ('Y', 'C') THEN
7570                 msc_sch_wb.atp_debug('**********End PF_Atp_Consume Procedure************');
7571         END IF;
7572 
7573 EXCEPTION
7574         WHEN OTHERS THEN
7575                 IF PG_DEBUG in ('Y', 'C') THEN
7576                         msc_sch_wb.atp_debug('PF_Atp_Consume: ' || 'Error occurred: ' || to_char(sqlcode) || ':' || SQLERRM);
7577                 END IF;
7578                 x_return_status := FND_API.G_RET_STS_ERROR;
7579 
7580 END PF_Atp_Consume;
7581 
7582 /*--PF_Atp_Alloc_Consume-------------------------------------------------------
7583 |  o  Called for consumption in demand priority AATP scenario.
7584 |  o  Differences from Atp_Alloc_Consume:
7585 |       -  We do not do b/w and f/w consumption across aggregate time fence.
7586 |            So for a negative bucket we exit from inner loop during backward
7587 |            consumption when crossing aggregate time fence.
7588 |       -  Incorporates better algorithm for consumption.
7589 +----------------------------------------------------------------------------*/
7590 PROCEDURE PF_Atp_Alloc_Consume(
7591         p_atp_qty               IN OUT  NOCOPY MRP_ATP_PUB.number_arr,
7592         p_atp_period            IN      MRP_ATP_PUB.date_arr,
7593         p_atp_dc_tab	        IN      MRP_ATP_PUB.char80_arr,
7594         p_atf_date              IN      DATE,
7595         x_dc_list_tab	        OUT     NOCOPY MRP_ATP_PUB.char80_arr,
7596         x_dc_start_index        OUT     NOCOPY MRP_ATP_PUB.number_arr,
7597         x_dc_end_index          OUT     NOCOPY MRP_ATP_PUB.number_arr,
7598         x_return_status         OUT     NOCOPY VARCHAR2
7599 )
7600 IS
7601         i                               NUMBER;
7602         j                               NUMBER;
7603         l_fw_nullifying_bucket_index    NUMBER := 1;
7604 
7605 
7606 BEGIN
7607         IF PG_DEBUG in ('Y', 'C') THEN
7608                 msc_sch_wb.atp_debug('**********Begin PF_Atp_Alloc_Consume Procedure************');
7609         END IF;
7610 
7611         -- Initializing API return code
7612         x_return_status := FND_API.G_RET_STS_SUCCESS;
7613 
7614         x_dc_list_tab := MRP_ATP_PUB.Char80_Arr();
7615         x_dc_start_index := MRP_ATP_PUB.Number_Arr();
7616         x_dc_end_index := MRP_ATP_PUB.Number_Arr();
7617 
7618         x_dc_list_tab.EXTEND;
7619         x_dc_start_index.EXTEND;
7620         x_dc_end_index.EXTEND;
7621 
7622         IF PG_DEBUG in ('Y', 'C') THEN
7623                 msc_sch_wb.atp_debug('PF_Atp_Alloc_Consume: ' || 'after extend : ' || p_atp_dc_tab(p_atp_dc_tab.FIRST));
7624         END IF;
7625 
7626         x_dc_list_tab(1) := p_atp_dc_tab(p_atp_dc_tab.FIRST);
7627         x_dc_start_index(1) := 1;
7628         IF PG_DEBUG in ('Y', 'C') THEN
7629                 msc_sch_wb.atp_debug('PF_Atp_Alloc_Consume: ' || 'after assign : ' || x_dc_list_tab(1));
7630                 msc_sch_wb.atp_debug('PF_Atp_Alloc_Consume: ' || 'start index : ' || x_dc_start_index(1));
7631         END IF;
7632 
7633         FOR i in 1..p_atp_dc_tab.COUNT LOOP
7634                 IF PG_DEBUG in ('Y', 'C') THEN
7635                         msc_sch_wb.atp_debug('PF_Atp_Alloc_Consume: ' || 'index : ' || i);
7636                         msc_sch_wb.atp_debug('PF_Atp_Alloc_Consume: ' || 'x_dc_list_tab : ' || x_dc_list_tab(x_dc_list_tab.COUNT));
7637                         msc_sch_wb.atp_debug('PF_Atp_Alloc_Consume: ' || 'p_atp_dc_tab : ' || p_atp_dc_tab(i));
7638                 END IF;
7639 
7640                 -- If demand class changes, re-initialize these variables.
7641                 IF p_atp_dc_tab(i) <> x_dc_list_tab(x_dc_list_tab.COUNT) THEN
7642                         x_dc_end_index(x_dc_end_index.COUNT) := i - 1;
7643                         IF PG_DEBUG in ('Y', 'C') THEN
7644                                 msc_sch_wb.atp_debug('PF_Atp_Alloc_Consume: ' || 'inside IF');
7645                                 msc_sch_wb.atp_debug('PF_Atp_Alloc_Consume: ' || 'end index : ' || x_dc_end_index(x_dc_end_index.COUNT));
7646                         END IF;
7647                         x_dc_list_tab.EXTEND;
7648                         x_dc_start_index.EXTEND;
7649                         x_dc_end_index.EXTEND;
7650                         x_dc_list_tab(x_dc_list_tab.COUNT) := p_atp_dc_tab(i);
7651                         x_dc_start_index(x_dc_start_index.COUNT) := i;
7652                 ELSE
7653                         x_dc_end_index(x_dc_end_index.COUNT) := i;
7654                 END IF;
7655 
7656                 IF PG_DEBUG in ('Y', 'C') THEN
7657                         msc_sch_wb.atp_debug('PF_Atp_Alloc_Consume: ' || 'start index : ' || x_dc_start_index(x_dc_start_index.COUNT));
7658                         msc_sch_wb.atp_debug('PF_Atp_Alloc_Consume: ' || 'end index : ' || x_dc_end_index(x_dc_end_index.COUNT));
7659                 END IF;
7660                 -- Do backward consumption only when neg bucket and current index
7661                 -- greater l_fw_nullifying_bucket_index.
7662                 IF (p_atp_qty(i) < 0 AND i > l_fw_nullifying_bucket_index) THEN
7663                         j := i - 1;
7664                         WHILE ((j >= x_dc_start_index(x_dc_start_index.COUNT)) and (p_atp_qty(j) >= 0))  LOOP
7665                                 IF ((p_atp_period(i) > p_atf_date) and (p_atp_period(j) <= p_atf_date)) THEN
7666                                         -- exit loop when crossing time fence
7667                                         j := 0;
7668                                 ELSIF (p_atp_qty(j) = 0) THEN
7669                                         --  backward one more period
7670                                         j := j-1 ;
7671                                 ELSE
7672                                         IF (p_atp_qty(j) + p_atp_qty(i) < 0) THEN
7673                                                 -- not enough to cover the shortage
7674                                                 p_atp_qty(i) := p_atp_qty(i) + p_atp_qty(j);
7675                                                 p_atp_qty(j) := 0;
7676                                                 j := j-1;
7677                                         ELSE
7678                                                 -- enough to cover the shortage
7679                                                 p_atp_qty(j) := p_atp_qty(j) + p_atp_qty(i);
7680                                                 p_atp_qty(i) := 0;
7681                                                 j := -1;
7682                                         END IF;
7683                                 END IF;
7684                         END LOOP;
7685                 END IF;
7686 
7687                 IF PG_DEBUG in ('Y', 'C') THEN
7688                         msc_sch_wb.atp_debug('PF_Atp_Alloc_Consume: ' || 'before forward consumption');
7689                 END IF;
7690 
7691                 -- forward consumption when neg atp quantity occurs
7692                 IF (p_atp_qty(i) < 0 ) THEN
7693                         j := i + 1;
7694                         IF PG_DEBUG in ('Y', 'C') THEN
7695                                 msc_sch_wb.atp_debug('PF_Atp_Alloc_Consume: ' || 'in forward consumption : '  || i || ':' || j);
7696                                 msc_sch_wb.atp_debug('PF_Atp_Alloc_Consume: ' || 'in forward : '  || p_atp_dc_tab.COUNT);
7697                         END IF;
7698 
7699                         IF j < p_atp_dc_tab.COUNT THEN
7700                                 IF PG_DEBUG in ('Y', 'C') THEN
7701                                         msc_sch_wb.atp_debug('PF_Atp_Alloc_Consume: ' || 'in j : '  || p_atp_dc_tab.COUNT);
7702                                 END IF;
7703                                 WHILE (p_atp_dc_tab(j) = x_dc_list_tab(x_dc_list_tab.COUNT))  LOOP
7704                                         IF ((p_atp_period(i) <= p_atf_date) and (p_atp_period(j) > p_atf_date)) THEN
7705                                                 -- exit loop when crossing time fence
7706                                                 EXIT;
7707                                         ELSIF (p_atp_qty(j) <= 0 OR j < l_fw_nullifying_bucket_index) THEN
7708                                                 --  forward one more period
7709                                                 j := j+1 ;
7710                                         ELSE
7711                                                 -- You can get something from here. So set the nullifying bucket index
7712                                                 l_fw_nullifying_bucket_index := j;
7713                                                 IF (p_atp_qty(j) + p_atp_qty(i) < 0) THEN
7714                                                         -- not enough to cover the shortage
7715                                                         p_atp_qty(i) := p_atp_qty(i) + p_atp_qty(j);
7716                                                         p_atp_qty(j) := 0;
7717                                                         j := j + 1;
7718                                                 ELSE
7719                                                         -- enough to cover the shortage
7720                                                         p_atp_qty(j) := p_atp_qty(j) + p_atp_qty(i);
7721                                                         p_atp_qty(i) := 0;
7722                                                         EXIT;
7723                                                 END IF;
7724                                         END IF;
7725                                         IF j > p_atp_dc_tab.COUNT THEN
7726                                                 EXIT;
7727                                         END IF;
7728                                 END LOOP;
7729                         END IF;
7730                 END IF;
7731         END LOOP;
7732 
7733         x_dc_end_index(x_dc_end_index.count) := p_atp_dc_tab.count;
7734 
7735         IF PG_DEBUG in ('Y', 'C') THEN
7736                 FOR i in 1..x_dc_list_tab.COUNT LOOP
7737                         msc_sch_wb.atp_debug('PF_Atp_Alloc_Consume: ' ||  'DC:start:end - ' || x_dc_list_tab(i) || ':' ||
7738                                 x_dc_start_index(i) || ':' ||
7739                                 x_dc_end_index(i));
7740                 END LOOP;
7741 
7742                 msc_sch_wb.atp_debug('PF_Atp_Alloc_Consume: ' || 'x_dc_list_tab : ' || x_dc_list_tab.COUNT);
7743         END IF;
7744 
7745         -- this for loop will do atp consume on each dc
7746         FOR j in 1..x_dc_list_tab.COUNT LOOP
7747         --Bug 3919388 (Cum is decreasing)
7748                 IF ( p_atp_qty(x_dc_start_index(j)) < 0) THEN
7749                      p_atp_qty(x_dc_start_index(j)) := 0;
7750                 END IF;
7751                 FOR i in (x_dc_start_index(j) + 1)..x_dc_end_index(j) LOOP
7752                         IF PG_DEBUG in ('Y', 'C') THEN
7753                                 msc_sch_wb.atp_debug('PF_Atp_Alloc_Consume: ' || 'inside accumulation : ' || i);
7754                         END IF;
7755                         --Bug 3919388 (Cum is decreasing)
7756                         p_atp_qty(i) := GREATEST(p_atp_qty(i), 0) + GREATEST(p_atp_qty(i-1),0);
7757                 END LOOP;
7758         END LOOP; 	--FOR i in 1..x_dc_list_tab.COUNT LOOP
7759 
7760         IF PG_DEBUG in ('Y', 'C') THEN
7761                 msc_sch_wb.atp_debug('**********End PF_Atp_Alloc_Consume Procedure************');
7762         END IF;
7763 
7764 EXCEPTION
7765         WHEN OTHERS THEN
7766                 IF PG_DEBUG in ('Y', 'C') THEN
7767                         msc_sch_wb.atp_debug('PF_Atp_Alloc_Consume: ' || 'Error occurred: ' || to_char(sqlcode) || ':' || SQLERRM);
7768                 END IF;
7769                 x_return_status := FND_API.G_RET_STS_ERROR;
7770 
7771 END PF_Atp_Alloc_Consume;
7772 
7773 /*--Get_Period_Data_From_Sd_Temp--------------------------------------------
7774 |  o  This procedure is called from Item_Alloc_Cum_Atp and
7775 |       Item_Pre_Allocated_Atp procedures to get the period data from
7776 |       msc_atp_sd_details_temp table.
7777 |  o  Differences from the one in MSC_ATP_PROC:
7778 |       -  For Total_Demand_Quantity only demands with Pf_Display_Flag equal
7779 |            to 1 are looked at. Demand quantity is picked from
7780 |            Original_Demand_Quantity column.
7781 |  o  For Total_Bucketed_Demand_Quantity all demands are looked at.
7782 +-------------------------------------------------------------------------*/
7783 PROCEDURE Get_Period_Data_From_Sd_Temp(
7784         x_atp_period                    OUT     NOCOPY MRP_ATP_PUB.ATP_Period_Typ,
7785         x_return_status                 OUT     NOCOPY VARCHAR2
7786 ) IS
7787         i			NUMBER;
7788         j			NUMBER;
7789 
7790 BEGIN
7791 
7792         IF PG_DEBUG in ('Y', 'C') THEN
7793            msc_sch_wb.atp_debug('PROCEDURE Get_Period_Data_From_Sd_Temp');
7794         END IF;
7795 
7796         -- Initializing API return code
7797         x_return_status := FND_API.G_RET_STS_SUCCESS;
7798 
7799         SELECT  SD_View.ATP_level
7800                 ,SD_View.scenario_id
7801                 ,SD_View.inventory_item_id
7802                 ,SD_View.request_item_id
7803                 ,SD_View.organization_id
7804                 ,SD_View.supplier_id
7805                 ,SD_View.supplier_site_id
7806                 ,SD_View.department_id
7807                 ,SD_View.resource_id
7808                 ,SD_View.supply_demand_date
7809                 ,SD_View.identifier1
7810                 ,SD_View.identifier2
7811                 ,SUM(SD_View.demand_quantity)
7812                 ,SUM(SD_View.bucketed_demand_quantity)
7813                 ,SUM(SD_View.supply_quantity)
7814                 ,SUM(SD_View.period_quantity)
7815         BULK COLLECT INTO
7816                 x_atp_period.Level,
7817                 x_atp_period.Scenario_Id,
7818                 x_atp_period.Inventory_Item_Id,
7819                 x_atp_period.Request_Item_Id,
7820                 x_atp_period.Organization_id,
7821                 x_atp_period.Supplier_ID,
7822                 x_atp_period.Supplier_Site_ID,
7823                 x_atp_period.Department_id,
7824                 x_atp_period.Resource_id,
7825                 x_atp_period.Period_Start_Date,
7826                 x_atp_period.Identifier1,
7827                 x_atp_period.Identifier2,
7828                 x_atp_period.Total_Demand_Quantity,
7829                 x_atp_period.Total_Bucketed_Demand_Quantity,
7830                 x_atp_period.Total_Supply_Quantity,
7831                 x_atp_period.Period_Quantity
7832         FROM (
7833                 SELECT  ATP_level
7834                         ,scenario_id
7835                         ,inventory_item_id
7836                         ,request_item_id
7837                         ,organization_id
7838                         ,supplier_id
7839                         ,supplier_site_id
7840                         ,department_id
7841                         ,resource_id
7842                         ,trunc(supply_demand_date) supply_demand_date --Bug_3693892 added trunc
7843                         ,identifier1
7844                         ,identifier2
7845                         ,(DECODE(supply_demand_type, 1,
7846                                  DECODE(pf_display_flag, 1,
7847                                         --Bug_3693892 added trunc
7848                                         DECODE(trunc(original_demand_date), trunc(supply_demand_date),
7849                                                original_demand_quantity, 0),
7850                                         0),
7851                                  0)) demand_quantity
7852                         ,(DECODE(supply_demand_type, 1,
7853                                  allocated_quantity,
7854                                  0)) bucketed_demand_quantity
7855                         ,(DECODE(supply_demand_type, 2,
7856                                  allocated_quantity,
7857                                  0)) supply_quantity
7858                         ,allocated_quantity period_quantity
7859                 FROM    msc_atp_sd_details_temp
7860 
7861                 UNION ALL
7862 
7863                 SELECT
7864                         ATP_level
7865                         ,scenario_id
7866                         ,inventory_item_id
7867                         ,request_item_id
7868                         ,organization_id
7869                         ,supplier_id
7870                         ,supplier_site_id
7871                         ,department_id
7872                         ,resource_id
7873                         ,trunc(original_demand_date) supply_demand_date --Bug_3693892 added trunc
7874                         ,identifier1
7875                         ,identifier2
7876                         ,original_demand_quantity demand_quantity
7877                         ,0 bucketed_demand_quantity
7878                         ,0 supply_quantity
7879                         ,0 period_quantity
7880                 FROM    msc_atp_sd_details_temp
7881                 WHERE   supply_demand_type = 1
7882                 AND     pf_display_flag = 1
7883                 AND     trunc(supply_demand_date) <> trunc(original_demand_date) --Bug_3693892 added trunc
7884         ) SD_View
7885         GROUP BY
7886                 SD_View.supply_demand_date
7887                 ,SD_View.ATP_level
7888                 ,SD_View.scenario_id
7889                 ,SD_View.inventory_item_id
7890                 ,SD_View.request_item_id
7891                 ,SD_View.organization_id
7892                 ,SD_View.supplier_id
7893                 ,SD_View.supplier_site_id
7894                 ,SD_View.department_id
7895                 ,SD_View.resource_id
7896                 ,SD_View.identifier1
7897                 ,SD_View.identifier2
7898         ORDER BY
7899                 SD_View.supply_demand_date;
7900 
7901      -- set the period end dates and
7902      -- extend the remaining fields to ensure same behaviour as before
7903      i := x_atp_period.Period_Start_Date.COUNT;
7904 
7905      x_atp_period.Identifier.EXTEND(i);
7906      x_atp_period.Pegging_Id.EXTEND(i);
7907      x_atp_period.End_Pegging_Id.EXTEND(i);
7908      x_atp_period.Period_End_Date.EXTEND(i);
7909      x_atp_period.From_Location_Id.EXTEND(i);
7910      x_atp_period.From_Organization_Id.EXTEND(i);
7911      x_atp_period.Ship_Method.EXTEND(i);
7912      x_atp_period.To_Location_Id.EXTEND(i);
7913      x_atp_period.To_Organization_Id.EXTEND(i);
7914      x_atp_period.Uom.EXTEND(i);
7915 
7916      FOR j IN 1..(i-1) LOOP
7917 	x_atp_period.Period_End_Date(j) :=
7918 		x_atp_period.Period_Start_Date(j+1) - 1;
7919      END LOOP;
7920 
7921 EXCEPTION
7922         WHEN OTHERS THEN
7923                 IF PG_DEBUG in ('Y', 'C') THEN
7924                         msc_sch_wb.atp_debug('Get_Period_Data_From_Sd_Temp: ' || 'Error occurred: ' || to_char(sqlcode) || ':' || SQLERRM);
7925                 END IF;
7926                 x_return_status := FND_API.G_RET_STS_ERROR;
7927 
7928 END Get_Period_Data_From_Sd_Temp;
7929 
7930 /*--Get_Unalloc_Data_From_Sd_Temp-------------------------------------------
7931 |  o  Called from Item_Alloc_Cum_Atp procedure for Rule based Allocated Time
7932 |       Phased PF ATP (AATP Forward Consumption Method 2).
7933 |  o  This is similar to previous procedure only difference being that we
7934 |       also return unallocated quantities.
7935 +-------------------------------------------------------------------------*/
7936 PROCEDURE Get_Unalloc_Data_From_Sd_Temp(
7937         x_atp_period                    OUT     NOCOPY MRP_ATP_PUB.ATP_Period_Typ,
7938         p_unallocated_atp		IN      OUT NOCOPY MRP_ATP_PVT.ATP_Info,
7939         x_return_status 		OUT     NOCOPY VARCHAR2
7940 ) IS
7941         i			NUMBER;
7942         j			NUMBER;
7943 
7944 BEGIN
7945 
7946         IF PG_DEBUG in ('Y', 'C') THEN
7947                 msc_sch_wb.atp_debug('PROCEDURE Get_Unalloc_Data_From_Sd_Temp');
7948         END IF;
7949 
7950         -- initialize API return status to success
7951         x_return_status := FND_API.G_RET_STS_SUCCESS;
7952 
7953         -- do netting for unallocated qty also
7954         SELECT  SD_View.ATP_level
7955                 ,SD_View.scenario_id
7956                 ,SD_View.inventory_item_id
7957                 ,SD_View.request_item_id
7958                 ,SD_View.organization_id
7959                 ,SD_View.supplier_id
7960                 ,SD_View.supplier_site_id
7961                 ,SD_View.department_id
7962                 ,SD_View.resource_id
7963                 ,SD_View.supply_demand_date
7964                 ,SD_View.identifier1
7965                 ,SD_View.identifier2
7966                 ,SUM(SD_View.demand_quantity)
7967                 ,SUM(SD_View.bucketed_demand_quantity)
7968                 ,SUM(SD_View.supply_quantity)
7969                 ,SUM(SD_View.period_quantity)
7970                 ,SUM(SD_View.unallocated_quantity)
7971         BULK COLLECT INTO
7972                 x_atp_period.Level,
7973                 x_atp_period.Scenario_Id,
7974                 x_atp_period.Inventory_Item_Id,
7975                 x_atp_period.Request_Item_Id,
7976                 x_atp_period.Organization_id,
7977                 x_atp_period.Supplier_ID,
7978                 x_atp_period.Supplier_Site_ID,
7979                 x_atp_period.Department_id,
7980                 x_atp_period.Resource_id,
7981                 x_atp_period.Period_Start_Date,
7982                 x_atp_period.Identifier1,
7983                 x_atp_period.Identifier2,
7984                 x_atp_period.Total_Demand_Quantity,
7985                 x_atp_period.Total_Bucketed_Demand_Quantity,
7986                 x_atp_period.Total_Supply_Quantity,
7987                 x_atp_period.Period_Quantity,
7988                 p_unallocated_atp.atp_qty
7989         FROM (
7990                 SELECT  ATP_level
7991                         ,scenario_id
7992                         ,inventory_item_id
7993                         ,request_item_id
7994                         ,organization_id
7995                         ,supplier_id
7996                         ,supplier_site_id
7997                         ,department_id
7998                         ,resource_id
7999                         ,trunc(supply_demand_date) supply_demand_date --Bug_3693892 added trunc
8000                         ,identifier1
8001                         ,identifier2
8002                         ,DECODE(supply_demand_type, 1,
8003                                  DECODE(pf_display_flag, 1,
8004                                         --Bug_3693892 added trunc
8005                                         DECODE(trunc(original_demand_date), trunc(supply_demand_date),
8006                                                original_demand_quantity, 0),
8007                                         0),
8008                                  0) demand_quantity
8009                         ,DECODE(supply_demand_type, 1,
8010                                  allocated_quantity,
8011                                  0) bucketed_demand_quantity
8012                         ,DECODE(supply_demand_type, 2,
8013                                  allocated_quantity,
8014                                  0) supply_quantity
8015                         ,allocated_quantity period_quantity
8016                         ,unallocated_quantity
8017                 FROM    msc_atp_sd_details_temp
8018 
8019                 UNION ALL
8020 
8021                 SELECT
8022                         ATP_level
8023                         ,scenario_id
8024                         ,inventory_item_id
8025                         ,request_item_id
8026                         ,organization_id
8027                         ,supplier_id
8028                         ,supplier_site_id
8029                         ,department_id
8030                         ,resource_id
8031                         ,trunc(original_demand_date) supply_demand_date --Bug_3693892 added trunc
8032                         ,identifier1
8033                         ,identifier2
8034                         ,original_demand_quantity demand_quantity
8035                         ,0 bucketed_demand_quantity
8036                         ,0 supply_quantity
8037                         ,0 period_quantity
8038                         ,0 unallocated_quantity
8039                 FROM    msc_atp_sd_details_temp
8040                 WHERE   supply_demand_type = 1
8041                 AND     pf_display_flag = 1
8042                 AND     trunc(supply_demand_date) <> trunc(original_demand_date) --Bug_3693892 added trunc
8043         ) SD_View
8044         GROUP BY
8045                 SD_View.supply_demand_date
8046                 ,SD_View.ATP_level
8047                 ,SD_View.scenario_id
8048                 ,SD_View.inventory_item_id
8049                 ,SD_View.request_item_id
8050                 ,SD_View.organization_id
8051                 ,SD_View.supplier_id
8052                 ,SD_View.supplier_site_id
8053                 ,SD_View.department_id
8054                 ,SD_View.resource_id
8055                 ,SD_View.identifier1
8056                 ,SD_View.identifier2
8057         ORDER BY
8058                 SD_View.supply_demand_date;
8059 
8060 
8061      -- set the period end dates and
8062      -- extend the remaining fields to ensure same behaviour as before
8063      i := x_atp_period.Period_Start_Date.COUNT;
8064 
8065      x_atp_period.Identifier.EXTEND(i);
8066      x_atp_period.Pegging_Id.EXTEND(i);
8067      x_atp_period.End_Pegging_Id.EXTEND(i);
8068      x_atp_period.Period_End_Date.EXTEND(i);
8069      x_atp_period.From_Location_Id.EXTEND(i);
8070      x_atp_period.From_Organization_Id.EXTEND(i);
8071      x_atp_period.Ship_Method.EXTEND(i);
8072      x_atp_period.To_Location_Id.EXTEND(i);
8073      x_atp_period.To_Organization_Id.EXTEND(i);
8074      x_atp_period.Uom.EXTEND(i);
8075 
8076      FOR j IN 1..(i-1) LOOP
8077 	x_atp_period.Period_End_Date(j) :=
8078 		x_atp_period.Period_Start_Date(j+1) - 1;
8079      END LOOP;
8080 
8081 EXCEPTION
8082         WHEN OTHERS THEN
8083                 IF PG_DEBUG in ('Y', 'C') THEN
8084                         msc_sch_wb.atp_debug('Get_Unalloc_Data_From_Sd_Temp: ' || 'Error code:' || to_char(sqlcode));
8085                 END IF;
8086                 x_return_status := FND_API.G_RET_STS_ERROR;
8087 
8088 END Get_Unalloc_Data_From_Sd_Temp;
8089 
8090 /*--Get_Period_From_Details_Temp--------------------------------------------
8091 |  o  Called from Compute_Allocation_Details in time phased pf scenarios.
8092 |  o  This function returns the period data from mrp_atp_details_temp.
8093 +-------------------------------------------------------------------------*/
8094 PROCEDURE Get_Period_From_Details_Temp(
8095         p_type                          IN      INTEGER,
8096         p_inv_item_id                   IN      NUMBER,
8097         p_org_id                        IN      NUMBER,
8098         p_instance_id                   IN      NUMBER,
8099         p_scenario_id                   IN      NUMBER,
8100         p_level_id                      IN      NUMBER,
8101         p_record_type                   IN      PLS_INTEGER,
8102         p_session_id                    IN      NUMBER,
8103         x_atp_period                    OUT     NOCOPY MRP_ATP_PUB.ATP_Period_Typ,
8104         x_return_status                 OUT     NOCOPY VARCHAR2
8105 ) IS
8106 
8107 BEGIN
8108 
8109         IF PG_DEBUG in ('Y', 'C') THEN
8110                 msc_sch_wb.atp_debug('PROCEDURE Get_Period_From_Details_Temp');
8111         END IF;
8112 
8113         -- initialize API return status to success
8114         x_return_status := FND_API.G_RET_STS_SUCCESS;
8115 
8116         IF p_type = Demand_Priority THEN
8117                 SELECT
8118                         final.col1,
8119                         final.col2,
8120                         SUM(final.col3),
8121                         SUM(final.col4),
8122                         SUM(final.col5),
8123                         SUM(final.col6),
8124                         SUM(final.col7),
8125                         SUM(final.col8),
8126                         p_inv_item_id,
8127                         p_org_id,
8128                         p_instance_id,
8129                         p_scenario_id,
8130                         p_level_id,
8131                         null,           -- Initialize period end date with null
8132                         0,              -- Initialize backward_forward_quantity with 0
8133                         0               -- Initialize cumulative quantity with 0
8134                 BULK COLLECT INTO
8135                         x_atp_period.Demand_Class,
8136                         x_atp_period.Period_Start_Date,
8137                         x_atp_period.Allocated_Supply_Quantity,
8138                         x_atp_period.Supply_Adjustment_Quantity,
8139                         x_atp_period.Total_Supply_Quantity,
8140                         x_atp_period.Total_Demand_Quantity,
8141                         x_atp_period.Total_Bucketed_Demand_Quantity,
8142                         x_atp_period.Period_Quantity,
8143                         x_atp_period.Inventory_Item_Id,
8144                         x_atp_period.Organization_Id,
8145                         x_atp_period.Identifier1,
8146                         x_atp_period.Scenario_Id,
8147                         x_atp_period.Level,
8148                         x_atp_period.Period_End_Date,
8149                         x_atp_period.Backward_Forward_Quantity,
8150                         x_atp_period.Cumulative_Quantity
8151                 FROM
8152                 (
8153                 SELECT DEMAND_CLASS                                                     col1, --Bug_3693892 added trunc
8154                         trunc(SUPPLY_DEMAND_DATE)                                              col2,
8155                         DECODE(SUPPLY_DEMAND_TYPE, 2,
8156                                 DECODE(ORIGINAL_SUPPLY_DEMAND_TYPE,
8157                                                 48, 0,
8158                                                 ALLOCATED_QUANTITY),
8159                                 0)                                                      col3, -- Allocated Supply Quantity
8160                         DECODE(SUPPLY_DEMAND_TYPE, 2,
8161                                 DECODE(ORIGINAL_SUPPLY_DEMAND_TYPE,
8162                                                 48,  ALLOCATED_QUANTITY,
8163                                                 0),
8164                                 0)                                                      col4, -- Supply Adjustment Quantity
8165                         DECODE(SUPPLY_DEMAND_TYPE, 2, ALLOCATED_QUANTITY, 0)            col5, -- Total Supply
8166                         DECODE(SUPPLY_DEMAND_TYPE, 1,
8167                                   DECODE(PF_DISPLAY_FLAG, 1,
8168                                     --Bug_3693892 added trunc
8169                                     DECODE(trunc(ORIGINAL_DEMAND_DATE), trunc(SUPPLY_DEMAND_DATE),
8170                                        ORIGINAL_DEMAND_QUANTITY, 0),
8171                                   0),
8172                                0)                                                       col6, -- Total Demand
8173                         DECODE(SUPPLY_DEMAND_TYPE, 1, ALLOCATED_QUANTITY, 0)            col7, -- Total Bucketed Demand
8174                         ALLOCATED_QUANTITY                                              col8  -- Period Quantity
8175                 FROM
8176                         MRP_ATP_DETAILS_TEMP
8177                 WHERE
8178                         SESSION_ID = p_session_id
8179                         AND RECORD_TYPE = p_record_type
8180 
8181                 UNION ALL
8182 
8183                 SELECT DEMAND_CLASS                                                     col1,
8184                        trunc(ORIGINAL_DEMAND_DATE)                                      col2, --Bug_3693892 added trunc
8185                         0                                                               col3, -- Allocated Supply Quantity
8186                         0                                                               col4, -- Supply Adjustment Quantity
8187                         0                                                               col5, -- Total Supply
8188                         ORIGINAL_DEMAND_QUANTITY                                        col6, -- Total Demand
8189                         0                                                               col7, -- Total Bucketed Demand
8190                         0                                                               col8  -- Period Quantity
8191                 FROM
8192                         MRP_ATP_DETAILS_TEMP
8193                 WHERE
8194                         SESSION_ID = p_session_id
8195                         AND RECORD_TYPE = p_record_type
8196                         AND SUPPLY_DEMAND_TYPE = 1
8197                         AND PF_DISPLAY_FLAG = 1
8198                         AND trunc(SUPPLY_DEMAND_DATE) <> trunc(ORIGINAL_DEMAND_DATE) --Bug_3693892 added trunc
8199                 ) final
8200                 GROUP BY
8201                         final.col1,
8202                         final.col2,
8203                         p_inv_item_id,
8204                         p_org_id,
8205                         p_instance_id,
8206                         p_scenario_id,
8207                         p_level_id
8208                 ORDER BY
8209                         final.col1,
8210                         final.col2
8211                         ;
8212         ELSIF p_type = User_Defined_DC THEN
8213                 SELECT
8214                         final.col1,
8215                         final.col2,
8216                         SUM(final.col3),
8217                         SUM(final.col4),
8218                         SUM(final.col5),
8219                         SUM(final.col6),
8220                         p_inv_item_id,
8221                         p_org_id,
8222                         p_instance_id,
8223                         p_scenario_id,
8224                         p_level_id,
8225                         null,
8226                         0,
8227                         0,
8228                         final.col7,
8229                         SUM(final.col8),
8230                         SUM(final.col9),
8231                         SUM(final.col10),
8232                         SUM(final.col11),
8233                         final.col12
8234                 BULK COLLECT INTO
8235                         x_atp_period.Demand_Class,
8236                         x_atp_period.Period_Start_Date,
8237                         x_atp_period.Total_Supply_Quantity,
8238                         x_atp_period.Total_Demand_Quantity,
8239                         x_atp_period.Total_Bucketed_Demand_Quantity,
8240                         x_atp_period.Period_Quantity,
8241                         x_atp_period.Inventory_Item_Id,
8242                         x_atp_period.Organization_Id,
8243                         x_atp_period.Identifier1,
8244                         x_atp_period.Scenario_Id,
8245                         x_atp_period.Level,
8246                         x_atp_period.Period_End_Date,
8247                         x_atp_period.Cumulative_Quantity,
8248                         x_atp_period.Demand_Adjustment_Quantity,
8249                         x_atp_period.Identifier2,
8250                         x_atp_period.Unallocated_Supply_Quantity,
8251                         x_atp_period.Unallocated_Demand_Quantity,
8252                         x_atp_period.Unalloc_Bucketed_Demand_Qty,
8253                         x_atp_period.Unallocated_Net_Quantity,
8254                         x_atp_period.Identifier4
8255                 FROM
8256                 (
8257                 SELECT  DEMAND_CLASS                                                    col1,
8258                         trunc(SUPPLY_DEMAND_DATE)                                       col2, --Bug_3693892 added trunc
8259                         DECODE(SUPPLY_DEMAND_TYPE, 2, ALLOCATED_QUANTITY, 0)            col3,
8260                         DECODE(SUPPLY_DEMAND_TYPE, 1,
8261                                   DECODE(PF_DISPLAY_FLAG, 1,
8262                                     --Bug_3693892 added trunc
8263                                     DECODE(trunc(ORIGINAL_DEMAND_DATE), trunc(SUPPLY_DEMAND_DATE),
8264                                        ORIGINAL_DEMAND_QUANTITY, 0),
8265                                   0),
8266                                0)                                                       col4, -- Total Demand
8267                         DECODE(SUPPLY_DEMAND_TYPE, 1, ALLOCATED_QUANTITY, 0)            col5, -- Total Bucketed Demand
8268                         ALLOCATED_QUANTITY                                              col6,
8269                         IDENTIFIER2                                                     col7,
8270                         DECODE(SUPPLY_DEMAND_TYPE, 2, UNALLOCATED_QUANTITY, 0)          col8,
8271                         DECODE(SUPPLY_DEMAND_TYPE, 1,
8272                                   DECODE(PF_DISPLAY_FLAG, 1,
8273                                     --Bug_3693892 added trunc
8274                                     DECODE(trunc(ORIGINAL_DEMAND_DATE), trunc(SUPPLY_DEMAND_DATE),
8275                                        SUPPLY_DEMAND_QUANTITY, 0),
8276                                   0),
8277                                0)                                                       col9,  -- Unallocated Demand
8278                         DECODE(SUPPLY_DEMAND_TYPE, 1, UNALLOCATED_QUANTITY, 0)          col10, -- Unallocated Bucketed Demand
8279                         UNALLOCATED_QUANTITY                                            col11, -- Unallocated Net
8280                         IDENTIFIER4                                                     col12
8281                 FROM    MRP_ATP_DETAILS_TEMP
8282                 WHERE   SESSION_ID = p_session_id
8283                 AND     RECORD_TYPE = p_record_type
8284 
8285                 UNION ALL
8286 
8287                 SELECT  DEMAND_CLASS                                                    col1,
8288                         trunc(ORIGINAL_DEMAND_DATE)                                     col2, --Bug_3693892 added trunc
8289                         0                                                               col3,
8290                         ORIGINAL_DEMAND_QUANTITY                                        col4,  -- Total Demand
8291                         0                                                               col5,
8292                         0                                                               col6,
8293                         IDENTIFIER2                                                     col7,
8294                         0                                                               col8,  -- Period Quantity
8295                         SUPPLY_DEMAND_QUANTITY                                          col9,
8296                         0                                                               col10,
8297                         0                                                               col11,
8298                         IDENTIFIER4                                                     col12
8299                 FROM
8300                         MRP_ATP_DETAILS_TEMP
8301                 WHERE
8302                         SESSION_ID = p_session_id
8303                         AND RECORD_TYPE = p_record_type
8304                         AND SUPPLY_DEMAND_TYPE = 1
8305                         AND PF_DISPLAY_FLAG = 1
8306                         AND trunc(SUPPLY_DEMAND_DATE) <> trunc(ORIGINAL_DEMAND_DATE) --Bug_3693892 added trunc
8307                 ) final
8308                 GROUP BY
8309                         final.col1,
8310                         final.col2,
8311                         p_inv_item_id,
8312                         p_org_id,
8313                         p_instance_id,
8314                         p_scenario_id,
8315                         p_level_id,
8316                         final.col7,
8317                         final.col12
8318                 ORDER BY
8319                         final.col7 asc,
8320                         final.col12 desc,
8321                         final.col1 asc,
8322                         final.col2
8323                         ;
8324         ELSIF p_type = User_Defined_CC THEN
8325                 SELECT
8326                         final.col1,
8327                         final.col2,
8328                         SUM(final.col3),
8329                         SUM(final.col4),
8330                         SUM(final.col5),
8331                         SUM(final.col6),
8332                         p_inv_item_id,
8333                         p_org_id,
8334                         p_instance_id,
8335                         p_scenario_id,
8336                         p_level_id,
8337                         null,
8338                         0,
8339                         0,
8340                         final.col7,
8341                         final.col8,
8342                         final.col9,
8343                         final.col10,
8344                         SUM(final.col11),
8345                         SUM(final.col12),
8346                         SUM(final.col13),
8347                         SUM(final.col14),
8348                         final.col15
8349                 BULK COLLECT INTO
8350                         x_atp_period.Demand_Class,
8351                         x_atp_period.Period_Start_Date,
8352                         x_atp_period.Total_Supply_Quantity,
8353                         x_atp_period.Total_Demand_Quantity,
8354                         x_atp_period.Total_Bucketed_Demand_Quantity,
8355                         x_atp_period.Period_Quantity,
8356                         x_atp_period.Inventory_Item_Id,
8357                         x_atp_period.Organization_Id,
8358                         x_atp_period.Identifier1,
8359                         x_atp_period.Scenario_Id,
8360                         x_atp_period.Level,
8361                         x_atp_period.Period_End_Date,
8362                         x_atp_period.Cumulative_Quantity,
8363                         x_atp_period.Demand_Adjustment_Quantity,
8364                         x_atp_period.Identifier2,
8365                         x_atp_period.Identifier4,
8366                         x_atp_period.Class,
8367                         x_atp_period.Customer_Id,
8368                         x_atp_period.Unallocated_Supply_Quantity,
8369                         x_atp_period.Unallocated_Demand_Quantity,
8370                         x_atp_period.Unalloc_Bucketed_Demand_Qty,
8371                         x_atp_period.Unallocated_Net_Quantity,
8372                         x_atp_period.Customer_Site_Id
8373                 FROM
8374                 (
8375                 SELECT  DEMAND_CLASS                                                    col1,  --Bug_3693892 added trunc
8376                         trunc(SUPPLY_DEMAND_DATE)                                              col2,
8377                         DECODE(SUPPLY_DEMAND_TYPE, 2, ALLOCATED_QUANTITY, 0)            col3,
8378                         DECODE(SUPPLY_DEMAND_TYPE, 1,
8379                                   DECODE(PF_DISPLAY_FLAG, 1,
8380                                     --Bug_3693892 added trunc
8381                                     DECODE(trunc(ORIGINAL_DEMAND_DATE), trunc(SUPPLY_DEMAND_DATE),
8382                                        ORIGINAL_DEMAND_QUANTITY, 0),
8383                                   0),
8384                                0)                                                       col4, -- Total Demand
8385                         DECODE(SUPPLY_DEMAND_TYPE, 1, ALLOCATED_QUANTITY, 0)            col5, -- Total Bucketed Demand
8386                         ALLOCATED_QUANTITY                                              col6,
8387                         IDENTIFIER2                                                     col7,
8388                         IDENTIFIER4                                                     col8,
8389                         CLASS                                                           col9,
8390                         CUSTOMER_ID                                                     col10,
8391                         DECODE(SUPPLY_DEMAND_TYPE, 2, UNALLOCATED_QUANTITY, 0)          col11,
8392                         DECODE(SUPPLY_DEMAND_TYPE, 1,
8393                                   DECODE(PF_DISPLAY_FLAG, 1,
8394                                     --Bug_3693892 added trunc
8395                                     DECODE(trunc(ORIGINAL_DEMAND_DATE), trunc(SUPPLY_DEMAND_DATE),
8396                                        SUPPLY_DEMAND_QUANTITY, 0),
8397                                   0),
8398                                0)                                                       col12, -- Unallocated Demand
8399                         DECODE(SUPPLY_DEMAND_TYPE, 1, UNALLOCATED_QUANTITY, 0)          col13, -- Unallocated Bucketed Demand
8400                         UNALLOCATED_QUANTITY                                            col14, -- Unallocated Net
8401                         CUSTOMER_SITE_ID                                                col15
8402                 FROM    MRP_ATP_DETAILS_TEMP
8403                 WHERE   SESSION_ID = p_session_id
8404                 AND     RECORD_TYPE = p_record_type
8405 
8406                 UNION ALL
8407 
8408                 SELECT  DEMAND_CLASS                                                    col1,
8409                         trunc(ORIGINAL_DEMAND_DATE)                                     col2, --Bug_3693892 added trunc
8410                         0                                                               col3,
8411                         ORIGINAL_DEMAND_QUANTITY                                        col4,  -- Total Demand
8412                         0                                                               col5,
8413                         0                                                               col6,
8414                         IDENTIFIER2                                                     col7,
8415                         IDENTIFIER4                                                     col8,
8416                         CLASS                                                           col9,
8417                         CUSTOMER_ID                                                     col10,
8418                         0                                                               col11,
8419                         SUPPLY_DEMAND_QUANTITY                                          col12,
8420                         0                                                               col13,
8421                         0                                                               col14,
8422                         CUSTOMER_SITE_ID                                                col15
8423                 FROM
8424                         MRP_ATP_DETAILS_TEMP
8425                 WHERE
8426                         SESSION_ID = p_session_id
8427                         AND RECORD_TYPE = p_record_type
8428                         AND SUPPLY_DEMAND_TYPE = 1
8429                         AND PF_DISPLAY_FLAG = 1
8430                         AND trunc(SUPPLY_DEMAND_DATE) <> trunc(ORIGINAL_DEMAND_DATE)  --Bug_3693892 added trunc
8431                 ) final
8432                 GROUP BY
8433                         final.col1,
8434                         final.col2,
8435                         p_inv_item_id,
8436                         p_org_id,
8437                         p_instance_id,
8438                         p_scenario_id,
8439                         p_level_id,
8440                         final.col7,
8441                         final.col8,
8442                         final.col9,
8443                         final.col10,
8444                         final.col15
8445                 ORDER BY
8446                         trunc(final.col7,-3),        -- Customer class priority
8447                         final.col9,                  -- Customer class
8448                         trunc(final.col7,-2),        -- Customer priority
8449                         final.col10,                 -- Customer
8450                         final.col7,                  -- Customer site priority
8451                         final.col15,
8452                         final.col2
8453                         ;
8454         END IF;
8455 
8456 EXCEPTION
8457         WHEN OTHERS THEN
8458                 IF PG_DEBUG in ('Y', 'C') THEN
8459                         msc_sch_wb.atp_debug('Get_Period_From_Details_Temp: ' || 'Error code:' || to_char(sqlcode));
8460                 END IF;
8461                 x_return_status := FND_API.G_RET_STS_ERROR;
8462 
8463 END Get_Period_From_Details_Temp;
8464 
8465 /*--Get_Pf_Atp_Item_Id------------------------------------------------------
8466 |  o  This function returns the source id of the family item if the item
8467 |       passed belongs to an atpable family.
8468 |  o  Otherwise it returns the same item id.
8469 +-------------------------------------------------------------------------*/
8470 FUNCTION Get_Pf_Atp_Item_Id(
8471         p_instance_id            IN  NUMBER,
8472         p_plan_id                IN  NUMBER,
8473         p_inventory_item_id      IN  NUMBER,
8474         p_organization_id        IN  NUMBER
8475 )
8476 RETURN NUMBER
8477 IS
8478         l_pf_atp_item_id      NUMBER;
8479 
8480 BEGIN
8481         IF PG_DEBUG in ('Y', 'C') THEN
8482                 msc_sch_wb.atp_debug('*********Begin function Get_Pf_Atp_Item_Id ********');
8483                 msc_sch_wb.atp_debug('Get_Pf_Atp_Item_Id: ' ||  'p_instance_id = ' ||to_char(p_instance_id));
8484                 msc_sch_wb.atp_debug('Get_Pf_Atp_Item_Id: ' ||  'p_plan_id = ' ||to_char(p_plan_id));
8485                 msc_sch_wb.atp_debug('Get_Pf_Atp_Item_Id: ' ||  'p_inventory_item_id = ' ||to_char(p_inventory_item_id));
8486                 msc_sch_wb.atp_debug('Get_Pf_Atp_Item_Id: ' ||  'p_organization_id = ' ||to_char(p_organization_id));
8487         END IF;
8488 
8489         SELECT  DECODE(i2.bom_item_type,
8490                   5, DECODE(i2.atp_flag,
8491                      'N', i1.sr_inventory_item_id,
8492                      i2.sr_inventory_item_id),
8493                   i1.sr_inventory_item_id
8494                 )
8495         INTO    l_pf_atp_item_id
8496         FROM    msc_system_items i2,
8497                 msc_system_items i1
8498         WHERE   i1.sr_inventory_item_id = p_inventory_item_id
8499         AND     i1.organization_id = p_organization_id
8500         AND     i1.plan_id = p_plan_id
8501         AND     i1.sr_instance_id = p_instance_id
8502         AND     i2.inventory_item_id = DECODE(i1.product_family_id,
8503                                               NULL, i1.inventory_item_id,
8504                                               -23453, i1.inventory_item_id,
8505                                               i1.product_family_id)
8506         AND     i2.organization_id = i1.organization_id
8507         AND     i2.sr_instance_id = i1.sr_instance_id
8508         AND     i2.plan_id = i1.plan_id;
8509 
8510         IF PG_DEBUG in ('Y', 'C') THEN
8511                 msc_sch_wb.atp_debug('Get_Pf_Atp_Item_Id: ' ||  'PF Item Id = ' ||to_char(l_pf_atp_item_id));
8512                 msc_sch_wb.atp_debug('*********End function Get_Pf_Atp_Item_Id ********');
8513         END IF;
8514 
8515         return l_pf_atp_item_id;
8516 
8517 EXCEPTION WHEN NO_DATA_FOUND THEN
8518         return p_inventory_item_id;
8519 
8520 END Get_Pf_Atp_Item_Id;
8521 
8522 /*--Get_Atf_Date------------------------------------------------------------
8523 |  o  This function returns the ATF date for item-org-instance-plan
8524 |       combination passed.
8525 +-------------------------------------------------------------------------*/
8526 FUNCTION Get_Atf_Date(
8527         p_instance_id        IN NUMBER,
8528         p_inventory_item_id  IN NUMBER,
8529         p_organization_id    IN NUMBER,
8530         p_plan_id            IN NUMBER
8531 )
8532 RETURN DATE
8533 IS
8534         l_atf_date      DATE;
8535 
8536 BEGIN
8537         IF PG_DEBUG in ('Y', 'C') THEN
8538                 msc_sch_wb.atp_debug('Begin Get_Atf_Date');
8539                 msc_sch_wb.atp_debug('Get_Atf_Date : p_instance_id = ' || p_instance_id);
8540                 msc_sch_wb.atp_debug('Get_Atf_Date : p_inventory_item_id = ' || p_inventory_item_id);
8541                 msc_sch_wb.atp_debug('Get_Atf_Date : p_organization_id = ' || p_organization_id);
8542                 msc_sch_wb.atp_debug('Get_Atf_Date : p_plan_id = ' || p_plan_id);
8543         END IF;
8544 
8545         SELECT i.aggregate_time_fence_date
8546         INTO   l_atf_date
8547         FROM   msc_system_items i
8548         WHERE  i.plan_id = p_plan_id
8549         AND    i.sr_instance_id = p_instance_id
8550         AND    i.organization_id = p_organization_id
8551         AND    i.sr_inventory_item_id = p_inventory_item_id;
8552 
8553         IF PG_DEBUG in ('Y', 'C') THEN
8554                 msc_sch_wb.atp_debug('Get_Atf_Date : ATF Date = ' || l_atf_date);
8555         END IF;
8556 
8557         return l_atf_date;
8558 
8559 EXCEPTION
8560         WHEN NO_DATA_FOUND THEN
8561                 return null;
8562 
8563 END Get_Atf_Date;
8564 
8565 /*--Get_Atf_Days------------------------------------------------------------
8566 |  o  This function returns the ATF days for item-org-instance-plan
8567 |       combination passed.
8568 +-------------------------------------------------------------------------*/
8569 FUNCTION Get_Atf_Days(
8570         p_instance_id        IN NUMBER,
8571         p_inventory_item_id  IN NUMBER,
8572         p_organization_id    IN NUMBER
8573 )
8574 RETURN NUMBER
8575 IS
8576         l_atf_days      NUMBER;
8577 
8578 BEGIN
8579         IF PG_DEBUG in ('Y', 'C') THEN
8580                 msc_sch_wb.atp_debug('Begin Get_Atf_Days');
8581                 msc_sch_wb.atp_debug('Get_Atf_Days : p_instance_id = ' || p_instance_id);
8582                 msc_sch_wb.atp_debug('Get_Atf_Days : p_inventory_item_id = ' || p_inventory_item_id);
8583                 msc_sch_wb.atp_debug('Get_Atf_Days : p_organization_id = ' || p_organization_id);
8584         END IF;
8585 
8586         SELECT  DECODE(r.aggregate_time_fence_code,
8587                         1, NULL,
8588                         2, i2.demand_time_fence_days,
8589                         3, i2.planning_time_fence_days,
8590                         4, r.aggregate_time_fence
8591                       )
8592         INTO    l_atf_days
8593         FROM    msc_system_items i2,
8594                 msc_system_items i1,
8595                 msc_atp_rules r,
8596                 msc_trading_partners tp
8597         WHERE   i1.inventory_item_id = p_inventory_item_id
8598         AND     i1.organization_id = p_organization_id
8599         AND     i1.plan_id = -1
8600         AND     i1.sr_instance_id = p_instance_id
8601         AND     i2.inventory_item_id = NVL(i1.product_family_id,
8602                                               i1.inventory_item_id)
8603         AND     i2.organization_id = i1.organization_id
8604         AND     i2.sr_instance_id = i1.sr_instance_id
8605         AND     i2.plan_id = i1.plan_id
8606         AND     i2.bom_item_type = 5
8607         AND     i2.atp_flag = 'Y'
8608         AND     tp.sr_tp_id = i2.organization_id
8609         AND     tp.sr_instance_id = i2.sr_instance_id
8610         AND     tp.partner_type = 3
8611         AND     r.sr_instance_id = tp.sr_instance_id
8612         AND     r.rule_id = NVL(i2.atp_rule_id, tp.default_atp_rule_id);
8613 
8614         IF PG_DEBUG in ('Y', 'C') THEN
8615                 msc_sch_wb.atp_debug('Get_Atf_Days : ATF Days = ' || l_atf_days);
8616         END IF;
8617 
8618         return l_atf_days;
8619 
8620 EXCEPTION
8621         WHEN NO_DATA_FOUND THEN
8622                 IF PG_DEBUG in ('Y', 'C') THEN
8623                         msc_sch_wb.atp_debug('Get_Atf_Days : ATF Days = ' || l_atf_days);
8624                 END IF;
8625                 return null;
8626 
8627 END Get_Atf_Days;
8628 
8629 /*--Get_Family_Item_Info----------------------------------------------------
8630 |  o  This procedure returns the source id, destination id and ATF date
8631 |       of the family item if the item passed belongs to an atpable family.
8632 +-------------------------------------------------------------------------*/
8633 PROCEDURE Get_Family_Item_Info(
8634         p_instance_id	        IN      NUMBER,
8635         p_plan_id               IN      NUMBER,
8636         p_inventory_item_id     IN      NUMBER,
8637         p_organization_id       IN      NUMBER,
8638         p_family_id             OUT     NOCOPY NUMBER,
8639         p_sr_family_id          OUT     NOCOPY NUMBER,
8640         p_atf_date              OUT     NOCOPY DATE,
8641         --bug3700564 added family name
8642         p_family_name           OUT     NOCOPY VARCHAR2,
8643         x_return_status         OUT     NOCOPY VARCHAR2
8644 )
8645 IS
8646 
8647 
8648 BEGIN
8649         IF PG_DEBUG in ('Y', 'C') THEN
8650                 msc_sch_wb.atp_debug('*********Begin procedure Get_Family_Item_Info ********');
8651                 msc_sch_wb.atp_debug('Get_Family_Item_Info: ' ||  'p_instance_id = ' ||to_char(p_instance_id));
8652                 msc_sch_wb.atp_debug('Get_Family_Item_Info: ' ||  'p_plan_id = ' ||to_char(p_plan_id));
8653                 msc_sch_wb.atp_debug('Get_Family_Item_Info: ' ||  'p_inventory_item_id = ' ||to_char(p_inventory_item_id));
8654                 msc_sch_wb.atp_debug('Get_Family_Item_Info: ' ||  'p_organization_id = ' ||to_char(p_organization_id));
8655         END IF;
8656 
8657         -- Initializing API return code
8658         x_return_status := FND_API.G_RET_STS_SUCCESS;
8659 
8660         SELECT DECODE(i2.bom_item_type,
8661                  5, DECODE(i2.atp_flag,
8662                      'N', i1.inventory_item_id,
8663                      i2.inventory_item_id),
8664                  i1.inventory_item_id
8665                ),
8666                DECODE(i2.bom_item_type,
8667                  5, DECODE(i2.atp_flag,
8668                      'N', i1.sr_inventory_item_id,
8669                      i2.sr_inventory_item_id),
8670                  i1.sr_inventory_item_id
8671                ),
8672                i1.aggregate_time_fence_date,
8673                i2.item_name --bug3700564
8674         INTO   p_family_id,
8675                p_sr_family_id,
8676                p_atf_date,
8677                p_family_name --bug3700564
8678         FROM   msc_system_items i2,
8679                msc_system_items i1
8680         WHERE  i1.inventory_item_id = p_inventory_item_id
8681         AND    i1.organization_id = p_organization_id
8682         AND    i1.plan_id = p_plan_id
8683         AND    i1.sr_instance_id = p_instance_id
8684         AND    i2.inventory_item_id = DECODE(i1.product_family_id,
8685                                              NULL, i1.inventory_item_id,
8686                                              -23453, i1.inventory_item_id,
8687                                              i1.product_family_id)
8688         AND    i2.organization_id = i1.organization_id
8689         AND    i2.sr_instance_id = i1.sr_instance_id
8690         AND    i2.plan_id = i1.plan_id;
8691 
8692         IF PG_DEBUG in ('Y', 'C') THEN
8693                 msc_sch_wb.atp_debug('Get_Family_Item_Info: ' ||  'ATF Date = ' ||to_char(p_atf_date));
8694                 msc_sch_wb.atp_debug('*********End procedure Get_Family_Item_Info ********');
8695         END IF;
8696 
8697 EXCEPTION
8698 
8699 -- bug 5574547
8700 	WHEN NO_DATA_FOUND THEN
8701 	SELECT i1.inventory_item_id,
8702 	       i1.sr_inventory_item_id,
8703 	       i1.aggregate_time_fence_date,
8704                i1.item_name
8705         INTO   p_family_id,
8706                p_sr_family_id,
8707                p_atf_date,
8708                p_family_name
8709         FROM   msc_system_items i1
8710         WHERE  i1.inventory_item_id = p_inventory_item_id
8711         AND    i1.organization_id = p_organization_id
8712         AND    i1.plan_id = p_plan_id
8713         AND    i1.sr_instance_id = p_instance_id;
8714 
8715 		    IF PG_DEBUG in ('Y', 'C') THEN
8716            msc_sch_wb.atp_debug('Get_Family_Item_Info: ' || 'Passing back the values originally sent to API');
8717         END IF;
8718 
8719 
8720         WHEN OTHERS THEN
8721                 IF PG_DEBUG in ('Y', 'C') THEN
8722                         msc_sch_wb.atp_debug('Get_Family_Item_Info: ' || 'Error occurred: ' || to_char(sqlcode) || ':' || SQLERRM);
8723                 END IF;
8724                 x_return_status := FND_API.G_RET_STS_ERROR;
8725 
8726 END Get_Family_Item_Info;
8727 
8728 /*--Get_PF_Plan_Info----------------------------------------------------------
8729 |  o  This procedure finds the plan to be used in PF scenarios
8730 |  o  Logic to select plan is as follows:
8731 |       -
8732 +---------------------------------------------------------------------------*/
8733 PROCEDURE Get_PF_Plan_Info(
8734         p_instance_id	        IN      NUMBER,
8735         p_member_item_id        IN      NUMBER,
8736         p_family_item_id        IN      NUMBER,
8737         p_org_id                IN      NUMBER,
8738         p_demand_class          IN      VARCHAR2,
8739         p_atf_date              OUT     NOCOPY DATE,
8740         p_error_code            OUT     NOCOPY NUMBER,
8741         x_return_status         OUT     NOCOPY VARCHAR2,
8742         p_parent_plan_id        IN      NUMBER DEFAULT NULL --bug3510475
8743 ) IS
8744         -- local variables
8745 
8746 
8747 BEGIN
8748         IF PG_DEBUG in ('Y', 'C') THEN
8749                 msc_sch_wb.atp_debug('*********Begin procedure Get_PF_Plan_Info ********');
8750                 msc_sch_wb.atp_debug('p_instance_id := ' || p_instance_id);
8751                 msc_sch_wb.atp_debug('p_member_item_id := ' || p_member_item_id);
8752                 msc_sch_wb.atp_debug('p_family_item_id := ' || p_family_item_id);
8753                 msc_sch_wb.atp_debug('p_org_id := ' || p_org_id);
8754                 msc_sch_wb.atp_debug('p_demand_class := ' || p_demand_class);
8755 
8756         END IF;
8757 
8758         -- initialize API return status to success
8759         x_return_status := FND_API.G_RET_STS_SUCCESS;
8760 
8761         /* First get member item's plan*/
8762         MSC_ATP_PROC.get_global_plan_info(
8763                 p_instance_id,
8764                 p_member_item_id,
8765                 p_org_id,
8766                 p_demand_class,
8767                 p_parent_plan_id --bug3510475
8768         );
8769 
8770         IF (MSC_ATP_PVT.G_PLAN_INFO_REC.plan_id = -300) THEN
8771                 IF PG_DEBUG in ('Y', 'C') THEN
8772                         msc_sch_wb.atp_debug('Get_PF_Plan_Info: ' || 'ATP Downtime');
8773                 END IF;
8774 
8775                 x_return_status := FND_API.G_RET_STS_ERROR;
8776                 MSC_ATP_PVT.G_DOWNTIME_HIT := 'Y';
8777                 p_error_code := MSC_ATP_PVT.PLAN_DOWN_TIME;
8778                 RAISE NO_DATA_FOUND;
8779         END IF;
8780 
8781         IF PG_DEBUG in ('Y', 'C') THEN
8782              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);
8783         END IF;
8784 
8785         -- ATP4drp begin
8786         IF  NVL(MSC_ATP_PVT.G_PLAN_INFO_REC.plan_type, 1) = 5 THEN
8787             IF PG_DEBUG in ('Y', 'C') THEN
8788                msc_sch_wb.atp_debug('----- ATP4drp Specific Debug Messages -----');
8789                msc_sch_wb.atp_debug('Get_PF_Plan_Info: ' || 'PF and Allocated ATP not applicable for DRP plans');
8790                msc_sch_wb.atp_debug('Get_PF_Plan_Info: ' || 'ATF date will not be obtained.');
8791                msc_sch_wb.atp_debug('----- ATP4drp Specific Debug Messages -----');
8792             END IF;
8793         ELSIF (p_family_item_id <> p_member_item_id) THEN
8794             -- plan is not a DRP plan
8795         -- ATP4drp end
8796         /* Now Get ATF Date in PF case to check whether this is time phased atp case or old PF case*/
8797                 p_atf_date := MSC_ATP_PF.Get_Atf_Date(
8798                                   p_instance_id,
8799                                   p_member_item_id,
8800                                   p_org_id,
8801                                   MSC_ATP_PVT.G_PLAN_INFO_REC.plan_id
8802                               );
8803 
8804                 IF PG_DEBUG in ('Y', 'C') THEN
8805                         msc_sch_wb.atp_debug('Get_PF_Plan_Info: ' || 'ATF Date = '||p_atf_date);
8806                 END IF;
8807 
8808                 /* check if it is time phased atp scenario, if yes then we are done
8809                    else look for family item's plan*/
8810                 IF p_atf_date is not null THEN
8811                         IF PG_DEBUG in ('Y', 'C') THEN
8812                                 msc_sch_wb.atp_debug('Get_PF_Plan_Info: ' || '*** Time Phased ATP Scenario *** ');
8813                         END IF;
8814                 ELSE
8815                         IF PG_DEBUG in ('Y', 'C') THEN
8816                                 msc_sch_wb.atp_debug('Schedule: ' || '*** Product Family(non-time phased) ATP Scenario *** ');
8817                                 msc_sch_wb.atp_debug('Get_PF_Plan_Info: ' || 'Now trying to find old plan for family item...');
8818                         END IF;
8819 
8820                         MSC_ATP_PROC.get_global_plan_info(
8821                                 p_instance_id,
8822                                 p_family_item_id,
8823                                 p_org_id,
8824                                 p_demand_class,
8825                                 p_parent_plan_id  --bug3510475
8826                         );
8827 
8828                         IF (MSC_ATP_PVT.G_PLAN_INFO_REC.plan_id = -300) THEN
8829                                 IF PG_DEBUG in ('Y', 'C') THEN
8830                                         msc_sch_wb.atp_debug('Get_PF_Plan_Info: ' || 'ATP Downtime');
8831                                 END IF;
8832 
8833                                 x_return_status := FND_API.G_RET_STS_ERROR;
8834                                 MSC_ATP_PVT.G_DOWNTIME_HIT := 'Y';
8835                                 p_error_code := MSC_ATP_PVT.PLAN_DOWN_TIME;
8836                                 RAISE NO_DATA_FOUND;
8837                         END IF;
8838                 END IF;
8839         ELSE
8840                 IF PG_DEBUG in ('Y', 'C') THEN
8841                         msc_sch_wb.atp_debug('Get_PF_Plan_Info: ' || '*** Regular PDS ATP Scenario *** ');
8842                 END IF;
8843         END IF;
8844 
8845         IF PG_DEBUG in ('Y', 'C') THEN
8846                 msc_sch_wb.atp_debug('*********End of procedure Get_PF_Plan_Info ********');
8847         END IF;
8848 
8849 EXCEPTION
8850         WHEN OTHERS THEN
8851                 IF PG_DEBUG in ('Y', 'C') THEN
8852                         msc_sch_wb.atp_debug('Get_PF_Plan_Info: ' || 'Exception: ' || sqlerrm);
8853                         msc_sch_wb.atp_debug('Get_PF_Plan_Info: ' || 'Error code:' || to_char(sqlcode));
8854                 END IF;
8855                 x_return_status := FND_API.G_RET_STS_ERROR;
8856 
8857 END Get_PF_Plan_Info;
8858 
8859 /*--Populate_ATF_Dates--------------------------------------------------------
8860 |  o  This procedure populate ATF dates for:
8861 |       -  All atpable family items having ATF setup.
8862 |       -  All atpable member items belonging to the above atpable families.
8863 |  o  Returns number of member items whose ATF dates were populated.
8864 +---------------------------------------------------------------------------*/
8865 PROCEDURE Populate_ATF_Dates(
8866         p_plan_id          		IN	NUMBER,
8867         x_member_count                  OUT     NOCOPY NUMBER,
8868         x_return_status                 OUT	NOCOPY VARCHAR2
8869 ) IS
8870         -- local variables
8871 --bug3663487 start
8872 l_organization_id       MRP_ATP_PUB.number_arr := MRP_ATP_PUB.number_arr();
8873 l_sr_instance_id        MRP_ATP_PUB.number_arr := MRP_ATP_PUB.number_arr();
8874 l_inventory_item_id     MRP_ATP_PUB.number_arr := MRP_ATP_PUB.number_arr();
8875 l_atf_date              mrp_atp_pub.date_arr := mrp_atp_pub.date_arr();
8876 j                       NUMBER;
8877 k                       NUMBER;
8878 --bug3663487 end
8879 
8880 BEGIN
8881         IF PG_DEBUG in ('Y', 'C') THEN
8882                 msc_util.msc_log('*********Begin procedure Populate_ATF_Dates ********');
8883                 msc_util.msc_log('Populate_ATF_Dates: ' ||  'p_plan_id = ' ||to_char(p_plan_id));
8884         END IF;
8885 
8886         -- initialize API return status to success
8887         x_return_status := FND_API.G_RET_STS_SUCCESS;
8888 
8889         --bug3663487 start SQL ID 9426916 and 9426907
8890         SELECT  c2.calendar_date,i2.organization_id,i2.sr_instance_id,i2.inventory_item_id
8891         BULK COLLECT INTO   l_atf_date,l_organization_id,l_sr_instance_id,l_inventory_item_id
8892         FROM    msc_plans mp,
8893                 msc_plan_organizations po,
8894                 msc_system_items i2,
8895                 msc_trading_partners tp,
8896                 msc_atp_rules r,
8897                 msc_calendar_dates c1,
8898             	msc_calendar_dates c2
8899         WHERE   mp.plan_id = p_plan_id
8900         AND	po.plan_id = mp.plan_id
8901         AND	i2.organization_id = po.organization_id
8902         AND     i2.sr_instance_id = po.sr_instance_id
8903         AND     i2.plan_id = po.plan_id
8904         AND     i2.bom_item_type = 5
8905         AND     i2.atp_flag = 'Y'
8906         AND     tp.sr_tp_id = i2.organization_id
8907         AND     tp.sr_instance_id = i2.sr_instance_id
8908         AND     tp.partner_type = 3
8909         AND     r.sr_instance_id = tp.sr_instance_id
8910         AND     r.rule_id = NVL(i2.atp_rule_id, tp.default_atp_rule_id)
8911         AND     c1.sr_instance_id = r.sr_instance_id
8912         AND     c1.calendar_date = trunc(mp.plan_start_date)
8913         AND     c1.calendar_code = tp.calendar_code
8914         AND     c1.exception_set_id = -1
8915         AND     c2.sr_instance_id = c1.sr_instance_id
8916         AND     c2.seq_num = c1.next_seq_num +
8917                                         DECODE(r.aggregate_time_fence_code,
8918                                                 1, NULL,
8919                                                 2, i2.demand_time_fence_days,
8920                                                 3, i2.planning_time_fence_days,
8921                                                 4, r.aggregate_time_fence
8922                                               )
8923         AND    c2.calendar_code = c1.calendar_code
8924         AND    c2.exception_set_id = -1;
8925 
8926         IF PG_DEBUG in ('Y', 'C') THEN
8927                 msc_util.msc_log('Populate_ATF_Dates: ' ||  'l_inventory_item_id.COUNT = ' ||l_inventory_item_id.COUNT);
8928         END IF;
8929 
8930         IF l_inventory_item_id IS NOT NULL AND l_inventory_item_id.COUNT > 0 THEN
8931 
8932          FORALL j IN l_inventory_item_id.first.. l_inventory_item_id.last
8933          UPDATE  msc_system_items i
8934          SET     aggregate_time_fence_date = l_atf_date(j)
8935          WHERE   i.plan_id = p_plan_id
8936          AND     i.ORGANIZATION_ID = l_organization_id(j)
8937          AND     i.SR_INSTANCE_ID = l_sr_instance_id(j)
8938          AND     i.inventory_item_id = l_inventory_item_id(j);
8939 
8940          FORALL k IN l_inventory_item_id.first.. l_inventory_item_id.last
8941          UPDATE  msc_system_items i
8942          SET     aggregate_time_fence_date = l_atf_date(k)
8943          WHERE   i.plan_id = p_plan_id
8944          AND     i.ORGANIZATION_ID = l_organization_id(k)
8945          AND     i.SR_INSTANCE_ID = l_sr_instance_id(k)
8946          AND     i.product_family_id = l_inventory_item_id(k);
8947 
8948          x_member_count := SQL%ROWCOUNT;
8949 
8950         END IF;
8951         --bug3663487 end
8952 
8953         ----bug3663487 code commented for Performance fix
8954         /*
8955         -- populate ATF date for PF items
8956         UPDATE  msc_system_items i
8957         SET     aggregate_time_fence_date =
8958                        (SELECT  c2.calendar_date
8959                         FROM    msc_calendar_dates c2,
8960                                 msc_calendar_dates c1,
8961                                 msc_atp_rules r,
8962                                 msc_trading_partners tp,
8963                                 msc_plans mp,
8964                                 msc_system_items i2
8965                         WHERE   i2.inventory_item_id = i.inventory_item_id
8966                         AND     i2.organization_id = i.organization_id
8967                         AND     i2.sr_instance_id = i.sr_instance_id
8968                         AND     i2.plan_id = -1
8969                         AND     tp.sr_tp_id = i2.organization_id
8970                         AND     tp.sr_instance_id = i2.sr_instance_id
8971                         AND     tp.partner_type = 3
8972                         AND     mp.plan_id = p_plan_id
8973                         AND     r.sr_instance_id = tp.sr_instance_id
8974                         AND     r.rule_id = NVL(i2.atp_rule_id, tp.default_atp_rule_id)
8975                         AND     c1.sr_instance_id = r.sr_instance_id
8976                         AND     c1.calendar_date = mp.plan_start_date
8977                         AND     c1.calendar_code = tp.calendar_code
8978                         AND     c1.exception_set_id = -1
8979                         AND     c2.sr_instance_id = c1.sr_instance_id
8980                         AND     c2.seq_num = c1.next_seq_num +
8981                                         DECODE(r.aggregate_time_fence_code,
8982                                                 1, NULL,
8983                                                 2, i2.demand_time_fence_days,
8984                                                 3, i2.planning_time_fence_days,
8985                                                 4, r.aggregate_time_fence
8986                                               )
8987                         AND    c2.calendar_code = c1.calendar_code
8988                         AND    c2.exception_set_id = -1
8989                        )
8990         WHERE   i.plan_id = p_plan_id
8991         AND     i.bom_item_type = 5
8992         AND     i.atp_flag = 'Y';
8993 
8994         -- populate ATF date for atpable member items
8995         UPDATE  msc_system_items i
8996         SET     aggregate_time_fence_date =
8997                        (SELECT  i2.aggregate_time_fence_date
8998                         FROM    msc_system_items i2
8999                         WHERE   i2.inventory_item_id = i.product_family_id
9000                         AND     i2.sr_instance_id = i.sr_instance_id
9001                         AND     i2.organization_id = i.organization_id
9002                         AND     i2.plan_id = i.plan_id
9003                         AND     i2.aggregate_time_fence_date is not null
9004                        )
9005         WHERE   i.plan_id = p_plan_id
9006         AND     i.inventory_item_id <> DECODE(i.product_family_id,
9007                                               NULL, i.inventory_item_id,
9008                                               -23453, i.inventory_item_id,
9009                                               i.product_family_id)
9010         AND     i.bom_item_type <> 5
9011         AND     i.atp_flag = 'Y'
9012         AND     EXISTS (SELECT  1
9013                         FROM    msc_system_items i2
9014                         WHERE   i2.inventory_item_id = i.product_family_id
9015                         AND     i2.sr_instance_id = i.sr_instance_id
9016                         AND     i2.organization_id = i.organization_id
9017                         AND     i2.plan_id = i.plan_id
9018                         AND     i2.aggregate_time_fence_date is not null
9019                        );
9020         */
9021 
9022         IF PG_DEBUG in ('Y', 'C') THEN
9023                 msc_util.msc_log('Populate_ATF_Dates: ' ||  'Member Count = ' ||to_char(x_member_count));
9024                 msc_util.msc_log('*********End of procedure Populate_ATF_Dates ********');
9025         END IF;
9026 
9027 EXCEPTION
9028         WHEN OTHERS THEN
9029                 IF PG_DEBUG in ('Y', 'C') THEN
9030                         msc_util.msc_log('Populate_ATF_Dates: ' || 'Exception: ' || sqlerrm);
9031                         msc_util.msc_log('Populate_ATF_Dates: ' || 'Error code:' || to_char(sqlcode));
9032                 END IF;
9033                 x_return_status := FND_API.G_RET_STS_ERROR;
9034 
9035 END Populate_ATF_Dates;
9036 
9037 /*--Calculate_Alloc_Percentages-----------------------------------------------
9038 |  o  This procedure calculate allocation percentages for:
9039 |       -  All end demands for atpable items.
9040 |  o  Populate temp table with this information
9041 +---------------------------------------------------------------------------*/
9042 PROCEDURE Calculate_Alloc_Percentages(
9043         p_plan_id          		IN	NUMBER,
9044         x_return_status                 OUT	NOCOPY VARCHAR2
9045 ) IS
9046         -- local variables
9047         l_sysdate                       DATE;
9048         i                               NUMBER;
9049         l_plan_id                       NUMBER;
9050         l_ret_code			NUMBER;
9051         l_summary_flag			NUMBER;
9052         l_user_id                       NUMBER;
9053         dummy1                          VARCHAR2(10);
9054         dummy2                          VARCHAR2(10);
9055         l_alloc_atp                     VARCHAR2(1);
9056         l_applsys_schema                VARCHAR2(10);
9057         l_err_msg			VARCHAR2(1000);
9058         l_ind_tbspace                   VARCHAR2(30);
9059         l_insert_stmt                   VARCHAR2(8000);
9060         l_msc_schema                    VARCHAR2(30);
9061         l_other_dc                      VARCHAR2(30) := '-1';
9062         l_partition_name                VARCHAR2(30);
9063         l_share_partition   		VARCHAR2(1);
9064         l_sql_stmt                      VARCHAR2(300);
9065         l_sql_stmt_1                    VARCHAR2(16000);
9066         l_table_name			VARCHAR2(30);
9067         l_tbspace                       VARCHAR2(30);
9068         l_temp_table			VARCHAR2(30);
9069         l_plan_name                     varchar2(10);
9070         cur_handler			NUMBER;
9071         rows_processed			NUMBER;
9072         l_hash_size			NUMBER := -1;
9073         l_sort_size			NUMBER := -1;
9074         l_parallel_degree		NUMBER := 1;
9075         l_excess_supply_by_dc           VARCHAR2(1);
9076         l_return_status                 VARCHAR2(1);
9077 
9078 
9079 BEGIN
9080         IF PG_DEBUG in ('Y', 'C') THEN
9081                 msc_util.msc_log('*********Begin procedure Calculate_Alloc_Percentages ********');
9082                 msc_util.msc_log('Calculate_Alloc_Percentages: ' ||  'p_plan_id = ' ||to_char(p_plan_id));
9083         END IF;
9084 
9085         -- initialize API return status to success
9086         x_return_status := FND_API.G_RET_STS_SUCCESS;
9087 
9088         /* populate allocated quantity for planned order at product family that are blown down as production forecasts*/
9089         insert into msc_alloc_temp(
9090                 transaction_id,
9091                 demand_class,
9092                 supply_demand_quantity
9093         )
9094         (select sup.transaction_id,
9095                 decode(d1.inventory_item_id, NULL, '-2', d1.demand_class),
9096                 sum(peg1.allocated_quantity)
9097          from
9098                 (select distinct d.disposition_id transaction_id
9099                  from   msc_demands d,
9100                         msc_system_items msi
9101                  where  msi.plan_id = p_plan_id
9102                  and    msi.bom_item_type <> 5
9103                  and    NVL(msi.product_family_id, -23453) <> -23453 -- Bug 3629191
9104                  --and    msi.product_family_id is not null
9105                  and    msi.atp_flag = 'Y'
9106                  and    d.inventory_item_id = msi.inventory_item_id
9107                  and    d.organization_id = msi.organization_id
9108                  and    d.sr_instance_id = msi.sr_instance_id
9109                  and    d.plan_id = msi.plan_id
9110                  and    d.origination_type = 22
9111                 ) sup,
9112                 msc_full_pegging peg1,
9113                 msc_demands d1
9114          where  peg1.plan_id = p_plan_id
9115          and    peg1.pegging_id = peg1.end_pegging_id
9116          and    peg1.transaction_id = sup.transaction_id
9117          and    d1.plan_id (+) = peg1.plan_id
9118          and    d1.inventory_item_id (+) = peg1.inventory_item_id
9119          and    d1.organization_id (+) = peg1.organization_id
9120          and    d1.sr_instance_id (+) = peg1.sr_instance_id
9121          and    d1.demand_id (+) = peg1.demand_id
9122          and    d1.origination_type (+) not in (6, 10, 30)
9123          group by
9124                 sup.transaction_id,
9125                 decode(d1.inventory_item_id, NULL, '-2', d1.demand_class)
9126         );
9127 
9128         -- update allocation percentages
9129         --changed update statement for bug3387166
9130        /* update msc_alloc_temp mat1
9131         set    mat1.allocation_percent =
9132                         mat1.supply_demand_quantity/(select sum(mat2.supply_demand_quantity)
9133                                                      from   msc_alloc_temp mat2
9134                                                      where  mat2.transaction_id = mat1.transaction_id
9135                                                      ); */
9136         update msc_alloc_temp mat1
9137         set    mat1.allocation_percent =
9138                         (select mat1.supply_demand_quantity/sum(mat2.supply_demand_quantity)
9139                           from   msc_alloc_temp mat2
9140                           where  mat2.transaction_id = mat1.transaction_id
9141                           );
9142 
9143         IF PG_DEBUG in ('Y', 'C') THEN
9144                 msc_util.msc_log('Calculate_Alloc_Percentages: ' ||  'Row Count in MSC_ALLOC_TEMP = '|| SQL%ROWCOUNT);
9145                 msc_util.msc_log('*********End of procedure Calculate_Alloc_Percentages ********');
9146         END IF;
9147 
9148 EXCEPTION
9149         WHEN OTHERS THEN
9150                 IF PG_DEBUG in ('Y', 'C') THEN
9151                         msc_util.msc_log('Calculate_Alloc_Percentages: ' || 'Exception: ' || sqlerrm);
9152                         msc_util.msc_log('Calculate_Alloc_Percentages: ' || 'Error code:' || to_char(sqlcode));
9153                 END IF;
9154                 x_return_status := FND_API.G_RET_STS_ERROR;
9155 
9156 END Calculate_Alloc_Percentages;
9157 
9158 /*--Pf_Post_Plan_Proc-----------------------------------------------------------------
9159 |  o  This procedure is called from Load_Plan_Sd procedure for ATP Post
9160 |       Plan Processing (pre-allocation, supplies rollup and bucketing)
9161 |       only if there is atleast one item having ATF date not null.
9162 |  o  It calls following private procedures:
9163 |       -  Prepare_Demands_Stmt1 - to prepare demands statement for:
9164 |            :  Pre-allocation and bucketing for demands pegged to excess
9165 |                 if it is demand priority AATP case.
9166 |            :  Bucketing if it is not demand priority AATP case.
9167 |       -  Prepare_Demands_Stmt2 - to prepare demands statement for pre-allocation
9168 |            and bucketing for demands not pegged to excess if it is demand
9169 |            priority AATP case.
9170 |       -  Prepare_Supplies_Stmt1 - to prepare supplies statement for:
9171 |            :  Preallocation and rollup for supplies pegged to excess/safety stock
9172 |                 if it is demand priority AATP case.
9173 |            :  Rollup if it is not demand priority AATP case.
9174 |       -  Prepare_Supplies_Stmt2 - to prepare supplies statement for
9175 |            preallocation and rollup for supplies not pegged to excess/safety stock
9176 |            if it is demand priority AATP case.
9177 |  o  Calls private procedure Update_Pf_Display_Flag procedure to update
9178 |       Pf_Display_Flag to handle scenario when a demand on one side of ATF is
9179 |       satisfied totally from supplies on the other side of ATF.
9180 +-----------------------------------------------------------------------------------*/
9181 PROCEDURE Pf_Post_Plan_Proc(
9182 	ERRBUF                          OUT     NOCOPY VARCHAR2,
9183 	RETCODE                         OUT     NOCOPY NUMBER,
9184 	p_plan_id                       IN 	NUMBER,
9185 	p_demand_priority               IN      VARCHAR2
9186 )
9187 IS
9188         -- local variables
9189         G_ERROR				NUMBER := 1;
9190         G_SUCCESS			NUMBER := 0;
9191         MAXVALUE                        CONSTANT NUMBER := 999999;
9192         l_retval                        BOOLEAN;
9193         l_sysdate                       DATE;
9194         i                               NUMBER;
9195         l_alloc_method                  NUMBER;
9196         l_class_hrchy                   NUMBER;
9197         l_count				NUMBER;
9198         l_inv_ctp                       NUMBER;
9199         l_plan_id                       NUMBER;
9200         l_ret_code			NUMBER;
9201         l_summary_flag			NUMBER;
9202         l_user_id                       NUMBER;
9203         dummy1                          VARCHAR2(10);
9204         dummy2                          VARCHAR2(10);
9205         l_alloc_atp                     VARCHAR2(1);
9206         l_applsys_schema                VARCHAR2(10);
9207         l_err_msg			VARCHAR2(1000);
9208         l_ind_tbspace                   VARCHAR2(30);
9209         l_insert_stmt                   VARCHAR2(8000);
9210         l_msc_schema                    VARCHAR2(30);
9211         l_other_dc                      VARCHAR2(30) := '-1';
9212         l_partition_name                VARCHAR2(30);
9213         l_share_partition   		VARCHAR2(1);
9214         l_sql_stmt                      VARCHAR2(300);
9215         l_sql_stmt_1                    VARCHAR2(16000);
9216         l_table_name			VARCHAR2(30);
9217         l_tbspace                       VARCHAR2(30);
9218         l_temp_table			VARCHAR2(30);
9219         atp_summ_tab 			MRP_ATP_PUB.char30_arr :=
9220                                                 MRP_ATP_PUB.char30_arr(
9221                                                         'ALLOC_DEMANDS',
9222                                                         'ALLOC_SUPPLIES'
9223                                                 );
9224         l_plan_name                     varchar2(10);
9225         cur_handler			NUMBER;
9226         rows_processed			NUMBER;
9227         l_hash_size			NUMBER := -1;
9228         l_sort_size			NUMBER := -1;
9229         l_parallel_degree		NUMBER := 1;
9230         l_excess_supply_by_dc           VARCHAR2(1);
9231         l_return_status                 VARCHAR2(1);
9232         l_alloc_temp_table              VARCHAR2(30);
9233         l_yes                           VARCHAR2(1) := 'Y';
9234         l_excess_dc                     VARCHAR2(30) := '-2';
9235 
9236 BEGIN
9237         msc_util.msc_log('*********Begin procedure Pf_Post_Plan_Proc ********');
9238 
9239         --project atp
9240         l_excess_supply_by_dc := NVL(FND_PROFILE.VALUE('MSC_EXCESS_SUPPLY_BY_DC'), 'N');
9241         msc_util.msc_log('l_excess_supply_by_dc := ' || l_excess_supply_by_dc);
9242 
9243         BEGIN
9244                 msc_util.msc_log('Calling custom procedure MSC_ATP_CUSTOM.Custom_Pre_Allocation...');
9245                 MSC_ATP_CUSTOM.Custom_Pre_Allocation(p_plan_id);
9246                 msc_util.msc_log('End MSC_ATP_CUSTOM.Custom_Pre_Allocation.');
9247         EXCEPTION
9248                 WHEN OTHERS THEN
9249                         msc_util.msc_log('Error in custom procedure call');
9250                         msc_util.msc_log('Error Code: '|| sqlerrm);
9251         END;
9252         --project atp
9253 
9254         msc_util.msc_log('begin Loading pre-allocation demand/supply data for plan: ' || p_plan_id);
9255         RETCODE := G_SUCCESS;
9256 
9257         l_share_partition := fnd_profile.value('MSC_SHARE_PARTITIONS');
9258 
9259         msc_util.msc_log('l_share_partition := ' || l_share_partition);
9260 
9261         SELECT NVL(summary_flag,1), compile_designator
9262         INTO   l_summary_flag, l_plan_name
9263         FROM   msc_plans
9264         WHERE  plan_id = p_plan_id;
9265 
9266         IF NVL(l_summary_flag,1) = 2 THEN
9267                 msc_util.msc_log('Another session is running post-plan allocation program for this plan');
9268                 RETCODE :=  G_ERROR;
9269                 RETURN;
9270         END IF;
9271 
9272         l_retval := FND_INSTALLATION.GET_APP_INFO('FND', dummy1, dummy2, l_applsys_schema);
9273         SELECT  a.oracle_username,
9274                 sysdate,
9275                 FND_GLOBAL.USER_ID
9276         INTO    l_msc_schema,
9277                 l_sysdate,
9278                 l_user_id
9279         FROM    fnd_oracle_userid a,
9280                 fnd_product_installations b
9281         WHERE   a.oracle_id = b.oracle_id
9282         AND     b.application_id = 724;
9283 
9284         FOR i in 1..atp_summ_tab.count LOOP
9285 
9286                 l_table_name := 'MSC_' || atp_summ_tab(i);
9287 
9288                 IF (l_share_partition = 'Y') THEN
9289                         l_plan_id := MAXVALUE;
9290                 ELSE
9291                         l_plan_id := p_plan_id;
9292                 END IF;
9293 
9294                 l_partition_name :=  atp_summ_tab(i)|| '_' || l_plan_id;
9295                 msc_util.msc_log('l_partition_name := ' || l_partition_name);
9296 
9297                 BEGIN
9298                 SELECT count(*)
9299                 INTO   l_count
9300                 FROM   all_tab_partitions
9301                 WHERE  table_name = l_table_name
9302                 AND    partition_name = l_partition_name
9303                 AND    table_owner = l_msc_schema;
9304                 EXCEPTION
9305                         WHEN OTHERS THEN
9306                                 msc_util.msc_log('Inside Exception');
9307                                 l_count := 0;
9308                 END;
9309 
9310                 IF (l_count = 0) THEN
9311                         FND_MESSAGE.SET_NAME('MSC', 'MSC_ATP_PLAN_PARTITION_MISSING');
9312                         FND_MESSAGE.SET_TOKEN('PLAN_NAME', l_plan_name);
9313                         FND_MESSAGE.SET_TOKEN('TABLE_NAME', 'MSC_' || atp_summ_tab(i));
9314                         msc_util.msc_log(FND_MESSAGE.GET);
9315                         RETCODE := G_ERROR;
9316                         RETURN;
9317                 END IF;
9318         END LOOP;
9319 
9320         BEGIN
9321                 update msc_plans
9322                 set    summary_flag = 2
9323                 where  plan_id = p_plan_id;
9324                 commit;
9325         EXCEPTION
9326                 WHEN OTHERS THEN
9327                         ERRBUF := sqlerrm;
9328                         RETCODE := G_ERROR;
9329                         RETURN;
9330         END;
9331 
9332         msc_util.msc_log('l_share_partition := ' || l_share_partition);
9333 
9334         BEGIN
9335             SELECT	NVL(pre_alloc_hash_size, -1),
9336         		NVL(pre_alloc_sort_size, -1),
9337         		NVL(pre_alloc_parallel_degree, 1)
9338             INTO	l_hash_size,
9339         		l_sort_size,
9340         		l_parallel_degree
9341             FROM	msc_atp_parameters
9342             WHERE	rownum = 1;
9343         EXCEPTION
9344             WHEN others THEN
9345         	 msc_util.msc_log('Error getting performance param: ' || sqlcode || ': ' || sqlerrm);
9346         	 l_hash_size := -1;
9347         	 l_sort_size := -1;
9348         	 l_parallel_degree := 1;
9349         END;
9350 
9351         msc_util.msc_log('Hash: ' || l_hash_size || ' Sort: ' || l_sort_size || ' Parallel: ' || l_parallel_degree);
9352 
9353         IF NVL(l_hash_size, -1) <> -1 THEN
9354            l_sql_stmt_1 := 'alter session set hash_area_size = ' || to_char(l_hash_size);
9355            msc_util.msc_log('l_sql_stmt : ' || l_sql_stmt_1);
9356            execute immediate l_sql_stmt_1;
9357         END IF;
9358 
9359         IF NVL(l_sort_size, -1) <> -1 THEN
9360            l_sql_stmt_1 := 'alter session set sort_area_size = ' || to_char(l_sort_size);
9361            msc_util.msc_log('l_sql_stmt : ' || l_sql_stmt_1);
9362            execute immediate l_sql_stmt_1;
9363         END IF;
9364 
9365         /* forecast at PF changes begin
9366            Changes to populate demand class allocation information in a temp table*/
9367         IF p_demand_priority = 'Y' THEN
9368                 l_alloc_temp_table := 'MSC_ALLOC_TEMP_' || to_char(p_plan_id);
9369 
9370                 msc_util.msc_log('temp table : ' || l_alloc_temp_table);
9371 
9372                 /* Create temp table in tablespace of MSC_ALLOC_DEMANDS*/
9373                 SELECT  t.tablespace_name, NVL(i.def_tablespace_name, t.tablespace_name)
9374                 INTO    l_tbspace, l_ind_tbspace
9375                 FROM    all_tab_partitions t,
9376                         all_part_indexes i
9377                 WHERE   t.table_owner = l_msc_schema
9378                 AND     t.table_name = 'MSC_ALLOC_DEMANDS'
9379                 AND     t.partition_name = 'ALLOC_DEMANDS_' || to_char(l_plan_id)
9380                 AND     i.owner (+) = t.table_owner
9381                 AND     i.table_name (+) = t.table_name
9382                 AND     rownum = 1;
9383 
9384                 msc_util.msc_log('tb space : ' || l_tbspace);
9385                 msc_util.msc_log('ind tbspace : ' || l_ind_tbspace);
9386 
9387                 l_insert_stmt := 'CREATE TABLE ' || l_alloc_temp_table || '(
9388                                      PEGGING_ID             NUMBER,
9389                                      DEMAND_CLASS           VARCHAR2(30),
9390                                      ALLOCATION_PERCENT     NUMBER)
9391                                   TABLESPACE ' || l_tbspace || '
9392                                   PCTFREE 0 STORAGE(INITIAL 40K NEXT 5M PCTINCREASE 0)';
9393 
9394                 msc_util.msc_log('before creating table : ' || l_alloc_temp_table);
9395 
9396                 BEGIN
9397                    ad_ddl.do_ddl(APPLSYS_SCHEMA => l_applsys_schema,
9398                         APPLICATION_SHORT_NAME => 'MSC',
9399                         STATEMENT_TYPE => ad_ddl.create_table,
9400                         STATEMENT => l_insert_stmt,
9401                         OBJECT_NAME => l_alloc_temp_table);
9402                    msc_util.msc_log('after creating table : ' || l_alloc_temp_table);
9403 
9404                 EXCEPTION
9405                    WHEN others THEN
9406                       msc_util.msc_log(sqlcode || ': ' || sqlerrm);
9407                       msc_util.msc_log('Exception of create table : ' || l_alloc_temp_table);
9408 
9409                       ad_ddl.do_ddl(APPLSYS_SCHEMA => l_applsys_schema,
9410                              APPLICATION_SHORT_NAME => 'MSC',
9411                              STATEMENT_TYPE => ad_ddl.drop_table,
9412                              STATEMENT =>  'DROP TABLE ' || l_alloc_temp_table,
9413                              OBJECT_NAME => l_alloc_temp_table);
9414 
9415                       msc_util.msc_log('After Drop table : ' ||l_alloc_temp_table);
9416                       msc_util.msc_log('Before exception create table : ' ||l_alloc_temp_table);
9417 
9418                       ad_ddl.do_ddl(APPLSYS_SCHEMA => l_applsys_schema,
9419                              APPLICATION_SHORT_NAME => 'MSC',
9420                              STATEMENT_TYPE => ad_ddl.create_table,
9421                              STATEMENT => l_insert_stmt,
9422                              OBJECT_NAME => l_alloc_temp_table);
9423 
9424                       msc_util.msc_log('After exception create table : ' ||l_alloc_temp_table);
9425                 END;
9426 
9427                 Calculate_Alloc_Percentages(p_plan_id, l_return_status);
9428 
9429                 IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
9430                         IF PG_DEBUG in ('Y', 'C') THEN
9431                                 msc_util.msc_log('Pf_Post_Plan_Proc: ' || 'Error occured in procedure Calculate_Alloc_Percentages');
9432                         END IF;
9433                         RAISE FND_API.G_EXC_ERROR;
9434                 END IF;
9435 
9436                 msc_util.msc_log('Before generating the SQL');
9437 
9438                 l_insert_stmt := 'insert into '|| l_alloc_temp_table ||'(
9439                                         pegging_id,
9440                                         demand_class,
9441                                         allocation_percent
9442                                 )
9443                                 (select peg1.pegging_id,
9444                                         :l_excess_dc,
9445                                         1
9446                                  from   msc_full_pegging peg1
9447                                  where  peg1.plan_id = :p_plan_id
9448                                  and    peg1.pegging_id = peg1.end_pegging_id
9449                                  and    peg1.demand_id in (-1, -2)
9450 
9451                                  UNION ALL
9452 
9453                                  select peg1.pegging_id,
9454                                         decode(mat.transaction_id, NULL, d.demand_class,
9455                                                                    mat.demand_class),
9456                                         decode(mat.transaction_id, NULL, 1,
9457                                                                    mat.allocation_percent)
9458                                  from   msc_full_pegging peg1,
9459                                         msc_demands d,
9460                                         msc_alloc_temp mat
9461                                  where  peg1.plan_id = :p_plan_id
9462                                  and    peg1.pegging_id = peg1.end_pegging_id
9463                                  and    peg1.demand_id = d.demand_id
9464                                  and    peg1.plan_id = d.plan_id
9465                                  and    d.disposition_id = mat.transaction_id (+)
9466                                 )';
9467 
9468                 msc_util.msc_log(l_insert_stmt);
9469                 msc_util.msc_log('After generating the SQL');
9470 
9471                 -- Obtain cursor handler for sql_stmt
9472                 cur_handler := DBMS_SQL.OPEN_CURSOR;
9473 
9474                 DBMS_SQL.PARSE(cur_handler, l_insert_stmt, DBMS_SQL.NATIVE);
9475 
9476                 msc_util.msc_log('After parsing the SQL');
9477 
9478                 DBMS_SQL.BIND_VARIABLE(cur_handler, ':l_excess_dc', l_excess_dc);
9479                 DBMS_SQL.BIND_VARIABLE(cur_handler, ':p_plan_id', p_plan_id);
9480 
9481                 msc_util.msc_log('after binding the variables');
9482 
9483                 -- Execute the cursor
9484                 rows_processed := DBMS_SQL.EXECUTE(cur_handler);
9485 
9486                 msc_util.msc_log('After executing the cursor');
9487 
9488                 commit;
9489 
9490                 msc_util.msc_log('before creating indexes on temp table');
9491 
9492                 l_sql_stmt_1 := 'CREATE INDEX ' || l_alloc_temp_table || '_N1 ON ' || l_alloc_temp_table || '
9493                                 (pegging_id)
9494                                 STORAGE(INITIAL 40K NEXT 2M PCTINCREASE 0) tablespace ' || l_ind_tbspace;
9495 
9496                 msc_util.msc_log('Before index : ' || l_alloc_temp_table || '.' || l_alloc_temp_table || '_N1');
9497 
9498                 ad_ddl.do_ddl(APPLSYS_SCHEMA => l_applsys_schema,
9499                                 APPLICATION_SHORT_NAME => 'MSC',
9500                                 STATEMENT_TYPE => ad_ddl.create_index,
9501                                 STATEMENT => l_sql_stmt_1,
9502                                 OBJECT_NAME => l_alloc_temp_table);
9503 
9504                 msc_util.msc_log('After index : ' || l_alloc_temp_table || '.' || l_alloc_temp_table || '_N1');
9505                 msc_util.msc_log('Done creating indexes on temp table');
9506                 msc_util.msc_log('Gather Table Stats');
9507 
9508                 -- Use p_plan_id instead of l_plan_id
9509                 --fnd_stats.gather_table_stats('MSC', 'MSC_ALLOC_TEMP_' || to_char(l_plan_id), granularity => 'ALL');
9510                 fnd_stats.gather_table_stats('MSC', l_alloc_temp_table, granularity => 'ALL');
9511         END IF;
9512         /* forecast at PF changes end*/
9513 
9514         IF l_share_partition = 'Y' THEN
9515 
9516            msc_util.msc_log('Inside shared partition');
9517 
9518            -- first delete the existing data from tables
9519            msc_util.msc_log('before deleteing data from the table');
9520 
9521            DELETE MSC_ALLOC_DEMANDS where plan_id = p_plan_id;
9522            msc_util.msc_log('After deleting data from MSC_ALLOC_DEMANDS table');
9523 
9524            DELETE MSC_ALLOC_SUPPLIES where plan_id = p_plan_id;
9525            msc_util.msc_log('After deleting data from MSC_ALLOC_SUPPLIES table');
9526 
9527            /*--------------------------------------------------------------------------
9528            |  <<<<<<<<<<<<<<<<<<<<<<< Begin Demands SQL1 >>>>>>>>>>>>>>>>>>>>>>>>>>>
9529            +-------------------------------------------------------------------------*/
9530            msc_util.msc_log('Before generating Demands SQL1');
9531 
9532            /* forecast at PF changes begin*/
9533            Prepare_Demands_Stmt(l_share_partition, p_demand_priority, l_excess_supply_by_dc,
9534                                  NULL, l_alloc_temp_table, l_parallel_degree, l_sql_stmt_1, l_return_status);
9535            IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
9536                 IF PG_DEBUG in ('Y', 'C') THEN
9537                         msc_util.msc_log('Pf_Post_Plan_Proc: ' || 'Error occured in procedure Prepare_Demands_Stmt');
9538                 END IF;
9539                 RAISE FND_API.G_EXC_ERROR;
9540            END IF;
9541 
9542            msc_util.msc_log('After generating Demands SQL1');
9543            msc_util.msc_log(l_sql_stmt_1);
9544 
9545            -- Obtain cursor handler for sql_stmt
9546            cur_handler := DBMS_SQL.OPEN_CURSOR;
9547 
9548            DBMS_SQL.PARSE(cur_handler, l_sql_stmt_1, DBMS_SQL.NATIVE);
9549            msc_util.msc_log('After parsing Demands SQL1');
9550 
9551            DBMS_SQL.BIND_VARIABLE(cur_handler, ':l_user_id', l_user_id);
9552            DBMS_SQL.BIND_VARIABLE(cur_handler, ':l_sysdate', l_sysdate);
9553            DBMS_SQL.BIND_VARIABLE(cur_handler, ':p_plan_id', p_plan_id);
9554            DBMS_SQL.BIND_VARIABLE(cur_handler, ':l_yes', l_yes);
9555            IF p_demand_priority = 'Y' THEN
9556                 DBMS_SQL.BIND_VARIABLE(cur_handler, ':l_excess_dc', l_excess_dc);
9557                 DBMS_SQL.BIND_VARIABLE(cur_handler, ':p_excess_supply_by_dc', l_excess_supply_by_dc);
9558                 DBMS_SQL.BIND_VARIABLE(cur_handler, ':def_num', '-1');
9559            END IF;
9560            msc_util.msc_log('after binding the variables');
9561 
9562            -- Execute the cursor
9563            rows_processed := DBMS_SQL.EXECUTE(cur_handler);
9564            msc_util.msc_log('After executing the cursor');
9565 
9566            msc_util.msc_log('rows processed: ' || rows_processed);
9567            msc_util.msc_log('after inserting item data into MSC_ALLOC_DEMANDS tables');
9568 
9569            /*--------------------------------------------------------------------------
9570            |  <<<<<<<<<<<<<<<<<<<<<<< Begin Supplies SQL1 >>>>>>>>>>>>>>>>>>>>>>>>>>>
9571            +-------------------------------------------------------------------------*/
9572            msc_util.msc_log('Before generating Supplies SQL1');
9573 
9574            Prepare_Supplies_Stmt(l_share_partition, p_demand_priority,
9575                                   l_excess_supply_by_dc, NULL, l_alloc_temp_table, l_parallel_degree, l_sql_stmt_1, l_return_status);
9576 
9577            IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
9578                 IF PG_DEBUG in ('Y', 'C') THEN
9579                         msc_util.msc_log('Pf_Post_Plan_Proc: ' || 'Error occured in procedure Prepare_Supplies_Stmt');
9580                 END IF;
9581                 RAISE FND_API.G_EXC_ERROR;
9582            END IF;
9583 
9584            msc_util.msc_log(l_sql_stmt_1);
9585            msc_util.msc_log('After Generating Supplies SQL1');
9586 
9587            -- Parse cursor handler for sql_stmt: Don't open as its already opened
9588 
9589            DBMS_SQL.PARSE(cur_handler, l_sql_stmt_1, DBMS_SQL.NATIVE);
9590            msc_util.msc_log('After parsing Supplies SQL1');
9591 
9592            DBMS_SQL.BIND_VARIABLE(cur_handler, ':l_user_id', l_user_id);
9593            DBMS_SQL.BIND_VARIABLE(cur_handler, ':l_sysdate', l_sysdate);
9594            DBMS_SQL.BIND_VARIABLE(cur_handler, ':p_plan_id', p_plan_id);
9595            DBMS_SQL.BIND_VARIABLE(cur_handler, ':l_yes', l_yes);
9596            IF p_demand_priority = 'Y' THEN
9597                 DBMS_SQL.BIND_VARIABLE(cur_handler, ':l_excess_dc', l_excess_dc);
9598                 DBMS_SQL.BIND_VARIABLE(cur_handler, ':p_excess_supply_by_dc', l_excess_supply_by_dc);
9599                 DBMS_SQL.BIND_VARIABLE(cur_handler, ':def_num', '-1');
9600            END IF;
9601            /* forecast at PF changes end*/
9602 
9603            msc_util.msc_log('after binding the variables');
9604 
9605            -- Execute the cursor
9606            rows_processed := DBMS_SQL.EXECUTE(cur_handler);
9607            msc_util.msc_log('After executing first supplies cursor');
9608 
9609            msc_util.msc_log('rows processed: ' || rows_processed);
9610            msc_util.msc_log('after inserting item data into MSC_ALLOC_SUPPLIES tables');
9611 
9612            msc_util.msc_log('Analyze Plan partition for MSC_ALLOC_DEMANDS');
9613            fnd_stats.gather_table_stats(ownname=>'MSC',tabname=>'MSC_ALLOC_DEMANDS',
9614                                    partname=>'ALLOC_DEMANDS_999999',
9615                                    granularity=>'PARTITION',
9616                                    percent =>10);
9617 
9618            msc_util.msc_log('Analyze Plan partition for MSC_ALLOC_SUPPLIES');
9619            fnd_stats.gather_table_stats(ownname=>'MSC',tabname=>'MSC_ALLOC_SUPPLIES',
9620                                    partname=>'ALLOC_SUPPLIES_999999',
9621                                    granularity=>'PARTITION',
9622                                    percent =>10);
9623 
9624         ELSE
9625 
9626            msc_util.msc_log('not a shared plan partition, insert data into temp tables');
9627 
9628            l_temp_table := 'MSC_TEMP_ALLOC_DEM_' || to_char(l_plan_id);
9629 
9630            msc_util.msc_log('temp table : ' || l_temp_table);
9631 
9632            IF p_demand_priority <> 'Y' THEN
9633                    SELECT  t.tablespace_name, NVL(i.def_tablespace_name, t.tablespace_name)
9634         	   INTO    l_tbspace, l_ind_tbspace
9635                    FROM    all_tab_partitions t,
9636                            all_part_indexes i
9637                    WHERE   t.table_owner = l_msc_schema
9638                    AND     t.table_name = 'MSC_ALLOC_DEMANDS'
9639         	   AND     t.partition_name = 'ALLOC_DEMANDS_' || to_char(l_plan_id)
9640                    AND     i.owner (+) = t.table_owner
9641                    AND     i.table_name (+) = t.table_name
9642                    AND     rownum = 1;
9643 
9644                    msc_util.msc_log('tb space : ' || l_tbspace);
9645                    msc_util.msc_log('ind tbspace : ' || l_ind_tbspace);
9646            END IF;
9647 
9648          --bug 6113544
9649          l_insert_stmt := 'CREATE TABLE ' || l_temp_table
9650            || ' TABLESPACE ' || l_tbspace
9651            || ' PCTFREE 0 STORAGE(INITIAL 40K NEXT 5M PCTINCREASE 0)'
9652            || ' as select * from MSC_ALLOC_DEMANDS where 1=2 ';
9653 
9654       /*
9655            l_insert_stmt := 'CREATE TABLE ' || l_temp_table || '(
9656 				 PLAN_ID                    NUMBER           NOT NULL,
9657 				 INVENTORY_ITEM_ID          NUMBER           NOT NULL,
9658 				 ORGANIZATION_ID            NUMBER           NOT NULL,
9659 				 SR_INSTANCE_ID             NUMBER           NOT NULL,
9660 				 DEMAND_CLASS               VARCHAR2(30),   --bug3272444
9661 				 DEMAND_DATE                DATE             NOT NULL,
9662 				 PARENT_DEMAND_ID           NUMBER           NOT NULL,
9663 				 ALLOCATED_QUANTITY         NUMBER           NOT NULL,
9664 				 ORIGINATION_TYPE           NUMBER           NOT NULL,
9665 				 ORDER_NUMBER               VARCHAR2(62),
9666 				 SALES_ORDER_LINE_ID        NUMBER,
9667 				 OLD_DEMAND_DATE            DATE,
9668 				 OLD_ALLOCATED_QUANTITY     NUMBER,
9669 				 CREATED_BY                 NUMBER           NOT NULL,
9670 				 CREATION_DATE              DATE             NOT NULL,
9671 				 LAST_UPDATED_BY            NUMBER           NOT NULL,
9672 				 LAST_UPDATE_DATE           DATE             NOT NULL,
9673 				 DEMAND_QUANTITY            NUMBER,
9674 				 PF_DISPLAY_FLAG            NUMBER,
9675 				 ORIGINAL_ITEM_ID           NUMBER,
9676 				 ORIGINAL_ORIGINATION_TYPE  NUMBER,
9677 				 ORIGINAL_DEMAND_DATE       DATE,
9678 				 SOURCE_ORGANIZATION_ID     NUMBER,         --bug3272444
9679                                  USING_ASSEMBLY_ITEM_ID     NUMBER,         --bug3272444
9680 				 CUSTOMER_ID                NUMBER,
9681                                  SHIP_TO_SITE_ID            NUMBER,
9682                                  REFRESH_NUMBER             NUMBER,         --bug3272444
9683                                  OLD_REFRESH_NUMBER         NUMBER,         --bug3272444
9684                                  DEMAND_SOURCE_TYPE         NUMBER,         --cmro
9685                                  REQUEST_DATE               DATE)           --bug3263368
9686 			    TABLESPACE ' || l_tbspace || '
9687                             PCTFREE 0 STORAGE(INITIAL 40K NEXT 5M PCTINCREASE 0)';
9688        */
9689 
9690            msc_util.msc_log('before creating table : ' || l_temp_table);
9691            BEGIN
9692               ad_ddl.do_ddl(APPLSYS_SCHEMA => l_applsys_schema,
9693                    APPLICATION_SHORT_NAME => 'MSC',
9694                    STATEMENT_TYPE => ad_ddl.create_table,
9695                    STATEMENT => l_insert_stmt,
9696                    OBJECT_NAME => l_temp_table);
9697               msc_util.msc_log('after creating table : ' || l_temp_table);
9698 
9699            EXCEPTION
9700               WHEN others THEN
9701                  msc_util.msc_log(sqlcode || ': ' || sqlerrm);
9702                  msc_util.msc_log('Exception of create table : ' || l_temp_table);
9703 
9704                  ad_ddl.do_ddl(APPLSYS_SCHEMA => l_applsys_schema,
9705                         APPLICATION_SHORT_NAME => 'MSC',
9706                         STATEMENT_TYPE => ad_ddl.drop_table,
9707                         STATEMENT =>  'DROP TABLE ' || l_temp_table,
9708                         OBJECT_NAME => l_temp_table);
9709 
9710                  msc_util.msc_log('After Drop table : ' ||l_temp_table);
9711                  msc_util.msc_log('Before exception create table : ' ||l_temp_table);
9712 
9713                  ad_ddl.do_ddl(APPLSYS_SCHEMA => l_applsys_schema,
9714                         APPLICATION_SHORT_NAME => 'MSC',
9715                         STATEMENT_TYPE => ad_ddl.create_table,
9716                         STATEMENT => l_insert_stmt,
9717                         OBJECT_NAME => l_temp_table);
9718                  msc_util.msc_log('After exception create table : ' ||l_temp_table);
9719            END;
9720 
9721            /*--------------------------------------------------------------------------
9722            |  <<<<<<<<<<<<<<<<<<<<<<< Begin Demands SQL1 >>>>>>>>>>>>>>>>>>>>>>>>>>>
9723            +-------------------------------------------------------------------------*/
9724            msc_util.msc_log('Before generating Demands SQL1');
9725 
9726            /* forecast at PF changes begin*/
9727            Prepare_Demands_Stmt(l_share_partition, p_demand_priority, l_excess_supply_by_dc,
9728                                  l_temp_table, l_alloc_temp_table, l_parallel_degree, l_sql_stmt_1, l_return_status);
9729 
9730            IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
9731                 IF PG_DEBUG in ('Y', 'C') THEN
9732                         msc_util.msc_log('Pf_Post_Plan_Proc: ' || 'Error occured in procedure Prepare_Demands_Stmt');
9733                 END IF;
9734                 RAISE FND_API.G_EXC_ERROR;
9735            END IF;
9736 
9737            msc_util.msc_log(l_sql_stmt_1);
9738            msc_util.msc_log('After generating Demands SQL1');
9739 
9740            -- Obtain cursor handler for sql_stmt
9741            cur_handler := DBMS_SQL.OPEN_CURSOR;
9742 
9743            DBMS_SQL.PARSE(cur_handler, l_sql_stmt_1, DBMS_SQL.NATIVE);
9744            msc_util.msc_log('After parsing Demands SQL1');
9745 
9746            DBMS_SQL.BIND_VARIABLE(cur_handler, ':l_user_id', l_user_id);
9747            DBMS_SQL.BIND_VARIABLE(cur_handler, ':l_sysdate', l_sysdate);
9748            DBMS_SQL.BIND_VARIABLE(cur_handler, ':p_plan_id', p_plan_id);
9749            DBMS_SQL.BIND_VARIABLE(cur_handler, ':l_yes', l_yes);
9750            IF p_demand_priority = 'Y' THEN
9751                 DBMS_SQL.BIND_VARIABLE(cur_handler, ':l_excess_dc', l_excess_dc);
9752                 DBMS_SQL.BIND_VARIABLE(cur_handler, ':p_excess_supply_by_dc', l_excess_supply_by_dc);
9753                 DBMS_SQL.BIND_VARIABLE(cur_handler, ':def_num', '-1');
9754            END IF;
9755            /* forecast at PF changes end*/
9756 
9757            msc_util.msc_log('after binding the variables');
9758 
9759            -- Execute the cursor
9760            rows_processed := DBMS_SQL.EXECUTE(cur_handler);
9761            msc_util.msc_log('After executing the cursor');
9762            msc_util.msc_log('after inserting item data into MSC_TEMP_ALLOC_DEMANDS table');
9763 
9764            commit;
9765 
9766            msc_util.msc_log('before creating indexes on temp demand table');
9767            l_sql_stmt_1 := 'CREATE INDEX ' || l_temp_table || '_N1 ON ' || l_temp_table || '
9768                            --NOLOGGING
9769                            (plan_id, inventory_item_id, organization_id, sr_instance_id, demand_class, demand_date)
9770                            STORAGE(INITIAL 40K NEXT 2M PCTINCREASE 0) tablespace ' || l_ind_tbspace;
9771 
9772            msc_util.msc_log('Before index : ' || l_temp_table || '.' || l_temp_table || '_N1');
9773 
9774            ad_ddl.do_ddl(APPLSYS_SCHEMA => l_applsys_schema,
9775                            APPLICATION_SHORT_NAME => 'MSC',
9776                            STATEMENT_TYPE => ad_ddl.create_index,
9777                            STATEMENT => l_sql_stmt_1,
9778                            OBJECT_NAME => l_temp_table);
9779 
9780            msc_util.msc_log('After index : ' || l_temp_table || '.' || l_temp_table || '_N1');
9781 
9782            l_sql_stmt_1 := 'CREATE INDEX ' || l_temp_table || '_N2 ON ' || l_temp_table || '
9783                            -- NOLOGGING
9784                            --Bug 3629191
9785                            (plan_id,
9786                            sales_order_line_id)
9787                            STORAGE(INITIAL 40K NEXT 2M PCTINCREASE 0) tablespace ' || l_ind_tbspace;
9788 
9789            msc_util.msc_log('Before index : ' || l_temp_table || '.' || l_temp_table || '_N2');
9790 
9791            ad_ddl.do_ddl(APPLSYS_SCHEMA => l_applsys_schema,
9792                            APPLICATION_SHORT_NAME => 'MSC',
9793                            STATEMENT_TYPE => ad_ddl.create_index,
9794                            STATEMENT => l_sql_stmt_1,
9795                            OBJECT_NAME => l_temp_table);
9796 
9797            msc_util.msc_log('After index : ' || l_temp_table || '.' || l_temp_table || '_N2');
9798 
9799            l_sql_stmt_1 := 'CREATE INDEX ' || l_temp_table || '_N3 ON ' || l_temp_table || '
9800                            -- NOLOGGING
9801                            --Bug 3629191
9802                            (plan_id,
9803                            parent_demand_id)
9804                            STORAGE(INITIAL 40K NEXT 2M PCTINCREASE 0) tablespace ' || l_ind_tbspace;
9805 
9806            msc_util.msc_log('Before index : ' || l_temp_table || '.' || l_temp_table || '_N3');
9807 
9808            ad_ddl.do_ddl(APPLSYS_SCHEMA => l_applsys_schema,
9809                            APPLICATION_SHORT_NAME => 'MSC',
9810                            STATEMENT_TYPE => ad_ddl.create_index,
9811                            STATEMENT => l_sql_stmt_1,
9812                            OBJECT_NAME => l_temp_table);
9813 
9814            msc_util.msc_log('After index : ' || l_temp_table || '.' || l_temp_table || '_N3');
9815            msc_util.msc_log('Done creating indexes on temp demand table');
9816 
9817            l_temp_table := 'MSC_TEMP_ALLOC_SUP_' || to_char(l_plan_id);
9818 
9819            SELECT  t.tablespace_name, NVL(i.def_tablespace_name, t.tablespace_name)
9820            INTO    l_tbspace, l_ind_tbspace
9821            FROM    all_tab_partitions t,
9822                    all_part_indexes i
9823            WHERE   t.table_owner = l_msc_schema
9824            AND     t.table_name = 'MSC_ALLOC_SUPPLIES'
9825            AND     t.partition_name = 'ALLOC_SUPPLIES_' || to_char(l_plan_id)
9826            AND     i.owner (+) = t.table_owner
9827            AND     i.table_name (+) = t.table_name
9828            AND     rownum = 1;
9829 
9830            msc_util.msc_log('tb space : ' || l_tbspace);
9831            msc_util.msc_log('ind tbspace : ' || l_ind_tbspace);
9832 
9833        --bug 6113544
9834            l_insert_stmt := 'CREATE TABLE ' || l_temp_table
9835            || ' TABLESPACE ' || l_tbspace
9836            || ' PCTFREE 0 STORAGE(INITIAL 40K NEXT 5M PCTINCREASE 0)'
9837            || ' as select * from msc_alloc_supplies where 1=2 ';
9838 
9839        /*
9840            l_insert_stmt := 'CREATE TABLE ' || l_temp_table || '(
9841                                  PLAN_ID                    NUMBER           NOT NULL,
9842                                  INVENTORY_ITEM_ID          NUMBER           NOT NULL,
9843                                  ORGANIZATION_ID            NUMBER           NOT NULL,
9844                                  SR_INSTANCE_ID             NUMBER           NOT NULL,
9845                                  DEMAND_CLASS               VARCHAR2(30)      ,  --bug3272444
9846                                  SUPPLY_DATE                DATE             NOT NULL,
9847                                  PARENT_TRANSACTION_ID      NUMBER           NOT NULL,
9848                                  ALLOCATED_QUANTITY         NUMBER           NOT NULL,
9849                                  ORDER_TYPE                 NUMBER           NOT NULL,
9850                                  ORDER_NUMBER               VARCHAR2(240),
9851 				 SCHEDULE_DESIGNATOR_ID	    NUMBER,
9852                                  SALES_ORDER_LINE_ID        NUMBER,
9853                                  OLD_SUPPLY_DATE            DATE,
9854                                  OLD_ALLOCATED_QUANTITY     NUMBER,
9855 				 STEALING_FLAG		    NUMBER,
9856                                  CREATED_BY                 NUMBER           NOT NULL,
9857                                  CREATION_DATE              DATE             NOT NULL,
9858                                  LAST_UPDATED_BY            NUMBER           NOT NULL,
9859                                  LAST_UPDATE_DATE           DATE             NOT NULL,
9860                                  FROM_DEMAND_CLASS          VARCHAR2(80),
9861                                  SUPPLY_QUANTITY            NUMBER,
9862                                  ORIGINAL_ORDER_TYPE        NUMBER,         --bug3272444
9863                                  ORIGINAL_ITEM_ID           NUMBER,         --bug3272444
9864                                  CUSTOMER_ID                NUMBER,
9865                                  SHIP_TO_SITE_ID            NUMBER,
9866                                  REFRESH_NUMBER             NUMBER,        --bug3272444
9867                                  OLD_REFRESH_NUMBER         NUMBER,        --bug3272444
9868                                  ATO_MODEL_LINE_ID          NUMBER,
9869                                --ATO_MODEL_LINE_ID          NUMBER)        --
9870                                  DEMAND_SOURCE_TYPE         NUMBER)        --cmro
9871                                   TABLESPACE ' || l_tbspace || '
9872                             PCTFREE 0 STORAGE(INITIAL 40K NEXT 5M PCTINCREASE 0)';
9873        */
9874 
9875            msc_util.msc_log('before creating table : ' || l_temp_table);
9876            BEGIN
9877               ad_ddl.do_ddl(APPLSYS_SCHEMA => l_applsys_schema,
9878                    APPLICATION_SHORT_NAME => 'MSC',
9879                    STATEMENT_TYPE => ad_ddl.create_table,
9880                    STATEMENT => l_insert_stmt,
9881                    OBJECT_NAME => l_temp_table);
9882               msc_util.msc_log('after creating table : ' || l_temp_table);
9883 
9884            EXCEPTION
9885               WHEN others THEN
9886                  msc_util.msc_log(sqlcode || ': ' || sqlerrm);
9887                  msc_util.msc_log('Exception of create table : ' || l_temp_table);
9888 
9889                  ad_ddl.do_ddl(APPLSYS_SCHEMA => l_applsys_schema,
9890                         APPLICATION_SHORT_NAME => 'MSC',
9891                         STATEMENT_TYPE => ad_ddl.drop_table,
9892                         STATEMENT =>  'DROP TABLE ' || l_temp_table,
9893                         OBJECT_NAME => l_temp_table);
9894 
9895                  msc_util.msc_log('After Drop table : ' ||l_temp_table);
9896                  msc_util.msc_log('Before exception create table : ' ||l_temp_table);
9897 
9898                  ad_ddl.do_ddl(APPLSYS_SCHEMA => l_applsys_schema,
9899                         APPLICATION_SHORT_NAME => 'MSC',
9900                         STATEMENT_TYPE => ad_ddl.create_table,
9901                         STATEMENT => l_insert_stmt,
9902                         OBJECT_NAME => l_temp_table);
9903                  msc_util.msc_log('After exception create table : ' ||l_temp_table);
9904            END;
9905 
9906            /*--------------------------------------------------------------------------
9907            |  <<<<<<<<<<<<<<<<<<<<<<< Begin Supplies SQL1 >>>>>>>>>>>>>>>>>>>>>>>>>>>
9908            +-------------------------------------------------------------------------*/
9909            msc_util.msc_log('Before generating Supplies SQL1');
9910 
9911            /* forecast at PF changes begin*/
9912            Prepare_Supplies_Stmt(l_share_partition, p_demand_priority, l_excess_supply_by_dc,
9913                                   l_temp_table, l_alloc_temp_table, l_parallel_degree, l_sql_stmt_1, l_return_status);
9914 
9915            IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
9916                 IF PG_DEBUG in ('Y', 'C') THEN
9917                         msc_util.msc_log('Pf_Post_Plan_Proc: ' || 'Error occured in procedure Prepare_Supplies_Stmt');
9918                 END IF;
9919                 RAISE FND_API.G_EXC_ERROR;
9920            END IF;
9921 
9922            msc_util.msc_log(l_sql_stmt_1);
9923            msc_util.msc_log('After Generating Supplies SQL1');
9924 
9925            -- Parse cursor handler for sql_stmt: Don't open as its already opened
9926 
9927            DBMS_SQL.PARSE(cur_handler, l_sql_stmt_1, DBMS_SQL.NATIVE);
9928            msc_util.msc_log('After parsing Supplies SQL1');
9929 
9930            DBMS_SQL.BIND_VARIABLE(cur_handler, ':l_user_id', l_user_id);
9931            DBMS_SQL.BIND_VARIABLE(cur_handler, ':l_sysdate', l_sysdate);
9932            DBMS_SQL.BIND_VARIABLE(cur_handler, ':p_plan_id', p_plan_id);
9933            DBMS_SQL.BIND_VARIABLE(cur_handler, ':l_yes', l_yes);
9934            IF p_demand_priority = 'Y' THEN
9935                 DBMS_SQL.BIND_VARIABLE(cur_handler, ':l_excess_dc', l_excess_dc);
9936                 DBMS_SQL.BIND_VARIABLE(cur_handler, ':p_excess_supply_by_dc', l_excess_supply_by_dc);
9937                 DBMS_SQL.BIND_VARIABLE(cur_handler, ':def_num', '-1');
9938            END IF;
9939            /* forecast at PF changes end*/
9940 
9941            msc_util.msc_log('after binding the variables');
9942 
9943            -- Execute the cursor
9944            rows_processed := DBMS_SQL.EXECUTE(cur_handler);
9945            msc_util.msc_log('After executing first supplies cursor');
9946            msc_util.msc_log('after inserting item data into MSC_TEMP_ALLOC_SUPPLIES table');
9947 
9948            commit;
9949 
9950            msc_util.msc_log('before creating indexes on temp supply table');
9951            l_sql_stmt_1 := 'CREATE INDEX ' || l_temp_table || '_N1 ON ' || l_temp_table || '
9952                            -- NOLOGGING
9953                            (plan_id, inventory_item_id, organization_id, sr_instance_id, demand_class, supply_date)
9954                            STORAGE(INITIAL 40K NEXT 2M PCTINCREASE 0) tablespace ' || l_ind_tbspace;
9955 
9956            msc_util.msc_log('Before index : ' || l_temp_table || '.' || l_temp_table || '_N1');
9957 
9958            ad_ddl.do_ddl(APPLSYS_SCHEMA => l_applsys_schema,
9959                            APPLICATION_SHORT_NAME => 'MSC',
9960                            STATEMENT_TYPE => ad_ddl.create_index,
9961                            STATEMENT => l_sql_stmt_1,
9962                            OBJECT_NAME => l_temp_table);
9963 
9964            msc_util.msc_log('After index : ' || l_temp_table || '.' || l_temp_table || '_N1');
9965 
9966            l_sql_stmt_1 := 'CREATE INDEX ' || l_temp_table || '_N2 ON ' || l_temp_table || '
9967                            -- NOLOGGING
9968                            --Bug 3629191
9969                            (plan_id,
9970                            parent_transaction_id)
9971                            STORAGE(INITIAL 40K NEXT 2M PCTINCREASE 0) tablespace ' || l_ind_tbspace;
9972 
9973            msc_util.msc_log('Before index : ' || l_temp_table || '.' || l_temp_table || '_N2');
9974 
9975            ad_ddl.do_ddl(APPLSYS_SCHEMA => l_applsys_schema,
9976                            APPLICATION_SHORT_NAME => 'MSC',
9977                            STATEMENT_TYPE => ad_ddl.create_index,
9978                            STATEMENT => l_sql_stmt_1,
9979                            OBJECT_NAME => l_temp_table);
9980 
9981            msc_util.msc_log('After index : ' || l_temp_table || '.' || l_temp_table || '_N2');
9982 
9983            l_sql_stmt_1 := 'CREATE INDEX ' || l_temp_table || '_N3 ON ' || l_temp_table || '
9984                            -- NOLOGGING
9985                            --Bug 3629191
9986                            (plan_id,
9987                            sales_order_line_id)
9988                            STORAGE(INITIAL 40K NEXT 2M PCTINCREASE 0) tablespace ' || l_ind_tbspace;
9989 
9990            msc_util.msc_log('Before index : ' || l_temp_table || '.' || l_temp_table || '_N3');
9991 
9992            ad_ddl.do_ddl(APPLSYS_SCHEMA => l_applsys_schema,
9993                            APPLICATION_SHORT_NAME => 'MSC',
9994                            STATEMENT_TYPE => ad_ddl.create_index,
9995                            STATEMENT => l_sql_stmt_1,
9996                            OBJECT_NAME => l_temp_table);
9997 
9998            msc_util.msc_log('After index : ' || l_temp_table || '.' || l_temp_table || '_N3');
9999 
10000            msc_util.msc_log('Gather Table Stats for Allocated S/D Tables');
10001 
10002            fnd_stats.gather_table_stats('MSC', 'MSC_TEMP_ALLOC_DEM_' || to_char(l_plan_id), granularity => 'ALL');
10003            fnd_stats.gather_table_stats('MSC', 'MSC_TEMP_ALLOC_SUP_' || to_char(l_plan_id), granularity => 'ALL');
10004 
10005            msc_util.msc_log('swap partition for demands');
10006            l_partition_name := 'ALLOC_DEMANDS_' || to_char(l_plan_id);
10007 
10008            msc_util.msc_log('Partition name for msc_alloc_demands table : ' || l_partition_name);
10009 
10010            -- swap partiton for supplies and demand part
10011 
10012            l_sql_stmt := 'ALTER TABLE msc_alloc_demands EXCHANGE PARTITION ' || l_partition_name  ||
10013            ' with table MSC_TEMP_ALLOC_DEM_'|| to_char(l_plan_id) ||
10014            ' including indexes without validation';
10015 
10016            BEGIN
10017         	   msc_util.msc_log('Before alter table msc_alloc_demands');
10018                    ad_ddl.do_ddl(APPLSYS_SCHEMA => l_applsys_schema,
10019                    APPLICATION_SHORT_NAME => 'MSC',
10020                    STATEMENT_TYPE => ad_ddl.alter_table,
10021                    STATEMENT => l_sql_stmt,
10022                    OBJECT_NAME => 'MSC_ALLOC_DEMANDS');
10023        	   END;
10024 
10025            msc_util.msc_log('swap partition for supplies');
10026            l_partition_name := 'ALLOC_SUPPLIES_' || to_char(l_plan_id);
10027 
10028            msc_util.msc_log('Partition name for msc_alloc_supplies table : ' || l_partition_name);
10029 
10030            l_sql_stmt := 'ALTER TABLE msc_alloc_supplies EXCHANGE PARTITION ' || l_partition_name  ||
10031            ' with table MSC_TEMP_ALLOC_SUP_'|| to_char(l_plan_id) ||
10032            ' including indexes without validation';
10033 
10034            BEGIN
10035         	   msc_util.msc_log('Before alter table msc_alloc_supplies');
10036                    ad_ddl.do_ddl(APPLSYS_SCHEMA => l_applsys_schema,
10037                    APPLICATION_SHORT_NAME => 'MSC',
10038                    STATEMENT_TYPE => ad_ddl.alter_table,
10039                    STATEMENT => l_sql_stmt,
10040                    OBJECT_NAME => 'MSC_ALLOC_SUPPLIES');
10041        	   END;
10042 
10043 	END IF; -- IF l_share_partition = 'Y'
10044 
10045         /* forecast at PF changes begin*/
10046         -- clean temp tables after exchanging partitions
10047         msc_util.msc_log('Call procedure clean_temp_tables');
10048 
10049         MSC_POST_PRO.clean_temp_tables(l_applsys_schema, l_plan_id, p_plan_id, p_demand_priority);
10050 
10051         msc_util.msc_log('After procedure clean_temp_tables');
10052         /* forecast at PF changes end*/
10053 
10054         /* Call Update_Pf_Display_Flags to update Pf_Display_Flag in msc_alloc_demands*/
10055         Update_Pf_Display_Flag(p_plan_id, l_return_status);
10056 
10057         IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
10058                 IF PG_DEBUG in ('Y', 'C') THEN
10059                         msc_util.msc_log('Pf_Post_Plan_Proc: ' || 'Error occured in procedure Update_Pf_Display_Flag');
10060                 END IF;
10061                 RAISE FND_API.G_EXC_ERROR;
10062         END IF;
10063 
10064         BEGIN
10065             update msc_plans
10066             set    summary_flag = 3
10067             where  plan_id = p_plan_id;
10068         END;
10069 
10070 	RETCODE := G_SUCCESS;
10071 	commit;
10072 
10073 	msc_util.msc_log('End procedure Pf_Post_Plan_Proc');
10074 
10075 EXCEPTION
10076        WHEN OTHERS THEN
10077             msc_util.msc_log('Inside main exception of Pf_Post_Plan_Proc');
10078             msc_util.msc_log(sqlerrm);
10079             ERRBUF := sqlerrm;
10080 
10081             BEGIN
10082                update msc_plans
10083                set    summary_flag = 1
10084                where  plan_id = p_plan_id;
10085                commit;
10086             END;
10087 
10088             RETCODE := G_ERROR;
10089             IF (l_share_partition = 'Y') THEN
10090                ROLLBACK;
10091             ELSE
10092 	       msc_util.msc_log('Call procedure clean_temp_tables in exception');
10093 
10094 	       /* forecast at PF changes*/
10095 	       MSC_POST_PRO.clean_temp_tables(l_applsys_schema, l_plan_id, p_plan_id, p_demand_priority);
10096 
10097 	       msc_util.msc_log('After procedure clean_temp_tables in exception');
10098             END IF;
10099 END Pf_Post_Plan_Proc;
10100 
10101 -- New private procedure added for forecast at PF
10102 /*--Prepare_Demands_Stmt----------------------------------------------------
10103 |  o  Called from Pf_Post_Plan_Proc procedure to:
10104 |       -  Prepare demands stmt for preallocation + bucketting (Demand
10105 |            priority AATP)
10106 |            :  Excess supply by demand class = No
10107 |            :  Excess supply by demand class = Yes (for project atp)
10108 |       -  Prepare demands stmt for bucketting. (All PDS ATP scenarios except
10109 |            demand priority AATP)
10110 |  o  Prepares demand stmt for both share plan partition "yes" and "no".
10111 +-------------------------------------------------------------------------*/
10112 PROCEDURE Prepare_Demands_Stmt(
10113 	p_share_partition               IN      VARCHAR2,
10114 	p_demand_priority               IN      VARCHAR2,
10115 	p_excess_supply_by_dc           IN      VARCHAR2,
10116 	p_temp_table                    IN      VARCHAR2,
10117 	p_alloc_temp_table              IN      VARCHAR2,
10118 	p_parallel_degree               IN      NUMBER,
10119 	x_sql_stmt                      OUT 	NOCOPY VARCHAR2,
10120         x_return_status                 OUT     NOCOPY VARCHAR2
10121 )
10122 IS
10123 
10124 BEGIN
10125 
10126         IF PG_DEBUG in ('Y', 'C') THEN
10127                 msc_util.msc_log('Prepare_Demands_Stmt: ' || 'p_share_partition        : ' || p_share_partition);
10128                 msc_util.msc_log('Prepare_Demands_Stmt: ' || 'p_demand_priority        : ' || p_demand_priority);
10129                 msc_util.msc_log('Prepare_Demands_Stmt: ' || 'p_excess_supply_by_dc    : ' || p_excess_supply_by_dc);
10130                 msc_util.msc_log('Prepare_Demands_Stmt: ' || 'p_temp_table             : ' || p_temp_table);
10131                 msc_util.msc_log('Prepare_Demands_Stmt: ' || 'p_alloc_temp_table       : ' || p_alloc_temp_table);
10132                 msc_util.msc_log('Prepare_Demands_Stmt: ' || 'p_parallel_degree        : ' || p_parallel_degree);
10133                 msc_util.msc_log('Prepare_Demands_Stmt: ' || 'MSC_ATP_PVT.G_HP_DEMAND_BUCKETING_PREF        : ' || MSC_ATP_PVT.G_HP_DEMAND_BUCKETING_PREF);
10134         END IF;
10135 
10136         -- Initializing API return code
10137         x_return_status := FND_API.G_RET_STS_SUCCESS;
10138 
10139         IF p_share_partition = 'Y' THEN
10140            x_sql_stmt := '
10141                 INSERT INTO MSC_ALLOC_DEMANDS(';
10142         ELSE
10143            x_sql_stmt := '
10144                 INSERT INTO ' || p_temp_table || '(';
10145         END IF;
10146 
10147         IF p_demand_priority = 'Y' THEN
10148                    x_sql_stmt := x_sql_stmt ||'
10149                                 plan_id,
10150                                 inventory_item_id,
10151                                 original_item_id,
10152                                 organization_id,
10153                                 sr_instance_id,
10154                                 demand_class,
10155                                 demand_date,
10156                                 original_demand_date,
10157                                 demand_quantity,
10158                                 allocated_quantity,
10159                                 parent_demand_id,
10160                                 origination_type,
10161                                 original_origination_type,
10162                                 pf_display_flag,
10163                                 order_number,
10164                                 sales_order_line_id,
10165                                 demand_source_type,--cmro
10166                                 source_organization_id,
10167                                 using_assembly_item_id,
10168                                 customer_id,
10169                                 ship_to_site_id,
10170                                 created_by,
10171                                 creation_date,
10172                                 last_updated_by,
10173                                 last_update_date,
10174                                 request_date)--bug3263368
10175                 	(
10176                         SELECT	/*+  use_hash(pegging_v mv) parallel(mv,' || to_char(p_parallel_degree) || ')  */
10177                                 pegging_v.plan_id plan_id,
10178                                 pegging_v.inventory_item_id,
10179                                 pegging_v.original_item_id,
10180                                 pegging_v.organization_id,
10181                                 pegging_v.sr_instance_id,
10182                                 NVL(mv.demand_class, :def_num) demand_class,
10183                                 pegging_v.demand_date,
10184                                 pegging_v.original_demand_date,
10185                                 MIN(pegging_v.demand_quantity),
10186                                 SUM(pegging_v.allocated_quantity),
10187                                 pegging_v.demand_id,
10188                                 pegging_v.origination_type,
10189                                 pegging_v.original_origination_type,
10190                                 pegging_v.pf_display_flag,
10191                                 pegging_v.order_number,
10192                                 pegging_v.sales_order_line_id,
10193                                 pegging_v.demand_source_type,--cmro
10194                                 pegging_v.source_organization_id,
10195                                 pegging_v.using_assembly_item_id,
10196                                 pegging_v.customer_id,
10197                                 pegging_v.ship_to_site_id,
10198                                 :l_user_id,
10199                                 :l_sysdate,
10200                                 :l_user_id,
10201                                 :l_sysdate,
10202                                 pegging_v.request_date --bug3263368
10203                         FROM
10204                                 (SELECT peg.plan_id plan_id,
10205                                         decode(msi.aggregate_time_fence_date,
10206                                                    NULL, msi.inventory_item_id,
10207                                                    decode(sign(trunc(s.new_schedule_date) - msi.aggregate_time_fence_date), -- Bug 3450234 use trunc on s.new_schedule_date
10208                                                        1, msi.product_family_id,                                            -- to avoid wrong bucketed demands creation
10209                                                        msi.inventory_item_id)) inventory_item_id,
10210                                         msi.inventory_item_id original_item_id,
10211                         	        peg.organization_id,
10212                         	        peg.sr_instance_id,
10213                         	        decode(mat.demand_class, :l_excess_dc, decode(:p_excess_supply_by_dc, :l_yes, nvl(s.demand_class, :def_num),
10214                         	                                                                     :def_num),
10215                         	                                 NULL, :def_num,
10216                         	                                 mat.demand_class) demand_class,
10217                                         decode(msi.aggregate_time_fence_date,
10218                                         -- Bug 3574164. DMD_SATISFIED_TIME changed to PLANNED_SHIP_DATE.
10219                                                NULL, trunc(DECODE('||MSC_ATP_PVT.G_HP_DEMAND_BUCKETING_PREF||',
10220                                                                   2, NVL(D.PLANNED_SHIP_DATE,D.USING_ASSEMBLY_DEMAND_DATE),
10221                                                                      NVL(D.SCHEDULE_SHIP_DATE,D.USING_ASSEMBLY_DEMAND_DATE))),
10222                                                      decode(sign(trunc(s.new_schedule_date) - msi.aggregate_time_fence_date),
10223                                                             1, decode(sign(trunc(DECODE('||MSC_ATP_PVT.G_HP_DEMAND_BUCKETING_PREF||',
10224                                                                                         2, NVL(D.PLANNED_SHIP_DATE,D.USING_ASSEMBLY_DEMAND_DATE),
10225                                                                                            NVL(D.SCHEDULE_SHIP_DATE,
10226                                                                                                D.USING_ASSEMBLY_DEMAND_DATE)))
10227                                                                                                - msi.aggregate_time_fence_date),
10228                                                                       1, trunc(DECODE('||MSC_ATP_PVT.G_HP_DEMAND_BUCKETING_PREF||',
10229                                                                                       2, NVL(D.PLANNED_SHIP_DATE,D.USING_ASSEMBLY_DEMAND_DATE),
10230                                                                                          NVL(D.SCHEDULE_SHIP_DATE,
10231                                                                                              D.USING_ASSEMBLY_DEMAND_DATE))),
10232                                                                          msi.aggregate_time_fence_date+1),
10233                                                                decode(sign(trunc(DECODE('||MSC_ATP_PVT.G_HP_DEMAND_BUCKETING_PREF||',
10234                                                                                         2, NVL(D.PLANNED_SHIP_DATE,D.USING_ASSEMBLY_DEMAND_DATE),
10235                                                                                            NVL(D.SCHEDULE_SHIP_DATE,
10236                                                                                                D.USING_ASSEMBLY_DEMAND_DATE)))
10237                                                                                                - msi.aggregate_time_fence_date),
10238                                                                       1, msi.aggregate_time_fence_date,
10239                                                                          trunc(DECODE('||MSC_ATP_PVT.G_HP_DEMAND_BUCKETING_PREF||',
10240                                                                                       2, NVL(D.PLANNED_SHIP_DATE,D.USING_ASSEMBLY_DEMAND_DATE),
10241                                                                                          NVL(D.SCHEDULE_SHIP_DATE,
10242                                                                                              D.USING_ASSEMBLY_DEMAND_DATE)))))) demand_date,
10243                                         trunc(DECODE('||MSC_ATP_PVT.G_HP_DEMAND_BUCKETING_PREF||',
10244                                                      2, NVL(D.PLANNED_SHIP_DATE,D.USING_ASSEMBLY_DEMAND_DATE),
10245                                                         NVL(D.SCHEDULE_SHIP_DATE,
10246                                                             D.USING_ASSEMBLY_DEMAND_DATE))) original_demand_date,
10247                         		decode(d.origination_type, 4, d.daily_demand_rate,
10248                         		           d.using_requirement_quantity) demand_quantity,
10249                                         decode(msi.aggregate_time_fence_date,
10250                                                NULL, peg.allocated_quantity,
10251                                                decode(msi.bom_item_type,
10252                                                       5, 0,
10253                                                       peg.allocated_quantity))* mat.allocation_percent allocated_quantity,
10254                                         d.demand_id,
10255                                         decode(msi.aggregate_time_fence_date,
10256                                                    NULL, d.origination_type, 51) origination_type,
10257                         		d.origination_type original_origination_type,
10258                                         decode(msi.aggregate_time_fence_date,
10259                                                    NULL, NULL,
10260                                                    decode(sign(trunc(s.new_schedule_date) - msi.aggregate_time_fence_date),
10261                                                        1, decode(sign(trunc(DECODE('||MSC_ATP_PVT.G_HP_DEMAND_BUCKETING_PREF||',
10262                                                                                    2, NVL(D.PLANNED_SHIP_DATE,D.USING_ASSEMBLY_DEMAND_DATE),
10263                                                                                       NVL(D.SCHEDULE_SHIP_DATE,
10264                                                                                           D.USING_ASSEMBLY_DEMAND_DATE)))
10265                                                                                           - msi.aggregate_time_fence_date),
10266                                                               1, 1,
10267                                                               NULL),
10268                                                           decode(sign(trunc(DECODE('||MSC_ATP_PVT.G_HP_DEMAND_BUCKETING_PREF||',
10269                                                                                    2, NVL(D.PLANNED_SHIP_DATE,D.USING_ASSEMBLY_DEMAND_DATE),
10270                                                                                       NVL(D.SCHEDULE_SHIP_DATE,
10271                                                                                           D.USING_ASSEMBLY_DEMAND_DATE)))
10272                                                                                           - msi.aggregate_time_fence_date),
10273                                                               1, NULL, -- Moved paranthesis from here to end of decode. Identified as part of 3450234 testing.
10274                                                               1))) pf_display_flag,
10275                         		decode(d.origination_type, 1, to_char(d.disposition_id), d.order_number) order_number,
10276                         		d.sales_order_line_id,
10277                         		d.demand_source_type,--cmro
10278                                         d.source_organization_id,
10279                                         d.using_assembly_item_id,
10280                                         d.customer_id,
10281                                         d.ship_to_site_id,
10282                                         /* New Allocation logic for time phased ATP */
10283                                         decode(msi.aggregate_time_fence_date,
10284                                                    NULL, msi.inventory_item_id,
10285                                                    msi.product_family_id) product_family_id ,
10286                                         decode(d.order_date_type_code,2,d.request_date,
10287                         		           d.request_ship_date)request_date --bug3263368
10288                         	FROM    msc_system_items msi,
10289                         		msc_demands d,
10290                         	        msc_full_pegging peg,
10291                         	        ' || p_alloc_temp_table || ' mat,
10292                         	        msc_supplies s
10293                         	WHERE   msi.plan_id = :p_plan_id
10294                                 AND     msi.atp_flag = :l_yes
10295                                 AND     msi.plan_id = d.plan_id --bug3453289
10296                                 AND     d.inventory_item_id = msi.inventory_item_id
10297                                 AND     d.sr_instance_id = msi.sr_instance_id
10298                                 AND     d.organization_id = msi.organization_id
10299                         	AND	d.origination_type NOT IN (5,7,8,9,11,15,22,28,29,31)
10300                         	AND     peg.plan_id = d.plan_id
10301                         	AND     peg.demand_id = d.demand_id
10302                         	AND     peg.sr_instance_id = d.sr_instance_id --bug3453289 MSC_FULL_PEGGING_N2
10303                         	AND     peg.organization_id= d.organization_id --bug3453289 MSC_FULL_PEGGING_N2
10304                         	AND     mat.pegging_id = peg.end_pegging_id
10305                         	AND     s.sr_instance_id = peg.sr_instance_id
10306                         	AND     s.plan_id = peg.plan_id
10307                         	AND     s.transaction_id = peg.transaction_id) pegging_v,
10308                                 msc_item_hierarchy_mv mv
10309                         WHERE	pegging_v.product_family_id = mv.inventory_item_id(+)
10310                         AND     pegging_v.organization_id = mv.organization_id (+)
10311                         AND     pegging_v.sr_instance_id = mv.sr_instance_id (+)
10312                         AND     pegging_v.demand_date >=  mv.effective_date (+)
10313                         AND     pegging_v.demand_date <=  mv.disable_date (+)
10314                         AND	pegging_v.demand_class = mv.demand_class (+)
10315                         AND     mv.level_id (+) = -1
10316                         AND     pegging_v.allocated_quantity <> 0
10317                 	GROUP BY
10318                                 pegging_v.plan_id,
10319                                 pegging_v.inventory_item_id,
10320                                 pegging_v.original_item_id,
10321                                 pegging_v.organization_id,
10322                                 pegging_v.sr_instance_id,
10323                                 NVL(mv.demand_class, :def_num),
10324                                 pegging_v.demand_date,
10325                                 pegging_v.original_demand_date,
10326                                 pegging_v.demand_id,
10327                                 pegging_v.origination_type,
10328                                 pegging_v.original_origination_type,
10329                                 pegging_v.pf_display_flag,
10330                                 pegging_v.order_number,
10331                                 pegging_v.sales_order_line_id,
10332                                 pegging_v.demand_source_type,--cmro
10333                                 pegging_v.source_organization_id,
10334                                 pegging_v.using_assembly_item_id,
10335                                 pegging_v.customer_id,
10336                                 pegging_v.ship_to_site_id,
10337                                 :l_user_id,
10338                                 :l_sysdate,
10339                                 :l_user_id,
10340                                 :l_sysdate,
10341                                 pegging_v.request_date)';
10342         ELSE -- this is same as else of old private procedure prepare_demands_stmt1 as there
10343              -- is no changes for non demand priority AATP scenarios
10344                 -- Prepare demands stmt for creation of bucketed demands/rollup supplies
10345                 x_sql_stmt := x_sql_stmt ||'
10346                                 plan_id,
10347                                 inventory_item_id,
10348                                 original_item_id,
10349                                 organization_id,
10350                                 sr_instance_id,
10351                                 demand_class,
10352                                 demand_date,
10353                                 original_demand_date,
10354                                 demand_quantity,
10355                                 allocated_quantity,
10356                                 parent_demand_id,
10357                                 origination_type,
10358                                 original_origination_type,
10359                                 pf_display_flag,
10360                                 order_number,
10361                                 sales_order_line_id,
10362                                 demand_source_type,--cmro
10363                                 source_organization_id,
10364                                 using_assembly_item_id,
10365                                 customer_id,
10366                                 ship_to_site_id,
10367                                 created_by,
10368                                 creation_date,
10369                                 last_updated_by,
10370                                 last_update_date,
10371                                 request_date)--bug3263368
10372                         (SELECT
10373                                 peg1.plan_id plan_id,
10374                                 decode(sign(trunc(s.new_schedule_date) - msi.aggregate_time_fence_date), -- Bug 3450234 use trunc on s.new_schedule_date
10375                                                                                                          -- to avoid wrong bucketed demands creation
10376                                            1, msi.product_family_id,
10377                                            msi.inventory_item_id) inventory_item_id,
10378                                 msi.inventory_item_id original_item_id,
10379                                 peg1.organization_id,
10380                                 peg1.sr_instance_id,
10381                                 d.demand_class demand_class,
10382                                 decode(sign(trunc(s.new_schedule_date) - msi.aggregate_time_fence_date),
10383                                        1, decode(sign(trunc(DECODE('||MSC_ATP_PVT.G_HP_DEMAND_BUCKETING_PREF||',
10384                                        -- Bug 3574164. DMD_SATISFIED_TIME changed to PLANNED_SHIP_DATE.
10385                                                                    2, NVL(D.PLANNED_SHIP_DATE,D.USING_ASSEMBLY_DEMAND_DATE),
10386                                                                    NVL(D.SCHEDULE_SHIP_DATE,
10387                                                                        D.USING_ASSEMBLY_DEMAND_DATE)))
10388                                                                        - msi.aggregate_time_fence_date),
10389                                                  1, trunc(DECODE('||MSC_ATP_PVT.G_HP_DEMAND_BUCKETING_PREF||',
10390                                                               2, NVL(D.PLANNED_SHIP_DATE,D.USING_ASSEMBLY_DEMAND_DATE),
10391                                                                  NVL(D.SCHEDULE_SHIP_DATE,
10392                                                                      D.USING_ASSEMBLY_DEMAND_DATE))),
10393                                                  msi.aggregate_time_fence_date+1),
10394                                        decode(sign(trunc(DECODE('||MSC_ATP_PVT.G_HP_DEMAND_BUCKETING_PREF||',
10395                                                                 2, NVL(D.PLANNED_SHIP_DATE,D.USING_ASSEMBLY_DEMAND_DATE),
10396                                                                    NVL(D.SCHEDULE_SHIP_DATE,
10397                                                                        D.USING_ASSEMBLY_DEMAND_DATE)))
10398                                                                        - msi.aggregate_time_fence_date),
10399                                            1, msi.aggregate_time_fence_date,
10400                                            trunc(DECODE('||MSC_ATP_PVT.G_HP_DEMAND_BUCKETING_PREF||',
10401                                                         2, NVL(D.PLANNED_SHIP_DATE,D.USING_ASSEMBLY_DEMAND_DATE),
10402                                                            NVL(D.SCHEDULE_SHIP_DATE,
10403                                                                D.USING_ASSEMBLY_DEMAND_DATE))))) demand_date,
10404                                 trunc(DECODE('||MSC_ATP_PVT.G_HP_DEMAND_BUCKETING_PREF||',
10405                                              2, NVL(D.PLANNED_SHIP_DATE,D.USING_ASSEMBLY_DEMAND_DATE),
10406                                                 NVL(D.SCHEDULE_SHIP_DATE,
10407                                                     D.USING_ASSEMBLY_DEMAND_DATE))) original_demand_date,
10408                                 MIN(decode(d.origination_type, 4, d.daily_demand_rate,
10409                 		           d.using_requirement_quantity)) demand_quantity,
10410                                 SUM(peg1.allocated_quantity),
10411                                 d.demand_id,
10412                                 51 origination_type, -- ATP Bucketed Demand
10413                                 d.origination_type original_origination_type,
10414                                 decode(sign(trunc(s.new_schedule_date) - msi.aggregate_time_fence_date),
10415                                        1, decode(sign(trunc(DECODE('||MSC_ATP_PVT.G_HP_DEMAND_BUCKETING_PREF||',
10416                                        -- Bug 3574164. DMD_SATISFIED_TIME changed to PLANNED_SHIP_DATE.
10417                                                                    2, NVL(D.PLANNED_SHIP_DATE,D.USING_ASSEMBLY_DEMAND_DATE),
10418                                                                       NVL(D.SCHEDULE_SHIP_DATE,
10419                                                                           D.USING_ASSEMBLY_DEMAND_DATE)))
10420                                                                           - msi.aggregate_time_fence_date),
10421                                               1, 1,
10422                                               NULL),
10423                                        decode(sign(trunc(DECODE('||MSC_ATP_PVT.G_HP_DEMAND_BUCKETING_PREF||',
10424                                                                 2, NVL(D.PLANNED_SHIP_DATE,D.USING_ASSEMBLY_DEMAND_DATE),
10425                                                                    NVL(D.SCHEDULE_SHIP_DATE,
10426                                                                        D.USING_ASSEMBLY_DEMAND_DATE)))
10427                                                                        - msi.aggregate_time_fence_date),
10428                                            1, NULL, -- Moved paranthesis from here to end of decode. Identified as part of 3450234 testing.
10429                                            1)) pf_display_flag,
10430                 		decode(d.origination_type, 1, to_char(d.disposition_id), d.order_number) order_number,
10431                                 d.sales_order_line_id,
10432                                 d.demand_source_type,--cmro
10433                                 d.source_organization_id,
10434                                 d.using_assembly_item_id,
10435                                 d.customer_id,
10436                                 d.ship_to_site_id,
10437                                 :l_user_id,
10438                                 :l_sysdate,
10439                                 :l_user_id,
10440                                 :l_sysdate,
10441                                 decode(d.order_date_type_code,2,d.request_date,
10442         			            d.request_ship_date)request_date --bug3263368
10443                         FROM    msc_full_pegging peg1,
10444                                 msc_demands d,
10445                                 msc_supplies s,
10446                                 msc_system_items msi
10447                         WHERE   d.demand_id = peg1.demand_id
10448                         AND     d.plan_id = peg1.plan_id
10449                         AND     d.sr_instance_id = peg1.sr_instance_id
10450                         AND     d.organization_id= peg1.organization_id --bug3453289
10451                         AND	d.origination_type NOT IN (5,7,8,9,11,15,22,28,29,31)
10452                         AND     s.transaction_id = peg1.transaction_id
10453                         AND     s.plan_id = peg1.plan_id
10454                         AND     s.sr_instance_id = peg1.sr_instance_id --bug3453289
10455                         AND     msi.plan_id = d.plan_id
10456                         AND     msi.inventory_item_id = d.inventory_item_id
10457                         AND     msi.sr_instance_id = d.sr_instance_id
10458                         AND     msi.organization_id = d.organization_id
10459                         AND     msi.aggregate_time_fence_date is not null
10460                         AND     msi.bom_item_type <> 5
10461                         AND     msi.plan_id = :p_plan_id
10462                         AND     msi.atp_flag = :l_yes
10463                         GROUP BY
10464                                 peg1.plan_id,
10465                                 decode(sign(trunc(s.new_schedule_date) - msi.aggregate_time_fence_date), -- Bug 3450234 use trunc on s.new_schedule_date
10466                                                                                                          -- to avoid wrong bucketed demands creation
10467                                            1, msi.product_family_id,
10468                                            msi.inventory_item_id),
10469                                 msi.inventory_item_id,
10470                                 peg1.organization_id,
10471                                 peg1.sr_instance_id,
10472                                 d.demand_class,
10473                                 decode(sign(trunc(s.new_schedule_date) - msi.aggregate_time_fence_date),
10474                                        1, decode(sign(trunc(DECODE('||MSC_ATP_PVT.G_HP_DEMAND_BUCKETING_PREF||',
10475                                        -- Bug 3574164. DMD_SATISFIED_TIME changed to PLANNED_SHIP_DATE.
10476                                                                    2, NVL(D.PLANNED_SHIP_DATE,D.USING_ASSEMBLY_DEMAND_DATE),
10477                                                                       NVL(D.SCHEDULE_SHIP_DATE,
10478                                                                           D.USING_ASSEMBLY_DEMAND_DATE)))
10479                                                                           - msi.aggregate_time_fence_date),
10480                                               1, trunc(DECODE('||MSC_ATP_PVT.G_HP_DEMAND_BUCKETING_PREF||',
10481                                                               2, NVL(D.PLANNED_SHIP_DATE,D.USING_ASSEMBLY_DEMAND_DATE),
10482                                                                  NVL(D.SCHEDULE_SHIP_DATE,
10483                                                                      D.USING_ASSEMBLY_DEMAND_DATE))),
10484                                               msi.aggregate_time_fence_date+1),
10485                                        decode(sign(trunc(DECODE('||MSC_ATP_PVT.G_HP_DEMAND_BUCKETING_PREF||',
10486                                                                 2, NVL(D.PLANNED_SHIP_DATE,D.USING_ASSEMBLY_DEMAND_DATE),
10487                                                                    NVL(D.SCHEDULE_SHIP_DATE,
10488                                                                        D.USING_ASSEMBLY_DEMAND_DATE))) - msi.aggregate_time_fence_date),
10489                                            1, msi.aggregate_time_fence_date,
10490                                            trunc(DECODE('||MSC_ATP_PVT.G_HP_DEMAND_BUCKETING_PREF||',
10491                                                         2, NVL(D.PLANNED_SHIP_DATE,D.USING_ASSEMBLY_DEMAND_DATE),
10492                                                            NVL(D.SCHEDULE_SHIP_DATE,
10493                                                                D.USING_ASSEMBLY_DEMAND_DATE))))),
10494                                 trunc(DECODE('||MSC_ATP_PVT.G_HP_DEMAND_BUCKETING_PREF||',
10495                                              2, NVL(D.PLANNED_SHIP_DATE,D.USING_ASSEMBLY_DEMAND_DATE),
10496                                                 NVL(D.SCHEDULE_SHIP_DATE,
10497                                                     D.USING_ASSEMBLY_DEMAND_DATE))),
10498                                 d.demand_id,
10499                                 51,
10500                                 d.origination_type,
10501                                 decode(sign(trunc(s.new_schedule_date) - msi.aggregate_time_fence_date),
10502                                        1, decode(sign(trunc(DECODE('||MSC_ATP_PVT.G_HP_DEMAND_BUCKETING_PREF||',
10503                                                                    2, NVL(D.PLANNED_SHIP_DATE,D.USING_ASSEMBLY_DEMAND_DATE),
10504                                                                       NVL(D.SCHEDULE_SHIP_DATE,
10505                                                                           D.USING_ASSEMBLY_DEMAND_DATE)))
10506                                                                           - msi.aggregate_time_fence_date),
10507                                               1, 1,
10508                                               NULL),
10509                                        decode(sign(trunc(DECODE('||MSC_ATP_PVT.G_HP_DEMAND_BUCKETING_PREF||',
10510                                                                 2, NVL(D.PLANNED_SHIP_DATE,D.USING_ASSEMBLY_DEMAND_DATE),
10511                                                                    NVL(D.SCHEDULE_SHIP_DATE,
10512                                                                        D.USING_ASSEMBLY_DEMAND_DATE)))
10513                                                                        - msi.aggregate_time_fence_date),
10514                                            1, NULL, -- Moved paranthesis from here to end of decode. Identified as part of 3450234 testing.
10515                                            1)),
10516                 		decode(d.origination_type, 1, to_char(d.disposition_id), d.order_number),
10517                                 d.sales_order_line_id,
10518                                 d.demand_source_type,--cmro
10519                                 d.source_organization_id,
10520                                 d.using_assembly_item_id,
10521                                 d.customer_id,
10522                                 d.ship_to_site_id,
10523                                 :l_user_id,
10524                                 :l_sysdate,
10525                                 :l_user_id,
10526                                 :l_sysdate,
10527                                 decode(d.order_date_type_code,2,d.request_date,
10528         			            d.request_ship_date))';  --bug3263368
10529         END IF;
10530 
10531 EXCEPTION
10532         WHEN OTHERS THEN
10533                 IF PG_DEBUG in ('Y', 'C') THEN
10534                         msc_util.msc_log('Prepare_Demands_Stmt: ' || 'Error occurred: ' || to_char(sqlcode) || ':' || SQLERRM);
10535                 END IF;
10536                 x_return_status := FND_API.G_RET_STS_ERROR;
10537 
10538 END Prepare_Demands_Stmt;
10539 
10540 -- New private procedure added for forecast at PF
10541 /*--Prepare_Supplies_Stmt---------------------------------------------------
10542 |  o  Called from Pf_Post_Plan_Proc procedure to:
10543 |       -  Prepare supplies stmt for preallocation + rollup (Demand
10544 |            priority AATP)
10545 |            :  Excess supply by demand class = No
10546 |            :  Excess supply by demand class = Yes (for project atp)
10547 |       -  Prepare supplies stmt for rollup. (All PDS ATP scenarios except
10548 |            demand priority AATP)
10549 |  o  Prepares supplies stmt for both share plan partition "yes" and "no".
10550 +-------------------------------------------------------------------------*/
10551 PROCEDURE Prepare_Supplies_Stmt(
10552 	p_share_partition               IN      VARCHAR2,
10553 	p_demand_priority               IN      VARCHAR2,
10554 	p_excess_supply_by_dc           IN      VARCHAR2,
10555 	p_temp_table                    IN      VARCHAR2,
10556 	p_alloc_temp_table              IN      VARCHAR2,
10557 	p_parallel_degree               IN      NUMBER,
10558 	x_sql_stmt                      OUT 	NOCOPY VARCHAR2,
10559         x_return_status                 OUT     NOCOPY VARCHAR2
10560 )
10561 IS
10562 
10563 BEGIN
10564 
10565         IF PG_DEBUG in ('Y', 'C') THEN
10566                 msc_util.msc_log('Prepare_Supplies_Stmt: ' || 'p_share_partition        : ' || p_share_partition);
10567                 msc_util.msc_log('Prepare_Supplies_Stmt: ' || 'p_demand_priority        : ' || p_demand_priority);
10568                 msc_util.msc_log('Prepare_Supplies_Stmt: ' || 'p_excess_supply_by_dc    : ' || p_excess_supply_by_dc);
10569                 msc_util.msc_log('Prepare_Supplies_Stmt: ' || 'p_temp_table             : ' || p_temp_table);
10570                 msc_util.msc_log('Prepare_Supplies_Stmt: ' || 'p_alloc_temp_table       : ' || p_alloc_temp_table);
10571                 msc_util.msc_log('Prepare_Supplies_Stmt: ' || 'p_parallel_degree        : ' || p_parallel_degree);
10572         END IF;
10573 
10574         -- Initializing API return code
10575         x_return_status := FND_API.G_RET_STS_SUCCESS;
10576 
10577         IF p_share_partition = 'Y' THEN
10578            x_sql_stmt := '
10579                 INSERT INTO MSC_ALLOC_SUPPLIES(';
10580         ELSE
10581            x_sql_stmt := '
10582                 INSERT INTO ' || p_temp_table || '(';
10583         END IF;
10584 
10585         IF p_demand_priority = 'Y' THEN
10586                    x_sql_stmt := x_sql_stmt ||'
10587                                 plan_id,
10588                                 inventory_item_id,
10589                                 original_item_id,
10590                                 organization_id,
10591                                 sr_instance_id,
10592                                 demand_class,
10593                                 supply_date,
10594                                 parent_transaction_id,
10595                                 allocated_quantity,
10596                                 supply_quantity,
10597                                 order_type,
10598                                 original_order_type,
10599                                 order_number,
10600                                 schedule_designator_id,
10601                                 customer_id, -- not really required only used in rule based
10602                                 ship_to_site_id, -- not really required only used in rule based
10603                                 created_by,
10604                                 creation_date,
10605                                 last_updated_by,
10606                                 last_update_date)
10607         		(
10608         	        SELECT	/*+  use_hash(pegging_v mv) parallel(mv,' || to_char(p_parallel_degree) || ')  */
10609                                 pegging_v.plan_id plan_id,
10610                                 pegging_v.inventory_item_id,
10611                                 pegging_v.original_item_id,
10612                                 pegging_v.organization_id,
10613                                 pegging_v.sr_instance_id,
10614                                 NVL(mv.demand_class, :def_num) demand_class,
10615                                 pegging_v.supply_date,
10616                                 pegging_v.transaction_id,
10617                                 SUM(pegging_v.allocated_quantity),
10618                                 MIN(pegging_v.supply_quantity),
10619                                 pegging_v.order_type,
10620                                 pegging_v.original_order_type,
10621                                 pegging_v.order_number,
10622                                 pegging_v.schedule_designator_id,
10623                                 pegging_v.customer_id,
10624                                 pegging_v.ship_to_site_id,
10625                                 :l_user_id,
10626                                 :l_sysdate,
10627                                 :l_user_id,
10628                                 :l_sysdate
10629                         FROM
10630                                 (SELECT peg.plan_id plan_id,
10631                                         decode(msi.aggregate_time_fence_date,
10632                                                    NULL, msi.inventory_item_id,
10633                                                    decode(sign(TRUNC(s.new_schedule_date) - msi.aggregate_time_fence_date),
10634                                                        1, msi.product_family_id,
10635                                                        msi.inventory_item_id)) inventory_item_id,
10636                                         msi.inventory_item_id original_item_id,
10637                                         peg.organization_id,
10638                                         peg.sr_instance_id,
10639                         	        decode(mat.demand_class, :l_excess_dc, decode(:p_excess_supply_by_dc, :l_yes, nvl(s.demand_class, :def_num),
10640                         	                                                                     :def_num),
10641                         	                                 NULL, :def_num,
10642                         	                                 mat.demand_class) demand_class,
10643                                         TRUNC(s.new_schedule_date) supply_date,
10644                                         decode(msi.aggregate_time_fence_date,
10645                                                NULL, peg.allocated_quantity,
10646                                                decode(msi.bom_item_type,
10647                                                       5, 0,
10648                                                       peg.allocated_quantity))* mat.allocation_percent allocated_quantity,
10649                                         s.new_order_quantity supply_quantity,
10650                                         peg.transaction_id,
10651                                         decode(msi.aggregate_time_fence_date,
10652                                                    NULL, s.order_type, 50) order_type,
10653                                         s.order_type original_order_type,
10654                                         s.order_number,
10655                                         s.schedule_designator_id,
10656                                         s.customer_id,
10657                                         s.ship_to_site_id,
10658                                         decode(msi.aggregate_time_fence_date,
10659                                                    NULL, msi.inventory_item_id,
10660                                                    msi.product_family_id) product_family_id
10661                         	FROM    msc_system_items msi,
10662                         		msc_supplies s,
10663                         	        msc_full_pegging peg,
10664                         	        ' || p_alloc_temp_table || ' mat
10665                         	WHERE   msi.plan_id = :p_plan_id
10666                                 AND     msi.atp_flag = :l_yes
10667                                 AND     s.plan_id = msi.plan_id --bug3453289
10668                                 AND     s.inventory_item_id = msi.inventory_item_id
10669                                 AND     s.sr_instance_id = msi.sr_instance_id
10670                                 AND     s.organization_id = msi.organization_id
10671                         	AND     peg.plan_id = s.plan_id
10672                         	AND     peg.transaction_id = s.transaction_id
10673                         	AND     peg.sr_instance_id = s.sr_instance_id
10674                         	AND     mat.pegging_id = peg.end_pegging_id) pegging_v,
10675                                 msc_item_hierarchy_mv mv
10676                         WHERE	pegging_v.product_family_id = mv.inventory_item_id(+)
10677                         AND     pegging_v.organization_id = mv.organization_id (+)
10678                         AND     pegging_v.sr_instance_id = mv.sr_instance_id (+)
10679                         AND     pegging_v.supply_date >=  mv.effective_date (+)
10680                         AND     pegging_v.supply_date <=  mv.disable_date (+)
10681                         AND	pegging_v.demand_class = mv.demand_class (+)
10682                         AND     mv.level_id (+) = -1
10683                         AND     pegging_v.allocated_quantity <> 0
10684         		GROUP BY
10685                                 pegging_v.plan_id,
10686                                 pegging_v.inventory_item_id,
10687                                 pegging_v.original_item_id,
10688                                 pegging_v.organization_id,
10689                                 pegging_v.sr_instance_id,
10690                                 NVL(mv.demand_class, :def_num),
10691                                 pegging_v.supply_date,
10692                                 pegging_v.transaction_id,
10693                                 pegging_v.order_type,
10694                                 pegging_v.original_order_type,
10695                                 pegging_v.order_number,
10696                                 pegging_v.schedule_designator_id,
10697                                 pegging_v.customer_id,
10698                                 pegging_v.ship_to_site_id,
10699                                 :l_user_id,
10700                                 :l_sysdate,
10701                                 :l_user_id,
10702                                 :l_sysdate)';
10703         ELSE -- this is same as else of old private procedure prepare_supplies_stmt1 as there
10704              -- is no changes for non demand priority AATP scenarios
10705                 -- Prepare supplies stmt for creation of rollup supplies
10706                 x_sql_stmt := x_sql_stmt ||'
10707                                 plan_id,
10708                                 inventory_item_id,
10709                                 original_item_id,
10710                                 organization_id,
10711                                 sr_instance_id,
10712                                 demand_class,
10713                                 supply_date,
10714                                 parent_transaction_id,
10715                                 allocated_quantity,
10716                                 supply_quantity,
10717                                 order_type,
10718                                 original_order_type,
10719                                 order_number,
10720                                 schedule_designator_id,
10721                                 customer_id,
10722                                 ship_to_site_id,
10723                                 created_by,
10724                                 creation_date,
10725                                 last_updated_by,
10726                                 last_update_date)
10727         		(
10728                         select  :p_plan_id,
10729                                 decode(sign(TRUNC(s.new_schedule_date) - i.aggregate_time_fence_date),
10730                                         1, i.product_family_id, s.inventory_item_id),
10731                                 s.inventory_item_id,
10732                                 s.organization_id,
10733                                 s.sr_instance_id,
10734                                 s.demand_class,
10735                                 TRUNC(s.new_schedule_date),
10736                                 s.transaction_id,
10737                                 s.new_order_quantity,
10738                                 s.new_order_quantity,
10739                                 50,
10740                                 s.order_type,
10741                                 s.order_number,
10742                                 s.schedule_designator_id,
10743                                 s.customer_id,
10744                                 s.ship_to_site_id,
10745                                 :l_user_id,
10746                                 :l_sysdate,
10747                                 :l_user_id,
10748                                 :l_sysdate
10749                         from    msc_supplies s,
10750                                 msc_system_items i
10751                         where   i.aggregate_time_fence_date is not null
10752                         and     i.bom_item_type <> 5
10753                         and     i.plan_id = :p_plan_id
10754                         and     i.atp_flag = :l_yes
10755                         and     s.plan_id = i.plan_id --bug3453289
10756                         and     s.inventory_item_id = i.inventory_item_id
10757                         and     s.organization_id = i.organization_id
10758                         and     s.sr_instance_id = i.sr_instance_id
10759                         and     s.plan_id = i.plan_id
10760                         )';
10761         END IF;
10762 
10763 EXCEPTION
10764         WHEN OTHERS THEN
10765                 IF PG_DEBUG in ('Y', 'C') THEN
10766                         msc_util.msc_log('Prepare_Supplies_Stmt: ' || 'Error occurred: ' || to_char(sqlcode) || ':' || SQLERRM);
10767                 END IF;
10768                 x_return_status := FND_API.G_RET_STS_ERROR;
10769 
10770 END Prepare_Supplies_Stmt;
10771 
10772 /*Private procedures removed for forecast at PF  **Will be deleted after code review
10773 /*--Prepare_Demands_Stmt1---------------------------------------------------
10774 |  o  Called from Pf_Post_Plan_Proc procedure to:
10775 |       -  Prepare demands stmt for preallocation + bucketting for demands
10776 |            pegged to excess/safety stock. (Demand priority AATP)
10777 |            :  Excess supply by demand class = No
10778 |            :  Excess supply by demand class = Yes (for project atp)
10779 |       -  Prepare demands stmt for bucketting. (All PDS ATP scenarios except
10780 |            demand priority AATP)
10781 |  o  Prepares demand stmt for both share plan partition "yes" and "no".
10782 +-------------------------------------------------------------------------*/
10783 /*PROCEDURE Prepare_Demands_Stmt1(
10784 	p_share_partition               IN      VARCHAR2,
10785 	p_demand_priority               IN      VARCHAR2,
10786 	p_excess_supply_by_dc           IN      VARCHAR2,
10787 	p_temp_table                    IN      VARCHAR2,
10788 	p_parallel_degree               IN      NUMBER,
10789 	x_sql_stmt                      OUT 	NOCOPY VARCHAR2,
10790         x_return_status                 OUT     NOCOPY VARCHAR2
10791 )
10792 IS
10793 
10794 BEGIN
10795 
10796         IF PG_DEBUG in ('Y', 'C') THEN
10797                 msc_util.msc_log('Prepare_Demands_Stmt1: ' || 'p_share_partition        : ' || p_share_partition);
10798                 msc_util.msc_log('Prepare_Demands_Stmt1: ' || 'p_demand_priority        : ' || p_demand_priority);
10799                 msc_util.msc_log('Prepare_Demands_Stmt1: ' || 'p_excess_supply_by_dc    : ' || p_excess_supply_by_dc);
10800                 msc_util.msc_log('Prepare_Demands_Stmt1: ' || 'p_temp_table             : ' || p_temp_table);
10801                 msc_util.msc_log('Prepare_Demands_Stmt1: ' || 'p_parallel_degree        : ' || p_parallel_degree);
10802         END IF;
10803 
10804         -- Initializing API return code
10805         x_return_status := FND_API.G_RET_STS_SUCCESS;
10806 
10807         IF p_share_partition = 'Y' THEN
10808            x_sql_stmt := '
10809                 INSERT INTO MSC_ALLOC_DEMANDS(';
10810         ELSE
10811            x_sql_stmt := '
10812                 INSERT INTO ' || p_temp_table || '(';
10813         END IF;
10814 
10815         IF p_demand_priority = 'Y' THEN
10816                 /* Prepare demands stmt for preallocation + creation of bucketed demands/rollup supplies
10817                  * project atp changes
10818                  * If the profile is set to 'Yes' then:
10819                  *    o If the supply pegged to the demand has a demand class existing on allocation rule then
10820                  *      allocate the demand to that demand class.
10821                  *    o If the supply pegged to the demand has a demand class not present on allocation rule then
10822                  *      allocate the demand to 'OTHER'.
10823                  *    o If the supply pegged to the demand does not have a demand class present, allocate the demand
10824                  *      to 'OTHER'.
10825                  * Else: Allocate the supply to 'OTHER'*/
10826 /*                IF p_excess_supply_by_dc = 'Y' THEN
10827                    x_sql_stmt := x_sql_stmt ||'
10828                                 plan_id,
10829                                 inventory_item_id,
10830                                 original_item_id,
10831                                 organization_id,
10832                                 sr_instance_id,
10833                                 demand_class,
10834                                 demand_date,
10835                                 original_demand_date,
10836                                 demand_quantity,
10837                                 allocated_quantity,
10838                                 parent_demand_id,
10839                                 origination_type,
10840                                 original_origination_type,
10841                                 pf_display_flag,
10842                                 order_number,
10843                                 sales_order_line_id,
10844                                 source_organization_id,
10845                                 using_assembly_item_id,
10846                                 customer_id,
10847                                 ship_to_site_id,
10848                                 created_by,
10849                                 creation_date,
10850                                 last_updated_by,
10851                                 last_update_date)
10852                 	(
10853                         SELECT	/*+  use_hash(pegging_v mv) parallel(mv,' || to_char(p_parallel_degree) || ')  */
10854 /*                                pegging_v.plan_id plan_id,
10855                                 pegging_v.inventory_item_id,
10856                                 pegging_v.original_item_id,
10857                                 pegging_v.organization_id,
10858                                 pegging_v.sr_instance_id,
10859                                 NVL(mv.demand_class, :def_num) demand_class,
10860                                 pegging_v.demand_date,
10861                                 pegging_v.original_demand_date,
10862                                 MIN(pegging_v.demand_quantity),
10863                                 SUM(pegging_v.allocated_quantity),
10864                                 pegging_v.demand_id,
10865                                 pegging_v.origination_type,
10866                                 pegging_v.original_origination_type,
10867                                 pegging_v.pf_display_flag,
10868                                 pegging_v.order_number,
10869                                 pegging_v.sales_order_line_id,
10870                                 pegging_v.source_organization_id,
10871                                 pegging_v.using_assembly_item_id,
10872                                 pegging_v.customer_id,
10873                                 pegging_v.ship_to_site_id,
10874                                 :l_user_id,
10875                                 :l_sysdate,
10876                                 :l_user_id,
10877                                 :l_sysdate
10878                         FROM
10879                                 (SELECT /*+ ordered use_hash(peg2 peg1 d s msi)
10880                         			parallel(peg2,' || to_char(p_parallel_degree) || ')
10881                         			parallel(peg1,' || to_char(p_parallel_degree) || ')
10882                         			parallel(d,' || to_char(p_parallel_degree) || ')
10883                                                 parallel(s,' || to_char(p_parallel_degree) || ')
10884                                                 parallel(msi,' || to_char(p_parallel_degree) || ')
10885                         			full(peg2) full(peg1) full(d) full(s) full(msi) */
10886 /*                                        peg1.plan_id plan_id,
10887                                         decode(msi.aggregate_time_fence_date,
10888                                                    NULL, msi.inventory_item_id,
10889                                                    decode(sign(s.new_schedule_date - msi.aggregate_time_fence_date),
10890                                                        1, msi.product_family_id,
10891                                                        msi.inventory_item_id)) inventory_item_id,
10892                                         msi.inventory_item_id original_item_id,
10893                         	        peg1.organization_id,
10894                         	        peg1.sr_instance_id,
10895                         	        NVL(s.demand_class, :def_num) demand_class,
10896                                         decode(msi.aggregate_time_fence_date,
10897                                                NULL, trunc(DECODE('||MSC_ATP_PVT.G_HP_DEMAND_BUCKETING_PREF||',
10898                                                                   2, NVL(D.PLANNED_SHIP_DATE,D.USING_ASSEMBLY_DEMAND_DATE),
10899                                                                      NVL(D.SCHEDULE_SHIP_DATE,D.USING_ASSEMBLY_DEMAND_DATE))),
10900                                                      decode(sign(trunc(s.new_schedule_date) - msi.aggregate_time_fence_date),
10901                                                             1, decode(sign(trunc(DECODE('||MSC_ATP_PVT.G_HP_DEMAND_BUCKETING_PREF||',
10902                                                                                         2, NVL(D.PLANNED_SHIP_DATE,D.USING_ASSEMBLY_DEMAND_DATE),
10903                                                                                            NVL(D.SCHEDULE_SHIP_DATE,
10904                                                                                                D.USING_ASSEMBLY_DEMAND_DATE)))
10905                                                                                                - msi.aggregate_time_fence_date),
10906                                                                       1, trunc(DECODE('||MSC_ATP_PVT.G_HP_DEMAND_BUCKETING_PREF||',
10907                                                                                       2, NVL(D.PLANNED_SHIP_DATE,D.USING_ASSEMBLY_DEMAND_DATE),
10908                                                                                          NVL(D.SCHEDULE_SHIP_DATE,
10909                                                                                              D.USING_ASSEMBLY_DEMAND_DATE))),
10910                                                                          msi.aggregate_time_fence_date+1),
10911                                                                decode(sign(trunc(DECODE('||MSC_ATP_PVT.G_HP_DEMAND_BUCKETING_PREF||',
10912                                                                                         2, NVL(D.PLANNED_SHIP_DATE,D.USING_ASSEMBLY_DEMAND_DATE),
10913                                                                                            NVL(D.SCHEDULE_SHIP_DATE,
10914                                                                                                D.USING_ASSEMBLY_DEMAND_DATE)))
10915                                                                                                - msi.aggregate_time_fence_date),
10916                                                                       1, msi.aggregate_time_fence_date,
10917                                                                          trunc(DECODE('||MSC_ATP_PVT.G_HP_DEMAND_BUCKETING_PREF||',
10918                                                                                       2, NVL(D.PLANNED_SHIP_DATE,D.USING_ASSEMBLY_DEMAND_DATE),
10919                                                                                          NVL(D.SCHEDULE_SHIP_DATE,
10920                                                                                              D.USING_ASSEMBLY_DEMAND_DATE)))))) demand_date,
10921                                         trunc(DECODE('||MSC_ATP_PVT.G_HP_DEMAND_BUCKETING_PREF||',
10922                                                      2, NVL(D.PLANNED_SHIP_DATE,D.USING_ASSEMBLY_DEMAND_DATE),
10923                                                         NVL(D.SCHEDULE_SHIP_DATE,
10924                                                             D.USING_ASSEMBLY_DEMAND_DATE))) original_demand_date,
10925                         		decode(d.origination_type, 4, d.daily_demand_rate,
10926                         		           d.using_requirement_quantity) demand_quantity,
10927                                         decode(msi.aggregate_time_fence_date,
10928                                                NULL, peg1.allocated_quantity,
10929                                                decode(msi.bom_item_type,
10930                                                       5, 0,
10931                                                       peg1.allocated_quantity)) allocated_quantity,
10932                                         d.demand_id,
10933                                         decode(msi.aggregate_time_fence_date,
10934                                                    NULL, d.origination_type, 51) origination_type,
10935                         		d.origination_type original_origination_type,
10936                                         decode(msi.aggregate_time_fence_date,
10937                                                    NULL, NULL,
10938                                                    decode(sign(trunc(s.new_schedule_date) - msi.aggregate_time_fence_date),
10939                                                        1, decode(sign(trunc(DECODE('||MSC_ATP_PVT.G_HP_DEMAND_BUCKETING_PREF||',
10940                                                                                    2, NVL(D.PLANNED_SHIP_DATE,D.USING_ASSEMBLY_DEMAND_DATE),
10941                                                                                       NVL(D.SCHEDULE_SHIP_DATE,
10942                                                                                           D.USING_ASSEMBLY_DEMAND_DATE)))
10943                                                                                           - msi.aggregate_time_fence_date),
10944                                                               1, 1,
10945                                                               NULL),
10946                                                           decode(sign(trunc(DECODE('||MSC_ATP_PVT.G_HP_DEMAND_BUCKETING_PREF||',
10947                                                                                    2, NVL(D.PLANNED_SHIP_DATE,D.USING_ASSEMBLY_DEMAND_DATE),
10948                                                                                       NVL(D.SCHEDULE_SHIP_DATE,
10949                                                                                           D.USING_ASSEMBLY_DEMAND_DATE)))
10950                                                                                           - msi.aggregate_time_fence_date),
10951                                                               1, NULL),
10952                                                               1)) pf_display_flag,
10953                         		decode(d.origination_type, 1, to_char(d.disposition_id), d.order_number) order_number,
10954                         		d.sales_order_line_id,
10955                                         d.source_organization_id,
10956                                         d.using_assembly_item_id,
10957                                         d.customer_id,
10958                                         d.ship_to_site_id,
10959                                         /* New Allocation logic for time phased ATP */
10960 /*                                        decode(msi.aggregate_time_fence_date,
10961                                                    NULL, msi.inventory_item_id,
10962                                                    msi.product_family_id) product_family_id
10963                         	FROM    msc_full_pegging peg2,
10964                         	        msc_full_pegging peg1,
10965                         		msc_demands d,
10966                                         msc_supplies s,
10967                                         msc_system_items msi
10968                         	WHERE   peg1.plan_id = :p_plan_id
10969                         	AND     peg2.plan_id = peg1.plan_id
10970                         	AND     peg2.pegging_id = peg1.end_pegging_id
10971                         	AND     peg2.demand_id IN (-1, -2)
10972                         	AND     d.demand_id = peg1.demand_id
10973                         	AND     peg1.plan_id = d.plan_id
10974                         	AND     d.sr_instance_id = peg1.sr_instance_id
10975                         	AND     peg1.sr_instance_id=s.sr_instance_id
10976                         	AND     peg1.plan_id = s.plan_id
10977                         	AND     peg1.transaction_id = s.transaction_id
10978                         	AND	d.origination_type NOT IN (5,7,8,9,11,15,22,28,29,31)
10979                         	AND     msi.plan_id = s.plan_id
10980                                 AND     msi.inventory_item_id = s.inventory_item_id
10981                                 AND     msi.sr_instance_id = s.sr_instance_id
10982                                 AND     msi.organization_id = s.organization_id) pegging_v,
10983                                 msc_item_hierarchy_mv mv
10984                         WHERE	pegging_v.product_family_id = mv.inventory_item_id(+)
10985                         AND     pegging_v.organization_id = mv.organization_id (+)
10986                         AND     pegging_v.sr_instance_id = mv.sr_instance_id (+)
10987                         AND     pegging_v.demand_date >=  mv.effective_date (+)
10988                         AND     pegging_v.demand_date <=  mv.disable_date (+)
10989                         AND	pegging_v.demand_class = mv.demand_class (+)
10990                         AND     mv.level_id (+) = -1
10991                         AND     pegging_v.allocated_quantity <> 0
10992                 	GROUP BY
10993                                 pegging_v.plan_id plan_id,
10994                                 pegging_v.inventory_item_id,
10995                                 pegging_v.original_item_id,
10996                                 pegging_v.organization_id,
10997                                 pegging_v.sr_instance_id,
10998                                 NVL(mv.demand_class, :def_num),
10999                                 pegging_v.demand_date,
11000                                 pegging_v.original_demand_date,
11001                                 pegging_v.demand_id,
11002                                 pegging_v.origination_type,
11003                                 pegging_v.original_origination_type,
11004                                 pegging_v.pf_display_flag,
11005                                 pegging_v.order_number,
11006                                 pegging_v.sales_order_line_id,
11007                                 pegging_v.demand_source_type,--cmro
11008                                 pegging_v.source_organization_id,
11009                                 pegging_v.using_assembly_item_id,
11010                                 pegging_v.customer_id,
11011                                 pegging_v.ship_to_site_id,
11012                                 :l_user_id,
11013                                 :l_sysdate,
11014                                 :l_user_id,
11015                                 :l_sysdate)';
11016                 ELSE
11017                    x_sql_stmt := x_sql_stmt ||'
11018                                 plan_id,
11019                                 inventory_item_id,
11020                                 original_item_id,
11021                                 organization_id,
11022                                 sr_instance_id,
11023                                 demand_class,
11024                                 demand_date,
11025                                 original_demand_date,
11026                                 demand_quantity,
11027                                 allocated_quantity,
11028                                 parent_demand_id,
11029                                 origination_type,
11030                                 original_origination_type,
11031                                 pf_display_flag,
11032                                 order_number,
11033                                 sales_order_line_id,
11034                                 demand_source_type,--cmro
11035                                 source_organization_id,
11036                                 using_assembly_item_id,
11037                                 customer_id,
11038                                 ship_to_site_id,
11039                                 created_by,
11040                                 creation_date,
11041                                 last_updated_by,
11042                                 last_update_date)
11043                 	(
11044                         SELECT /*+ ordered use_hash(peg2 peg1 d s msi)
11045                         			parallel(peg2,' || to_char(p_parallel_degree) || ')
11046                         			parallel(peg1,' || to_char(p_parallel_degree) || ')
11047                         			parallel(d,' || to_char(p_parallel_degree) || ')
11048                                                 parallel(s,' || to_char(p_parallel_degree) || ')
11049                                                 parallel(msi,' || to_char(p_parallel_degree) || ')
11050                         			full(peg2) full(peg1) full(d) full(s) full(msi) */
11051 /*                                peg1.plan_id plan_id,
11052                                 decode(msi.aggregate_time_fence_date,
11053                                            NULL, msi.inventory_item_id,
11054                                            decode(sign(s.new_schedule_date - msi.aggregate_time_fence_date),
11055                                                1, msi.product_family_id,
11056                                                msi.inventory_item_id)) inventory_item_id,
11057                                 msi.inventory_item_id original_item_id,
11058                 	        peg1.organization_id,
11059                 	        peg1.sr_instance_id,
11060                 	        :def_num demand_class,
11061                                 decode(msi.aggregate_time_fence_date,
11062                                            NULL,trunc(DECODE('||MSC_ATP_PVT.G_HP_DEMAND_BUCKETING_PREF||',
11063                                                              2, NVL(D.PLANNED_SHIP_DATE,D.USING_ASSEMBLY_DEMAND_DATE),
11064                                                                 NVL(D.SCHEDULE_SHIP_DATE,
11065                                                                     D.USING_ASSEMBLY_DEMAND_DATE))),
11066                                            decode(sign(trunc(s.new_schedule_date) - msi.aggregate_time_fence_date),
11067                                                1, decode(sign(trunc(DECODE('||MSC_ATP_PVT.G_HP_DEMAND_BUCKETING_PREF||',
11068                                                                            2, NVL(D.PLANNED_SHIP_DATE,D.USING_ASSEMBLY_DEMAND_DATE),
11069                                                                               NVL(D.SCHEDULE_SHIP_DATE,
11070                                                                                   D.USING_ASSEMBLY_DEMAND_DATE)))
11071                                                                                   - msi.aggregate_time_fence_date),
11072                                                       1,trunc(DECODE('||MSC_ATP_PVT.G_HP_DEMAND_BUCKETING_PREF||',
11073                                                                      2, NVL(D.PLANNED_SHIP_DATE,D.USING_ASSEMBLY_DEMAND_DATE),
11074                                                                         NVL(D.SCHEDULE_SHIP_DATE,
11075                                                                             D.USING_ASSEMBLY_DEMAND_DATE))),
11076                                                       msi.aggregate_time_fence_date+1),
11077                                                decode(sign(trunc(DECODE('||MSC_ATP_PVT.G_HP_DEMAND_BUCKETING_PREF||',
11078                                                                         2, NVL(D.PLANNED_SHIP_DATE,D.USING_ASSEMBLY_DEMAND_DATE),
11079                                                                            NVL(D.SCHEDULE_SHIP_DATE,
11080                                                                                D.USING_ASSEMBLY_DEMAND_DATE)))
11081                                                                                - msi.aggregate_time_fence_date),
11082                                                    1, msi.aggregate_time_fence_date,
11083                                                    trunc(DECODE('||MSC_ATP_PVT.G_HP_DEMAND_BUCKETING_PREF||',
11084                                                                 2, NVL(D.PLANNED_SHIP_DATE,D.USING_ASSEMBLY_DEMAND_DATE),
11085                                                                    NVL(D.SCHEDULE_SHIP_DATE,
11086                                                                        D.USING_ASSEMBLY_DEMAND_DATE)))))) demand_date,
11087                                 trunc(DECODE('||MSC_ATP_PVT.G_HP_DEMAND_BUCKETING_PREF||',
11088                                              2, NVL(D.PLANNED_SHIP_DATE,D.USING_ASSEMBLY_DEMAND_DATE),
11089                                                 NVL(D.SCHEDULE_SHIP_DATE,
11090                                                     D.USING_ASSEMBLY_DEMAND_DATE))) original_demand_date,
11091                 		MIN(decode(d.origination_type, 4, d.daily_demand_rate,
11092                 		           d.using_requirement_quantity)) demand_quantity,
11093                                 SUM(decode(msi.aggregate_time_fence_date,
11094                                        NULL, peg1.allocated_quantity,
11095                                        decode(msi.bom_item_type,
11096                                               5, 0,
11097                                               peg1.allocated_quantity))) allocated_quantity,
11098                                 d.demand_id,
11099                                 decode(msi.aggregate_time_fence_date,
11100                                            NULL, d.origination_type, 51) origination_type,
11101                 		d.origination_type original_origination_type,
11102                                 decode(msi.aggregate_time_fence_date,
11103                                            NULL, NULL,
11104                                            decode(sign(trunc(s.new_schedule_date) - msi.aggregate_time_fence_date),
11105                                                1, decode(sign(trunc(DECODE('||MSC_ATP_PVT.G_HP_DEMAND_BUCKETING_PREF||',
11106                                                                            2, NVL(D.PLANNED_SHIP_DATE,D.USING_ASSEMBLY_DEMAND_DATE),
11107                                                                               NVL(D.SCHEDULE_SHIP_DATE,
11108                                                                                   D.USING_ASSEMBLY_DEMAND_DATE)))
11109                                                                                   - msi.aggregate_time_fence_date),
11110                                                       1, 1,
11111                                                       NULL),
11112                                                decode(sign(trunc(DECODE('||MSC_ATP_PVT.G_HP_DEMAND_BUCKETING_PREF||',
11113                                                                         2, NVL(D.PLANNED_SHIP_DATE,D.USING_ASSEMBLY_DEMAND_DATE),
11114                                                                            NVL(D.SCHEDULE_SHIP_DATE,
11115                                                                                D.USING_ASSEMBLY_DEMAND_DATE)))
11116                                                                                - msi.aggregate_time_fence_date),
11117                                                    1, NULL),
11118                                                    1)) pf_display_flag,
11119                 		decode(d.origination_type, 1, to_char(d.disposition_id), d.order_number) order_number,
11120                 		d.sales_order_line_id,
11121                 		d.demand_source_type,--cmro
11122                                 d.source_organization_id,
11123                                 d.using_assembly_item_id,
11124                                 d.customer_id,
11125                                 d.ship_to_site_id,
11126                                 :l_user_id,
11127                                 :l_sysdate,
11128                                 :l_user_id,
11129                                 :l_sysdate
11130                 	FROM    msc_full_pegging peg2,
11131                 	        msc_full_pegging peg1,
11132                 		msc_demands d,
11133                                 msc_supplies s,
11134                                 msc_system_items msi
11135                 	WHERE   peg1.plan_id = :p_plan_id
11136                 	AND     peg2.plan_id = peg1.plan_id
11137                 	AND     peg2.pegging_id = peg1.end_pegging_id
11138                 	AND     peg2.demand_id IN (-1, -2)
11139                 	AND     d.demand_id = peg1.demand_id
11140                 	AND     peg1.plan_id = d.plan_id
11141                 	AND     d.sr_instance_id = peg1.sr_instance_id
11142                 	AND     peg1.sr_instance_id=s.sr_instance_id
11143                 	AND     peg1.plan_id = s.plan_id
11144                 	AND     peg1.transaction_id = s.transaction_id
11145                 	AND	d.origination_type NOT IN (5,7,8,9,11,15,22,28,29,31)
11146                 	AND     msi.plan_id = s.plan_id
11147                         AND     msi.inventory_item_id = s.inventory_item_id
11148                         AND     msi.sr_instance_id = s.sr_instance_id
11149                         AND     msi.organization_id = s.organization_id
11150                 	GROUP BY
11151                                 peg1.plan_id,
11152                                 decode(msi.aggregate_time_fence_date,
11153                                            NULL, msi.inventory_item_id,
11154                                            decode(sign(s.new_schedule_date - msi.aggregate_time_fence_date),
11155                                                1, msi.product_family_id,
11156                                                msi.inventory_item_id)),
11157                                 msi.inventory_item_id,
11158                 	        peg1.organization_id,
11159                 	        peg1.sr_instance_id,
11160                 	        :def_num,
11161                                 decode(msi.aggregate_time_fence_date,
11162                                            NULL, trunc(DECODE('||MSC_ATP_PVT.G_HP_DEMAND_BUCKETING_PREF||',
11163                                                                           2, NVL(D.PLANNED_SHIP_DATE,D.USING_ASSEMBLY_DEMAND_DATE),
11164                                                                              NVL(D.SCHEDULE_SHIP_DATE,
11165                                                                                  D.USING_ASSEMBLY_DEMAND_DATE))),
11166                                            decode(sign(trunc(s.new_schedule_date) - msi.aggregate_time_fence_date),
11167                                                1, decode(sign(trunc(DECODE('||MSC_ATP_PVT.G_HP_DEMAND_BUCKETING_PREF||',
11168                                                                            2, NVL(D.PLANNED_SHIP_DATE,D.USING_ASSEMBLY_DEMAND_DATE),
11169                                                                               NVL(D.SCHEDULE_SHIP_DATE,
11170                                                                                   D.USING_ASSEMBLY_DEMAND_DATE)))
11171                                                                                   - msi.aggregate_time_fence_date),
11172                                                       1, trunc(DECODE('||MSC_ATP_PVT.G_HP_DEMAND_BUCKETING_PREF||',
11173                                                                       2, NVL(D.PLANNED_SHIP_DATE,D.USING_ASSEMBLY_DEMAND_DATE),
11174                                                                          NVL(D.SCHEDULE_SHIP_DATE,
11175                                                                              D.USING_ASSEMBLY_DEMAND_DATE))),
11176                                                       msi.aggregate_time_fence_date+1),
11177                                                decode(sign(trunc(DECODE('||MSC_ATP_PVT.G_HP_DEMAND_BUCKETING_PREF||',
11178                                                                         2, NVL(D.PLANNED_SHIP_DATE,D.USING_ASSEMBLY_DEMAND_DATE),
11179                                                                            NVL(D.SCHEDULE_SHIP_DATE,
11180                                                                                D.USING_ASSEMBLY_DEMAND_DATE)))
11181                                                                                - msi.aggregate_time_fence_date),
11182                                                    1, msi.aggregate_time_fence_date,
11183                                                    trunc(DECODE('||MSC_ATP_PVT.G_HP_DEMAND_BUCKETING_PREF||',
11184                                                                                    2, NVL(D.PLANNED_SHIP_DATE,D.USING_ASSEMBLY_DEMAND_DATE),
11185                                                                                       NVL(D.SCHEDULE_SHIP_DATE,
11186                                                                                           D.USING_ASSEMBLY_DEMAND_DATE)))))),
11187                                 trunc(DECODE('||MSC_ATP_PVT.G_HP_DEMAND_BUCKETING_PREF||',
11188                                              2, NVL(D.PLANNED_SHIP_DATE,D.USING_ASSEMBLY_DEMAND_DATE),
11189                                                 NVL(D.SCHEDULE_SHIP_DATE,
11190                                                     D.USING_ASSEMBLY_DEMAND_DATE))),
11191                                 d.demand_id,
11192                                 decode(msi.aggregate_time_fence_date,
11193                                            NULL, d.origination_type, 51),
11194                 		d.origination_type,
11195                                 decode(msi.aggregate_time_fence_date,
11196                                            NULL, NULL,
11197                                            decode(sign(trunc(s.new_schedule_date) - msi.aggregate_time_fence_date),
11198                                                1, decode(sign(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),
11203                                                       1, 1,
11204                                                       NULL),
11205                                                decode(sign(trunc(DECODE('||MSC_ATP_PVT.G_HP_DEMAND_BUCKETING_PREF||',
11206                                                                         2, NVL(D.PLANNED_SHIP_DATE,D.USING_ASSEMBLY_DEMAND_DATE),
11207                                                                            NVL(D.SCHEDULE_SHIP_DATE,
11208                                                                                D.USING_ASSEMBLY_DEMAND_DATE)))
11209                                                                                - msi.aggregate_time_fence_date),
11210                                                    1, NULL),
11211                                                    1)),
11212                 		decode(d.origination_type, 1, to_char(d.disposition_id), d.order_number),
11213                 		d.sales_order_line_id,
11214                 		d.demand_source_type,--cmro
11215                                 d.source_organization_id,
11216                                 d.using_assembly_item_id,
11217                                 d.customer_id,
11218                                 d.ship_to_site_id,
11219                                 :l_user_id,
11220                                 :l_sysdate,
11221                                 :l_user_id,
11222                                 :l_sysdate)';
11223                 END IF;
11224         ELSE
11225                 -- Prepare demands stmt for creation of bucketed demands/rollup supplies
11226                 x_sql_stmt := x_sql_stmt ||'
11227                                 plan_id,
11228                                 inventory_item_id,
11229                                 original_item_id,
11230                                 organization_id,
11231                                 sr_instance_id,
11232                                 demand_class,
11233                                 demand_date,
11234                                 original_demand_date,
11235                                 demand_quantity,
11236                                 allocated_quantity,
11237                                 parent_demand_id,
11238                                 origination_type,
11239                                 original_origination_type,
11240                                 pf_display_flag,
11241                                 order_number,
11242                                 sales_order_line_id,
11243                                 demand_source_type,--cmro
11244                                 source_organization_id,
11245                                 using_assembly_item_id,
11246                                 customer_id,
11247                                 ship_to_site_id,
11248                                 created_by,
11249                                 creation_date,
11250                                 last_updated_by,
11251                                 last_update_date)
11252                         (SELECT
11253                                 peg1.plan_id plan_id,
11254                                 decode(sign(s.new_schedule_date - msi.aggregate_time_fence_date),
11255                                            1, msi.product_family_id,
11256                                            msi.inventory_item_id) inventory_item_id,
11257                                 msi.inventory_item_id original_item_id,
11258                                 peg1.organization_id,
11259                                 peg1.sr_instance_id,
11260                                 d.demand_class demand_class,
11261                                 decode(sign(trunc(s.new_schedule_date) - msi.aggregate_time_fence_date),
11262                                        1, decode(sign(trunc(DECODE('||MSC_ATP_PVT.G_HP_DEMAND_BUCKETING_PREF||',
11263                                                                    2, NVL(D.PLANNED_SHIP_DATE,D.USING_ASSEMBLY_DEMAND_DATE),
11264                                                                    NVL(D.SCHEDULE_SHIP_DATE,
11265                                                                        D.USING_ASSEMBLY_DEMAND_DATE)))
11266                                                                        - msi.aggregate_time_fence_date),
11267                                                  1, trunc(DECODE('||MSC_ATP_PVT.G_HP_DEMAND_BUCKETING_PREF||',
11268                                                               2, NVL(D.PLANNED_SHIP_DATE,D.USING_ASSEMBLY_DEMAND_DATE),
11269                                                                  NVL(D.SCHEDULE_SHIP_DATE,
11270                                                                      D.USING_ASSEMBLY_DEMAND_DATE))),
11271                                                  msi.aggregate_time_fence_date+1),
11272                                        decode(sign(trunc(DECODE('||MSC_ATP_PVT.G_HP_DEMAND_BUCKETING_PREF||',
11273                                                                 2, NVL(D.PLANNED_SHIP_DATE,D.USING_ASSEMBLY_DEMAND_DATE),
11274                                                                    NVL(D.SCHEDULE_SHIP_DATE,
11275                                                                        D.USING_ASSEMBLY_DEMAND_DATE)))
11276                                                                        - msi.aggregate_time_fence_date),
11277                                            1, msi.aggregate_time_fence_date,
11278                                            trunc(DECODE('||MSC_ATP_PVT.G_HP_DEMAND_BUCKETING_PREF||',
11279                                                         2, NVL(D.PLANNED_SHIP_DATE,D.USING_ASSEMBLY_DEMAND_DATE),
11280                                                            NVL(D.SCHEDULE_SHIP_DATE,
11281                                                                D.USING_ASSEMBLY_DEMAND_DATE))))) demand_date,
11282                                 trunc(DECODE('||MSC_ATP_PVT.G_HP_DEMAND_BUCKETING_PREF||',
11283                                              2, NVL(D.PLANNED_SHIP_DATE,D.USING_ASSEMBLY_DEMAND_DATE),
11284                                                 NVL(D.SCHEDULE_SHIP_DATE,
11285                                                     D.USING_ASSEMBLY_DEMAND_DATE))) original_demand_date,
11286                                 MIN(decode(d.origination_type, 4, d.daily_demand_rate,
11287                 		           d.using_requirement_quantity)) demand_quantity,
11288                                 SUM(peg1.allocated_quantity),
11289                                 d.demand_id,
11290                                 51 origination_type, -- ATP Bucketed Demand
11291                                 d.origination_type original_origination_type,
11292                                 decode(sign(trunc(s.new_schedule_date) - msi.aggregate_time_fence_date),
11293                                        1, decode(sign(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),
11298                                               1, 1,
11299                                               NULL),
11300                                        decode(sign(trunc(DECODE('||MSC_ATP_PVT.G_HP_DEMAND_BUCKETING_PREF||',
11301                                                                 2, NVL(D.PLANNED_SHIP_DATE,D.USING_ASSEMBLY_DEMAND_DATE),
11302                                                                    NVL(D.SCHEDULE_SHIP_DATE,
11303                                                                        D.USING_ASSEMBLY_DEMAND_DATE)))
11304                                                                        - msi.aggregate_time_fence_date),
11305                                            1, NULL),
11306                                            1) pf_display_flag,
11307                 		decode(d.origination_type, 1, to_char(d.disposition_id), d.order_number) order_number,
11308                                 d.sales_order_line_id,
11309                                 d.demand_source_type,--cmro
11310                                 d.source_organization_id,
11311                                 d.using_assembly_item_id,
11312                                 d.customer_id,
11313                                 d.ship_to_site_id,
11314                                 :l_user_id,
11315                                 :l_sysdate,
11316                                 :l_user_id,
11317                                 :l_sysdate
11318                         FROM    msc_full_pegging peg1,
11319                                 msc_demands d,
11320                                 msc_supplies s,
11321                                 msc_system_items msi
11322                         WHERE   d.demand_id = peg1.demand_id
11323                         AND     d.plan_id = peg1.plan_id
11324                         AND     d.sr_instance_id = peg1.sr_instance_id
11325                         AND	d.origination_type NOT IN (5,7,8,9,11,15,22,28,29,31)
11326                         AND     s.transaction_id = peg1.transaction_id
11327                         AND     s.plan_id = peg1.plan_id
11328                         AND     msi.plan_id = d.plan_id
11329                         AND     msi.inventory_item_id = d.inventory_item_id
11330                         AND     msi.sr_instance_id = d.sr_instance_id
11331                         AND     msi.organization_id = d.organization_id
11332                         --AND     nvl(msi.product_family_id, msi.inventory_item_id)<>msi.inventory_item_id
11333                         AND     msi.aggregate_time_fence_date is not null
11334                         AND     msi.bom_item_type <> 5
11335                         AND     msi.plan_id = :p_plan_id
11336                         GROUP BY
11337                                 peg1.plan_id,
11338                                 decode(sign(s.new_schedule_date - msi.aggregate_time_fence_date),
11339                                            1, msi.product_family_id,
11340                                            msi.inventory_item_id),
11341                                 msi.inventory_item_id,
11342                                 peg1.organization_id,
11343                                 peg1.sr_instance_id,
11344                                 d.demand_class,
11345                                 decode(sign(trunc(s.new_schedule_date) - msi.aggregate_time_fence_date),
11346                                        1, decode(sign(trunc(DECODE('||MSC_ATP_PVT.G_HP_DEMAND_BUCKETING_PREF||',
11347                                                                    2, NVL(D.PLANNED_SHIP_DATE,D.USING_ASSEMBLY_DEMAND_DATE),
11348                                                                       NVL(D.SCHEDULE_SHIP_DATE,
11349                                                                           D.USING_ASSEMBLY_DEMAND_DATE)))
11350                                                                           - msi.aggregate_time_fence_date),
11351                                               1, trunc(DECODE('||MSC_ATP_PVT.G_HP_DEMAND_BUCKETING_PREF||',
11352                                                               2, NVL(D.PLANNED_SHIP_DATE,D.USING_ASSEMBLY_DEMAND_DATE),
11353                                                                  NVL(D.SCHEDULE_SHIP_DATE,
11354                                                                      D.USING_ASSEMBLY_DEMAND_DATE))),
11355                                               msi.aggregate_time_fence_date+1),
11356                                        decode(sign(trunc(DECODE('||MSC_ATP_PVT.G_HP_DEMAND_BUCKETING_PREF||',
11357                                                                 2, NVL(D.PLANNED_SHIP_DATE,D.USING_ASSEMBLY_DEMAND_DATE),
11358                                                                    NVL(D.SCHEDULE_SHIP_DATE,
11359                                                                        D.USING_ASSEMBLY_DEMAND_DATE))) - msi.aggregate_time_fence_date),
11360                                            1, msi.aggregate_time_fence_date,
11361                                            trunc(DECODE('||MSC_ATP_PVT.G_HP_DEMAND_BUCKETING_PREF||',
11362                                                         2, NVL(D.PLANNED_SHIP_DATE,D.USING_ASSEMBLY_DEMAND_DATE),
11363                                                            NVL(D.SCHEDULE_SHIP_DATE,
11364                                                                D.USING_ASSEMBLY_DEMAND_DATE))))),
11365                                 trunc(DECODE('||MSC_ATP_PVT.G_HP_DEMAND_BUCKETING_PREF||',
11366                                              2, NVL(D.PLANNED_SHIP_DATE,D.USING_ASSEMBLY_DEMAND_DATE),
11367                                                 NVL(D.SCHEDULE_SHIP_DATE,
11368                                                     D.USING_ASSEMBLY_DEMAND_DATE))),
11369                                 d.demand_id,
11370                                 51,
11371                                 d.origination_type,
11372                                 decode(sign(trunc(s.new_schedule_date) - msi.aggregate_time_fence_date),
11373                                        1, decode(sign(trunc(DECODE('||MSC_ATP_PVT.G_HP_DEMAND_BUCKETING_PREF||',
11374                                                                    2, NVL(D.PLANNED_SHIP_DATE,D.USING_ASSEMBLY_DEMAND_DATE),
11375                                                                       NVL(D.SCHEDULE_SHIP_DATE,
11376                                                                           D.USING_ASSEMBLY_DEMAND_DATE)))
11377                                                                           - msi.aggregate_time_fence_date),
11378                                               1, 1,
11379                                               NULL),
11380                                        decode(sign(trunc(DECODE('||MSC_ATP_PVT.G_HP_DEMAND_BUCKETING_PREF||',
11381                                                                 2, NVL(D.PLANNED_SHIP_DATE,D.USING_ASSEMBLY_DEMAND_DATE),
11382                                                                    NVL(D.SCHEDULE_SHIP_DATE,
11383                                                                        D.USING_ASSEMBLY_DEMAND_DATE)))
11384                                                                        - msi.aggregate_time_fence_date),
11385                                            1, NULL),
11386                                            1),
11387                 		decode(d.origination_type, 1, to_char(d.disposition_id), d.order_number),
11388                                 d.sales_order_line_id,
11389                                 d.demand_source_type,--cmro
11390                                 d.source_organization_id,
11391                                 d.using_assembly_item_id,
11392                                 d.customer_id,
11393                                 d.ship_to_site_id,
11394                                 :l_user_id,
11395                                 :l_sysdate,
11396                                 :l_user_id,
11397                                 :l_sysdate
11398                         )';
11399         END IF;
11400 
11401 EXCEPTION
11402         WHEN OTHERS THEN
11403                 IF PG_DEBUG in ('Y', 'C') THEN
11404                         msc_util.msc_log('Prepare_Demands_Stmt1: ' || 'Error occurred: ' || to_char(sqlcode) || ':' || SQLERRM);
11405                 END IF;
11406                 x_return_status := FND_API.G_RET_STS_ERROR;
11407 
11408 END Prepare_Demands_Stmt1;
11409 
11410 /*--Prepare_Demands_Stmt2---------------------------------------------------
11411 |  o  Called from Pf_Post_Plan_Proc procedure to:
11412 |       -  Prepare demands stmt for preallocation + bucketting for demands
11413 |            NOT pegged to excess/safety stock. (Demand priority AATP)
11414 |  o  Prepares demand stmt for both share plan partition "yes" and "no".
11415 +-------------------------------------------------------------------------*/
11416 /*PROCEDURE Prepare_Demands_Stmt2(
11417 	p_share_partition               IN      VARCHAR2,
11418 	p_temp_table                    IN      VARCHAR2,
11419 	p_parallel_degree               IN      NUMBER,
11420 	x_sql_stmt                      OUT 	NOCOPY VARCHAR2,
11421         x_return_status                 OUT     NOCOPY VARCHAR2
11422 )
11423 IS
11424 
11425 BEGIN
11426         -- Initializing API return code
11427         x_return_status := FND_API.G_RET_STS_SUCCESS;
11428 
11429         IF p_share_partition = 'Y' THEN
11430            x_sql_stmt := '
11431                 INSERT INTO MSC_ALLOC_DEMANDS(';
11432         ELSE
11433            x_sql_stmt := '
11434                 INSERT INTO ' || p_temp_table || '(';
11435         END IF;
11436 
11437         x_sql_stmt := x_sql_stmt ||'
11438                         plan_id,
11439                         inventory_item_id,
11440                         original_item_id,
11441                         organization_id,
11442                         sr_instance_id,
11443                         demand_class,
11444                         demand_date,
11445                         original_demand_date,
11446                         demand_quantity,
11447                         allocated_quantity,
11448                         parent_demand_id,
11449                         origination_type,
11450                         original_origination_type,
11451                         pf_display_flag,
11452                         order_number,
11453                         sales_order_line_id,
11454                         demand_source_type,--cmro
11455                         source_organization_id,
11456                         using_assembly_item_id,
11457                         customer_id,
11458                         ship_to_site_id,
11459                         created_by,
11460                         creation_date,
11461                         last_updated_by,
11462                         last_update_date)
11463 		(
11464 		SELECT  /*+ use_hash(mv) parallel(mv,' || to_char(p_parallel_degree) || ')
11465 				full(peg1.d1) full(peg1.d2) full(peg1.peg1) full(peg1.peg2) full(mv) full(peg1.tp) */
11466 /*                        pegging_v.plan_id,
11467                         pegging_v.inventory_item_id,
11468                         pegging_v.original_item_id,
11469                         pegging_v.organization_id,
11470                         pegging_v.sr_instance_id,
11471                         NVL(mv.demand_class, :def_num) demand_class,
11472                         pegging_v.demand_date,
11473                         pegging_v.original_demand_date,
11474                         MIN(pegging_v.demand_quantity),
11475                         SUM(pegging_v.allocated_quantity),
11476                         pegging_v.parent_demand_id,
11477                         pegging_v.origination_type,
11478                         pegging_v.original_origination_type,
11479                         pegging_v.pf_display_flag,
11480                         pegging_v.order_number,
11481                         pegging_v.sales_order_line_id,
11482                         pegging_v.demand_source_type,--cmro
11483                         pegging_v.source_organization_id,
11484                         pegging_v.using_assembly_item_id,
11485                         pegging_v.customer_id,
11486                         pegging_v.ship_to_site_id,
11487 			:l_user_id,
11488 			:l_sysdate,
11489 			:l_user_id,
11490 			:l_sysdate
11491 		FROM
11492                         (SELECT /*+ ordered use_hash(d2 peg2 peg1 tp)
11493 					parallel(d2,' || to_char(p_parallel_degree) || ')
11494 					parallel(d1,' || to_char(p_parallel_degree) || ')
11495 					parallel(peg2,' || to_char(p_parallel_degree) || ')
11496 					parallel(peg1,' || to_char(p_parallel_degree) || ')
11497                                         parallel(tp,'  || to_char(p_parallel_degree) || ') */
11498 /*                                peg2.plan_id plan_id,
11499                                 decode(sign(s.new_schedule_date - msi.aggregate_time_fence_date),
11500                                            1, msi.product_family_id,
11501                                            msi.inventory_item_id) inventory_item_id,
11502                                 msi.inventory_item_id original_item_id,
11503                                 peg2.organization_id,
11504                                 peg2.sr_instance_id,
11505 				NVL(d1.demand_class, :def_num) demand_class,
11506                                 decode(msi.aggregate_time_fence_date,
11507                                            NULL, trunc(DECODE('||MSC_ATP_PVT.G_HP_DEMAND_BUCKETING_PREF||',
11508                                                               2, NVL(d2.PLANNED_SHIP_DATE,d2.USING_ASSEMBLY_DEMAND_DATE),
11509                                                                  NVL(d2.SCHEDULE_SHIP_DATE,
11510                                                                      d2.USING_ASSEMBLY_DEMAND_DATE))),
11511                                            decode(sign(trunc(s.new_schedule_date) - msi.aggregate_time_fence_date),
11512                                                1, decode(sign(trunc(DECODE('||MSC_ATP_PVT.G_HP_DEMAND_BUCKETING_PREF||',
11513                                                               2, NVL(d2.PLANNED_SHIP_DATE,d2.USING_ASSEMBLY_DEMAND_DATE),
11514                                                                  NVL(d2.SCHEDULE_SHIP_DATE,
11515                                                                      d2.USING_ASSEMBLY_DEMAND_DATE))) - msi.aggregate_time_fence_date),
11516                                                       1, trunc(DECODE('||MSC_ATP_PVT.G_HP_DEMAND_BUCKETING_PREF||',
11517                                                                       2, NVL(d2.PLANNED_SHIP_DATE,d2.USING_ASSEMBLY_DEMAND_DATE),
11518                                                                          NVL(d2.SCHEDULE_SHIP_DATE,
11519                                                                              d2.USING_ASSEMBLY_DEMAND_DATE))),
11520                                                       msi.aggregate_time_fence_date+1),
11521                                                decode(sign(trunc(DECODE('||MSC_ATP_PVT.G_HP_DEMAND_BUCKETING_PREF||',
11522                                                                         2, NVL(d2.PLANNED_SHIP_DATE,d2.USING_ASSEMBLY_DEMAND_DATE),
11523                                                                            NVL(d2.SCHEDULE_SHIP_DATE,
11524                                                                                d2.USING_ASSEMBLY_DEMAND_DATE)))
11525                                                                                - msi.aggregate_time_fence_date),
11526                                                    1, msi.aggregate_time_fence_date,
11527                                                    trunc(DECODE('||MSC_ATP_PVT.G_HP_DEMAND_BUCKETING_PREF||',
11528                                                                 2, NVL(d2.PLANNED_SHIP_DATE,d2.USING_ASSEMBLY_DEMAND_DATE),
11529                                                                    NVL(d2.SCHEDULE_SHIP_DATE,
11530                                                                        d2.USING_ASSEMBLY_DEMAND_DATE)))))) demand_date,
11531                                 trunc(DECODE('||MSC_ATP_PVT.G_HP_DEMAND_BUCKETING_PREF||',
11532                                              2, NVL(d2.PLANNED_SHIP_DATE,d2.USING_ASSEMBLY_DEMAND_DATE),
11533                                                 NVL(d2.SCHEDULE_SHIP_DATE,
11534                                                     d2.USING_ASSEMBLY_DEMAND_DATE))) original_demand_date,
11535                                 decode(d2.origination_type, 4, d2.daily_demand_rate,
11536                 		           d2.using_requirement_quantity) demand_quantity,
11537                                 decode(msi.aggregate_time_fence_date,
11538                                        NULL, peg2.allocated_quantity,
11539                                        decode(msi.bom_item_type,
11540                                               5, 0,
11541                                               peg2.allocated_quantity)) allocated_quantity,
11542                                 d2.demand_id parent_demand_id,
11543                                 51 origination_type, -- ATP Bucketed Demand
11544                                 d2.origination_type original_origination_type,
11545                                 decode(sign(trunc(s.new_schedule_date) - msi.aggregate_time_fence_date),
11546                                        1, decode(sign(trunc(DECODE('||MSC_ATP_PVT.G_HP_DEMAND_BUCKETING_PREF||',
11547                                                                    2, NVL(d2.PLANNED_SHIP_DATE,d2.USING_ASSEMBLY_DEMAND_DATE),
11548                                                                       NVL(d2.SCHEDULE_SHIP_DATE,
11549                                                                           d2.USING_ASSEMBLY_DEMAND_DATE)))
11550                                                                           - msi.aggregate_time_fence_date),
11551                                               1, 1,
11552                                               NULL),
11553                                        decode(sign(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)))
11557                                                                        - msi.aggregate_time_fence_date),
11558                                            1, NULL),
11559                                            1) pf_display_flag,
11560                 		decode(d2.origination_type, 1, to_char(d2.disposition_id), d2.order_number) order_number,
11561                                 d2.sales_order_line_id,
11562                                 d2.demand_source_type,--cmro
11563                                 d2.source_organization_id,
11564                                 d2.using_assembly_item_id,
11565                                 d2.customer_id,
11566                                 d2.ship_to_site_id,
11567                                 decode(msi.aggregate_time_fence_date,
11568                                            NULL, msi.inventory_item_id,
11569                                            msi.product_family_id) product_family_id
11570                         FROM	msc_demands d2,
11571 				msc_full_pegging peg2,
11572 				msc_full_pegging peg1 ,
11573 				msc_demands d1,
11574 				msc_supplies s,
11575 				msc_system_items msi
11576                         WHERE	peg2.plan_id = :p_plan_id
11577                         AND     peg2.plan_id = peg1.plan_id
11578                         AND	peg2.end_pegging_id = peg1.pegging_id
11579                         AND	peg2.sr_instance_id = peg1.sr_instance_id
11580                         AND	d1.plan_id = peg1.plan_id
11581                         AND	d1.demand_id = peg1.demand_id
11582                         AND	d1.sr_instance_id = peg1.sr_instance_id
11583                         AND	d2.plan_id = peg2.plan_id
11584                         AND	d2.demand_id = peg2.demand_id
11585                         AND	d2.sr_instance_id = peg2.sr_instance_id
11586                         AND	d2.origination_type NOT IN (5,7,8,9,11,15,22,28,29,31)
11587                 	AND     peg2.sr_instance_id=s.sr_instance_id
11588                 	AND     peg2.plan_id = s.plan_id
11589                 	AND     peg2.transaction_id = s.transaction_id
11590                 	AND     msi.plan_id = s.plan_id
11591                         AND     msi.inventory_item_id = s.inventory_item_id
11592                         AND     msi.sr_instance_id = s.sr_instance_id
11593                         AND     msi.organization_id = s.organization_id
11594                         ) pegging_v,
11595 			msc_item_hierarchy_mv mv
11596 		WHERE   pegging_v.product_family_id = mv.inventory_item_id(+)
11597 		AND     pegging_v.organization_id = mv.organization_id (+)
11598 		AND     pegging_v.sr_instance_id = mv.sr_instance_id (+)
11599 		AND     pegging_v.demand_date >=  mv.effective_date (+)
11600 		AND     pegging_v.demand_date <=  mv.disable_date (+)
11601 		AND	pegging_v.demand_class = mv.demand_class (+)
11602 		AND     mv.level_id (+) = -1
11603 		AND     pegging_v.allocated_quantity <> 0
11604 		GROUP BY
11605                         pegging_v.plan_id,
11606                         pegging_v.inventory_item_id,
11607                         pegging_v.original_item_id,
11608                         pegging_v.organization_id,
11609                         pegging_v.sr_instance_id,
11610                         NVL(mv.demand_class, :def_num),
11611                         pegging_v.demand_date,
11612                         pegging_v.original_demand_date,
11613                         pegging_v.parent_demand_id,
11614                         pegging_v.origination_type,
11615                         pegging_v.original_origination_type,
11616                         pegging_v.pf_display_flag,
11617                         pegging_v.order_number,
11618                         pegging_v.sales_order_line_id,
11619                         pegging_v.demand_source_type,--cmro
11620                         pegging_v.source_organization_id,
11621                         pegging_v.using_assembly_item_id,
11622                         pegging_v.customer_id,
11623                         pegging_v.ship_to_site_id,
11624 			:l_user_id,
11625 			:l_sysdate,
11626 			:l_user_id,
11627 			:l_sysdate)';
11628 
11629 EXCEPTION
11630         WHEN OTHERS THEN
11631                 IF PG_DEBUG in ('Y', 'C') THEN
11632                         msc_util.msc_log('Prepare_Demands_Stmt2: ' || 'Error occurred: ' || to_char(sqlcode) || ':' || SQLERRM);
11633                 END IF;
11634                 x_return_status := FND_API.G_RET_STS_ERROR;
11635 
11636 END Prepare_Demands_Stmt2;
11637 
11638 /*--Prepare_Supplies_Stmt1--------------------------------------------------
11639 |  o  Called from Pf_Post_Plan_Proc procedure to:
11640 |       -  Prepare supplies stmt for preallocation + rollup for supplies
11641 |            pegged to excess/safety stock. (Demand priority AATP)
11642 |            :  Excess supply by demand class = No
11643 |            :  Excess supply by demand class = Yes (for project atp)
11644 |       -  Prepare supplies stmt for rollup. (All PDS ATP scenarios except
11645 |            demand priority AATP)
11646 |  o  Prepares supplies stmt for both share plan partition "yes" and "no".
11647 +-------------------------------------------------------------------------*/
11648 /*PROCEDURE Prepare_Supplies_Stmt1(
11649 	p_share_partition               IN      VARCHAR2,
11650 	p_demand_priority               IN      VARCHAR2,
11651 	p_excess_supply_by_dc           IN      VARCHAR2,
11652 	p_temp_table                    IN      VARCHAR2,
11653 	p_parallel_degree               IN      NUMBER,
11654 	x_sql_stmt                      OUT 	NOCOPY VARCHAR2,
11655         x_return_status                 OUT     NOCOPY VARCHAR2
11656 )
11657 IS
11658 
11659 BEGIN
11660         -- Initializing API return code
11661         x_return_status := FND_API.G_RET_STS_SUCCESS;
11662 
11663         IF p_share_partition = 'Y' THEN
11664            x_sql_stmt := '
11665                 INSERT INTO MSC_ALLOC_SUPPLIES(';
11666         ELSE
11667            x_sql_stmt := '
11668                 INSERT INTO ' || p_temp_table || '(';
11669         END IF;
11670 
11671         IF p_demand_priority = 'Y' THEN
11672                 /* Prepare supplies stmt for preallocation + creation of rollup supplies
11673                  * project atp changes
11674                  * If the profile is set to 'Yes' then:
11675                  *    o If supply has a demand class existing on allocation rule then
11676                  *      allocate the supply to that demand class.
11677                  *    o If supply has a demand class not present on allocation rule then
11678                  *      allocate the supply to 'OTHER'.
11679                  *    o If supply does not have a demand class present, allocate the supply
11680                  *      to 'OTHER'.
11681                  * Else: Allocate the supply to 'OTHER'*/
11682 /*                IF p_excess_supply_by_dc = 'Y' THEN
11683                    x_sql_stmt := x_sql_stmt ||'
11684                                 plan_id,
11685                                 inventory_item_id,
11686                                 original_item_id,
11687                                 organization_id,
11688                                 sr_instance_id,
11689                                 demand_class,
11690                                 supply_date,
11691                                 parent_transaction_id,
11692                                 allocated_quantity,
11693                                 supply_quantity,
11694                                 order_type,
11695                                 original_order_type,
11696                                 order_number,
11697                                 schedule_designator_id,
11698                                 customer_id, -- not really required only used in rule based
11699                                 ship_to_site_id, -- not really required only used in rule based
11700                                 created_by,
11701                                 creation_date,
11702                                 last_updated_by,
11703                                 last_update_date)
11704         		(
11705         	        SELECT	/*+  use_hash(pegging_v mv) parallel(mv,' || to_char(p_parallel_degree) || ')  */
11706 /*                                pegging_v.plan_id plan_id,
11707                                 pegging_v.inventory_item_id,
11708                                 pegging_v.original_item_id,
11709                                 pegging_v.organization_id,
11710                                 pegging_v.sr_instance_id,
11711                                 NVL(mv.demand_class, :def_num) demand_class,
11712                                 pegging_v.supply_date,
11713                                 pegging_v.transaction_id,
11714                                 SUM(pegging_v.allocated_quantity),
11715                                 MIN(pegging_v.supply_quantity),
11716                                 pegging_v.order_type,
11717                                 pegging_v.original_order_type,
11718                                 pegging_v.order_number,
11719                                 pegging_v.schedule_designator_id,
11720                                 pegging_v.customer_id,
11721                                 pegging_v.ship_to_site_id,
11722                                 :l_user_id,
11723                                 :l_sysdate,
11724                                 :l_user_id,
11725                                 :l_sysdate
11726                         FROM
11727                                 (SELECT  /*+ ordered use_hash(peg2 peg1) use_hash(peg1 s msi)
11728                 				parallel(peg2,' || to_char(p_parallel_degree) || ')
11729                 				parallel(peg1,' || to_char(p_parallel_degree) || ')
11730                 				parallel(s,' || to_char(p_parallel_degree) || ')
11731                                                 parallel(msi,' || to_char(p_parallel_degree) || ') */
11732 /*                                        peg1.plan_id plan_id,
11733                                         decode(msi.aggregate_time_fence_date,
11734                                                    NULL, msi.inventory_item_id,
11735                                                    decode(sign(TRUNC(s.new_schedule_date) - msi.aggregate_time_fence_date),
11736                                                        1, msi.product_family_id,
11737                                                        msi.inventory_item_id)) inventory_item_id,
11738                                         msi.inventory_item_id original_item_id,
11739                                         peg1.organization_id,
11740                                         peg1.sr_instance_id,
11741                                         NVL(s.demand_class, :def_num) demand_class,
11742                                         TRUNC(s.new_schedule_date) supply_date,
11743                                         decode(msi.aggregate_time_fence_date,
11744                                                NULL, peg1.allocated_quantity,
11745                                                decode(msi.bom_item_type,
11746                                                       5, 0,
11747                                                       peg1.allocated_quantity)) allocated_quantity,
11748                                         s.new_order_quantity supply_quantity,
11749                                         peg1.transaction_id,
11750                                         decode(msi.aggregate_time_fence_date,
11751                                                    NULL, s.order_type, 50) order_type
11752                                         s.order_type original_order_type,
11753                                         s.order_number,
11754                                         s.schedule_designator_id,
11755                                         s.customer_id,
11756                                         s.ship_to_site_id,
11757                                         decode(msi.aggregate_time_fence_date,
11758                                                    NULL, msi.inventory_item_id,
11759                                                    msi.product_family_id) product_family_id
11760                                 FROM    msc_full_pegging peg2,
11761                                         msc_full_pegging peg1,
11762                                 	msc_supplies s,
11763                                 	msc_system_items msi
11764                                 WHERE   peg1.plan_id = :p_plan_id
11765                                 AND     peg2.plan_id = peg1.plan_id
11766                                 AND     peg2.pegging_id = peg1.end_pegging_id
11767                                 AND     peg2.demand_id IN (-1, -2)
11768                                 AND     s.plan_id = peg1.plan_id
11769                                 AND     s.transaction_id = peg1.transaction_id
11770                                 AND     s.sr_instance_id = peg1.sr_instance_id
11771                                 AND     msi.sr_instance_id = s.sr_instance_id
11772                                 AND     msi.plan_id = s.plan_id
11773                                 AND     msi.organization_id = s.organization_id
11774                                 AND     msi.inventory_item_id = s.inventory_item_id) pegging_v,
11775                                 msc_item_hierarchy_mv mv
11776                         WHERE	pegging_v.product_family_id = mv.inventory_item_id(+)
11777                         AND     pegging_v.organization_id = mv.organization_id (+)
11778                         AND     pegging_v.sr_instance_id = mv.sr_instance_id (+)
11779                         AND     pegging_v.supply_date >=  mv.effective_date (+)
11780                         AND     pegging_v.supply_date <=  mv.disable_date (+)
11781                         AND	pegging_v.demand_class = mv.demand_class (+)
11782                         AND     mv.level_id (+) = -1
11783                         AND     pegging_v.allocated_quantity <> 0
11784         		GROUP BY
11785                                 pegging_v.plan_id plan_id,
11786                                 pegging_v.inventory_item_id,
11787                                 pegging_v.original_item_id,
11788                                 pegging_v.organization_id,
11789                                 pegging_v.sr_instance_id,
11790                                 NVL(mv.demand_class, :def_num),
11791                                 pegging_v.supply_date,
11792                                 pegging_v.transaction_id,
11793                                 pegging_v.order_type,
11794                                 pegging_v.original_order_type,
11795                                 pegging_v.order_number,
11796                                 pegging_v.schedule_designator_id,
11797                                 pegging_v.customer_id,
11798                                 pegging_v.ship_to_site_id,
11799                                 :l_user_id,
11800                                 :l_sysdate,
11801                                 :l_user_id,
11802                                 :l_sysdate)';
11803                 ELSE
11804                    x_sql_stmt := x_sql_stmt ||'
11805                                 plan_id,
11806                                 inventory_item_id,
11807                                 original_item_id,
11808                                 organization_id,
11809                                 sr_instance_id,
11810                                 demand_class,
11811                                 supply_date,
11812                                 parent_transaction_id,
11813                                 allocated_quantity,
11814                                 supply_quantity,
11815                                 order_type,
11816                                 original_order_type,
11817                                 order_number,
11818                                 schedule_designator_id,
11819                                 customer_id, -- not really required only used in rule based
11820                                 ship_to_site_id, -- not really required only used in rule based
11821                                 created_by,
11822                                 creation_date,
11823                                 last_updated_by,
11824                                 last_update_date)
11825         		(
11826         		SELECT  /*+ ordered use_hash(peg2 peg1) use_hash(peg1 s tp cal)
11827         				parallel(peg2,' || to_char(p_parallel_degree) || ')
11828         				parallel(peg1,' || to_char(p_parallel_degree) || ')
11829         				parallel(s,' || to_char(p_parallel_degree) || ')
11830                                         parallel(tp,' || to_char(p_parallel_degree) || ') */
11831 /*                                peg1.plan_id plan_id,
11832                                 decode(msi.aggregate_time_fence_date,
11833                                            NULL, msi.inventory_item_id,
11834                                            decode(sign(TRUNC(s.new_schedule_date) - msi.aggregate_time_fence_date),
11835                                                1, msi.product_family_id,
11836                                                msi.inventory_item_id)) inventory_item_id,
11837                                 msi.inventory_item_id original_item_id,
11838                                 peg1.organization_id,
11839                                 peg1.sr_instance_id,
11840                                 :def_num demand_class,
11841                                 TRUNC(s.new_schedule_date) supply_date,
11842                                 SUM(decode(msi.aggregate_time_fence_date,
11843                                        NULL, peg1.allocated_quantity,
11844                                        decode(msi.bom_item_type,
11845                                               5, 0,
11846                                               peg1.allocated_quantity))) allocated_quantity,
11847                                 MIN(s.new_order_quantity) supply_quantity,
11848                                 peg1.transaction_id,
11849                                 decode(msi.aggregate_time_fence_date,
11850                                            NULL, s.order_type, 50) order_type,
11851                                 s.order_type original_order_type,
11852                                 s.order_number,
11853                                 s.schedule_designator_id,
11854                                 s.customer_id,
11855                                 s.ship_to_site_id,
11856                                 :l_user_id created_by,
11857                                 :l_sysdate creation_date,
11858                                 :l_user_id last_updated_by,
11859                                 :l_sysdate last_update_date
11860         		FROM    msc_full_pegging peg2,
11861         		        msc_full_pegging peg1,
11862         			msc_supplies s,
11863         			msc_system_items msi
11864         		WHERE   peg1.plan_id = :p_plan_id
11865         		AND     peg2.plan_id = peg1.plan_id
11866         		AND     peg2.pegging_id = peg1.end_pegging_id
11867         		AND     peg2.demand_id IN (-1, -2)
11868         		AND     s.plan_id = peg1.plan_id
11869         		AND     s.transaction_id = peg1.transaction_id
11870         		AND     s.sr_instance_id = peg1.sr_instance_id
11871                         AND     msi.sr_instance_id = s.sr_instance_id
11872                         AND     msi.plan_id = s.plan_id
11873                         AND     msi.organization_id = s.organization_id
11874                         AND     msi.inventory_item_id = s.inventory_item_id
11875                         GROUP BY
11876                                 peg1.plan_id,
11877                                 decode(msi.aggregate_time_fence_date,
11878                                            NULL, msi.inventory_item_id,
11879                                            decode(sign(TRUNC(s.new_schedule_date) - msi.aggregate_time_fence_date),
11880                                                1, msi.product_family_id,
11881                                                msi.inventory_item_id)),
11882                                 msi.inventory_item_id,
11883                                 peg1.organization_id,
11884                                 peg1.sr_instance_id,
11885                                 :def_num,
11886                                 TRUNC(s.new_schedule_date),
11887                                 peg1.transaction_id,
11888                                 decode(msi.aggregate_time_fence_date,
11889                                            NULL, s.order_type, 50),
11890                                 s.order_type,
11891                                 s.order_number,
11892                                 s.schedule_designator_id,
11893                                 s.customer_id,
11894                                 s.ship_to_site_id,
11895                                 :l_user_id,
11896                                 :l_sysdate,
11897                                 :l_user_id,
11898                                 :l_sysdate)';
11899                 END IF;
11900         ELSE
11901                 -- Prepare supplies stmt for creation of rollup supplies
11902                 x_sql_stmt := x_sql_stmt ||'
11903                                 plan_id,
11904                                 inventory_item_id,
11905                                 original_item_id,
11906                                 organization_id,
11907                                 sr_instance_id,
11908                                 demand_class,
11909                                 supply_date,
11910                                 parent_transaction_id,
11911                                 allocated_quantity,
11912                                 supply_quantity,
11913                                 order_type,
11914                                 original_order_type,
11915                                 order_number,
11916                                 schedule_designator_id,
11917                                 customer_id,
11918                                 ship_to_site_id,
11919                                 created_by,
11920                                 creation_date,
11921                                 last_updated_by,
11922                                 last_update_date)
11923         		(
11924                         select  :p_plan_id,
11925                                 decode(sign(TRUNC(s.new_schedule_date) - i.aggregate_time_fence_date),
11926                                         1, i.product_family_id, s.inventory_item_id),
11927                                 s.inventory_item_id,
11928                                 s.organization_id,
11929                                 s.sr_instance_id,
11930                                 s.demand_class,
11931                                 TRUNC(s.new_schedule_date),
11932                                 s.transaction_id,
11933                                 s.new_order_quantity,
11934                                 s.new_order_quantity,
11935                                 50,
11936                                 s.order_type,
11937                                 s.order_number,
11938                                 s.schedule_designator_id,
11939                                 s.customer_id,
11940                                 s.ship_to_site_id,
11941                                 :l_user_id,
11942                                 :l_sysdate,
11943                                 :l_user_id,
11944                                 :l_sysdate
11945                         from    msc_supplies s,
11946                                 msc_system_items i
11947                         where   i.aggregate_time_fence_date is not null
11948                         and     i.bom_item_type <> 5
11949                         and     i.plan_id = :p_plan_id
11950                         and     s.inventory_item_id = i.inventory_item_id
11951                         and     s.organization_id = i.organization_id
11952                         and     s.sr_instance_id = i.sr_instance_id
11953                         and     s.plan_id = i.plan_id
11954                         )';
11955         END IF;
11956 
11957 EXCEPTION
11958         WHEN OTHERS THEN
11959                 IF PG_DEBUG in ('Y', 'C') THEN
11960                         msc_util.msc_log('Prepare_Supplies_Stmt1: ' || 'Error occurred: ' || to_char(sqlcode) || ':' || SQLERRM);
11961                 END IF;
11962                 x_return_status := FND_API.G_RET_STS_ERROR;
11963 
11964 END Prepare_Supplies_Stmt1;
11965 
11966 /*--Prepare_Supplies_Stmt2-----------------------------------------------------
11967 |  o  Called from Pf_Post_Plan_Proc procedure to:
11968 |       -  Prepare supplies stmt for preallocation + supplies rollup for
11969 |            supplies NOT pegged to excess/safety stock.(Demand priority AATP)
11970 |  o  Prepares supplies stmt for both share plan partition "yes" and "no".
11971 +----------------------------------------------------------------------------*/
11972 /*PROCEDURE Prepare_Supplies_Stmt2(
11973 	p_share_partition               IN      VARCHAR2,
11974 	p_temp_table                    IN      VARCHAR2,
11975 	p_parallel_degree               IN      NUMBER,
11976 	x_sql_stmt                      OUT 	NOCOPY VARCHAR2,
11977         x_return_status                 OUT     NOCOPY VARCHAR2
11978 )
11979 IS
11980 
11981 BEGIN
11982         -- Initializing API return code
11983         x_return_status := FND_API.G_RET_STS_SUCCESS;
11984 
11985         IF p_share_partition = 'Y' THEN
11986            x_sql_stmt := '
11987                 INSERT INTO MSC_ALLOC_SUPPLIES(';
11988         ELSE
11989            x_sql_stmt := '
11990                 INSERT INTO ' || p_temp_table || '(';
11991         END IF;
11992 
11993         x_sql_stmt := x_sql_stmt ||'
11994                         plan_id,
11995                         inventory_item_id,
11996                         original_item_id,
11997                         organization_id,
11998                         sr_instance_id,
11999                         demand_class,
12000                         supply_date,
12001                         parent_transaction_id,
12002                         allocated_quantity,
12003                         supply_quantity,
12004                         order_type,
12005                         original_order_type,
12006                         order_number,
12007                         schedule_designator_id,
12008                         customer_id, -- not really required only used in rule based
12009                         ship_to_site_id, -- not really required only used in rule based
12010                         created_by,
12011                         creation_date,
12012                         last_updated_by,
12013                         last_update_date)
12014 		(
12015 		SELECT	/*+  use_hash(peg1 mv) parallel(mv,' || to_char(p_parallel_degree) || ')  */
12016 /*                        pegging_v.plan_id,
12017                         pegging_v.inventory_item_id,
12018                         pegging_v.original_item_id,
12019                         pegging_v.organization_id,
12020                         pegging_v.sr_instance_id,
12021                         NVL(mv.demand_class, :def_num) demand_class,
12022                         pegging_v.supply_date,
12023                         pegging_v.transaction_id,
12024                         SUM(pegging_v.allocated_quantity),
12025                         MIN(pegging_v.supply_quantity),
12026                         pegging_v.order_type,
12027                         pegging_v.original_order_type,
12028                         pegging_v.order_number,
12029                         pegging_v.schedule_designator_id,
12030                         pegging_v.customer_id,
12031                         pegging_v.ship_to_site_id,
12032                         :l_user_id,
12033                         :l_sysdate,
12034                         :l_user_id,
12035                         :l_sysdate
12036 		FROM
12037 			(SELECT /*+  ordered use_hash(s peg2 peg1 d tp cal)
12038 					parallel(peg2,' || to_char(p_parallel_degree) || ')
12039 					parallel(peg1,' || to_char(p_parallel_degree) || ')
12040 					parallel(s,' || to_char(p_parallel_degree) || ')
12041 					parallel(d,' || to_char(p_parallel_degree) || ')
12042                                         parallel(tp,' || to_char(p_parallel_degree) || ') */
12043 /*                                peg2.plan_id plan_id,
12044                                 decode(msi.aggregate_time_fence_date,
12045                                            NULL, msi.inventory_item_id,
12046                                            decode(sign(TRUNC(s.new_schedule_date) - msi.aggregate_time_fence_date),
12047                                                1, msi.product_family_id,
12048                                                msi.inventory_item_id)) inventory_item_id,
12049                                 msi.inventory_item_id original_item_id,
12050                                 peg2.organization_id,
12051                                 peg2.sr_instance_id,
12052                                 NVL(d.demand_class, :def_num) demand_class,
12053                                 TRUNC(s.new_schedule_date) supply_date,
12054                                 decode(msi.aggregate_time_fence_date,
12055                                        NULL, peg2.allocated_quantity,
12056                                        decode(msi.bom_item_type,
12057                                               5, 0,
12058                                               peg2.allocated_quantity)) allocated_quantity,
12059                                 s.new_order_quantity supply_quantity,
12060                                 peg2.transaction_id,
12061                                 decode(msi.aggregate_time_fence_date,
12062                                            NULL, s.order_type, 50) order_type,
12063                                 s.order_type original_order_type,
12064                                 s.order_number,
12065                                 s.schedule_designator_id,
12066                                 s.customer_id,
12067                                 s.ship_to_site_id,
12068                                 decode(msi.aggregate_time_fence_date,
12069                                            NULL, msi.inventory_item_id,
12070                                            msi.product_family_id) product_family_id
12071 			FROM	msc_supplies s,
12072 				msc_full_pegging peg2,
12073 				msc_full_pegging peg1,
12074 				msc_demands d,
12075                                 msc_system_items msi
12076 			WHERE	peg2.plan_id = :p_plan_id
12077 			  AND   peg2.plan_id = peg1.plan_id
12078 			  AND	peg2.end_pegging_id = peg1.pegging_id
12079 			  AND	d.plan_id = peg1.plan_id
12080 			  AND	d.demand_id = peg1.demand_id
12081 			  AND	d.sr_instance_id = peg1.sr_instance_id
12082 			  AND	d.inventory_item_id = peg1.inventory_item_id
12083 			  AND	s.plan_id = peg2.plan_id
12084 			  AND	s.transaction_id = peg2.transaction_id
12085 			  AND	s.sr_instance_id = peg2.sr_instance_id
12086                           AND   msi.sr_instance_id = s.sr_instance_id
12087                           AND   msi.plan_id = s.plan_id
12088                           AND   msi.organization_id = s.organization_id
12089                           AND   msi.inventory_item_id = s.inventory_item_id
12090                         ) pegging_v,
12091 			msc_item_hierarchy_mv mv
12092 		WHERE	pegging_v.product_family_id = mv.inventory_item_id(+)
12093 		AND     pegging_v.organization_id = mv.organization_id (+)
12094 		AND     pegging_v.sr_instance_id = mv.sr_instance_id (+)
12095 		AND     pegging_v.supply_date >=  mv.effective_date (+)
12096 		AND     pegging_v.supply_date <=  mv.disable_date (+)
12097 		AND	pegging_v.demand_class = mv.demand_class (+)
12098 		AND     mv.level_id (+) = -1
12099 		AND     pegging_v.allocated_quantity <> 0
12100 		GROUP BY
12101                         pegging_v.plan_id,
12102                         pegging_v.inventory_item_id,
12103                         pegging_v.original_item_id,
12104                         pegging_v.organization_id,
12105                         pegging_v.sr_instance_id,
12106                         NVL(mv.demand_class, :def_num),
12107                         pegging_v.supply_date,
12108                         pegging_v.transaction_id,
12109                         pegging_v.order_type,
12110                         pegging_v.original_order_type,
12111                         pegging_v.order_number,
12112                         pegging_v.schedule_designator_id,
12113                         pegging_v.customer_id,
12114                         pegging_v.ship_to_site_id,
12115                         :l_user_id,
12116                         :l_sysdate,
12117                         :l_user_id,
12118                         :l_sysdate)';
12119 
12120 EXCEPTION
12121         WHEN OTHERS THEN
12122                 IF PG_DEBUG in ('Y', 'C') THEN
12123                         msc_util.msc_log('Prepare_Supplies_Stmt2: ' || 'Error occurred: ' || to_char(sqlcode) || ':' || SQLERRM);
12124                 END IF;
12125                 x_return_status := FND_API.G_RET_STS_ERROR;
12126 
12127 END Prepare_Supplies_Stmt2;
12128 
12129 /*--Update_Pf_Display_Flag-----------------------------------------------------
12130 |  o  Called from Pf_Post_Plan_Proc procedure to update Pf_Display_Flag to
12131 |       handle scenario when a demand on one side of ATF is satisfied fully
12132 |       from supplies on the other side of ATF.
12133 +----------------------------------------------------------------------------*/
12134 PROCEDURE Update_Pf_Display_Flag(
12135 	p_plan_id                       IN      NUMBER,
12136         x_return_status                 OUT     NOCOPY VARCHAR2
12137 )
12138 IS
12139         l_return_status                 VARCHAR2(1);
12140 
12141 BEGIN
12142         IF PG_DEBUG in ('Y', 'C') THEN
12143                 msc_util.msc_log('Update_Pf_Display_Flag: ' || 'p_plan_id: ' || p_plan_id);
12144         END IF;
12145 
12146         -- Initializing API return code
12147         x_return_status := FND_API.G_RET_STS_SUCCESS;
12148 
12149         -- Performance tuning pending
12150         /*
12151         UPDATE  MSC_ALLOC_DEMANDS AD
12152         SET     Pf_Display_Flag = 1
12153         WHERE   AD.plan_id = p_plan_id
12154         --AND     AD.allocated_quantity = Demand_Quantity
12155         AND     AD.pf_display_flag is NULL
12156         AND     (AD.parent_demand_id, AD.demand_class, 1) in
12157                     (SELECT AD2.parent_demand_id, AD2.demand_class, count(*)
12158                      FROM   MSC_ALLOC_DEMANDS AD2
12159                      WHERE  AD2.plan_id = p_plan_id
12160                      GROUP BY AD2.parent_demand_id, AD2.demand_class
12161                     )
12162         AND     EXISTS (SELECT  1
12163                         FROM    MSC_SYSTEM_ITEMS I
12164                         WHERE   I.inventory_item_id = AD.inventory_item_id
12165                         AND     I.organization_id   = AD.organization_id
12166                         AND     I.sr_instance_id    = AD.sr_instance_id
12167                         AND     I.plan_id           = AD.plan_id
12168                         AND     I.aggregate_time_fence_date is not null);
12169        */
12170         --5631956 Modified SQL tuned for better performance.
12171         UPDATE  MSC_ALLOC_DEMANDS AD
12172         SET     Pf_Display_Flag = 1
12173         WHERE   AD.plan_id = p_plan_id
12174         AND     AD.pf_display_flag is NULL
12175         AND     EXISTS (SELECT 1
12176                         FROM   MSC_ALLOC_DEMANDS AD2
12177                         WHERE  AD2.plan_id = p_plan_id
12178                         AND    AD.parent_demand_id = AD2.parent_demand_id
12179                         AND    AD.demand_class = AD2.demand_class
12180                         GROUP BY AD2.parent_demand_id, AD2.demand_class
12181                         HAVING count(*) = 1)
12182         AND     EXISTS (SELECT  1
12183                         FROM    MSC_SYSTEM_ITEMS I
12184                         WHERE   I.inventory_item_id = AD.inventory_item_id
12185                         AND     I.organization_id   = AD.organization_id
12186                         AND     I.sr_instance_id    = AD.sr_instance_id
12187                         AND     I.plan_id           = AD.plan_id
12188                         AND     I.aggregate_time_fence_date is not null);
12189 EXCEPTION
12190         WHEN OTHERS THEN
12191                 IF PG_DEBUG in ('Y', 'C') THEN
12192                         msc_util.msc_log('Update_Pf_Display_Flag: ' || 'Error occurred: ' || to_char(sqlcode) || ':' || SQLERRM);
12193                 END IF;
12194                 x_return_status := FND_API.G_RET_STS_ERROR;
12195 
12196 END Update_Pf_Display_Flag;
12197 
12198 -- CTO-PF start
12199 /*--Create_PF_DP_Alloc_Reliefs-----------------------------------------------------
12200 |  o  Called from Gen_Atp_Pegging procedure to insert bucketed demands and
12201 |       rollup supplies in MSC_ATP_PEGGING in demand priority cases
12202 +----------------------------------------------------------------------------*/
12203 
12204 PROCEDURE Create_PF_DP_Alloc_Reliefs (p_plan_id         IN          NUMBER,
12205                                          p_insert_table    IN          VARCHAR2,
12206                                          p_user_id         IN          NUMBER,
12207                                          p_sysdate         IN          DATE,
12208                                          x_return_status   OUT NOCOPY  VARCHAR2
12209                                         )
12210 IS
12211 
12212 l_sql_stmt                      VARCHAR2(800);
12213 l_sql_stmt_1                    VARCHAR2(7000);
12214 l_sql_stmt_2                    VARCHAR2(7000);
12215 -- Default Demand Class
12216 l_def_dmd_class                 VARCHAR2(3) := '-1';
12217 
12218 
12219 BEGIN
12220 
12221   IF PG_DEBUG in ('Y', 'C') THEN
12222      msc_sch_wb.atp_debug('***** Begin Create_PF_DP_Alloc_Reliefs Procedure *****');
12223      msc_sch_wb.atp_debug(' Plan Id : ' || p_plan_id );
12224      msc_sch_wb.atp_debug(' Insert Table parameter : ' || p_insert_table );
12225      msc_sch_wb.atp_debug(' User Id Paramenter : ' || p_user_id );
12226      msc_sch_wb.atp_debug(' Date Parameter : ' || p_sysdate );
12227   END IF;
12228 
12229   x_return_status := FND_API.G_RET_STS_SUCCESS;
12230 
12231     IF PG_DEBUG in ('Y', 'C') THEN
12232        msc_sch_wb.atp_debug(' Inserting Demands');
12233     END IF;
12234 
12235     l_sql_stmt_1 := 'INSERT INTO  ' || p_insert_table ||
12236              '(reference_item_id,
12237              inventory_item_id,
12238              original_item_id,
12239              original_date,
12240              plan_id,
12241              sr_instance_id,
12242              organization_id,
12243              sales_order_line_id,
12244              demand_source_type,
12245              end_demand_id,
12246              bom_item_type,
12247              sales_order_qty,
12248              transaction_date,
12249              demand_id,
12250              demand_quantity,
12251              disposition_id,
12252              demand_class,
12253              consumed_qty,
12254              overconsumption_qty,
12255              supply_id,
12256              supply_quantity,
12257              allocated_quantity,
12258              relief_type,
12259              relief_quantity,
12260              pegging_id,
12261              prev_pegging_id,
12262              end_pegging_id,
12263              created_by,
12264              creation_date,
12265              last_updated_by,
12266              last_update_date,
12267              customer_id,
12268              customer_site_id)
12269     SELECT
12270              peg_v.reference_item_id,
12271              peg_v.inventory_item_id,
12272              peg_v.original_item_id,
12273              peg_v.original_date,
12274              peg_v.plan_id,
12275              peg_v.sr_instance_id,
12276              peg_v.organization_id,
12277              peg_v.sales_order_line_id,
12278              peg_v.demand_source_type,
12279              peg_v.end_demand_id,
12280              peg_v.bom_item_type,
12281              peg_v.sales_order_qty,
12282              peg_v.transaction_date,
12283              peg_v.demand_id ,
12284              peg_v.demand_quantity,
12285              peg_v.disposition_id,
12286              NVL(mv.demand_class, :l_def_dmd_class) demand_class ,
12287              peg_v.consumed_qty,
12288              peg_v.overconsumption_qty,
12289              peg_v.supply_id,
12290              peg_v.supply_quantity,
12291              peg_v.allocated_quantity,
12292              peg_v.relief_type,
12293              peg_v.relief_quantity,
12294              peg_v.pegging_id,
12295              peg_v.prev_pegging_id,
12296              peg_v.end_pegging_id,
12297              :p_user_id,
12298              :p_sysdate,
12299              :p_user_id,
12300              :p_sysdate,
12301              mv.partner_id,
12302              mv.partner_site_id
12303 
12304     FROM
12305         (SELECT mapt.reference_item_id reference_item_id,
12306                 decode(mapt.atf_date,
12307                        NULL, mapt.inventory_item_id,
12308                        decode(sign(trunc(s.new_schedule_date) - mapt.atf_date),
12309                               1, mapt.product_family_id,
12310                               mapt.inventory_item_id
12311                               )
12312                        ) inventory_item_id,
12313                 mapt.inventory_item_id original_item_id,
12314                 mapt.transaction_date original_date,
12315                 mapt.plan_id plan_id,
12316                 mapt.sr_instance_id sr_instance_id,
12317                 mapt.organization_id organization_id,
12318                 mapt.sales_order_line_id sales_order_line_id,
12319                 mapt.demand_source_type demand_source_type,
12320                 mapt.end_demand_id end_demand_id,
12321                 mapt.bom_item_type bom_item_type,
12322                 mapt.sales_order_qty sales_order_qty,
12323                 decode(mapt.atf_date,
12324                        NULL, trunc(mapt.transaction_date),
12325                        decode(sign(trunc(s.new_schedule_date) - mapt.atf_date),
12326                          1, decode(sign(trunc(mapt.transaction_date)- mapt.atf_date),
12327                                         1, trunc(mapt.transaction_date),
12328                                         mapt.atf_date+1
12329                                   ),
12330                          decode(sign(trunc(mapt.transaction_date)- mapt.atf_date),
12331                                      1, mapt.atf_date,
12332                                      trunc(mapt.transaction_date)
12333                                 )
12334                               )
12335                        )transaction_date,
12336                 mapt.demand_id demand_id,
12337                 mapt.demand_quantity demand_quantity,
12338                 mapt.disposition_id disposition_id,
12339                 NVL(mapt.demand_class, :l_def_dmd_class) demand_class ,
12340                 mapt.consumed_qty consumed_qty,
12341                 mapt.overconsumption_qty overconsumption_qty,
12342                 mapt.supply_id supply_id,
12343                 mapt.supply_quantity supply_quantity,
12344                 mapt.allocated_quantity allocated_quantity,
12345                 decode(mapt.atf_date,
12346                        NULL,5,7) relief_type,
12347                 mapt.relief_quantity  relief_quantity,
12348                 mapt.pegging_id pegging_id,
12349                 mapt.prev_pegging_id prev_pegging_id,
12350                 mapt.end_pegging_id end_pegging_id,
12351                 mapt.atf_date atf_date,
12352                 mapt.product_family_id product_family_id
12353         FROM    msc_atp_peg_temp mapt,
12354                 msc_supplies s
12355         WHERE   mapt.plan_id = :p_plan_id
12356         AND     mapt.relief_type = 3
12357 
12358         AND     s.sr_instance_id = mapt.sr_instance_id
12359         AND     s.plan_id = mapt.plan_id
12360         AND     s.transaction_id = mapt.supply_id) peg_v,
12361                 msc_item_hierarchy_mv mv
12362     WHERE
12363              decode(peg_v.atf_date,
12364                        NULL,peg_v.inventory_item_id,
12365                        peg_v.product_family_id) = mv.inventory_item_id(+)
12366      AND     peg_v.organization_id = mv.organization_id (+)
12367      AND     peg_v.sr_instance_id = mv.sr_instance_id (+)
12368      AND     peg_v.transaction_date >=  mv.effective_date (+)
12369      AND     peg_v.transaction_date <=  mv.disable_date (+)
12370      AND     peg_v.demand_class = mv.demand_class (+)
12371      AND     mv.level_id (+) = -1';
12372 
12373     IF PG_DEBUG in ('Y', 'C') THEN
12374         msc_sch_wb.atp_debug('SQL statement to be executed ' || length(l_sql_stmt_1) || ':' || l_sql_stmt_1);
12375     END IF;
12376     EXECUTE IMMEDIATE l_sql_stmt_1 USING
12377                         l_def_dmd_class,
12378                         p_user_id, p_sysdate, p_user_id, p_sysdate,
12379                         l_def_dmd_class,p_plan_id;
12380 
12381     IF PG_DEBUG in ('Y', 'C') THEN
12382         msc_sch_wb.atp_debug('Create_PF_DP_Alloc_Reliefs:  Number of Demand rows inserted '||
12383                                SQL%ROWCOUNT);
12384     END IF;
12385 
12386     IF PG_DEBUG in ('Y', 'C') THEN
12387      msc_sch_wb.atp_debug(' Inserting Supplies');
12388     END IF;
12389 
12390     l_sql_stmt_1 := 'INSERT INTO  ' || p_insert_table ||
12391              '(reference_item_id,
12392              inventory_item_id,
12393              plan_id,
12394              sr_instance_id,
12395              organization_id,
12396              sales_order_line_id,
12397              demand_source_type,
12398              end_demand_id,
12399              bom_item_type,
12400              sales_order_qty,
12401              transaction_date,
12402              demand_id,
12403              demand_quantity,
12404              disposition_id,
12405              demand_class,
12406              consumed_qty,
12407              overconsumption_qty,
12408              supply_id,
12409              supply_quantity,
12410              allocated_quantity,
12411              relief_type,
12412              relief_quantity,
12413              pegging_id,
12414              prev_pegging_id,
12415              end_pegging_id,
12416              created_by,
12417              creation_date,
12418              last_updated_by,
12419              last_update_date,
12420              customer_id,
12421              customer_site_id)
12422     SELECT   mapt.reference_item_id,
12423              mapt.inventory_item_id,
12424              mapt.plan_id,
12425              mapt.sr_instance_id,
12426              mapt.organization_id,
12427              mapt.sales_order_line_id,
12428              mapt.demand_source_type,
12429              mapt.end_demand_id,
12430              mapt.bom_item_type,
12431              mapt.sales_order_qty,
12432              mapt.transaction_date,
12433              mapt.demand_id ,
12434              mapt.demand_quantity,
12435              mapt.disposition_id,
12436              NVL(mv.demand_class, :l_def_dmd_class) demand_class ,
12437              mapt.consumed_qty,
12438              mapt.overconsumption_qty,
12439              mapt.supply_id,
12440              mapt.supply_quantity,
12441              mapt.allocated_quantity ,
12442              6,
12443              mapt.relief_quantity ,
12444              mapt.pegging_id,
12445              mapt.prev_pegging_id,
12446              mapt.end_pegging_id,
12447              :p_user_id,
12448              :p_sysdate,
12449              :p_user_id,
12450              :p_sysdate,
12451              mv.partner_id,
12452              mv.partner_site_id customer_site_id
12453     FROM    msc_atp_peg_temp mapt, msc_item_hierarchy_mv mv
12454     WHERE   mapt.plan_id = :p_plan_id
12455     AND     mapt.relief_type = 2
12456     AND     mapt.inventory_item_id = mv.inventory_item_id(+)
12457     AND     mapt.organization_id = mv.organization_id (+)
12458     AND     mapt.sr_instance_id = mv.sr_instance_id (+)
12459     AND     mapt.transaction_date >=  mv.effective_date (+)
12460     AND     mapt.transaction_date <=  mv.disable_date (+)
12461     AND     mapt.demand_class = mv.demand_class (+)
12462     AND     mv.level_id (+) = -1 '
12463     ;
12464 
12465     EXECUTE IMMEDIATE l_sql_stmt_1 USING
12466                         l_def_dmd_class,
12467                         p_user_id, p_sysdate, p_user_id, p_sysdate, p_plan_id;
12468 
12469     IF PG_DEBUG in ('Y', 'C') THEN
12470         msc_sch_wb.atp_debug('Create_PF_DP_Alloc_Reliefs:  Number of Supply rows inserted '||
12471                                SQL%ROWCOUNT);
12472     END IF;
12473 
12474 EXCEPTION
12475     WHEN OTHERS THEN
12476       IF PG_DEBUG in ('Y', 'C') THEN
12477         msc_sch_wb.atp_debug('Inside main exception of Create_PF_DP_Alloc_Reliefs');
12478         msc_sch_wb.atp_debug ('Create_PF_DP_Alloc_Reliefs. Error : ' || sqlcode || ': '|| sqlerrm);
12479       END IF;
12480         x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
12481 
12482 END Create_PF_DP_Alloc_Reliefs;
12483 
12484 /*--Create_PF_Allocation_Reliefs-----------------------------------------------------
12485 |  o  Called from Gen_Atp_Pegging procedure to insert bucketed demands and
12486 |       rollup supplies in MSC_ATP_PEGGING in non demand priority cases
12487 +----------------------------------------------------------------------------*/
12488 
12489 PROCEDURE Create_PF_Allocation_Reliefs (p_plan_id         IN          NUMBER,
12490                                          p_insert_table    IN          VARCHAR2,
12491                                          p_user_id         IN          NUMBER,
12492                                          p_sysdate         IN          DATE,
12493                                          x_return_status   OUT NOCOPY  VARCHAR2
12494                                         )
12495 IS
12496 
12497 l_sql_stmt                      VARCHAR2(800);
12498 l_sql_stmt_1                    VARCHAR2(5000);
12499 BEGIN
12500 
12501   IF PG_DEBUG in ('Y', 'C') THEN
12502      msc_sch_wb.atp_debug('***** Begin Create_PF_Allocation_Reliefs Procedure *****');
12503      msc_sch_wb.atp_debug(' Plan Id : ' || p_plan_id );
12504      msc_sch_wb.atp_debug(' Insert Table parameter : ' || p_insert_table );
12505      msc_sch_wb.atp_debug(' User Id Paramenter : ' || p_user_id );
12506      msc_sch_wb.atp_debug(' Date Parameter : ' || p_sysdate );
12507   END IF;
12508 
12509   x_return_status := FND_API.G_RET_STS_SUCCESS;
12510 
12511     IF PG_DEBUG in ('Y', 'C') THEN
12512        msc_sch_wb.atp_debug(' Inserting Demands');
12513     END IF;
12514 
12515 
12516     l_sql_stmt_1 := 'INSERT INTO  ' || p_insert_table || -- actually the insert table parameter.
12517              '(reference_item_id,
12518              inventory_item_id,
12519              original_item_id,
12520              original_date,
12521              plan_id,
12522              sr_instance_id,
12523              organization_id,
12524              sales_order_line_id,
12525              demand_source_type,
12526              end_demand_id,
12527              bom_item_type,
12528              sales_order_qty,
12529              transaction_date,
12530              demand_id,
12531              demand_quantity,
12532              disposition_id,
12533              consumed_qty,
12534              overconsumption_qty,
12535              supply_id,
12536              supply_quantity,
12537              allocated_quantity,
12538              relief_type,
12539              relief_quantity,
12540              pegging_id,
12541              prev_pegging_id,
12542              end_pegging_id,
12543              created_by,
12544              creation_date,
12545              last_updated_by,
12546              last_update_date,
12547              customer_id,
12548              customer_site_id)
12549     SELECT   mapt.reference_item_id reference_item_id,
12550              decode(sign(trunc(s.new_schedule_date) - mapt.atf_date),
12551                          1, mapt.product_family_id,
12552                             mapt.inventory_item_id) inventory_item_id,
12553              mapt.inventory_item_id,
12554              mapt.transaction_date,
12555              mapt.plan_id plan_id,
12556              mapt.sr_instance_id sr_instance_id,
12557              mapt.organization_id organization_id,
12558              mapt.sales_order_line_id sales_order_line_id,
12559              mapt.demand_source_type demand_source_type,
12560              mapt.end_demand_id end_demand_id,
12561              mapt.bom_item_type bom_item_type,
12562              mapt.sales_order_qty sales_order_qty,
12563              decode(sign(trunc(s.new_schedule_date) - mapt.atf_date),
12564                          1, decode(sign(trunc(mapt.transaction_date)- mapt.atf_date),
12565                                         1, trunc(mapt.transaction_date),
12566                                         mapt.atf_date+1),
12567                          decode(sign(trunc(mapt.transaction_date)- mapt.atf_date),
12568                                      1, mapt.atf_date,
12569                                      trunc(mapt.transaction_date)
12570                                 )
12571                     ) transaction_date,
12572              mapt.demand_id demand_id,
12573              mapt.demand_quantity demand_quantity,
12574              mapt.disposition_id disposition_id,
12575              mapt.consumed_qty consumed_qty,
12576              mapt.overconsumption_qty overconsumption_qty,
12577              mapt.supply_id supply_id,
12578              mapt.supply_quantity supply_quantity,
12579              mapt.allocated_quantity allocated_quantity,
12580              7 relief_type, --PF ATP
12581              mapt.relief_quantity relief_quantity,
12582              mapt.pegging_id pegging_id,
12583              mapt.prev_pegging_id prev_pegging_id,
12584              mapt.end_pegging_id end_pegging_id,
12585              :p_user_id,
12586              :p_sysdate,
12587              :p_user_id,
12588              :p_sysdate,
12589              mapt.customer_id,
12590              mapt.customer_site_id
12591     FROM    msc_atp_peg_temp mapt,
12592             msc_supplies s
12593     WHERE   mapt.plan_id = :p_plan_id
12594     AND     mapt.relief_type = 3
12595 
12596     AND     s.sr_instance_id = mapt.sr_instance_id
12597     AND     s.plan_id = mapt.plan_id
12598     AND     s.transaction_id = mapt.supply_id';
12599 
12600     IF PG_DEBUG in ('Y', 'C') THEN
12601         msc_sch_wb.atp_debug('SQL statement to be executed ' || length(l_sql_stmt_1) || ':' || l_sql_stmt_1);
12602     END IF;
12603     EXECUTE IMMEDIATE l_sql_stmt_1 USING
12604                         p_user_id, p_sysdate, p_user_id, p_sysdate, p_plan_id;
12605 
12606     IF PG_DEBUG in ('Y', 'C') THEN
12607         msc_sch_wb.atp_debug('Create_PF_Allocation_Reliefs:  Number of Demand rows inserted '||
12608                                SQL%ROWCOUNT);
12609     END IF;
12610 
12611 EXCEPTION
12612     WHEN OTHERS THEN
12613       IF PG_DEBUG in ('Y', 'C') THEN
12614         msc_sch_wb.atp_debug('Inside main exception of Create_PF_Allocation_Reliefs');
12615         msc_sch_wb.atp_debug ('Create_PF_Allocation_Reliefs. Error : ' || sqlcode || ': '|| sqlerrm);
12616       END IF;
12617         x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
12618 
12619 END Create_PF_Allocation_Reliefs;
12620 -- CTO-PF end
12621 END MSC_ATP_PF;