[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;