[Home] [Help]
PACKAGE BODY: APPS.MSC_ATP_PF
Source
1 PACKAGE BODY MSC_ATP_PF AS
2 /* $Header: MSCPFATB.pls 120.16 2011/12/06 10:05:42 vjuluri ship $ */
3
4 /*--------------------------------------------------------------------------
5 | Begin Private Package Variables
6 +-------------------------------------------------------------------------*/
7 G_PKG_NAME CONSTANT VARCHAR2(30) := 'MSC_ATP_PF';
8 PG_DEBUG VARCHAR2(1) := NVL(FND_PROFILE.value('MSC_ATP_DEBUG'), 'N');
9 G_CAL_EXC_SET_ID CONSTANT INTEGER := -1;
10 G_USER_ID CONSTANT NUMBER := FND_GLOBAL.USER_ID;
11 MEMBER CONSTANT NUMBER := 1;
12 FAMILY CONSTANT NUMBER := 2;
13
14 /*--------------------------------------------------------------------------
15 | Begin Private Procedures Declaration
16 +-------------------------------------------------------------------------*/
17
18 PROCEDURE Calc_Bucketed_Demands_Info(
19 p_req_date IN DATE,
20 p_atf_date IN DATE,
21 p_req_qty IN NUMBER,
22 p_req_date_qty IN NUMBER,
23 p_atf_date_qty IN NUMBER,
24 x_bucketed_demands_rec OUT NOCOPY Bucketed_Demands_Rec,
25 x_return_status OUT NOCOPY VARCHAR2
26 );
27
28 PROCEDURE Insert_Bucketed_Demand(
29 p_atp_rec IN MRP_ATP_PVT.AtpRec,
30 p_plan_id IN NUMBER,
31 p_bucketed_demand_date IN DATE,
32 p_bucketed_demand_qty IN NUMBER,
33 p_display_flag IN NUMBER,
34 p_parent_demand_id IN NUMBER,
35 p_level IN NUMBER,
36 p_refresh_number IN NUMBER,
37 x_return_status OUT NOCOPY VARCHAR2
38 );
39
40 PROCEDURE Move_PF_Bd_Dates(
41 p_plan_id IN NUMBER,
42 p_parent_demand_id IN NUMBER,
43 p_old_demand_date IN DATE,
44 p_new_demand_date IN DATE,
45 p_atf_date IN DATE,
46 x_return_status OUT NOCOPY VARCHAR2
47 );
48
49 PROCEDURE Get_Mat_Avail_Pf_Ods_Summ(
50 p_item_id IN NUMBER,
51 p_org_id IN NUMBER,
52 p_instance_id IN NUMBER,
53 p_plan_id IN NUMBER,
54 p_demand_class IN VARCHAR2,
55 p_default_atp_rule_id IN NUMBER,
56 p_default_dmd_class IN VARCHAR2,
57 p_itf IN DATE,
58 x_atp_dates OUT NOCOPY MRP_ATP_PUB.date_arr,
59 x_atp_qtys OUT NOCOPY MRP_ATP_PUB.number_arr,
60 x_return_status OUT NOCOPY VARCHAR2
61 );
62
63 PROCEDURE Get_Mat_Avail_Pf_Ods(
64 p_item_id IN NUMBER,
65 p_org_id IN NUMBER,
66 p_instance_id IN NUMBER,
67 p_plan_id IN NUMBER,
68 p_cal_code IN VARCHAR2,
69 p_sysdate_seq_num IN NUMBER,
70 p_sys_next_date IN DATE,
71 p_demand_class IN VARCHAR2,
72 p_default_atp_rule_id IN NUMBER,
73 p_default_dmd_class IN VARCHAR2,
74 p_itf IN DATE,
75 x_atp_dates OUT NOCOPY MRP_ATP_PUB.date_arr,
76 x_atp_qtys OUT NOCOPY MRP_ATP_PUB.number_arr,
77 x_return_status OUT NOCOPY VARCHAR2
78 );
79
80 PROCEDURE Get_Mat_Avail_Pf_Pds_Summ(
81 p_sr_member_id IN NUMBER,
82 p_sr_family_id IN NUMBER,
83 p_org_id IN NUMBER,
84 p_instance_id IN NUMBER,
85 p_plan_id IN NUMBER,
86 p_itf IN DATE,
87 p_refresh_number IN NUMBER, -- For summary enhancement
88 x_atp_dates OUT NOCOPY MRP_ATP_PUB.date_arr,
89 x_atp_qtys OUT NOCOPY MRP_ATP_PUB.number_arr,
90 x_return_status OUT NOCOPY VARCHAR2
91 );
92
93 PROCEDURE Get_Mat_Avail_Pf_Pds(
94 p_sr_member_id IN NUMBER,
95 p_sr_family_id IN NUMBER,
96 p_org_id IN NUMBER,
97 p_instance_id IN NUMBER,
98 p_plan_id IN NUMBER,
99 p_itf IN DATE,
100 x_atp_dates OUT NOCOPY MRP_ATP_PUB.date_arr,
101 x_atp_qtys OUT NOCOPY MRP_ATP_PUB.number_arr,
102 x_return_status OUT NOCOPY VARCHAR2
103 );
104
105 PROCEDURE Get_Mat_Avail_Pf_Ods_Dtls (
106 p_item_id IN NUMBER,
107 p_request_item_id IN NUMBER,
108 p_org_id IN NUMBER,
109 p_instance_id IN NUMBER,
110 p_plan_id IN NUMBER,
111 p_cal_code IN VARCHAR2,
112 p_sysdate_seq_num IN NUMBER,
113 p_sys_next_date IN DATE,
114 p_demand_class IN VARCHAR2,
115 p_default_atp_rule_id IN NUMBER,
116 p_default_dmd_class IN VARCHAR2,
117 p_itf IN DATE,
118 p_level IN NUMBER,
119 p_scenario_id IN NUMBER,
120 p_identifier IN NUMBER,
121 x_return_status OUT NOCOPY VARCHAR2
122 );
123
124 PROCEDURE Get_Mat_Avail_Pf_Pds_Dtls (
125 p_sr_member_id IN NUMBER,
126 p_sr_family_id IN NUMBER,
127 p_org_id IN NUMBER,
128 p_instance_id IN NUMBER,
129 p_plan_id IN NUMBER,
130 p_itf IN DATE,
131 p_level IN NUMBER,
132 p_scenario_id IN NUMBER,
133 p_identifier IN NUMBER,
134 x_return_status OUT NOCOPY VARCHAR2
135 );
136
137 -- New private procedure added for forecast at PF
138 PROCEDURE Prepare_Demands_Stmt(
139 p_share_partition IN VARCHAR2,
140 p_demand_priority IN VARCHAR2,
141 p_excess_supply_by_dc IN VARCHAR2,
142 p_temp_table IN VARCHAR2,
143 p_alloc_temp_table IN VARCHAR2,
144 p_parallel_degree IN NUMBER,
145 x_sql_stmt OUT NOCOPY VARCHAR2,
146 x_return_status OUT NOCOPY VARCHAR2
147 );
148
149 -- New private procedure added for forecast at PF
150 PROCEDURE Prepare_Supplies_Stmt(
151 p_share_partition IN VARCHAR2,
152 p_demand_priority IN VARCHAR2,
153 p_excess_supply_by_dc IN VARCHAR2,
154 p_temp_table IN VARCHAR2,
155 p_alloc_temp_table IN VARCHAR2,
156 p_parallel_degree IN NUMBER,
157 x_sql_stmt OUT NOCOPY VARCHAR2,
158 x_return_status OUT NOCOPY VARCHAR2
159 );
160
161 /* Private procedures removed for forecast at PF **Will be deleted after code review
162 PROCEDURE Prepare_Demands_Stmt1(
163 p_share_partition IN VARCHAR2,
164 p_demand_priority IN VARCHAR2,
165 p_excess_supply_by_dc IN VARCHAR2,
166 p_temp_table IN VARCHAR2,
167 p_parallel_degree IN NUMBER,
168 x_sql_stmt OUT NOCOPY VARCHAR2,
169 x_return_status OUT NOCOPY VARCHAR2
170 );
171
172 PROCEDURE Prepare_Demands_Stmt2(
173 p_share_partition IN VARCHAR2,
174 p_temp_table IN VARCHAR2,
175 p_parallel_degree IN NUMBER,
176 x_sql_stmt OUT NOCOPY VARCHAR2,
177 x_return_status OUT NOCOPY VARCHAR2
178 );
179
180 PROCEDURE Prepare_Supplies_Stmt1(
181 p_share_partition IN VARCHAR2,
182 p_demand_priority IN VARCHAR2,
183 p_excess_supply_by_dc IN VARCHAR2,
184 p_temp_table IN VARCHAR2,
185 p_parallel_degree IN NUMBER,
186 x_sql_stmt OUT NOCOPY VARCHAR2,
187 x_return_status OUT NOCOPY VARCHAR2
188 );
189
190 PROCEDURE Prepare_Supplies_Stmt2(
191 p_share_partition IN VARCHAR2,
192 p_temp_table IN VARCHAR2,
193 p_parallel_degree IN NUMBER,
194 x_sql_stmt OUT NOCOPY VARCHAR2,
195 x_return_status OUT NOCOPY VARCHAR2
196 );
197 */
198
199 PROCEDURE Update_Pf_Display_Flag(
200 p_plan_id IN NUMBER,
201 x_return_status OUT NOCOPY VARCHAR2
202 );
203
204 /*--------------------------------------------------------------------------
205 | End Private Procedures Declaration
206 +-------------------------------------------------------------------------*/
207
208 /*--Add_PF_Bucketed_Demands-------------------------------------------------
209 | o This procedure is called from Add_Mat_Demand to add the bucketed
210 | demands for the parent demand.
211 | o This procedure calls private procedure Insert_Bucketed_Demand to
212 | add the bucketed demands
213 +-------------------------------------------------------------------------*/
214 PROCEDURE Add_PF_Bucketed_Demands(
215 p_atp_rec IN MRP_ATP_PVT.AtpRec,
216 p_plan_id IN NUMBER,
217 p_parent_demand_id IN NUMBER,
218 p_refresh_number IN NUMBER,
219 x_return_status OUT NOCOPY VARCHAR2
220 ) IS
221 -- local variables
222 l_bucketed_demands_rec Bucketed_Demands_Rec;
223 l_req_date DATE;
224 l_atf_date DATE;
225 l_req_qty NUMBER;
226 l_req_date_qty NUMBER;
227 l_atf_date_qty NUMBER;
228 l_return_status VARCHAR2(1);
229
230 BEGIN
231 IF PG_DEBUG in ('Y', 'C') THEN
232 msc_sch_wb.atp_debug('*********Begin procedure Add_PF_Bucketed_Demands ********');
233 msc_sch_wb.atp_debug('Add_PF_Bucketed_Demands: ' || 'demand_source_type = ' ||p_atp_rec.demand_source_type);--cmro
234 END IF;
235
236 -- Initializing API return code
237 x_return_status := FND_API.G_RET_STS_SUCCESS;
238
239 l_req_date := p_atp_rec.requested_ship_date;
240 l_atf_date := p_atp_rec.atf_date;
241 l_req_qty := nvl(p_atp_rec.quantity_ordered, 0);
242 l_req_date_qty := greatest(nvl(p_atp_rec.requested_date_quantity, 0), 0);
243 /* Assumption is that atf date qty passed to this procedure can be null only
244 in scenario where we find req qty within atf*/
245 --bug3919371 When Atf date qty is null then
246 -- 1. Treat requested_date_quantity as atf_date_qty if req date after atf.
247 -- 2. Treat p_atp_rec.quantity_ordered as atf_date_qty if req date within atf.
248
249 IF l_req_date > l_atf_date THEN
250 l_atf_date_qty := greatest(nvl(p_atp_rec.atf_date_quantity, l_req_date_qty), 0);
251 ELSE
252 l_atf_date_qty := greatest(nvl(p_atp_rec.atf_date_quantity, l_req_qty), 0);
253 END IF;
254
255 Calc_Bucketed_Demands_Info(
256 l_req_date,
257 l_atf_date,
258 l_req_qty,
259 l_req_date_qty,
260 l_atf_date_qty,
261 l_bucketed_demands_rec,
262 l_return_status
263 );
264
265 IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
266 IF PG_DEBUG in ('Y', 'C') THEN
267 msc_sch_wb.atp_debug('Add_PF_Bucketed_Demands: ' || 'Error occured in procedure Calc_Bucketed_Demands_Info');
268 END IF;
269 x_return_status := FND_API.G_RET_STS_ERROR;
270 return;
271 END IF;
272
273 IF l_bucketed_demands_rec.insert_mem_bd = 'Y' and l_bucketed_demands_rec.mem_bd_qty > 0 THEN
274 Insert_Bucketed_Demand(
275 p_atp_rec,
276 p_plan_id,
277 l_bucketed_demands_rec.mem_bd_date,
278 l_bucketed_demands_rec.mem_bd_qty,
279 l_bucketed_demands_rec.mem_display_flag,
280 p_parent_demand_id,
281 member, -- member item bd
282 p_refresh_number,
283 l_return_status
284 );
285 IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
286 IF PG_DEBUG in ('Y', 'C') THEN
287 msc_sch_wb.atp_debug('Add_PF_Bucketed_Demands: ' || 'Error occured in procedure Insert_Bucketed_Demand');
288 END IF;
289 x_return_status := FND_API.G_RET_STS_ERROR;
290 return;
291 END IF;
292 END IF;
293
294 IF l_bucketed_demands_rec.insert_pf_bd = 'Y' and l_bucketed_demands_rec.pf_bd_qty > 0 THEN
295 Insert_Bucketed_Demand(
296 p_atp_rec,
297 p_plan_id,
298 l_bucketed_demands_rec.pf_bd_date,
299 l_bucketed_demands_rec.pf_bd_qty,
300 l_bucketed_demands_rec.pf_display_flag,
301 p_parent_demand_id,
302 family, -- family item bd
303 p_refresh_number,
304 l_return_status
305 );
306 IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
307 IF PG_DEBUG in ('Y', 'C') THEN
308 msc_sch_wb.atp_debug('Add_PF_Bucketed_Demands: ' || 'Error occured in procedure Insert_Bucketed_Demand');
309 END IF;
310 x_return_status := FND_API.G_RET_STS_ERROR;
311 return;
312 END IF;
313 END IF;
314
315 IF PG_DEBUG in ('Y', 'C') THEN
316 msc_sch_wb.atp_debug('*********End of procedure Add_PF_Bucketed_Demands ********');
317 END IF;
318
319 EXCEPTION
320 WHEN OTHERS THEN
321 IF PG_DEBUG in ('Y', 'C') THEN
322 msc_sch_wb.atp_debug('Add_PF_Bucketed_Demands: ' || 'Error occurred: ' || to_char(sqlcode) || ':' || SQLERRM);
323 END IF;
324 x_return_status := FND_API.G_RET_STS_ERROR;
325
326 END Add_PF_Bucketed_Demands;
327
328 /*--Calc_Bucketed_Demands_Info----------------------------------------------
329 | o This procedure calculates bucketed demands information
330 +-------------------------------------------------------------------------*/
331 PROCEDURE Calc_Bucketed_Demands_Info(
332 p_req_date IN DATE,
333 p_atf_date IN DATE,
334 p_req_qty IN NUMBER,
335 p_req_date_qty IN NUMBER,
336 p_atf_date_qty IN NUMBER,
337 x_bucketed_demands_rec OUT NOCOPY Bucketed_Demands_Rec,
338 x_return_status OUT NOCOPY VARCHAR2
339 ) IS
340 -- local variables
341
342 BEGIN
343 IF PG_DEBUG in ('Y', 'C') THEN
344 msc_sch_wb.atp_debug('*********Begin procedure Calc_Bucketed_Demands_Info ********');
345 msc_sch_wb.atp_debug('Calc_Bucketed_Demands_Info: ' || 'Req Date = ' ||to_char(p_req_date));
346 msc_sch_wb.atp_debug('Calc_Bucketed_Demands_Info: ' || 'ATF Date = ' ||to_char(p_atf_date));
347 msc_sch_wb.atp_debug('Calc_Bucketed_Demands_Info: ' || 'Req Qty = ' ||to_char(p_req_qty));
348 msc_sch_wb.atp_debug('Calc_Bucketed_Demands_Info: ' || 'Req Date Qty = ' ||to_char(p_req_date_qty));
349 msc_sch_wb.atp_debug('Calc_Bucketed_Demands_Info: ' || 'ATF Date Qty = ' ||to_char(p_atf_date_qty));
350 END IF;
351
352 -- Initializing API return code
353 x_return_status := FND_API.G_RET_STS_SUCCESS;
354
355 IF p_req_date <= p_atf_date THEN
356 IF (p_req_date_qty >= p_req_qty) OR (p_atf_date_qty >= p_req_qty) THEN
357 /* Request is satisfied using member item's supply within ATF.
358 One bucketed demand would be inserted in this case*/
359 x_bucketed_demands_rec.insert_mem_bd := 'Y';
360 x_bucketed_demands_rec.mem_display_flag := 1;
361 x_bucketed_demands_rec.mem_bd_date := p_req_date;
362 x_bucketed_demands_rec.mem_bd_qty := p_req_qty;
363
364 x_bucketed_demands_rec.insert_pf_bd := 'N';
365 ELSE
366 /* Request is satisfied using both member item's supply within ATF
367 and family item's supply outside ATF.
368 Two bucketed demands would be inserted in this case*/
369 x_bucketed_demands_rec.insert_mem_bd := 'Y';
370 x_bucketed_demands_rec.mem_bd_date := p_req_date;
371 x_bucketed_demands_rec.mem_bd_qty := p_atf_date_qty;
372
373 If x_bucketed_demands_rec.mem_bd_qty > 0 THEN
374 x_bucketed_demands_rec.mem_display_flag := 1;
375 ELSE
376 x_bucketed_demands_rec.pf_display_flag := 1;
377 END IF;
378
379 x_bucketed_demands_rec.insert_pf_bd := 'Y';
380 x_bucketed_demands_rec.pf_bd_date := p_atf_date+1;
381 x_bucketed_demands_rec.pf_bd_qty := p_req_qty - p_atf_date_qty;
382
383 END IF;
384 ELSIF (p_req_date_qty >= p_req_qty) THEN
385 IF (p_req_date_qty - p_atf_date_qty >= p_req_qty) THEN
386 /* Request is satisfied using family item's supply outside ATF.
387 One bucketed demand would be inserted in this case*/
388 x_bucketed_demands_rec.insert_pf_bd := 'Y';
389 x_bucketed_demands_rec.pf_display_flag := 1;
390 x_bucketed_demands_rec.pf_bd_date := p_req_date;
391 x_bucketed_demands_rec.pf_bd_qty := p_req_qty;
392
393 x_bucketed_demands_rec.insert_mem_bd := 'N';
394 ELSE
395 /* Request is satisfied using both member item's supply within ATF
396 and family item's supply outside ATF.
397 Two bucketed demands would be inserted in this case*/
398 x_bucketed_demands_rec.insert_mem_bd := 'Y';
399 x_bucketed_demands_rec.mem_bd_date := p_atf_date;
400 x_bucketed_demands_rec.mem_bd_qty := greatest(p_req_qty - (p_req_date_qty - p_atf_date_qty), 0);
401
402 x_bucketed_demands_rec.insert_pf_bd := 'Y';
403 x_bucketed_demands_rec.pf_bd_date := p_req_date;
404 x_bucketed_demands_rec.pf_bd_qty := p_req_date_qty - p_atf_date_qty;
405
406 If x_bucketed_demands_rec.pf_bd_qty > 0 THEN
407 x_bucketed_demands_rec.pf_display_flag := 1;
408 ELSE
409 x_bucketed_demands_rec.mem_display_flag := 1;
410 END IF;
411 END IF;
412 ELSE
413 /* Request is satisfied using both member item's supply within ATF
414 and family item's supply outside ATF.
415 Two bucketed demands would be inserted in this case*/
416 x_bucketed_demands_rec.insert_mem_bd := 'Y';
417 x_bucketed_demands_rec.mem_bd_date := p_atf_date;
418 x_bucketed_demands_rec.mem_bd_qty := p_atf_date_qty;
419
420 x_bucketed_demands_rec.insert_pf_bd := 'Y';
421 x_bucketed_demands_rec.pf_bd_date := p_req_date;
422 x_bucketed_demands_rec.pf_bd_qty := p_req_qty - p_atf_date_qty;
423
424 If x_bucketed_demands_rec.pf_bd_qty > 0 THEN
425 x_bucketed_demands_rec.pf_display_flag := 1;
426 ELSE
427 x_bucketed_demands_rec.mem_display_flag := 1;
428 END IF;
429 END IF;
430
431 IF PG_DEBUG in ('Y', 'C') THEN
432 msc_sch_wb.atp_debug('************** Bucketed Demands *************');
433 msc_sch_wb.atp_debug('* Add member item bucketed demand = ' ||x_bucketed_demands_rec.insert_mem_bd);
434 msc_sch_wb.atp_debug('* Member Item BD Date = ' ||to_char(x_bucketed_demands_rec.mem_bd_date));
435 msc_sch_wb.atp_debug('* Member Item BD Qty = ' ||to_char(x_bucketed_demands_rec.mem_bd_qty));
436 msc_sch_wb.atp_debug('* Member Display Flag = ' ||to_char(x_bucketed_demands_rec.mem_display_flag));
437 msc_sch_wb.atp_debug('* ');
438 msc_sch_wb.atp_debug('* Add family item bucketed demand = ' ||x_bucketed_demands_rec.insert_pf_bd);
439 msc_sch_wb.atp_debug('* Family Item BD Date = ' ||to_char(x_bucketed_demands_rec.pf_bd_date));
440 msc_sch_wb.atp_debug('* Family Item BD Qty = ' ||to_char(x_bucketed_demands_rec.pf_bd_qty));
441 msc_sch_wb.atp_debug('* Pf Display Flag = ' ||to_char(x_bucketed_demands_rec.pf_display_flag));
442 msc_sch_wb.atp_debug('***********************************************');
443 msc_sch_wb.atp_debug('*********End of procedure Calc_Bucketed_Demands_Info ********');
444 END IF;
445
446 EXCEPTION
447 WHEN OTHERS THEN
448 IF PG_DEBUG in ('Y', 'C') THEN
449 msc_sch_wb.atp_debug('Calc_Bucketed_Demands_Info: ' || 'Error occurred: ' || to_char(sqlcode) || ':' || SQLERRM);
450 END IF;
451 x_return_status := FND_API.G_RET_STS_ERROR;
452
453 END Calc_Bucketed_Demands_Info;
454
455 /*--Update_PF_Bucketed_Demands----------------------------------------------
456 | o This procedure updates bucketed demands
457 +-------------------------------------------------------------------------*/
458 PROCEDURE Update_PF_Bucketed_Demands(
459 p_plan_id IN NUMBER,
460 p_parent_demand_id IN NUMBER,
461 p_demand_date IN DATE,
462 p_atf_date IN DATE,
463 p_old_demand_date_qty IN NUMBER,
464 p_new_demand_date_qty IN NUMBER,
465 x_return_status OUT NOCOPY VARCHAR2
466 ) IS
467 -- local variables
468 l_mem_bd_qty NUMBER;
469 l_mem_bd_decrement_qty NUMBER;
470 l_pf_bd_decrement_qty NUMBER;
471 l_update_mem_bd VARCHAR2(1) := 'N';
472 l_update_pf_bd VARCHAR2(1) := 'N';
473
474 BEGIN
475 IF PG_DEBUG in ('Y', 'C') THEN
476 msc_sch_wb.atp_debug('*********Begin procedure Update_PF_Bucketed_Demands ********');
477 msc_sch_wb.atp_debug('Update_PF_Bucketed_Demands: ' || 'p_plan_id = ' ||to_char(p_plan_id));
478 msc_sch_wb.atp_debug('Update_PF_Bucketed_Demands: ' || 'p_parent_demand_id = ' ||to_char(p_parent_demand_id));
479 msc_sch_wb.atp_debug('Update_PF_Bucketed_Demands: ' || 'p_demand_date = ' ||to_char(p_demand_date));
480 msc_sch_wb.atp_debug('Update_PF_Bucketed_Demands: ' || 'p_atf_date = ' ||to_char(p_atf_date));
481 msc_sch_wb.atp_debug('Update_PF_Bucketed_Demands: ' || 'p_old_demand_date_qty = ' ||to_char(p_old_demand_date_qty));
482 msc_sch_wb.atp_debug('Update_PF_Bucketed_Demands: ' || 'p_new_demand_date_qty = ' ||to_char(p_new_demand_date_qty));
483 END IF;
484
485 -- Initializing API return code
486 x_return_status := FND_API.G_RET_STS_SUCCESS;
487
488 IF p_demand_date <= p_atf_date THEN
489 l_update_mem_bd := 'Y';
490 l_mem_bd_qty := p_new_demand_date_qty;
491
492 l_update_pf_bd := 'D';
493 IF PG_DEBUG in ('Y', 'C') THEN
494 msc_sch_wb.atp_debug('********* New Bucketed Demands ********');
495 msc_sch_wb.atp_debug('* Member Item BD Date = ' ||to_char(p_demand_date));
496 msc_sch_wb.atp_debug('* Member Item BD Qty = ' ||to_char(l_mem_bd_qty));
497 msc_sch_wb.atp_debug('* ');
498 msc_sch_wb.atp_debug('* Family Item BD Qty = 0');
499 msc_sch_wb.atp_debug('*************************************');
500 END IF;
501 ELSE
502 l_update_mem_bd := 'Y';
503 l_mem_bd_qty := null;
504
505 l_update_pf_bd := 'Y';
506 l_pf_bd_decrement_qty := GREATEST(nvl(p_old_demand_date_qty, 0)
507 - nvl(p_new_demand_date_qty, 0), 0);
508 IF PG_DEBUG in ('Y', 'C') THEN
509 msc_sch_wb.atp_debug('************ New Bucketed Demands **************');
510 msc_sch_wb.atp_debug('* Decremented Previous Family Item BD by ' ||to_char(l_pf_bd_decrement_qty));
511 msc_sch_wb.atp_debug('**************************************************');
512 END IF;
513 END IF;
514
515 IF l_update_mem_bd = 'Y' THEN
516 update msc_alloc_demands
517 set allocated_quantity = nvl(l_mem_bd_qty, allocated_quantity),
518 demand_quantity = nvl(p_new_demand_date_qty, demand_quantity)
519 where parent_demand_id = p_parent_demand_id
520 --bug3693892 added trunc
521 and trunc(demand_date) <= p_atf_date
522 and plan_id = p_plan_id;
523 END IF;
524
525 IF l_update_pf_bd = 'Y' THEN
526 update msc_alloc_demands
527 set allocated_quantity = allocated_quantity - l_pf_bd_decrement_qty,
528 demand_quantity = nvl(p_new_demand_date_qty, demand_quantity)
529 where parent_demand_id = p_parent_demand_id
530 --bug3693892 added trunc
531 and trunc(demand_date) > p_atf_date
532 and plan_id = p_plan_id;
533 ELSIF l_update_pf_bd = 'D' THEN
534 delete msc_alloc_demands
535 where parent_demand_id = p_parent_demand_id
536 --bug3693892 added trunc
537 and trunc(demand_date) > p_atf_date
538 and plan_id = p_plan_id;
539 END IF;
540
541 IF PG_DEBUG in ('Y', 'C') THEN
542 msc_sch_wb.atp_debug('*********End of procedure Update_PF_Bucketed_Demands ********');
543 END IF;
544
545 EXCEPTION
546 WHEN OTHERS THEN
547 IF PG_DEBUG in ('Y', 'C') THEN
548 msc_sch_wb.atp_debug('Update_PF_Bucketed_Demands: ' || 'Error occurred: ' || to_char(sqlcode) || ':' || SQLERRM);
549 END IF;
550 x_return_status := FND_API.G_RET_STS_ERROR;
551
552 END Update_PF_Bucketed_Demands;
553
554 /*--Increment_Bucketed_Demands_Qty------------------------------------------
555 | o This procedure increments member item's bucketed demand by
556 | p_mem_bd_increment_qty and family item's bucketed demand by
557 | p_pf_bd_increment_qty.
558 | o This procedure calls private procedure Insert_Bucketed_Demand if
559 | there is no existing bucketed demand.
560 +-------------------------------------------------------------------------*/
561 PROCEDURE Increment_Bucketed_Demands_Qty(
562 p_atp_rec IN OUT NOCOPY MRP_ATP_PVT.AtpRec,
563 p_plan_id IN NUMBER,
564 p_parent_demand_id IN NUMBER,
565 -- p_mem_bd_increment_qty IN NUMBER,
566 -- p_pf_bd_increment_qty IN NUMBER,
567 x_return_status OUT NOCOPY VARCHAR2
568 ) IS
569 -- local variables
570 l_bucketed_demands_rec Bucketed_Demands_Rec;
571 l_req_date DATE;
572 l_atf_date DATE;
573 l_req_qty NUMBER;
574 l_req_date_qty NUMBER;
575 l_atf_date_qty NUMBER;
576 l_return_status VARCHAR2(1);
577
578 BEGIN
579 IF PG_DEBUG in ('Y', 'C') THEN
580 msc_sch_wb.atp_debug('*********Begin procedure Increment_Bucketed_Demands_Qty ********');
581 msc_sch_wb.atp_debug('Increment_Bucketed_Demands_Qty: ' || 'p_plan_id = ' ||to_char(p_plan_id));
582 msc_sch_wb.atp_debug('Increment_Bucketed_Demands_Qty: ' || 'p_parent_demand_id = ' ||to_char(p_parent_demand_id));
583 END IF;
584
585 -- Initializing API return code
586 x_return_status := FND_API.G_RET_STS_SUCCESS;
587
588 l_req_date := p_atp_rec.requested_ship_date;
589 l_atf_date := p_atp_rec.atf_date;
590 l_req_qty := nvl(p_atp_rec.quantity_ordered, 0);
591 l_req_date_qty := greatest(nvl(p_atp_rec.requested_date_quantity, 0), 0);
592 /* Assumption is that atf date qty passed to this procedure can be null only
593 in scenario where we find req qty within atf*/
594 --bug3919371 When Atf date qty is null then
595 -- 1. Treat requested_date_quantity as atf_date_qty if req date after atf.
596 -- 2. Treat p_atp_rec.quantity_ordered as atf_date_qty if req date within atf.
597
598 IF l_req_date > l_atf_date THEN
599 l_atf_date_qty := greatest(nvl(p_atp_rec.atf_date_quantity,l_req_date_qty), 0);
600 ELSE
601 l_atf_date_qty := greatest(nvl(p_atp_rec.atf_date_quantity, l_req_qty), 0);
602 END IF;
603
604 Calc_Bucketed_Demands_Info(
605 l_req_date,
606 l_atf_date,
607 l_req_qty,
608 l_req_date_qty,
609 l_atf_date_qty,
610 l_bucketed_demands_rec,
611 l_return_status
612 );
613
614 IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
615 IF PG_DEBUG in ('Y', 'C') THEN
616 msc_sch_wb.atp_debug('Increment_Bucketed_Demands_Qty: ' || 'Error occured in procedure Calc_Bucketed_Demands_Info');
617 END IF;
618 x_return_status := FND_API.G_RET_STS_ERROR;
619 return;
620 END IF;
621
622 IF nvl(l_bucketed_demands_rec.mem_bd_qty, 0) = 0 THEN
623 IF PG_DEBUG in ('Y', 'C') THEN
624 msc_sch_wb.atp_debug('Increment_Bucketed_Demands_Qty: Deleting member item bucketed demand...');
625 END IF;
626 delete msc_alloc_demands
627 where parent_demand_id = p_parent_demand_id
628 and inventory_item_id = p_atp_rec.request_item_id
629 and plan_id = p_plan_id;
630 ELSIF l_bucketed_demands_rec.mem_bd_qty > 0 THEN
631 update msc_alloc_demands
632 set allocated_quantity = l_bucketed_demands_rec.mem_bd_qty,
633 demand_quantity = l_req_qty,
634 --bug3697365 added timestamp also
635 demand_date = trunc(l_bucketed_demands_rec.mem_bd_date) + MSC_ATP_PVT.G_END_OF_DAY,
636 original_demand_date = trunc(l_req_date) + MSC_ATP_PVT.G_END_OF_DAY,
637 Pf_Display_Flag = l_bucketed_demands_rec.mem_display_flag
638 where parent_demand_id = p_parent_demand_id
639 and inventory_item_id = p_atp_rec.request_item_id
640 and plan_id = p_plan_id;
641
642 IF SQL%NOTFOUND THEN
643 IF PG_DEBUG in ('Y', 'C') THEN
644 msc_sch_wb.atp_debug('Increment_Bucketed_Demands_Qty: Member item bucketed demand not found. Inserting now...');
645 END IF;
646 Insert_Bucketed_Demand(
647 p_atp_rec,
648 p_plan_id,
649 l_bucketed_demands_rec.mem_bd_date,
650 l_bucketed_demands_rec.mem_bd_qty,
651 l_bucketed_demands_rec.mem_display_flag,
652 p_parent_demand_id,
653 member, -- member item bd
654 p_atp_rec.refresh_number,
655 l_return_status
656 );
657 IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
658 IF PG_DEBUG in ('Y', 'C') THEN
659 msc_sch_wb.atp_debug('Increment_Bucketed_Demands_Qty: ' || 'Error occured in procedure Insert_Bucketed_Demand');
660 END IF;
661 x_return_status := FND_API.G_RET_STS_ERROR;
662 return;
663 END IF;
664 END IF;
665 END IF;
666
667 IF nvl(l_bucketed_demands_rec.pf_bd_qty,0) = 0 THEN
668 IF PG_DEBUG in ('Y', 'C') THEN
669 msc_sch_wb.atp_debug('Increment_Bucketed_Demands_Qty: Deleting family item bucketed demand...');
670 END IF;
671 delete msc_alloc_demands
672 where parent_demand_id = p_parent_demand_id
673 and inventory_item_id = p_atp_rec.inventory_item_id
674 and plan_id = p_plan_id;
675 ELSIF l_bucketed_demands_rec.pf_bd_qty > 0 THEN
676 update msc_alloc_demands
677 set allocated_quantity = l_bucketed_demands_rec.pf_bd_qty,
678 demand_quantity = l_req_qty,
679 --bug3697365 added timestamp also
680 demand_date = trunc(l_bucketed_demands_rec.pf_bd_date) + MSC_ATP_PVT.G_END_OF_DAY,
681 original_demand_date = trunc(l_req_date) + MSC_ATP_PVT.G_END_OF_DAY,
682 Pf_Display_Flag = l_bucketed_demands_rec.pf_display_flag
683 where parent_demand_id = p_parent_demand_id
684 and inventory_item_id = p_atp_rec.inventory_item_id
685 and plan_id = p_plan_id;
686
687 IF SQL%NOTFOUND THEN
688 IF PG_DEBUG in ('Y', 'C') THEN
689 msc_sch_wb.atp_debug('Increment_Bucketed_Demands_Qty: Family item bucketed demand not found. Inserting now...');
690 END IF;
691 Insert_Bucketed_Demand(
692 p_atp_rec,
693 p_plan_id,
694 l_bucketed_demands_rec.pf_bd_date,
695 l_bucketed_demands_rec.pf_bd_qty,
696 l_bucketed_demands_rec.pf_display_flag,
697 p_parent_demand_id,
698 family, -- family item bd
699 p_atp_rec.refresh_number,
700 l_return_status
701 );
702 IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
703 IF PG_DEBUG in ('Y', 'C') THEN
704 msc_sch_wb.atp_debug('Increment_Bucketed_Demands_Qty: ' || 'Error occured in procedure Insert_Bucketed_Demand');
705 END IF;
706 x_return_status := FND_API.G_RET_STS_ERROR;
707 return;
708 END IF;
709 END IF;
710 END IF;
711
712 IF PG_DEBUG in ('Y', 'C') THEN
713 msc_sch_wb.atp_debug('*********End of procedure Increment_Bucketed_Demands_Qty ********');
714 END IF;
715
716 EXCEPTION
717 WHEN OTHERS THEN
718 IF PG_DEBUG in ('Y', 'C') THEN
719 msc_sch_wb.atp_debug('Increment_Bucketed_Demands_Qty: ' || 'Error occurred: ' || to_char(sqlcode) || ':' || SQLERRM);
720 END IF;
721 x_return_status := FND_API.G_RET_STS_ERROR;
722
723 END Increment_Bucketed_Demands_Qty;
724
725 /*--Move_PF_Bucketed_Demands------------------------------------------------
726 | o This procedure moves bucketed demands dates and quantities.
727 | o If p_atf_date_quantity passed is null it means only move the dates
728 +-------------------------------------------------------------------------*/
729 PROCEDURE Move_PF_Bucketed_Demands(
730 p_plan_id IN NUMBER,
731 p_parent_demand_id IN NUMBER,
732 p_old_demand_date IN DATE,
733 p_new_demand_date IN DATE,
734 p_demand_qty IN NUMBER,
735 p_new_demand_date_qty IN NUMBER,
736 p_atf_date IN DATE,
737 p_atf_date_qty IN NUMBER,
738 x_return_status OUT NOCOPY VARCHAR2,
739 p_bkwd_pass_atf_date_qty IN NUMBER, --bug3397904
740 p_atp_rec IN MRP_ATP_PVT.AtpRec := NULL
741 ) IS
742 -- local variables
743 l_update_mem_bd VARCHAR(1) :='N';
744 l_update_pf_bd VARCHAR(1) :='N';
745 l_mem_bd_date DATE;
746 l_pf_bd_date DATE;
747 l_mem_bd_qty NUMBER :=0;--bug3397904
748 l_pf_bd_qty NUMBER :=0;--bug3397904
749 l_mem_display_flag NUMBER;
750 l_pf_display_flag NUMBER;
751 l_return_status VARCHAR2(1);
752 l_atp_rec MRP_ATP_PVT.AtpRec := p_atp_rec;
753 l_demand_qty NUMBER; --bug3397904
754 l_new_demand_date_qty NUMBER; --bug3397904
755 l_atf_date_qty NUMBER; --bug3397904
756
757 BEGIN
758 IF PG_DEBUG in ('Y', 'C') THEN
759 msc_sch_wb.atp_debug('*********Begin procedure Move_PF_Bucketed_Demands ********');
760 msc_sch_wb.atp_debug('Move_PF_Bucketed_Demands: ' || 'p_plan_id = ' ||to_char(p_plan_id));
761 msc_sch_wb.atp_debug('Move_PF_Bucketed_Demands: ' || 'p_parent_demand_id = ' ||to_char(p_parent_demand_id));
762 msc_sch_wb.atp_debug('Move_PF_Bucketed_Demands: ' || 'p_old_demand_date = ' ||to_char(p_old_demand_date));
763 msc_sch_wb.atp_debug('Move_PF_Bucketed_Demands: ' || 'p_new_demand_date = ' ||to_char(p_new_demand_date));
764 msc_sch_wb.atp_debug('Move_PF_Bucketed_Demands: ' || 'p_demand_qty = ' ||to_char(p_demand_qty));
765 msc_sch_wb.atp_debug('Move_PF_Bucketed_Demands: ' || 'p_new_demand_date_qty = ' ||to_char(p_new_demand_date_qty));
766 msc_sch_wb.atp_debug('Move_PF_Bucketed_Demands: ' || 'p_atf_date = ' ||to_char(p_atf_date));
767 msc_sch_wb.atp_debug('Move_PF_Bucketed_Demands: ' || 'p_atf_date_qty = ' ||to_char(p_atf_date_qty));
768 END IF;
769
770 -- Initializing API return code
771 x_return_status := FND_API.G_RET_STS_SUCCESS;
772
773 --bug3555084 start
774 IF p_parent_demand_id is not null THEN
775 IF upper(p_atp_rec.override_flag) = 'Y' THEN
776 --IF p_old_demand_date = p_new_demand_date THEN
777 --This condition was before for override case
778 --now checking by flag as now both dates can be different.
779 /*
780 IF PG_DEBUG in ('Y', 'C') THEN
781 msc_sch_wb.atp_debug('Move_PF_Bucketed_Demands: No need to move bucketed demand dates. Update qtys');
782 END IF;
783 IF (p_atf_date_qty is NULL) THEN
784 IF PG_DEBUG in ('Y', 'C') THEN
785 msc_sch_wb.atp_debug('Move_PF_Bucketed_Demands: No need to update qtys');
786 END IF;
787 ELSIF p_old_demand_date <= p_atf_date THEN
788 update msc_alloc_demands
789 set allocated_quantity = p_demand_qty,
790 demand_quantity = p_demand_qty
791 where parent_demand_id = p_parent_demand_id
792 and demand_date <= p_atf_date
793 and plan_id = p_plan_id;
794
795 IF PG_DEBUG in ('Y', 'C') THEN
796 msc_sch_wb.atp_debug('********* New Bucketed Demand Qtys ********');
797 msc_sch_wb.atp_debug('* Member Item BD Qty = ' || nvl(p_atf_date_qty, 0));
798 msc_sch_wb.atp_debug('* ');
799 msc_sch_wb.atp_debug('* Family Item BD Qty = ' || (p_demand_qty - nvl(p_atf_date_qty, 0)));
800 msc_sch_wb.atp_debug('*********************************************');
801 END IF;
802 ELSE
803 update msc_alloc_demands
804 set allocated_quantity = nvl(p_atf_date_qty, 0),
805 demand_quantity = p_demand_qty
806 where parent_demand_id = p_parent_demand_id
807 and demand_date <= p_atf_date
808 and plan_id = p_plan_id;
809
810 update msc_alloc_demands
811 set allocated_quantity = p_demand_qty - nvl(p_atf_date_qty, 0),
812 demand_quantity = p_demand_qty
813 where parent_demand_id = p_parent_demand_id
814 and demand_date > p_atf_date
815 and plan_id = p_plan_id;
816
817 IF PG_DEBUG in ('Y', 'C') THEN
818 msc_sch_wb.atp_debug('********* New Bucketed Demand Qtys ********');
819 msc_sch_wb.atp_debug('* Member Item BD Qty = ' || nvl(p_atf_date_qty, 0));
820 msc_sch_wb.atp_debug('* ');
821 msc_sch_wb.atp_debug('* Family Item BD Qty = ' || (p_demand_qty - nvl(p_atf_date_qty, 0)));
822 msc_sch_wb.atp_debug('*********************************************');
823 END IF;
824 END IF;*/
825 IF (p_new_demand_date <= p_atf_date) AND
826 (NVL(p_atf_date_qty,p_demand_qty) >= p_demand_qty) THEN
827
828 l_update_mem_bd := 'Y';
829 l_mem_display_flag := 1;
830 l_mem_bd_date := p_new_demand_date;
831 l_mem_bd_qty := p_demand_qty;
832
833 IF PG_DEBUG in ('Y', 'C') THEN
834 msc_sch_wb.atp_debug('Move_PF_Bucketed_Demands: Inside IF');
835 END IF;
836
837 ELSIF (p_new_demand_date <= p_atf_date) AND (p_atf_date_qty > 0) THEN
838
839 l_update_mem_bd := 'Y';
840 l_mem_display_flag := 1;
841 l_mem_bd_date := p_new_demand_date;
842 l_mem_bd_qty := p_atf_date_qty;
843
844 l_update_pf_bd := 'Y';
845 l_pf_display_flag := null;
846 l_pf_bd_date := p_atf_date + 1;
847 l_pf_bd_qty := p_demand_qty - p_atf_date_qty;
848
849 IF PG_DEBUG in ('Y', 'C') THEN
850 msc_sch_wb.atp_debug('Move_PF_Bucketed_Demands: p_new_demand_date <= p_atf_date');
851 END IF;
852
853 ELSIF (p_new_demand_date <= p_atf_date) THEN
854
855 l_update_pf_bd := 'Y';
856 l_pf_display_flag := 1;
857 l_pf_bd_date := p_atf_date + 1;
858 l_pf_bd_qty := p_demand_qty;
859
860 --8604062 RSD/DSD are outside ATF and ATF date quantity is 0. We should not be updating member demand.
861 ELSIF (NVL(p_atf_date_qty,0) = 0) THEN
862
863 l_update_pf_bd := 'Y';
864 l_pf_display_flag := 1;
865 l_pf_bd_date := p_new_demand_date;
866 l_pf_bd_qty := p_demand_qty;
867 ELSE
868 l_update_mem_bd := 'Y';
869 l_mem_display_flag := null;
870 l_mem_bd_date := p_atf_date;
871 l_mem_bd_qty := p_atf_date_qty;
872
873 l_update_pf_bd := 'Y';
874 l_pf_display_flag := 1;
875 l_pf_bd_date := p_new_demand_date;
876 l_pf_bd_qty := p_demand_qty - p_atf_date_qty;
877
878 IF PG_DEBUG in ('Y', 'C') THEN
879 msc_sch_wb.atp_debug('Move_PF_Bucketed_Demands: inside else');
880 END IF;
881 END IF;
882
883 IF PG_DEBUG in ('Y', 'C') THEN
884 msc_sch_wb.atp_debug('********* Bucketed Demands ********');
885 msc_sch_wb.atp_debug('* Update member item bucketed demand = ' ||l_update_mem_bd);
886 msc_sch_wb.atp_debug('* l_mem_bd_date = ' ||to_char(l_mem_bd_date));
887 msc_sch_wb.atp_debug('* l_mem_bd_qty = ' ||to_char(l_mem_bd_qty));
888 msc_sch_wb.atp_debug('* l_mem_display_flag = ' ||to_char(l_mem_display_flag));
889 msc_sch_wb.atp_debug('* ');
890 msc_sch_wb.atp_debug('* Update family item bucketed demand = ' ||l_update_pf_bd);
891 msc_sch_wb.atp_debug('* l_pf_bd_date = ' ||to_char(l_pf_bd_date));
892 msc_sch_wb.atp_debug('* l_pf_bd_qty = ' ||to_char(l_pf_bd_qty));
893 msc_sch_wb.atp_debug('* l_pf_display_flag = ' ||to_char(l_pf_display_flag));
894 msc_sch_wb.atp_debug('*************************************');
895 END IF;
896
897 IF l_update_mem_bd = 'Y' THEN
898 update msc_alloc_demands
899 --bug3697365 added timestamp also
900 set demand_date = trunc(l_mem_bd_date) + MSC_ATP_PVT.G_END_OF_DAY,
901 allocated_quantity = l_mem_bd_qty,
902 demand_quantity = p_demand_qty,
903 pf_display_flag = l_mem_display_flag,
904 --bug3697365 added timestamp also
905 original_demand_date = trunc(p_new_demand_date) + MSC_ATP_PVT.G_END_OF_DAY
906 where parent_demand_id = p_parent_demand_id
907 --bug3693892 added trunc
908 and trunc(demand_date) <= p_atf_date
909 and plan_id = p_plan_id;
910
911 IF (SQL%NOTFOUND) and (nvl(l_mem_bd_qty, 0) > 0) and (l_atp_rec.inventory_item_id is NOT NULL) THEN
912 IF PG_DEBUG in ('Y', 'C') THEN
913 msc_sch_wb.atp_debug('Move_PF_Bucketed_Demands: Member item bucketed demand not found. Inserting now...');
914 END IF;
915 l_atp_rec.quantity_ordered := p_demand_qty;
916 l_atp_rec.requested_ship_date := p_new_demand_date;
917 Insert_Bucketed_Demand(
918 l_atp_rec,
919 p_plan_id,
920 l_mem_bd_date,
921 l_mem_bd_qty,
922 l_mem_display_flag,
923 p_parent_demand_id,
924 member, -- member item bd
925 l_atp_rec.refresh_number,
926 l_return_status
927 );
928 IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
929 IF PG_DEBUG in ('Y', 'C') THEN
930 msc_sch_wb.atp_debug('Move_PF_Bucketed_Demands: ' || 'Error occured in procedure Insert_Bucketed_Demand');
931 END IF;
932 x_return_status := FND_API.G_RET_STS_ERROR;
933 return;
934 END IF;
935 END IF;
936 END IF;
937
938 IF l_update_pf_bd = 'Y' THEN
939 update msc_alloc_demands
940 --bug3697365 added timestamp also
941 set demand_date = trunc(l_pf_bd_date) + MSC_ATP_PVT.G_END_OF_DAY,
942 allocated_quantity = l_pf_bd_qty,
943 demand_quantity = p_demand_qty,
944 pf_display_flag = l_pf_display_flag,
945 --bug3697365 added timestamp also
946 original_demand_date = trunc(p_new_demand_date) + MSC_ATP_PVT.G_END_OF_DAY
947 where parent_demand_id = p_parent_demand_id
948 --bug3693892 added trunc
949 and trunc(demand_date) > p_atf_date
950 and plan_id = p_plan_id;
951
952 IF (SQL%NOTFOUND) and (nvl(l_pf_bd_qty, 0) > 0) and (l_atp_rec.inventory_item_id is NOT NULL) THEN
953 IF PG_DEBUG in ('Y', 'C') THEN
954 msc_sch_wb.atp_debug('Move_PF_Bucketed_Demands: Family item bucketed demand not found. Inserting now...');
955 END IF;
956 l_atp_rec.quantity_ordered := p_demand_qty;
957 l_atp_rec.requested_ship_date := p_new_demand_date;
958 Insert_Bucketed_Demand(
959 l_atp_rec,
960 p_plan_id,
961 l_pf_bd_date,
962 l_pf_bd_qty,
963 l_pf_display_flag,
964 p_parent_demand_id,
965 family, -- family item bd
966 l_atp_rec.refresh_number,
967 l_return_status
968 );
969 IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
970 IF PG_DEBUG in ('Y', 'C') THEN
971 msc_sch_wb.atp_debug('Move_PF_Bucketed_Demands: ' || 'Error occured in procedure Insert_Bucketed_Demand');
972 END IF;
973 x_return_status := FND_API.G_RET_STS_ERROR;
974 return;
975 END IF;
976 END IF;
977 END IF;
978 --bug3555084 end
979 ELSIF (p_atf_date_qty is NULL) THEN
980 Move_PF_Bd_Dates(
981 p_plan_id,
982 p_parent_demand_id,
983 p_old_demand_date,
984 p_new_demand_date,
985 p_atf_date,
986 l_return_status
987 );
988 IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
989 IF PG_DEBUG in ('Y', 'C') THEN
990 msc_sch_wb.atp_debug('Move_PF_Bucketed_Demands: ' || 'Error occured in procedure Move_PF_Bd_Dates');
991 END IF;
992 x_return_status := FND_API.G_RET_STS_ERROR;
993 return;
994 END IF;
995 ELSE
996 l_demand_qty := p_demand_qty - nvl(p_bkwd_pass_atf_date_qty,0); --bug3397904
997 l_new_demand_date_qty := p_new_demand_date_qty - nvl(p_bkwd_pass_atf_date_qty,0); --bug3397904
998 l_atf_date_qty := p_atf_date_qty - nvl(p_bkwd_pass_atf_date_qty,0); --bug3397904
999
1000 IF PG_DEBUG in ('Y', 'C') THEN --bug3397904 start
1001 msc_sch_wb.atp_debug('********* Bucketed Demands ********');
1002 msc_sch_wb.atp_debug('* Backward pass atf date qty = ' ||to_char(p_bkwd_pass_atf_date_qty));
1003 msc_sch_wb.atp_debug('* l_new_demand_date_qty = ' ||to_char(l_new_demand_date_qty));
1004 msc_sch_wb.atp_debug('* l_atf_date_qty = ' ||to_char(l_atf_date_qty));
1005 msc_sch_wb.atp_debug('* ');
1006 END IF; --bug3397904 end
1007 IF p_new_demand_date <= p_atf_date THEN
1008 /* Move member item's bucketed demand*/
1009 l_update_mem_bd := 'Y';
1010 l_mem_display_flag := 1;
1011 l_mem_bd_date := p_new_demand_date;
1012 l_mem_bd_qty := l_demand_qty;
1013 ELSIF (l_new_demand_date_qty - l_atf_date_qty >= l_demand_qty) THEN
1014 /* Delete member item's bucketed demand*/
1015 IF p_bkwd_pass_atf_date_qty <> 0 THEN --bug3397904 start
1016 l_update_mem_bd := 'Y';
1017 l_mem_display_flag := null;
1018 l_mem_bd_date := p_atf_date;
1019 l_mem_bd_qty := 0;
1020 ELSE
1021 l_update_mem_bd := 'D';
1022 END IF; --bug3397904 end
1023
1024 /* Move family item's bucketed demand*/
1025 l_update_pf_bd := 'Y';
1026 l_pf_display_flag := 1;
1027 l_pf_bd_date := p_new_demand_date;
1028 l_pf_bd_qty := l_demand_qty;
1029 ELSE
1030 /* Move member item's bucketed demand*/
1031 l_update_mem_bd := 'Y';
1032 l_mem_display_flag := null;
1033 l_mem_bd_date := p_atf_date;
1034 l_mem_bd_qty := l_demand_qty - (l_new_demand_date_qty - l_atf_date_qty);
1035
1036 /* Move family item's bucketed demand*/
1037 l_update_pf_bd := 'Y';
1038 l_pf_display_flag := 1;
1039 l_pf_bd_date := p_new_demand_date;
1040 l_pf_bd_qty := l_new_demand_date_qty - l_atf_date_qty;
1041 END IF;
1042
1043 l_mem_bd_qty := l_mem_bd_qty + p_bkwd_pass_atf_date_qty; --bug3397904
1044
1045 IF PG_DEBUG in ('Y', 'C') THEN
1046 msc_sch_wb.atp_debug('********* Bucketed Demands ********');
1047 msc_sch_wb.atp_debug('* Update member item bucketed demand = ' ||l_update_mem_bd);
1048 msc_sch_wb.atp_debug('* l_mem_bd_date = ' ||to_char(l_mem_bd_date));
1049 msc_sch_wb.atp_debug('* l_mem_bd_qty = ' ||to_char(l_mem_bd_qty));
1050 msc_sch_wb.atp_debug('* l_mem_display_flag = ' ||to_char(l_mem_display_flag));
1051 msc_sch_wb.atp_debug('* ');
1052 msc_sch_wb.atp_debug('* Update family item bucketed demand = ' ||l_update_pf_bd);
1053 msc_sch_wb.atp_debug('* l_pf_bd_date = ' ||to_char(l_pf_bd_date));
1054 msc_sch_wb.atp_debug('* l_pf_bd_qty = ' ||to_char(l_pf_bd_qty));
1055 msc_sch_wb.atp_debug('* l_pf_display_flag = ' ||to_char(l_pf_display_flag));
1056 msc_sch_wb.atp_debug('*************************************');
1057 END IF;
1058
1059 IF l_update_mem_bd = 'Y' THEN
1060 update msc_alloc_demands
1061 --bug3697365 added timestamp also
1062 set demand_date = trunc(l_mem_bd_date) + MSC_ATP_PVT.G_END_OF_DAY,
1063 allocated_quantity = l_mem_bd_qty,
1064 demand_quantity = p_demand_qty,
1065 pf_display_flag = l_mem_display_flag,
1066 --bug3697365 added timestamp also
1067 original_demand_date = trunc(p_new_demand_date) + MSC_ATP_PVT.G_END_OF_DAY
1068 where parent_demand_id = p_parent_demand_id
1069 --bug3693892 added trunc
1070 and trunc(demand_date) <= p_atf_date
1071 and plan_id = p_plan_id;
1072
1073 IF (SQL%NOTFOUND) and (nvl(l_mem_bd_qty, 0) > 0) and (l_atp_rec.inventory_item_id is NOT NULL) THEN
1074 IF PG_DEBUG in ('Y', 'C') THEN
1075 msc_sch_wb.atp_debug('Move_PF_Bucketed_Demands: Member item bucketed demand not found. Inserting now...');
1076 END IF;
1077 l_atp_rec.quantity_ordered := p_demand_qty;
1078 l_atp_rec.requested_ship_date := p_new_demand_date;
1079 Insert_Bucketed_Demand(
1080 l_atp_rec,
1081 p_plan_id,
1082 l_mem_bd_date,
1083 l_mem_bd_qty,
1084 --l_pf_display_flag,
1085 l_mem_display_flag, -- Bug 3483954
1086 p_parent_demand_id,
1087 member, -- member item bd
1088 l_atp_rec.refresh_number,
1089 l_return_status
1090 );
1091 IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
1092 IF PG_DEBUG in ('Y', 'C') THEN
1093 msc_sch_wb.atp_debug('Move_PF_Bucketed_Demands: ' || 'Error occured in procedure Insert_Bucketed_Demand');
1094 END IF;
1095 x_return_status := FND_API.G_RET_STS_ERROR;
1096 return;
1097 END IF;
1098 END IF;
1099 ELSIF l_update_mem_bd = 'D' THEN
1100 delete msc_alloc_demands
1101 where parent_demand_id = p_parent_demand_id
1102 --bug3693892 added trunc
1103 and trunc(demand_date) <= p_atf_date
1104 and plan_id = p_plan_id;
1105 END IF;
1106
1107 IF l_update_pf_bd = 'Y' THEN
1108 update msc_alloc_demands
1109 --bug3697365 added timestamp also
1110 set demand_date = trunc(l_pf_bd_date) + MSC_ATP_PVT.G_END_OF_DAY,
1111 allocated_quantity = l_pf_bd_qty,
1112 demand_quantity = p_demand_qty,
1113 pf_display_flag = l_pf_display_flag,
1114 --bug3697365 added timestamp also
1115 original_demand_date = trunc(p_new_demand_date) + MSC_ATP_PVT.G_END_OF_DAY
1116 where parent_demand_id = p_parent_demand_id
1117 --bug3693892 added trunc
1118 and trunc(demand_date) > p_atf_date
1119 and plan_id = p_plan_id;
1120
1121 IF (SQL%NOTFOUND) and (nvl(l_pf_bd_qty, 0) > 0) and (l_atp_rec.inventory_item_id is NOT NULL) THEN
1122 IF PG_DEBUG in ('Y', 'C') THEN
1123 msc_sch_wb.atp_debug('Move_PF_Bucketed_Demands: Family item bucketed demand not found. Inserting now...');
1124 END IF;
1125 l_atp_rec.quantity_ordered := p_demand_qty;
1126 l_atp_rec.requested_ship_date := p_new_demand_date;
1127 Insert_Bucketed_Demand(
1128 l_atp_rec,
1129 p_plan_id,
1130 l_pf_bd_date,
1131 l_pf_bd_qty,
1132 l_pf_display_flag,
1133 p_parent_demand_id,
1134 family, -- family item bd
1135 l_atp_rec.refresh_number,
1136 l_return_status
1137 );
1138 IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
1139 IF PG_DEBUG in ('Y', 'C') THEN
1140 msc_sch_wb.atp_debug('Move_PF_Bucketed_Demands: ' || 'Error occured in procedure Insert_Bucketed_Demand');
1141 END IF;
1142 x_return_status := FND_API.G_RET_STS_ERROR;
1143 return;
1144 END IF;
1145 END IF;
1146 END IF;
1147 END IF;
1148 END IF;
1149 IF PG_DEBUG in ('Y', 'C') THEN
1150 msc_sch_wb.atp_debug('*********End of procedure Move_PF_Bucketed_Demands ********');
1151 END IF;
1152
1153 EXCEPTION
1154 WHEN OTHERS THEN
1155 IF PG_DEBUG in ('Y', 'C') THEN
1156 msc_sch_wb.atp_debug('Move_PF_Bucketed_Demands: ' || 'Error occurred: ' || to_char(sqlcode) || ':' || SQLERRM);
1157 END IF;
1158 x_return_status := FND_API.G_RET_STS_ERROR;
1159
1160 END Move_PF_Bucketed_Demands;
1161
1162 /*--Move_PF_Bd_Dates--------------------------------------------------------
1163 | o This procedure moves bucketed demands dates.
1164 +-------------------------------------------------------------------------*/
1165 PROCEDURE Move_PF_Bd_Dates(
1166 p_plan_id IN NUMBER,
1167 p_parent_demand_id IN NUMBER,
1168 p_old_demand_date IN DATE,
1169 p_new_demand_date IN DATE,
1170 p_atf_date IN DATE,
1171 x_return_status OUT NOCOPY VARCHAR2
1172 ) IS
1173 -- local variables
1174
1175 BEGIN
1176 IF PG_DEBUG in ('Y', 'C') THEN
1177 msc_sch_wb.atp_debug('*********Begin procedure Move_PF_Bd_Dates ********');
1178 END IF;
1179
1180 -- Initializing API return code
1181 x_return_status := FND_API.G_RET_STS_SUCCESS;
1182
1183 IF (p_old_demand_date < p_atf_date) and (p_new_demand_date <= p_atf_date) THEN
1184 update msc_alloc_demands
1185 --bug3697365 added timestamp also
1186 set demand_date = trunc(p_new_demand_date) + MSC_ATP_PVT.G_END_OF_DAY,
1187 original_demand_date = trunc(p_new_demand_date) + MSC_ATP_PVT.G_END_OF_DAY
1188 where parent_demand_id = p_parent_demand_id
1189 --bug3693892 added trunc
1190 and trunc(demand_date) <= p_atf_date
1191 and plan_id = p_plan_id;
1192 ELSIF (p_old_demand_date < p_atf_date) and (p_new_demand_date > p_atf_date) THEN
1193 update msc_alloc_demands
1194 --bug3693892 added trunc
1195 set demand_date = trunc(p_atf_date) + MSC_ATP_PVT.G_END_OF_DAY,
1196 original_demand_date = trunc(p_new_demand_date) + MSC_ATP_PVT.G_END_OF_DAY,
1197 Pf_Display_Flag = null
1198 where parent_demand_id = p_parent_demand_id
1199 --bug3693892 added trunc
1200 and trunc(demand_date) <= p_atf_date
1201 and plan_id = p_plan_id;
1202
1203 update msc_alloc_demands
1204 --bug3693892 added trunc
1205 set demand_date = trunc(p_new_demand_date) + MSC_ATP_PVT.G_END_OF_DAY,
1206 original_demand_date = trunc(p_new_demand_date) + MSC_ATP_PVT.G_END_OF_DAY,
1207 Pf_Display_Flag = 1
1208 where parent_demand_id = p_parent_demand_id
1209 --bug3693892 added trunc
1210 and trunc(demand_date) > p_atf_date
1211 and plan_id = p_plan_id;
1212 ELSIF (p_old_demand_date > p_atf_date) and (p_new_demand_date > p_atf_date) THEN
1213 update msc_alloc_demands
1214 --bug3693892 added trunc
1215 set demand_date = trunc(p_new_demand_date) + MSC_ATP_PVT.G_END_OF_DAY,
1216 original_demand_date = trunc(p_new_demand_date) + MSC_ATP_PVT.G_END_OF_DAY
1217 where parent_demand_id = p_parent_demand_id
1218 --bug3693892 added trunc
1219 and trunc(demand_date) > p_atf_date
1220 and plan_id = p_plan_id;
1221 END IF;
1222
1223 IF PG_DEBUG in ('Y', 'C') THEN
1224 msc_sch_wb.atp_debug('*********End of procedure Move_PF_Bd_Dates ********');
1225 END IF;
1226
1227 EXCEPTION
1228 WHEN OTHERS THEN
1229 IF PG_DEBUG in ('Y', 'C') THEN
1230 msc_sch_wb.atp_debug('Move_PF_Bd_Dates: ' || 'Error occurred: ' || to_char(sqlcode) || ':' || SQLERRM);
1231 END IF;
1232 x_return_status := FND_API.G_RET_STS_ERROR;
1233
1234 END Move_PF_Bd_Dates;
1235
1236 /*--Insert_Bucketed_Demand--------------------------------------------------
1237 | o This procedure inserts bucketed demand in msc_alloc_demands table
1238 | with origination type 51 (ATP Bucketed Demand).
1239 +-------------------------------------------------------------------------*/
1240 PROCEDURE Insert_Bucketed_Demand(
1241 p_atp_rec IN MRP_ATP_PVT.AtpRec,
1242 p_plan_id IN NUMBER,
1243 p_bucketed_demand_date IN DATE,
1244 p_bucketed_demand_qty IN NUMBER,
1245 p_display_flag IN NUMBER,
1246 p_parent_demand_id IN NUMBER,
1247 p_level IN NUMBER,
1248 p_refresh_number IN NUMBER,
1249 x_return_status OUT NOCOPY VARCHAR2
1250 ) IS
1251 -- local variables
1252 l_sysdate date := sysdate;
1253
1254 BEGIN
1255 IF PG_DEBUG in ('Y', 'C') THEN
1256 msc_sch_wb.atp_debug('*********Begin procedure Insert_Bucketed_Demand ********');
1257 END IF;
1258
1259 -- Initializing API return code
1260 x_return_status := FND_API.G_RET_STS_SUCCESS;
1261
1262 INSERT INTO MSC_ALLOC_DEMANDS(
1263 PLAN_ID,
1264 INVENTORY_ITEM_ID,
1265 ORIGINAL_ITEM_ID,
1266 USING_ASSEMBLY_ITEM_ID,
1267 ORGANIZATION_ID,
1268 SR_INSTANCE_ID,
1269 DEMAND_CLASS,
1270 DEMAND_DATE,
1271 ORIGINAL_DEMAND_DATE,
1272 PARENT_DEMAND_ID,
1273 ALLOCATED_QUANTITY,
1274 DEMAND_QUANTITY,
1275 ORIGINATION_TYPE,
1276 ORIGINAL_ORIGINATION_TYPE,
1277 ORDER_NUMBER,
1278 SALES_ORDER_LINE_ID,
1279 DEMAND_SOURCE_TYPE,--cmro
1280 PF_DISPLAY_FLAG,
1281 CUSTOMER_ID,
1282 SHIP_TO_SITE_ID,
1283 REFRESH_NUMBER,
1284 CREATED_BY,
1285 CREATION_DATE,
1286 LAST_UPDATED_BY,
1287 LAST_UPDATE_DATE
1288 )
1289 VALUES (
1290 p_plan_id,
1291 decode(p_level, member, p_atp_rec.request_item_id,
1292 p_atp_rec.inventory_item_id),
1293 p_atp_rec.request_item_id,
1294 p_atp_rec.request_item_id,
1295 p_atp_rec.organization_id,
1296 p_atp_rec.instance_id,
1297 nvl(p_atp_rec.demand_class, -1),
1298 --bug3697365 added timestamp also
1299 TRUNC(p_bucketed_demand_date) + MSC_ATP_PVT.G_END_OF_DAY,
1300 TRUNC(p_atp_rec.requested_ship_date) + MSC_ATP_PVT.G_END_OF_DAY,
1301 p_parent_demand_id,
1302 p_bucketed_demand_qty,
1303 p_atp_rec.quantity_ordered,
1304 51, -- ATP Bucketed Demand
1305 p_atp_rec.origination_type,
1306 decode(p_atp_rec.origination_type, 1, p_parent_demand_id,
1307 p_atp_rec.order_number),
1308 p_atp_rec.demand_source_line,
1309 p_atp_rec.demand_source_type,--cmro
1310 p_display_flag,
1311 decode(p_atp_rec.origination_type, 6, MSC_ATP_PVT.G_PARTNER_ID,
1312 30, MSC_ATP_PVT.G_PARTNER_ID,
1313 null),
1314 decode(p_atp_rec.origination_type, 6, MSC_ATP_PVT.G_PARTNER_SITE_ID,
1315 30, MSC_ATP_PVT.G_PARTNER_SITE_ID,
1316 null),
1317 p_refresh_number,
1318 G_USER_ID,
1319 l_sysdate,
1320 G_USER_ID,
1321 l_sysdate
1322 );
1323
1324 EXCEPTION
1325 WHEN OTHERS THEN
1326 IF PG_DEBUG in ('Y', 'C') THEN
1327 msc_sch_wb.atp_debug('Insert_Bucketed_Demand: ' || 'Error occurred: ' || to_char(sqlcode) || ':' || SQLERRM);
1328 END IF;
1329 x_return_status := FND_API.G_RET_STS_ERROR;
1330
1331 END Insert_Bucketed_Demand;
1332
1333 /*--Find_PF_Bucketed_Demands--------------------------------------------------
1334 | o This procedure returns information about bucketed demands for a demand.
1335 +---------------------------------------------------------------------------*/
1336 PROCEDURE Find_PF_Bucketed_Demands(
1337 p_plan_id IN NUMBER,
1338 p_parent_demand_id IN NUMBER,
1339 p_bucketed_demands_rec IN OUT NOCOPY MSC_ATP_PF.Bucketed_Demands_Rec,
1340 x_return_status OUT NOCOPY VARCHAR2
1341 ) IS
1342 -- local variables
1343
1344 BEGIN
1345 IF PG_DEBUG in ('Y', 'C') THEN
1346 msc_sch_wb.atp_debug('*********Begin procedure Find_PF_Bucketed_Demands ********');
1347 msc_sch_wb.atp_debug('Find_PF_Bucketed_Demands: ' || 'mem_item_id = ' ||to_char(p_bucketed_demands_rec.mem_item_id));
1348 msc_sch_wb.atp_debug('Find_PF_Bucketed_Demands: ' || 'p_plan_id = ' ||to_char(p_plan_id));
1349 msc_sch_wb.atp_debug('Find_PF_Bucketed_Demands: ' || 'p_parent_demand_id = ' ||to_char(p_parent_demand_id));
1350 END IF;
1351
1352 -- Initializing API return code
1353 x_return_status := FND_API.G_RET_STS_SUCCESS;
1354
1355 BEGIN
1356 SELECT allocated_quantity,
1357 demand_date
1358 INTO p_bucketed_demands_rec.mem_bd_qty,
1359 p_bucketed_demands_rec.mem_bd_date
1360 FROM msc_alloc_demands
1361 WHERE plan_id = p_plan_id
1362 AND parent_demand_id = p_parent_demand_id
1363 AND inventory_item_id = p_bucketed_demands_rec.mem_item_id
1364 ;
1365 EXCEPTION
1366 WHEN NO_DATA_FOUND THEN
1367 p_bucketed_demands_rec.mem_bd_qty := 0;
1368 p_bucketed_demands_rec.mem_bd_date := null;
1369 END;
1370 IF PG_DEBUG in ('Y', 'C') THEN
1371 msc_sch_wb.atp_debug('Find_PF_Bucketed_Demands: ' || 'pf_item_id = ' ||to_char(p_bucketed_demands_rec.pf_item_id));
1372 msc_sch_wb.atp_debug('Find_PF_Bucketed_Demands: ' || 'Member item BD Date = ' ||to_char(p_bucketed_demands_rec.mem_bd_date));
1373 msc_sch_wb.atp_debug('Find_PF_Bucketed_Demands: ' || 'Member item BD Qty = ' ||to_char(p_bucketed_demands_rec.mem_bd_qty));
1374 END IF;
1375
1376 BEGIN
1377 SELECT allocated_quantity,
1378 demand_date
1379 INTO p_bucketed_demands_rec.pf_bd_qty,
1380 p_bucketed_demands_rec.pf_bd_date
1381 FROM msc_alloc_demands
1382 WHERE plan_id = p_plan_id
1383 AND parent_demand_id = p_parent_demand_id
1384 AND inventory_item_id = p_bucketed_demands_rec.pf_item_id
1385 ;
1386 EXCEPTION
1387 WHEN NO_DATA_FOUND THEN
1388 p_bucketed_demands_rec.pf_bd_qty := 0;
1389 p_bucketed_demands_rec.pf_bd_date := null;
1390 END;
1391 IF PG_DEBUG in ('Y', 'C') THEN
1392 msc_sch_wb.atp_debug('Find_PF_Bucketed_Demands: ' || 'Family item BD Date = ' ||to_char(p_bucketed_demands_rec.pf_bd_date));
1393 msc_sch_wb.atp_debug('Find_PF_Bucketed_Demands: ' || 'Family item BD Qty = ' ||to_char(p_bucketed_demands_rec.pf_bd_qty));
1394 msc_sch_wb.atp_debug('*********End of procedure Find_PF_Bucketed_Demands ********');
1395 END IF;
1396
1397 EXCEPTION
1398 WHEN OTHERS THEN
1399 IF PG_DEBUG in ('Y', 'C') THEN
1400 msc_sch_wb.atp_debug('Find_PF_Bucketed_Demands: ' || 'Error occurred: ' || to_char(sqlcode) || ':' || SQLERRM);
1401 END IF;
1402 x_return_status := FND_API.G_RET_STS_ERROR;
1403
1404 END Find_PF_Bucketed_Demands;
1405
1406 /*--Add_PF_Rollup_Supplies--------------------------------------------------
1407 | o This procedure adds rollup supplies in msc_alloc_supplies table.
1408 | o If the supply is after ATF then it adds rollup supplies to family,
1409 | else to member item.
1410 +-------------------------------------------------------------------------*/
1411 PROCEDURE Add_PF_Rollup_Supplies(
1412 p_plan_id IN NUMBER,
1413 p_member_item_id IN NUMBER,
1414 p_family_item_id IN NUMBER,
1415 p_organization_id IN NUMBER,
1416 p_instance_id IN NUMBER,
1417 p_demand_class IN VARCHAR2,
1418 p_schedule_date IN DATE,
1419 p_orig_order_type IN NUMBER,
1420 p_order_quantity IN NUMBER,
1421 p_parent_transaction_id IN NUMBER,
1422 p_atf_date IN DATE,
1423 p_refresh_number IN NUMBER,
1424 x_return_status OUT NOCOPY VARCHAR2
1425 ) IS
1426 -- local variables
1427 l_sysdate date := sysdate;
1428
1429 BEGIN
1430 IF PG_DEBUG in ('Y', 'C') THEN
1431 msc_sch_wb.atp_debug('*********Begin procedure Add_PF_Rollup_Supplies ********');
1432 END IF;
1433
1434 -- Initializing API return code
1435 x_return_status := FND_API.G_RET_STS_SUCCESS;
1436
1437 IF p_schedule_date <= p_atf_date THEN
1438 INSERT INTO MSC_ALLOC_SUPPLIES(
1439 PLAN_ID,
1440 INVENTORY_ITEM_ID,
1441 ORGANIZATION_ID,
1442 SR_INSTANCE_ID,
1443 DEMAND_CLASS,
1444 SUPPLY_DATE,
1445 PARENT_TRANSACTION_ID,
1446 ALLOCATED_QUANTITY,
1447 SUPPLY_QUANTITY,
1448 ORDER_TYPE,
1449 ORIGINAL_ORDER_TYPE,
1450 ORIGINAL_ITEM_ID,
1451 REFRESH_NUMBER,
1452 CREATED_BY,
1453 CREATION_DATE,
1454 LAST_UPDATED_BY,
1455 LAST_UPDATE_DATE,
1456 CUSTOMER_ID, -- Bug 3558125
1457 SHIP_TO_SITE_ID -- Bug 3558125
1458 )
1459 VALUES (
1460 p_plan_id,
1461 p_member_item_id,
1462 p_organization_id,
1463 p_instance_id,
1464 nvl(p_demand_class, -1),
1465 p_schedule_date,
1466 p_parent_transaction_id,
1467 p_order_quantity,
1468 p_order_quantity,
1469 50,
1470 p_orig_order_type,
1471 p_member_item_id,
1472 p_refresh_number,
1473 G_USER_ID,
1474 l_sysdate,
1475 G_USER_ID,
1476 l_sysdate,
1477 NVL(MSC_ATP_PVT.G_PARTNER_ID,-1), -- Bug 3558125
1478 NVL(MSC_ATP_PVT.G_PARTNER_SITE_ID,-1) -- Bug 3558125
1479 );
1480 IF PG_DEBUG in ('Y', 'C') THEN
1481 msc_sch_wb.atp_debug('*********** Rollup Supply **********');
1482 msc_sch_wb.atp_debug('* Add rollup supply for member item ');
1483 msc_sch_wb.atp_debug('* Member Item Id = ' ||to_char(p_member_item_id));
1484 msc_sch_wb.atp_debug('* Qty = ' ||to_char(p_order_quantity));
1485 msc_sch_wb.atp_debug('* Date = ' ||to_char(p_schedule_date));
1486 msc_sch_wb.atp_debug('**************************************');
1487 END IF;
1488 ELSE
1489 INSERT INTO MSC_ALLOC_SUPPLIES(
1490 PLAN_ID,
1491 INVENTORY_ITEM_ID,
1492 ORGANIZATION_ID,
1493 SR_INSTANCE_ID,
1494 DEMAND_CLASS,
1495 SUPPLY_DATE,
1496 PARENT_TRANSACTION_ID,
1497 ALLOCATED_QUANTITY,
1498 SUPPLY_QUANTITY,
1499 ORDER_TYPE,
1500 ORIGINAL_ORDER_TYPE,
1501 ORIGINAL_ITEM_ID,
1502 REFRESH_NUMBER,
1503 CREATED_BY,
1504 CREATION_DATE,
1505 LAST_UPDATED_BY,
1506 LAST_UPDATE_DATE,
1507 CUSTOMER_ID, -- Bug 3558125
1508 SHIP_TO_SITE_ID -- Bug 3558125
1509 )
1510 VALUES (
1511 p_plan_id,
1512 p_family_item_id,
1513 p_organization_id,
1514 p_instance_id,
1515 nvl(p_demand_class, -1),
1516 p_schedule_date,
1517 p_parent_transaction_id,
1518 p_order_quantity,
1519 p_order_quantity,
1520 50,
1521 p_orig_order_type,
1522 p_member_item_id,
1523 p_refresh_number,
1524 G_USER_ID,
1525 l_sysdate,
1526 G_USER_ID,
1527 l_sysdate,
1528 NVL(MSC_ATP_PVT.G_PARTNER_ID,-1), -- Bug 3558125
1529 NVL(MSC_ATP_PVT.G_PARTNER_SITE_ID,-1) -- Bug 3558125
1530 );
1531 IF PG_DEBUG in ('Y', 'C') THEN
1532 msc_sch_wb.atp_debug('*********** Rollup Supply **********');
1533 msc_sch_wb.atp_debug('* Add rollup supply for family item ');
1534 msc_sch_wb.atp_debug('* Family Item Id = ' ||to_char(p_family_item_id));
1535 msc_sch_wb.atp_debug('* Qty = ' ||to_char(p_order_quantity));
1536 msc_sch_wb.atp_debug('* Date = ' ||to_char(p_schedule_date));
1537 msc_sch_wb.atp_debug('**************************************');
1538 END IF;
1539 END IF;
1540
1541 IF PG_DEBUG in ('Y', 'C') THEN
1542 msc_sch_wb.atp_debug('*********End of procedure Add_PF_Rollup_Supplies ********');
1543 END IF;
1544
1545 EXCEPTION
1546 WHEN OTHERS THEN
1547 IF PG_DEBUG in ('Y', 'C') THEN
1548 msc_sch_wb.atp_debug('Add_PF_Rollup_Supplies: ' || 'Error occurred: ' || to_char(sqlcode) || ':' || SQLERRM);
1549 END IF;
1550 x_return_status := FND_API.G_RET_STS_ERROR;
1551
1552 END Add_PF_Rollup_Supplies;
1553
1554 /*--Update_PF_Rollup_Supplies----------------------------------------------
1555 | o This procedure is called from update_planned_order procedure to
1556 | update PF rollup supplies.
1557 | o Updates rollup supplies to passed date and quantity values.
1558 +-------------------------------------------------------------------------*/
1559 PROCEDURE Update_PF_Rollup_Supplies(
1560 p_plan_id IN NUMBER,
1561 p_parent_transaction_id IN NUMBER,
1562 p_mem_item_id IN NUMBER,
1563 p_pf_item_id IN NUMBER,
1564 p_date IN DATE,
1565 p_quantity IN NUMBER,
1566 p_atf_date IN DATE,
1567 x_return_status OUT NOCOPY VARCHAR2
1568 ) IS
1569 -- local variables
1570 l_sysdate date := sysdate;
1571
1572 BEGIN
1573 IF PG_DEBUG in ('Y', 'C') THEN
1574 msc_sch_wb.atp_debug('*********Begin procedure Update_PF_Rollup_Supplies ********');
1575 msc_sch_wb.atp_debug('Update_PF_Rollup_Supplies: ' || 'p_plan_id ='||to_char(p_plan_id));
1576 msc_sch_wb.atp_debug('Update_PF_Rollup_Supplies: ' || 'p_parent_transaction_id ='||to_char(p_parent_transaction_id));
1577 msc_sch_wb.atp_debug('Update_PF_Rollup_Supplies: ' || 'p_mem_item_id ='||to_char(p_mem_item_id));
1578 msc_sch_wb.atp_debug('Update_PF_Rollup_Supplies: ' || 'p_pf_item_id ='||to_char(p_pf_item_id));
1579 msc_sch_wb.atp_debug('Update_PF_Rollup_Supplies: ' || 'p_date ='||to_char(p_date));
1580 msc_sch_wb.atp_debug('Update_PF_Rollup_Supplies: ' || 'p_quantity ='||to_char(p_quantity));
1581 msc_sch_wb.atp_debug('Update_PF_Rollup_Supplies: ' || 'p_atf_date ='||to_char(p_atf_date));
1582 END IF;
1583
1584 -- Initializing API return code
1585 x_return_status := FND_API.G_RET_STS_SUCCESS;
1586
1587 IF p_date is NULL THEN
1588 UPDATE msc_alloc_supplies
1589 SET old_supply_date = supply_date, -- why do we populate old_supply_date and qty??
1590 old_allocated_quantity = allocated_quantity, --??
1591 allocated_quantity = NVL(p_quantity, allocated_quantity),
1592 supply_quantity = NVL(p_quantity, supply_quantity), -- Bug 3779200
1593 LAST_UPDATED_BY = G_USER_ID,
1594 LAST_UPDATE_DATE = l_sysdate
1595 WHERE plan_id = p_plan_id
1596 AND parent_transaction_id = p_parent_transaction_id;
1597 ELSIF p_date <= p_atf_date THEN
1598 UPDATE msc_alloc_supplies
1599 SET old_supply_date = supply_date, -- why do we populate old_supply_date and qty??
1600 old_allocated_quantity = allocated_quantity, --??
1601 supply_date = NVL(p_date, supply_date),
1602 allocated_quantity = NVL(p_quantity, allocated_quantity),
1603 supply_quantity = NVL(p_quantity, supply_quantity), -- Bug 3779200
1604 inventory_item_id = p_mem_item_id,
1605 LAST_UPDATED_BY = G_USER_ID,
1606 LAST_UPDATE_DATE = l_sysdate
1607 WHERE plan_id = p_plan_id
1608 AND parent_transaction_id = p_parent_transaction_id;
1609 ELSE
1610 UPDATE msc_alloc_supplies
1611 SET old_supply_date = supply_date, -- why do we populate old_supply_date and qty??
1612 old_allocated_quantity = allocated_quantity, --??
1613 supply_date = NVL(p_date, supply_date),
1614 allocated_quantity = NVL(p_quantity, allocated_quantity),
1615 supply_quantity = NVL(p_quantity, supply_quantity), -- Bug 3779200
1616 inventory_item_id = p_pf_item_id,
1617 LAST_UPDATED_BY = G_USER_ID,
1618 LAST_UPDATE_DATE = l_sysdate
1619 WHERE plan_id = p_plan_id
1620 AND parent_transaction_id = p_parent_transaction_id;
1621 END IF;
1622
1623 IF PG_DEBUG in ('Y', 'C') THEN
1624 msc_sch_wb.atp_debug('*********End of procedure Update_PF_Rollup_Supplies ********');
1625 END IF;
1626
1627 EXCEPTION
1628 WHEN OTHERS THEN
1629 IF PG_DEBUG in ('Y', 'C') THEN
1630 msc_sch_wb.atp_debug('Update_PF_Rollup_Supplies: ' || 'Error occurred: ' || to_char(sqlcode) || ':' || SQLERRM);
1631 END IF;
1632 x_return_status := FND_API.G_RET_STS_ERROR;
1633
1634 END Update_PF_Rollup_Supplies;
1635
1636 /*--Add_PF_Stealing_Supply_Details------------------------------------------
1637 | o This procedure is called from stealing procedure to add stealing
1638 | supplies records for member item and family.
1639 +-------------------------------------------------------------------------*/
1640 PROCEDURE Add_PF_Stealing_Supply_Details (
1641 p_plan_id IN NUMBER,
1642 p_identifier IN NUMBER,
1643 p_mem_item_id IN NUMBER,
1644 p_pf_item_id IN NUMBER,
1645 p_organization_id IN NUMBER,
1646 p_sr_instance_id IN NUMBER,
1647 p_mem_stealing_quantity IN NUMBER,
1648 p_pf_stealing_quantity IN NUMBER,
1649 p_stealing_demand_class IN VARCHAR2,
1650 p_stolen_demand_class IN VARCHAR2,
1651 p_ship_date IN DATE,
1652 p_atf_date IN DATE,
1653 p_refresh_number IN NUMBER, -- for summary enhancement
1654 p_transaction_id OUT NOCOPY NUMBER,
1655 p_ato_model_line_id IN NUMBER,
1656 p_demand_source_type IN NUMBER,--cmro
1657 --bug3684383
1658 p_order_number IN NUMBER,
1659 x_return_status OUT NOCOPY VARCHAR2
1660 ) IS
1661 l_sysdate DATE := sysdate;
1662 l_mem_stealing_rec_date DATE;
1663 l_pf_stealing_rec_date DATE;
1664 l_rows_proc NUMBER := 0;
1665
1666 BEGIN
1667 IF PG_DEBUG in ('Y', 'C') THEN
1668 msc_sch_wb.atp_debug('*** Begin Add_PF_Stealing_Supply_Details Procedure ***');
1669 msc_sch_wb.atp_debug('Add_PF_Stealing_Supply_Details: ' || 'p_plan_id ='||to_char(p_plan_id));
1670 msc_sch_wb.atp_debug('Add_PF_Stealing_Supply_Details: ' || 'p_identifier ='||to_char(p_identifier));
1671 msc_sch_wb.atp_debug('Add_PF_Stealing_Supply_Details: ' || 'p_demand_source_type ='||to_char(p_demand_source_type));--cmro
1672 msc_sch_wb.atp_debug('Add_PF_Stealing_Supply_Details: ' || 'p_mem_item_id ='||to_char(p_mem_item_id));
1673 msc_sch_wb.atp_debug('Add_PF_Stealing_Supply_Details: ' || 'p_pf_item_id ='||to_char(p_pf_item_id));
1674 msc_sch_wb.atp_debug('Add_PF_Stealing_Supply_Details: ' || 'p_organization_id = ' ||to_char(p_organization_id));
1675 msc_sch_wb.atp_debug('Add_PF_Stealing_Supply_Details: ' || 'p_instance_id = ' ||to_char(p_sr_instance_id));
1676 msc_sch_wb.atp_debug('Add_PF_Stealing_Supply_Details: ' || 'p_mem_stealing_quantity ='||to_char(p_mem_stealing_quantity));
1677 msc_sch_wb.atp_debug('Add_PF_Stealing_Supply_Details: ' || 'p_pf_stealing_quantity ='||to_char(p_pf_stealing_quantity));
1678 msc_sch_wb.atp_debug('Add_PF_Stealing_Supply_Details: ' || 'p_stealing_demand_class = '||p_stealing_demand_class);
1679 msc_sch_wb.atp_debug('Add_PF_Stealing_Supply_Details: ' || 'p_stolen_demand_class = ' ||p_stolen_demand_class);
1680 msc_sch_wb.atp_debug('Add_PF_Stealing_Supply_Details: ' || 'p_ship_date = ' ||to_char(p_ship_date));
1681 msc_sch_wb.atp_debug('Add_PF_Stealing_Supply_Details: ' || 'p_atf_date = ' ||to_char(p_atf_date));
1682 END IF;
1683
1684 -- Initializing API return code
1685 x_return_status := FND_API.G_RET_STS_SUCCESS;
1686
1687 IF (p_ship_date > p_atf_date) THEN
1688 l_mem_stealing_rec_date := p_atf_date;
1689 l_pf_stealing_rec_date := p_ship_date;
1690 ELSE
1691 l_mem_stealing_rec_date := p_ship_date;
1692 END IF;
1693
1694 --bug3555084 using returning clause in place of select
1695 --SELECT msc_supplies_s.nextval into p_transaction_id from dual;
1696
1697 IF p_mem_stealing_quantity > 0 THEN
1698 IF PG_DEBUG in ('Y', 'C') THEN
1699 msc_sch_wb.atp_debug('Add_PF_Stealing_Supply_Details: ' || 'before insert into msc_alloc_supplies-Stealing Info');
1700 END IF;
1701
1702 -- Add Member item
1703 INSERT INTO MSC_ALLOC_SUPPLIES
1704 (plan_id, inventory_item_id, organization_id, sr_instance_id,
1705 demand_class, supply_date, parent_transaction_id,
1706 allocated_quantity, order_type, sales_order_line_id,demand_source_type,stealing_flag,--cmro
1707 supply_quantity, original_item_id, original_order_type,
1708 created_by, creation_date, last_updated_by, last_update_date, from_demand_class, ato_model_line_id, refresh_number, -- For summary enhancement
1709 --bug3684383
1710 order_number,customer_id,ship_to_site_id
1711 )
1712 VALUES
1713 (p_plan_id, p_mem_item_id, p_organization_id,
1714 p_sr_instance_id, p_stealing_demand_class, l_mem_stealing_rec_date,
1715 --bug3555084 using msc_supplies_s.nextval in place of p_transaction_id
1716 msc_supplies_s.nextval, p_mem_stealing_quantity, 50, p_identifier,p_demand_source_type, 1,--cmro
1717 p_mem_stealing_quantity, p_mem_item_id, 46,
1718 G_USER_ID, l_sysdate, G_USER_ID, l_sysdate, p_stolen_demand_class, p_ato_model_line_id, p_refresh_number,
1719 --bug3684383
1720 p_order_number,MSC_ATP_PVT.G_PARTNER_ID,MSC_ATP_PVT.G_PARTNER_SITE_ID) -- For summary enhancement
1721 RETURNING parent_transaction_id INTO p_transaction_id; --bug3555084
1722
1723 l_rows_proc := SQL%ROWCOUNT;
1724
1725 -- Next add the Stolen Data.
1726 IF PG_DEBUG in ('Y', 'C') THEN
1727 msc_sch_wb.atp_debug('Add_PF_Stealing_Supply_Details: ' || 'before insert into msc_alloc_supplies-Stolen Info');
1728 END IF;
1729
1730 INSERT INTO MSC_ALLOC_SUPPLIES
1731 (plan_id, inventory_item_id, organization_id, sr_instance_id,
1732 demand_class, supply_date, parent_transaction_id,
1733 allocated_quantity, order_type, sales_order_line_id,demand_source_type, stealing_flag,--cmro
1734 supply_quantity, original_item_id, original_order_type,
1735 created_by, creation_date, last_updated_by, last_update_date, from_demand_class, ato_model_line_id, refresh_number, -- For summary enhancement
1736 --bug3684383
1737 order_number,customer_id,ship_to_site_id)
1738 VALUES
1739 (p_plan_id, p_mem_item_id, p_organization_id,
1740 p_sr_instance_id, p_stolen_demand_class, l_mem_stealing_rec_date,
1741 p_transaction_id, -1 * p_mem_stealing_quantity, 50, p_identifier,p_demand_source_type, 1,---cmro
1742 -1 * p_mem_stealing_quantity, p_mem_item_id, 47,
1743 G_USER_ID, l_sysdate, G_USER_ID, l_sysdate, p_stealing_demand_class, p_ato_model_line_id, p_refresh_number,
1744 --bug3684383
1745 p_order_number,MSC_ATP_PVT.G_PARTNER_ID,MSC_ATP_PVT.G_PARTNER_SITE_ID); -- For summary enhancement
1746
1747 l_rows_proc := l_rows_proc + SQL%ROWCOUNT;
1748 END IF;
1749
1750 IF (l_pf_stealing_rec_date is not null) and (p_pf_stealing_quantity > 0) THEN
1751 IF PG_DEBUG in ('Y', 'C') THEN
1752 msc_sch_wb.atp_debug('Add_PF_Stealing_Supply_Details: ' || 'before insert into msc_alloc_supplies-Stealing Info');
1753 END IF;
1754
1755 IF p_transaction_id is not null THEN --bug3555084
1756
1757 INSERT INTO MSC_ALLOC_SUPPLIES
1758 (plan_id, inventory_item_id, organization_id, sr_instance_id,
1759 demand_class, supply_date, parent_transaction_id,
1760 allocated_quantity, order_type, sales_order_line_id,demand_source_type, stealing_flag,--cmro
1761 supply_quantity, original_item_id, original_order_type,
1762 created_by, creation_date, last_updated_by, last_update_date, from_demand_class, refresh_number, -- For summary enhancement
1763 --bug3684383
1764 order_number,customer_id,ship_to_site_id)
1765 VALUES
1766 (p_plan_id, p_pf_item_id, p_organization_id,
1767 p_sr_instance_id, p_stealing_demand_class, l_pf_stealing_rec_date,
1768 p_transaction_id, p_pf_stealing_quantity, 50, p_identifier,p_demand_source_type, 1,--cmro
1769 p_pf_stealing_quantity, p_mem_item_id, 46,
1770 G_USER_ID, l_sysdate, G_USER_ID, l_sysdate, p_stolen_demand_class, p_refresh_number, -- For summary enhancement
1771 --bug3684383
1772 p_order_number,MSC_ATP_PVT.G_PARTNER_ID,MSC_ATP_PVT.G_PARTNER_SITE_ID);
1773
1774 l_rows_proc := l_rows_proc + SQL%ROWCOUNT;
1775
1776 ELSE --bug3555084 start
1777 INSERT INTO MSC_ALLOC_SUPPLIES
1778 (plan_id, inventory_item_id, organization_id, sr_instance_id,
1779 demand_class, supply_date, parent_transaction_id,
1780 allocated_quantity, order_type, sales_order_line_id,demand_source_type, stealing_flag,--cmro
1781 supply_quantity, original_item_id, original_order_type,
1782 created_by, creation_date, last_updated_by, last_update_date, from_demand_class, refresh_number, -- For summary enhancement
1783 --bug3684383
1784 order_number,customer_id,ship_to_site_id)
1785 VALUES
1786 (p_plan_id, p_pf_item_id, p_organization_id,
1787 p_sr_instance_id, p_stealing_demand_class, l_pf_stealing_rec_date,
1788 msc_supplies_s.nextval, p_pf_stealing_quantity, 50, p_identifier,p_demand_source_type, 1,--cmro
1789 p_pf_stealing_quantity, p_mem_item_id, 46,
1790 G_USER_ID, l_sysdate, G_USER_ID, l_sysdate, p_stolen_demand_class, p_refresh_number, -- For summary enhancement
1791 --bug3684383
1792 p_order_number,MSC_ATP_PVT.G_PARTNER_ID,MSC_ATP_PVT.G_PARTNER_SITE_ID)
1793
1794 RETURNING parent_transaction_id INTO p_transaction_id;
1795
1796 l_rows_proc := l_rows_proc + SQL%ROWCOUNT;
1797 END IF;
1798 --bug3555084 end
1799 -- Next add the Stolen Data.
1800 IF PG_DEBUG in ('Y', 'C') THEN
1801 msc_sch_wb.atp_debug('Add_PF_Stealing_Supply_Details: ' || 'before insert into msc_alloc_supplies-Stolen Info');
1802 END IF;
1803
1804 INSERT INTO MSC_ALLOC_SUPPLIES
1805 (plan_id, inventory_item_id, organization_id, sr_instance_id,
1806 demand_class, supply_date, parent_transaction_id,
1807 allocated_quantity, order_type, sales_order_line_id,demand_source_type, stealing_flag,--cmro
1808 supply_quantity, original_item_id, original_order_type,
1809 created_by, creation_date, last_updated_by, last_update_date, from_demand_class, refresh_number, -- For summary enhancement
1810 --bug3684383
1811 order_number,customer_id,ship_to_site_id)
1812 VALUES
1813 (p_plan_id, p_pf_item_id, p_organization_id,
1814 p_sr_instance_id, p_stolen_demand_class, l_pf_stealing_rec_date,
1815 p_transaction_id, -1 * p_pf_stealing_quantity, 50, p_identifier,p_demand_source_type, 1,--cmro
1816 -1 * p_pf_stealing_quantity, p_mem_item_id, 47,
1817 G_USER_ID, l_sysdate, G_USER_ID, l_sysdate, p_stealing_demand_class, p_refresh_number, -- For summary enhancement
1818 --bug3684383
1819 p_order_number,MSC_ATP_PVT.G_PARTNER_ID,MSC_ATP_PVT.G_PARTNER_SITE_ID);
1820
1821 l_rows_proc := l_rows_proc + SQL%ROWCOUNT;
1822 END IF;
1823
1824 IF PG_DEBUG in ('Y', 'C') THEN
1825 msc_sch_wb.atp_debug('Add_PF_Stealing_Supply_Details: ' || 'Total Rows inserted ' || l_rows_proc);
1826 END IF;
1827
1828 EXCEPTION
1829 WHEN OTHERS THEN
1830 IF PG_DEBUG in ('Y', 'C') THEN
1831 msc_sch_wb.atp_debug('Add_PF_Stealing_Supply_Details: ' || 'Error occurred: ' || to_char(sqlcode) || ':' || SQLERRM);
1832 END IF;
1833 x_return_status := FND_API.G_RET_STS_ERROR;
1834
1835 END Add_PF_Stealing_Supply_Details;
1836
1837 /*--Get_Mat_Avail_Pf--------------------------------------------------------
1838 | o Called from Get_Material_Atp_Info procedure.
1839 | o Calls these private procedures:
1840 | - Get_Mat_Avail_Pf_Ods - For PF ODS ATP
1841 | - Get_Mat_Avail_Pf_Ods_Summ - For PF ATP for ODS summary
1842 | - Get_Mat_Avail_Pf_Pds - For Unallocated Time Phased PF ATP
1843 | - Get_Mat_Avail_Pf_Pds_Summ - For Unallocated Time Phased PF ATP
1844 | for PDS summary
1845 +-------------------------------------------------------------------------*/
1846 PROCEDURE Get_Mat_Avail_Pf(
1847 p_summary_flag IN VARCHAR2,
1848 p_item_id IN NUMBER,
1849 p_request_item_id IN NUMBER,
1850 p_org_id IN NUMBER,
1851 p_instance_id IN NUMBER,
1852 p_plan_id IN NUMBER,
1853 p_cal_code IN VARCHAR2,
1854 p_sysdate_seq_num IN NUMBER,
1855 p_sys_next_date IN DATE,
1856 p_demand_class IN VARCHAR2,
1857 p_default_atp_rule_id IN NUMBER,
1858 p_default_dmd_class IN VARCHAR2,
1859 p_itf IN DATE,
1860 p_refresh_number IN NUMBER,
1861 x_atp_dates OUT NOCOPY MRP_ATP_PUB.date_arr,
1862 x_atp_qtys OUT NOCOPY MRP_ATP_PUB.number_arr,
1863 x_return_status OUT NOCOPY VARCHAR2
1864 ) IS
1865 l_return_status VARCHAR2(1);
1866
1867 BEGIN
1868 IF PG_DEBUG in ('Y', 'C') THEN
1869 msc_sch_wb.atp_debug('Begin Get_Mat_Avail_Pf');
1870 END IF;
1871
1872 -- Initializing API return code
1873 x_return_status := FND_API.G_RET_STS_SUCCESS;
1874
1875 IF MSC_ATP_PVT.G_INV_CTP = 5 THEN
1876 -- ODS atp
1877 IF p_summary_flag = 'Y' THEN
1878 -- summary ODS atp
1879 Get_Mat_Avail_Pf_Ods_Summ(
1880 p_item_id,
1881 p_org_id,
1882 p_instance_id,
1883 p_plan_id,
1884 p_demand_class,
1885 p_default_atp_rule_id,
1886 p_default_dmd_class,
1887 p_itf,
1888 x_atp_dates,
1889 x_atp_qtys,
1890 l_return_status
1891 );
1892 IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
1893 IF PG_DEBUG in ('Y', 'C') THEN
1894 msc_sch_wb.atp_debug('Get_Mat_Avail_Pf: ' || 'Error occured in procedure Get_Mat_Avail_Pf_Ods_Summ');
1895 END IF;
1896 x_return_status := FND_API.G_RET_STS_ERROR;
1897 return;
1898 END IF;
1899 ELSE
1900 -- ODS atp
1901 Get_Mat_Avail_Pf_Ods(
1902 p_item_id,
1903 p_org_id,
1904 p_instance_id,
1905 p_plan_id,
1906 p_cal_code,
1907 p_sysdate_seq_num,
1908 p_sys_next_date,
1909 p_demand_class,
1910 p_default_atp_rule_id,
1911 p_default_dmd_class,
1912 p_itf,
1913 x_atp_dates,
1914 x_atp_qtys,
1915 l_return_status
1916 );
1917 IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
1918 IF PG_DEBUG in ('Y', 'C') THEN
1919 msc_sch_wb.atp_debug('Get_Mat_Avail_Pf: ' || 'Error occured in procedure Get_Mat_Avail_Pf_Ods');
1920 END IF;
1921 x_return_status := FND_API.G_RET_STS_ERROR;
1922 return;
1923 END IF;
1924 END IF;
1925 ELSE
1926 -- PDS atp
1927 IF p_summary_flag = 'Y' THEN
1928 Get_Mat_Avail_Pf_Pds_Summ(
1929 p_request_item_id,
1930 p_item_id,
1931 p_org_id,
1932 p_instance_id,
1933 p_plan_id,
1934 p_itf,
1935 p_refresh_number, -- For summary enhancement
1936 x_atp_dates,
1937 x_atp_qtys,
1938 l_return_status
1939 );
1940 IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
1941 IF PG_DEBUG in ('Y', 'C') THEN
1942 msc_sch_wb.atp_debug('Get_Mat_Avail_Pf: ' || 'Error occured in procedure Get_Mat_Avail_Pf_Pds_Summ');
1943 END IF;
1944 x_return_status := FND_API.G_RET_STS_ERROR;
1945 return;
1946 END IF;
1947 ELSE
1948 Get_Mat_Avail_Pf_Pds(
1949 p_request_item_id,
1950 p_item_id,
1951 p_org_id,
1952 p_instance_id,
1953 p_plan_id,
1954 p_itf,
1955 x_atp_dates,
1956 x_atp_qtys,
1957 l_return_status
1958 );
1959 IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
1960 IF PG_DEBUG in ('Y', 'C') THEN
1961 msc_sch_wb.atp_debug('Get_Mat_Avail_Pf: ' || 'Error occured in procedure Get_Mat_Avail_Pf_Pds');
1962 END IF;
1963 x_return_status := FND_API.G_RET_STS_ERROR;
1964 return;
1965 END IF;
1966 END IF; -- summary atp
1967 END IF; -- ODS/PDS
1968 EXCEPTION
1969 WHEN OTHERS THEN
1970 IF PG_DEBUG in ('Y', 'C') THEN
1971 msc_sch_wb.atp_debug('Get_Mat_Avail_Pf: ' || 'Error occurred: ' || to_char(sqlcode) || ':' || SQLERRM);
1972 END IF;
1973 x_return_status := FND_API.G_RET_STS_ERROR;
1974
1975 END Get_Mat_Avail_Pf;
1976
1977 /*--Get_Mat_Avail_Pf_Dtls---------------------------------------------------
1978 | o Called from Insert_Details procedure.
1979 | o Calls these private procedures:
1980 | - Get_Mat_Avail_Pf_Ods_Dtls - For PF ODS ATP
1981 | - Get_Mat_Avail_Pf_Pds_Dtls - For Unallocated Time Phased PF ATP
1982 +-------------------------------------------------------------------------*/
1983 PROCEDURE Get_Mat_Avail_Pf_Dtls (
1984 p_item_id IN NUMBER,
1985 p_request_item_id IN NUMBER,
1986 p_org_id IN NUMBER,
1987 p_instance_id IN NUMBER,
1988 p_plan_id IN NUMBER,
1989 p_cal_code IN VARCHAR2,
1990 p_sysdate_seq_num IN NUMBER,
1991 p_sys_next_date IN DATE,
1992 p_demand_class IN VARCHAR2,
1993 p_default_atp_rule_id IN NUMBER,
1994 p_default_dmd_class IN VARCHAR2,
1995 p_itf IN DATE,
1996 p_level IN NUMBER,
1997 p_scenario_id IN NUMBER,
1998 p_identifier IN NUMBER,
1999 x_return_status OUT NOCOPY VARCHAR2
2000 ) IS
2001 l_return_status VARCHAR2(1);
2002 BEGIN
2003 IF PG_DEBUG in ('Y', 'C') THEN
2004 msc_sch_wb.atp_debug('Begin Get_Mat_Avail_Pf_Dtls');
2005 END IF;
2006
2007 -- Initializing API return code
2008 x_return_status := FND_API.G_RET_STS_SUCCESS;
2009
2010 IF MSC_ATP_PVT.G_INV_CTP = 5 THEN
2011 -- ODS atp
2012 Get_Mat_Avail_Pf_Ods_Dtls(
2013 p_item_id,
2014 p_request_item_id,
2015 p_org_id,
2016 p_instance_id,
2017 p_plan_id,
2018 p_cal_code,
2019 p_sysdate_seq_num,
2020 p_sys_next_date,
2021 p_demand_class,
2022 p_default_atp_rule_id,
2023 p_default_dmd_class,
2024 p_itf,
2025 p_level,
2026 p_scenario_id,
2027 p_identifier,
2028 l_return_status
2029 );
2030 IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
2031 IF PG_DEBUG in ('Y', 'C') THEN
2032 msc_sch_wb.atp_debug('Get_Mat_Avail_Pf_Dtls: ' || 'Error occured in procedure Get_Mat_Avail_Pf_Ods_Dtls');
2033 END IF;
2034 x_return_status := FND_API.G_RET_STS_ERROR;
2035 return;
2036 END IF;
2037 ELSE
2038 Get_Mat_Avail_Pf_Pds_Dtls(
2039 p_item_id,
2040 p_request_item_id,
2041 p_org_id,
2042 p_instance_id,
2043 p_plan_id,
2044 p_itf,
2045 p_level,
2046 p_scenario_id,
2047 p_identifier,
2048 l_return_status
2049 );
2050 IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
2051 IF PG_DEBUG in ('Y', 'C') THEN
2052 msc_sch_wb.atp_debug('Get_Mat_Avail_Pf_Dtls: ' || 'Error occured in procedure Get_Mat_Avail_Pf_Pds_Dtls');
2053 END IF;
2054 x_return_status := FND_API.G_RET_STS_ERROR;
2055 return;
2056 END IF;
2057 END IF; -- ODS/PDS
2058 EXCEPTION
2059 WHEN OTHERS THEN
2060 IF PG_DEBUG in ('Y', 'C') THEN
2061 msc_sch_wb.atp_debug('Get_Mat_Avail_Pf_Dtls: ' || 'Error occurred: ' || to_char(sqlcode) || ':' || SQLERRM);
2062 END IF;
2063 x_return_status := FND_API.G_RET_STS_ERROR;
2064
2065 END Get_Mat_Avail_Pf_Dtls;
2066
2067 /*--Get_Mat_Avail_Pf_Ods_Summ-----------------------------------------------
2068 | o Existing code for PF ODS summary moved to this procedure.
2069 +-------------------------------------------------------------------------*/
2070 PROCEDURE Get_Mat_Avail_Pf_Ods_Summ(
2071 p_item_id IN NUMBER,
2072 p_org_id IN NUMBER,
2073 p_instance_id IN NUMBER,
2074 p_plan_id IN NUMBER,
2075 p_demand_class IN VARCHAR2,
2076 p_default_atp_rule_id IN NUMBER,
2077 p_default_dmd_class IN VARCHAR2,
2078 p_itf IN DATE,
2079 x_atp_dates OUT NOCOPY MRP_ATP_PUB.date_arr,
2080 x_atp_qtys OUT NOCOPY MRP_ATP_PUB.number_arr,
2081 x_return_status OUT NOCOPY VARCHAR2
2082 ) IS
2083
2084 BEGIN
2085 IF PG_DEBUG in ('Y', 'C') THEN
2086 msc_sch_wb.atp_debug('Begin Get_Mat_Avail_Pf_Ods_Summ');
2087 END IF;
2088
2089 -- Initializing API return code
2090 x_return_status := FND_API.G_RET_STS_SUCCESS;
2091
2092 -- in summary approach we store sales ordrers for requested item while
2093 -- demands and supplies are stored on PF level
2094 SELECT SD_DATE, sum(SD_QTY)
2095 BULK COLLECT INTO x_atp_dates, x_atp_qtys
2096 FROM
2097 (SELECT /*+ INDEX(D MSC_ATP_SUMMARY_SO_U1) */
2098 D.SD_DATE SD_DATE,
2099 -1* D.SD_QTY SD_QTY
2100 FROM MSC_ATP_SUMMARY_SO D,
2101 MSC_ATP_RULES R,
2102 MSC_SYSTEM_ITEMS I,
2103 MSC_SYSTEM_ITEMS I0
2104 WHERE I0.SR_INVENTORY_ITEM_ID = p_item_id
2105 AND I0.ORGANIZATION_ID = p_org_id
2106 AND I0.SR_INSTANCE_ID = p_instance_id
2107 AND I0.PLAN_ID = p_plan_id
2108 AND I.PRODUCT_FAMILY_ID = I0.INVENTORY_ITEM_ID
2109 AND I.ORGANIZATION_ID = I0.ORGANIZATION_ID
2110 AND I.SR_INSTANCE_ID = I0.SR_INSTANCE_ID
2111 AND I.PLAN_ID = I0.PLAN_ID
2112 AND R.RULE_ID (+) = NVL(I.ATP_RULE_ID, p_default_atp_rule_id)
2113 AND R.SR_INSTANCE_ID (+)= I.SR_INSTANCE_ID
2114 AND D.PLAN_ID = I.PLAN_ID
2115 AND D.SR_INSTANCE_ID = I.SR_INSTANCE_ID
2116 AND D.INVENTORY_ITEM_ID = I.INVENTORY_ITEM_ID
2117 AND D.ORGANIZATION_ID = I.ORGANIZATION_ID
2118 AND D.SD_DATE < NVL(p_itf,
2119 D.SD_DATE + 1)
2120 AND NVL(D.DEMAND_CLASS, NVL(p_default_dmd_class,'@@@')) =
2121 DECODE(R.DEMAND_CLASS_ATP_FLAG,
2122 1, NVL(P_DEMAND_CLASS, NVL(p_default_dmd_class,'@@@')),
2123 NVL(D.DEMAND_CLASS, NVL(p_default_dmd_class,'@@@')))
2124 AND D.sd_qty <> 0
2125 UNION ALL
2126
2127 SELECT /*+ INDEX(S MSC_ATP_SUMMARY_SD_U1) */
2128 S.SD_DATE SD_DATE,
2129 S.SD_QTY SD_QTY
2130 FROM MSC_ATP_SUMMARY_SD S,
2131 MSC_ATP_RULES R,
2132 MSC_SYSTEM_ITEMS I
2133 WHERE I.SR_INVENTORY_ITEM_ID = p_item_id
2134 AND I.ORGANIZATION_ID = p_org_id
2135 AND I.SR_INSTANCE_ID = p_instance_id
2136 AND I.PLAN_ID = p_plan_id
2137 AND R.RULE_ID (+) = NVL(I.ATP_RULE_ID, p_default_atp_rule_id)
2138 AND R.SR_INSTANCE_ID (+)= I.SR_INSTANCE_ID
2139 AND S.PLAN_ID = I.PLAN_ID
2140 AND S.SR_INSTANCE_ID = I.SR_INSTANCE_ID
2141 AND S.INVENTORY_ITEM_ID = I.INVENTORY_ITEM_ID
2142 AND S.ORGANIZATION_ID = I.ORGANIZATION_ID
2143 AND S.SD_DATE < NVL(p_itf, S.SD_DATE + 1)
2144 AND NVL(S.DEMAND_CLASS, NVL(p_default_dmd_class,'@@@')) =
2145 DECODE(R.DEMAND_CLASS_ATP_FLAG,
2146 1, NVL(P_DEMAND_CLASS, NVL(p_default_dmd_class,'@@@')),
2147 NVL(S.DEMAND_CLASS, NVL(p_default_dmd_class,'@@@')))
2148 AND S.SD_QTY <> 0
2149 )
2150 group by SD_DATE
2151 order by SD_DATE; --4698199
2152 EXCEPTION
2153 WHEN OTHERS THEN
2154 IF PG_DEBUG in ('Y', 'C') THEN
2155 msc_sch_wb.atp_debug('Get_Mat_Avail_Pf_Ods_Summ: ' || 'Error occurred: ' || to_char(sqlcode) || ':' || SQLERRM);
2156 END IF;
2157 x_return_status := FND_API.G_RET_STS_ERROR;
2158
2159 END Get_Mat_Avail_Pf_Ods_Summ;
2160
2161 /*--Get_Mat_Avail_Pf_Ods----------------------------------------------------
2162 | o Existing code for PF ODS ATP moved to this procedure.
2163 +-------------------------------------------------------------------------*/
2164 PROCEDURE Get_Mat_Avail_Pf_Ods(
2165 p_item_id IN NUMBER,
2166 p_org_id IN NUMBER,
2167 p_instance_id IN NUMBER,
2168 p_plan_id IN NUMBER,
2169 p_cal_code IN VARCHAR2,
2170 p_sysdate_seq_num IN NUMBER,
2171 p_sys_next_date IN DATE,
2172 p_demand_class IN VARCHAR2,
2173 p_default_atp_rule_id IN NUMBER,
2174 p_default_dmd_class IN VARCHAR2,
2175 p_itf IN DATE,
2176 x_atp_dates OUT NOCOPY MRP_ATP_PUB.date_arr,
2177 x_atp_qtys OUT NOCOPY MRP_ATP_PUB.number_arr,
2178 x_return_status OUT NOCOPY VARCHAR2
2179 ) IS
2180 -- local variables
2181 l_sysdate date := sysdate;
2182
2183 BEGIN
2184 IF PG_DEBUG in ('Y', 'C') THEN
2185 msc_sch_wb.atp_debug('Begin Get_Mat_Avail_Pf_Ods');
2186 END IF;
2187
2188 -- Initializing API return code
2189 x_return_status := FND_API.G_RET_STS_SUCCESS;
2190
2191 -- SQL Query changes Begin 2640489
2192 SELECT SD_DATE, SUM(SD_QTY)
2193 BULK COLLECT INTO x_atp_dates, x_atp_qtys
2194 FROM (
2195 SELECT C.PRIOR_DATE SD_DATE,
2196 -1* D.USING_REQUIREMENT_QUANTITY SD_QTY
2197 FROM MSC_CALENDAR_DATES C,
2198 MSC_DEMANDS D,
2199 MSC_ATP_RULES R,
2200 MSC_SYSTEM_ITEMS I,
2201 MSC_SYSTEM_ITEMS I0
2202 WHERE I0.SR_INVENTORY_ITEM_ID = p_item_id
2203 AND I0.ORGANIZATION_ID = p_org_id
2204 AND I0.SR_INSTANCE_ID = p_instance_id
2205 AND I0.PLAN_ID = p_plan_id
2206 AND I.PRODUCT_FAMILY_ID = I0.INVENTORY_ITEM_ID
2207 AND I.ORGANIZATION_ID = I0.ORGANIZATION_ID
2208 AND I.SR_INSTANCE_ID = I0.SR_INSTANCE_ID
2209 AND I.PLAN_ID = I0.PLAN_ID
2210 AND R.RULE_ID (+) = NVL(I.ATP_RULE_ID, p_default_atp_rule_id)
2211 AND R.SR_INSTANCE_ID (+)= I.SR_INSTANCE_ID
2212 AND D.PLAN_ID = I.PLAN_ID
2213 AND D.SR_INSTANCE_ID = I.SR_INSTANCE_ID
2214 AND D.INVENTORY_ITEM_ID = I.INVENTORY_ITEM_ID
2215 AND D.ORGANIZATION_ID = I.ORGANIZATION_ID
2216 AND USING_REQUIREMENT_QUANTITY <> 0
2217 AND D.ORIGINATION_TYPE in (
2218 DECODE(R.INCLUDE_DISCRETE_WIP_DEMAND, 1, 3, -1),
2219 DECODE(R.INCLUDE_FLOW_SCHEDULE_DEMAND, 1, 25, -1),
2220 DECODE(R.INCLUDE_USER_DEFINED_DEMAND, 1, 42, -1),
2221 DECODE(R.INCLUDE_NONSTD_WIP_RECEIPTS, 1, 2, -1),
2222 DECODE(R.INCLUDE_REP_WIP_DEMAND, 1, 4, -1))
2223 AND C.CALENDAR_CODE = p_cal_code
2224 AND C.EXCEPTION_SET_ID = G_CAL_EXC_SET_ID
2225 AND C.SR_INSTANCE_ID = I0.SR_INSTANCE_ID
2226 -- since we store repetitive schedule demand in different ways for
2227 -- ods (total quantity on start date) and pds (daily quantity from
2228 -- start date to end date), we need to make sure we only select work day
2229 -- for pds's repetitive schedule demand.
2230 AND C.CALENDAR_DATE BETWEEN TRUNC(D.USING_ASSEMBLY_DEMAND_DATE) AND
2231 TRUNC(NVL(D.ASSEMBLY_DEMAND_COMP_DATE,
2232 D.USING_ASSEMBLY_DEMAND_DATE))
2233 -- new clause 2640489, DECODE is also OR, Explicit OR gives CBO choices
2234 AND (R.PAST_DUE_DEMAND_CUTOFF_FENCE is NULL OR
2235 C.PRIOR_SEQ_NUM >= p_sysdate_seq_num - R.PAST_DUE_DEMAND_CUTOFF_FENCE)
2236 AND C.PRIOR_DATE < NVL(p_itf, C.PRIOR_DATE + 1)
2237 -- new clause 2640489, DECODE is also OR, Explicit OR gives CBO choices
2238 AND (R.DEMAND_CLASS_ATP_FLAG <> 1 OR
2239 NVL(D.DEMAND_CLASS, NVL(p_default_dmd_class,'@@@')) =
2240 NVL(P_DEMAND_CLASS, NVL(p_default_dmd_class,'@@@')) )
2241 UNION ALL
2242 -- bug 2461071 to_date and trunc
2243 SELECT DECODE(D.RESERVATION_TYPE, 2, p_sys_next_date, TRUNC(D.REQUIREMENT_DATE)) SD_DATE, --bug 2287148
2244 -1*(D.PRIMARY_UOM_QUANTITY-GREATEST(NVL(D.RESERVATION_QUANTITY,0),
2245 D.COMPLETED_QUANTITY)) SD_QTY
2246 FROM
2247 -- Bug 1756263, performance fix, use EXISTS subquery instead.
2248 --MSC_CALENDAR_DATES C,
2249 MSC_SALES_ORDERS D,
2250 MSC_ATP_RULES R,
2251 MSC_SYSTEM_ITEMS I,
2252 MSC_SYSTEM_ITEMS I0,
2253 MSC_CALENDAR_DATES C
2254 WHERE I0.SR_INVENTORY_ITEM_ID = p_item_id
2255 AND I0.ORGANIZATION_ID = p_org_id
2256 AND I0.SR_INSTANCE_ID = p_instance_id
2257 AND I0.PLAN_ID = p_plan_id
2258 AND I.PRODUCT_FAMILY_ID = I0.INVENTORY_ITEM_ID
2259 AND I.ORGANIZATION_ID = I0.ORGANIZATION_ID
2260 AND I.SR_INSTANCE_ID = I0.SR_INSTANCE_ID
2261 AND I.PLAN_ID = I0.PLAN_ID
2262 AND R.RULE_ID (+) = NVL(I.ATP_RULE_ID, p_default_atp_rule_id)
2263 AND R.SR_INSTANCE_ID (+)= I.SR_INSTANCE_ID
2264 AND D.SR_INSTANCE_ID = I.SR_INSTANCE_ID
2265 AND D.INVENTORY_ITEM_ID = I.INVENTORY_ITEM_ID
2266 AND D.ORGANIZATION_ID = I.ORGANIZATION_ID
2267 AND D.DEMAND_SOURCE_TYPE <> DECODE(R.INCLUDE_SALES_ORDERS,2,2,-1)
2268 AND D.DEMAND_SOURCE_TYPE <> DECODE(R.INCLUDE_INTERNAL_ORDERS,2,8,-1)
2269 AND D.PRIMARY_UOM_QUANTITY > GREATEST(NVL(D.RESERVATION_QUANTITY,0),
2270 D.COMPLETED_QUANTITY)
2271 AND DECODE(MSC_ATP_PVT.G_APPS_VER,3,D.COMPLETED_QUANTITY,0) = 0 -- 2300767
2272 AND (D.SUBINVENTORY IS NULL OR D.SUBINVENTORY IN
2273 (SELECT S.SUB_INVENTORY_CODE
2274 FROM MSC_SUB_INVENTORIES S
2275 WHERE S.ORGANIZATION_ID=D.ORGANIZATION_ID
2276 AND S.PLAN_ID = I.PLAN_ID
2277 AND S.SR_INSTANCE_ID = D.SR_INSTANCE_ID
2278 AND S.INVENTORY_ATP_CODE =DECODE(R.DEFAULT_ATP_SOURCES,
2279 1, 1, NULL, 1, S.INVENTORY_ATP_CODE)
2280 AND S.NETTING_TYPE =DECODE(R.DEFAULT_ATP_SOURCES,
2281 2, 1, S.NETTING_TYPE)))
2282 AND (D.RESERVATION_TYPE = 2
2283 OR D.PARENT_DEMAND_ID IS NULL
2284 OR (D.RESERVATION_TYPE = 3 AND
2285 ((R.INCLUDE_DISCRETE_WIP_RECEIPTS = 1) or
2286 (R.INCLUDE_NONSTD_WIP_RECEIPTS = 1))))
2287 -- new clause, remove existing Exists Query 2640489
2288 AND (R.PAST_DUE_DEMAND_CUTOFF_FENCE is NULL OR
2289 C.PRIOR_SEQ_NUM >= p_sysdate_seq_num - R.PAST_DUE_DEMAND_CUTOFF_FENCE)
2290 AND C.CALENDAR_CODE = p_cal_code
2291 AND C.SR_INSTANCE_ID = I.SR_INSTANCE_ID
2292 AND C.EXCEPTION_SET_ID = -1
2293 AND C.CALENDAR_DATE = TRUNC(D.REQUIREMENT_DATE)
2294 AND C.PRIOR_DATE < NVL(p_itf, C.PRIOR_DATE + 1)
2295 -- new clause 2640489, DECODE is also OR, Explicit OR gives CBO choices
2296 AND (R.DEMAND_CLASS_ATP_FLAG <> 1
2297 OR NVL(D.DEMAND_CLASS, NVL(p_default_dmd_class,'@@@'))
2298 = NVL(P_DEMAND_CLASS, NVL(p_default_dmd_class,'@@@')) )
2299 UNION ALL
2300 SELECT -- C.NEXT_DATE SD_DATE, -- 2859130
2301 C.CALENDAR_DATE SD_DATE,
2302 --- bug 1843471, 2563139
2303 Decode(order_type,
2304 30, Decode(Sign(S.Daily_rate * (TRUNC(C.Calendar_date) - TRUNC(S.FIRST_UNIT_START_DATE))- S.qty_completed),
2305 -1,S.Daily_rate* (TRUNC(C.Calendar_date) - TRUNC(S.First_Unit_Start_date) +1)- S.qty_completed,
2306 S.Daily_rate),
2307 -- Bug 2132288, 2442009
2308 5, NVL(S.DAILY_RATE, NVL(S.FIRM_QUANTITY,S.NEW_ORDER_QUANTITY)),
2309 -- End Bug 2132288, 2442009
2310
2311 -- Bug 2439264, for OPM, lots with order_processing = "N" will be populated with
2312 -- non_nettable_qty and need to be excluded from ATP calculations.
2313
2314 (NVL(S.FIRM_QUANTITY,S.NEW_ORDER_QUANTITY) - NVL(S.NON_NETTABLE_QTY, 0)) )SD_QTY
2315 -- NVL(S.FIRM_QUANTITY,S.NEW_ORDER_QUANTITY) )SD_QTY
2316 FROM MSC_CALENDAR_DATES C,
2317 MSC_SUPPLIES S,
2318 MSC_ATP_RULES R,
2319 MSC_SYSTEM_ITEMS I,
2320 MSC_SYSTEM_ITEMS I0, --Bug 13072988
2321 MSC_SUB_INVENTORIES MSI
2322 WHERE I0.SR_INVENTORY_ITEM_ID = p_item_id -- Bug 13072988, aggregate the supply of member-items
2323 AND I0.ORGANIZATION_ID = p_org_id -- as we are aggregating the demands also.
2324 AND I0.SR_INSTANCE_ID = p_instance_id
2325 AND I0.PLAN_ID = p_plan_id
2326 AND I.PRODUCT_FAMILY_ID = I0.INVENTORY_ITEM_ID
2327 AND I.ORGANIZATION_ID = I0.ORGANIZATION_ID
2328 AND I.SR_INSTANCE_ID = I0.SR_INSTANCE_ID
2329 AND I.PLAN_ID = I0.PLAN_ID
2330 AND R.RULE_ID (+) = NVL(I.ATP_RULE_ID, p_default_atp_rule_id)
2331 AND R.SR_INSTANCE_ID (+)= I.SR_INSTANCE_ID
2332 AND S.PLAN_ID = I.PLAN_ID
2333 AND S.SR_INSTANCE_ID = I.SR_INSTANCE_ID
2334 AND S.INVENTORY_ITEM_ID = I.INVENTORY_ITEM_ID
2335 AND S.ORGANIZATION_ID = I.ORGANIZATION_ID
2336 ---bug 1843471
2337 --AND NVL(S.FIRM_QUANTITY,S.NEW_ORDER_QUANTITY) <> 0 -- 1243985
2338 -- Bug 2132288, 2442009, 2453938
2339 -- Do not include supplies equal to 0 as per 1243985
2340 -- However at the same time, support negative supplies as per Bug 2362079 use ABS.
2341 -- Support Repetitive schedules as per 1843471
2342 -- Support Repetitive MPS as per 2132288, 2442009
2343 AND Decode(S.order_type, 30, S.Daily_rate* (TRUNC(C.Calendar_date) - TRUNC(S.First_Unit_Start_date) + 1),
2344 5, NVL(S.Daily_rate, ABS(NVL(S.FIRM_QUANTITY,S.NEW_ORDER_QUANTITY)) ),
2345 ABS(NVL(S.FIRM_QUANTITY,S.NEW_ORDER_QUANTITY)) ) >
2346 Decode(S.order_type, 30, S.qty_completed,0)
2347 -- End Bug 2132288, 2442009, 2453938
2348 AND (S.ORDER_TYPE IN (
2349 DECODE(R.INCLUDE_PURCHASE_ORDERS, 1, 1, -1),
2350 DECODE(R.INCLUDE_PURCHASE_ORDERS, 1, 8, -1), -- 1882898
2351 DECODE(R.INCLUDE_DISCRETE_WIP_RECEIPTS, 1, 3, -1),
2352 DECODE(R.INCLUDE_REP_WIP_RECEIPTS, 1, 30, -1),
2353 DECODE(R.INCLUDE_NONSTD_WIP_RECEIPTS, 1, 7, -1),
2354 DECODE(R.INCLUDE_NONSTD_WIP_RECEIPTS, 1, 15, -1),
2355 DECODE(R.INCLUDE_INTERORG_TRANSFERS, 1, 11, -1),
2356 DECODE(R.INCLUDE_INTERORG_TRANSFERS, 1, 12, -1),
2357 DECODE(R.INCLUDE_ONHAND_AVAILABLE, 1, 18, -1),
2358 DECODE(R.INCLUDE_INTERNAL_REQS, 1, 2, -1),
2359 DECODE(R.INCLUDE_SUPPLIER_REQS, 1, 2, -1),
2360 DECODE(R.INCLUDE_USER_DEFINED_SUPPLY, 1, 41, -1),
2361 DECODE(R.INCLUDE_FLOW_SCHEDULE_RECEIPTS, 1, 27, -1),
2362 DECODE(R.INCLUDE_FLOW_SCHEDULE_RECEIPTS, 1, 28, -1))
2363 OR
2364 ((R.INCLUDE_REP_MPS = 1 OR R.INCLUDE_DISCRETE_MPS = 1) AND
2365 S.ORDER_TYPE = 5
2366 -- bug 2461071
2367 AND exists (SELECT '1'
2368 FROM MSC_DESIGNATORS
2369 WHERE INVENTORY_ATP_FLAG = 1
2370 AND DESIGNATOR_TYPE = 2
2371 AND DESIGNATOR_ID = S.SCHEDULE_DESIGNATOR_ID
2372 AND DECODE(R.demand_class_atp_flag,1,
2373 nvl(demand_class,
2374 nvl(p_default_dmd_class,'@@@')),'@@@') =
2375 DECODE(R.demand_class_atp_flag,1,
2376 nvl(p_demand_class,
2377 nvl(p_default_dmd_class,'@@@')),'@@@')
2378 )))
2379 --AND MSC_ATP_FUNC.MPS_ATP(S.SCHEDULE_DESIGNATOR_ID) = 1))
2380 AND C.CALENDAR_CODE = p_cal_code
2381 AND C.EXCEPTION_SET_ID = G_CAL_EXC_SET_ID
2382 AND C.SR_INSTANCE_ID = I.SR_INSTANCE_ID
2383 -- Bug 2132288, 2442009
2384 AND C.CALENDAR_DATE BETWEEN TRUNC(NVL(S.FIRM_DATE,S.NEW_SCHEDULE_DATE))
2385 AND TRUNC(NVL(DECODE(S.ORDER_TYPE, 5, S.LAST_UNIT_START_DATE,
2386 S.LAST_UNIT_COMPLETION_DATE), NVL(S.FIRM_DATE,S.NEW_SCHEDULE_DATE)))
2387 AND DECODE(DECODE(S.ORDER_TYPE, 5, S.LAST_UNIT_START_DATE,
2388 S.LAST_UNIT_COMPLETION_DATE),
2389 NULL, C.NEXT_SEQ_NUM, C.SEQ_NUM) IS NOT NULL
2390 -- End Bug 2132288, 2442009
2391 -- new clause 2640489, SIMPLIFY FOR CBO
2392 AND (S.ORDER_TYPE = 18
2393 OR R.PAST_DUE_SUPPLY_CUTOFF_FENCE is NULL
2394 OR C.NEXT_SEQ_NUM >= p_sysdate_seq_num - R.PAST_DUE_SUPPLY_CUTOFF_FENCE)
2395 AND C.NEXT_DATE >= DECODE(S.ORDER_TYPE, 27, TRUNC(l_sysdate),
2396 28, TRUNC(l_sysdate),
2397 C.NEXT_DATE)
2398 AND C.NEXT_DATE < NVL(p_itf, C.NEXT_DATE + 1)
2399 AND (R.DEMAND_CLASS_ATP_FLAG <> 1
2400 OR S.ORDER_TYPE = 5
2401 OR NVL(S.DEMAND_CLASS, NVL(p_default_dmd_class,'@@@')) =
2402 NVL(P_DEMAND_CLASS, NVL(p_default_dmd_class,'@@@')) )
2403 ---bug 1735580
2404 --- filter out non-atpable sub-inventories
2405 AND MSI.plan_id (+) = p_plan_id
2406 AND MSI.organization_id (+) = p_org_id
2407 AND MSI.sr_instance_id (+) = p_instance_id
2408 --aND S.subinventory_code = (+) MSI.sub_inventory_code
2409 AND MSI.sub_inventory_code (+) = S.subinventory_code
2410 AND NVL(MSI.inventory_atp_code,1) <> 2 -- filter out non-atpable subinventories
2411 -- SQL Query changes End 2640489
2412 )
2413 GROUP BY SD_DATE
2414 order by SD_DATE; --4698199
2415
2416 EXCEPTION
2417 WHEN OTHERS THEN
2418 IF PG_DEBUG in ('Y', 'C') THEN
2419 msc_sch_wb.atp_debug('Get_Mat_Avail_Pf_Ods: ' || 'Error occurred: ' || to_char(sqlcode) || ':' || SQLERRM);
2420 END IF;
2421 x_return_status := FND_API.G_RET_STS_ERROR;
2422
2423 END Get_Mat_Avail_Pf_Ods;
2424
2425 /*--Get_Mat_Avail_Pf_Pds_Summ----------------------------------------------------
2426 | o Called for unallocated time phased PF atp for PDS summary
2427 | o Differences from non summary SQL are :
2428 | - Additional union with MSC_ATP_SUMMARY_SD
2429 | - Decode in quantity in SQL on msc_alloc_demands to consider unscheduled
2430 | orders as dummy supplies
2431 | - Additional join with MSC_PLANS in the SQLs on supplies and demands to
2432 | filter records based on refresh number
2433 | - Filter on allocated_quantity=0 and origination_type=51 removed in the
2434 | demands SQL so as to consider copy SOs and dummy supplies respectiviely.
2435 +-------------------------------------------------------------------------------*/
2436 PROCEDURE Get_Mat_Avail_Pf_Pds_Summ(
2437 p_sr_member_id IN NUMBER,
2438 p_sr_family_id IN NUMBER,
2439 p_org_id IN NUMBER,
2440 p_instance_id IN NUMBER,
2441 p_plan_id IN NUMBER,
2442 p_itf IN DATE,
2443 p_refresh_number IN NUMBER, -- For summary enhancement
2444 x_atp_dates OUT NOCOPY MRP_ATP_PUB.date_arr,
2445 x_atp_qtys OUT NOCOPY MRP_ATP_PUB.number_arr,
2446 x_return_status OUT NOCOPY VARCHAR2
2447 ) IS
2448
2449 BEGIN
2450 IF PG_DEBUG in ('Y', 'C') THEN
2451 msc_sch_wb.atp_debug('Begin Get_Mat_Avail_Pf_Pds_Summ');
2452 END IF;
2453
2454 -- Initializing API return code
2455 x_return_status := FND_API.G_RET_STS_SUCCESS;
2456
2457 SELECT SD_DATE, SUM(SD_QTY)
2458 BULK COLLECT INTO x_atp_dates, x_atp_qtys
2459 FROM (
2460 SELECT /*+ INDEX(S MSC_ATP_SUMMARY_SD_U1) */
2461 SD_DATE, SD_QTY
2462 FROM MSC_ATP_SUMMARY_SD S,
2463 MSC_SYSTEM_ITEMS I
2464 WHERE I.SR_INVENTORY_ITEM_ID in (p_sr_member_id, p_sr_family_id)
2465 AND I.ORGANIZATION_ID = p_org_id
2466 AND I.SR_INSTANCE_ID = p_instance_id
2467 AND I.PLAN_ID = p_plan_id
2468 AND S.PLAN_ID = I.PLAN_ID
2469 AND S.SR_INSTANCE_ID = I.SR_INSTANCE_ID
2470 AND S.INVENTORY_ITEM_ID = I.INVENTORY_ITEM_ID
2471 AND S.ORGANIZATION_ID = I.ORGANIZATION_ID
2472 AND S.SD_DATE < NVL(p_itf, S.SD_DATE + 1)
2473
2474 UNION ALL
2475 --bug3700564 added trunc
2476 SELECT TRUNC(AD.DEMAND_DATE) SD_DATE,
2477 decode(AD.ALLOCATED_QUANTITY, -- Consider unscheduled orders as dummy supplies
2478 0, OLD_ALLOCATED_QUANTITY, -- For summary enhancement
2479 -1 * AD.ALLOCATED_QUANTITY) SD_QTY
2480 FROM MSC_ALLOC_DEMANDS AD,
2481 MSC_SYSTEM_ITEMS I,
2482 MSC_PLANS P -- For summary enhancement
2483 WHERE I.SR_INVENTORY_ITEM_ID in (p_sr_member_id, p_sr_family_id)
2484 AND I.ORGANIZATION_ID = p_org_id
2485 AND I.SR_INSTANCE_ID = p_instance_id
2486 AND I.PLAN_ID = p_plan_id
2487 AND AD.PLAN_ID = I.PLAN_ID
2488 AND AD.SR_INSTANCE_ID = I.SR_INSTANCE_ID
2489 AND AD.INVENTORY_ITEM_ID = I.INVENTORY_ITEM_ID
2490 AND AD.ORGANIZATION_ID = I.ORGANIZATION_ID
2491 --bug3700564 added trunc
2492 AND TRUNC(AD.DEMAND_DATE) < NVL(p_itf, TRUNC(AD.DEMAND_DATE) + 1)
2493 AND P.PLAN_ID = AD.PLAN_ID
2494 AND (AD.REFRESH_NUMBER > P.LATEST_REFRESH_NUMBER
2495 OR AD.REFRESH_NUMBER = p_refresh_number)
2496
2497 UNION ALL
2498 --bug3700564 added trunc
2499 SELECT TRUNC(SA.SUPPLY_DATE) SD_DATE,
2500 SA.ALLOCATED_QUANTITY SD_QTY
2501 FROM MSC_ALLOC_SUPPLIES SA,
2502 MSC_SYSTEM_ITEMS I,
2503 MSC_PLANS P -- For summary enhancement
2504 WHERE I.SR_INVENTORY_ITEM_ID in (p_sr_member_id, p_sr_family_id)
2505 AND I.ORGANIZATION_ID = p_org_id
2506 AND I.SR_INSTANCE_ID = p_instance_id
2507 AND I.PLAN_ID = p_plan_id
2508 AND SA.PLAN_ID = I.PLAN_ID
2509 AND SA.SR_INSTANCE_ID = I.SR_INSTANCE_ID
2510 AND SA.INVENTORY_ITEM_ID = I.INVENTORY_ITEM_ID
2511 AND SA.ORGANIZATION_ID = I.ORGANIZATION_ID
2512 AND SA.ALLOCATED_QUANTITY <> 0
2513 --bug3700564 added trunc
2514 AND TRUNC(SA.SUPPLY_DATE) < NVL(p_itf, TRUNC(SA.SUPPLY_DATE) + 1)
2515 AND P.PLAN_ID = SA.PLAN_ID
2516 AND (SA.REFRESH_NUMBER > P.LATEST_REFRESH_NUMBER
2517 OR SA.REFRESH_NUMBER = p_refresh_number)
2518 )
2519 GROUP BY SD_DATE
2520 order by SD_DATE; --4698199
2521
2522 EXCEPTION
2523 WHEN OTHERS THEN
2524 IF PG_DEBUG in ('Y', 'C') THEN
2525 msc_sch_wb.atp_debug('Get_Mat_Avail_Pf_Pds_Summ: ' || 'Error occurred: ' || to_char(sqlcode) || ':' || SQLERRM);
2526 END IF;
2527 x_return_status := FND_API.G_RET_STS_ERROR;
2528
2529 END Get_Mat_Avail_Pf_Pds_Summ;
2530
2531 /*--Get_Mat_Avail_Pf_Pds---------------------------------------------------------
2532 | o Called for unallocated Time Phased PF ATP
2533 | o The supply demand SQL in this procedure gets following:
2534 | - Bucketed demands (origination type 51) for member item upto ATF from
2535 | msc_alloc_demands table.
2536 | - Bucketed demands for family after ATF from msc_alloc_demands table.
2537 | - Rollup supplies (order type 50) for member item upto ATF from
2538 | msc_alloc_supplies table.
2539 | - Rollup supplies for family after ATF from msc_alloc_supplies table.
2540 +------------------------------------------------------------------------------*/
2541 PROCEDURE Get_Mat_Avail_Pf_Pds(
2542 p_sr_member_id IN NUMBER,
2543 p_sr_family_id IN NUMBER,
2544 p_org_id IN NUMBER,
2545 p_instance_id IN NUMBER,
2546 p_plan_id IN NUMBER,
2547 p_itf IN DATE,
2548 x_atp_dates OUT NOCOPY MRP_ATP_PUB.date_arr,
2549 x_atp_qtys OUT NOCOPY MRP_ATP_PUB.number_arr,
2550 x_return_status OUT NOCOPY VARCHAR2
2551 ) IS
2552
2553 BEGIN
2554 IF PG_DEBUG in ('Y', 'C') THEN
2555 msc_sch_wb.atp_debug('Begin Get_Mat_Avail_Pf_Pds');
2556 END IF;
2557
2558 -- Initializing API return code
2559 x_return_status := FND_API.G_RET_STS_SUCCESS;
2560
2561 SELECT SD_DATE, SUM(SD_QTY)
2562 BULK COLLECT INTO x_atp_dates, x_atp_qtys
2563 FROM (
2564 --bug3700564 added trunc
2565 SELECT TRUNC(AD.DEMAND_DATE) SD_DATE,
2566 -1 * AD.ALLOCATED_QUANTITY SD_QTY
2567 FROM MSC_ALLOC_DEMANDS AD,
2568 MSC_SYSTEM_ITEMS I
2569 WHERE I.SR_INVENTORY_ITEM_ID in (p_sr_member_id, p_sr_family_id)
2570 AND I.ORGANIZATION_ID = p_org_id
2571 AND I.SR_INSTANCE_ID = p_instance_id
2572 AND I.PLAN_ID = p_plan_id
2573 AND AD.PLAN_ID = I.PLAN_ID
2574 AND AD.SR_INSTANCE_ID = I.SR_INSTANCE_ID
2575 AND AD.INVENTORY_ITEM_ID = I.INVENTORY_ITEM_ID
2576 AND AD.ORGANIZATION_ID = I.ORGANIZATION_ID
2577 AND AD.ORIGINATION_TYPE <> 52
2578 AND AD.ALLOCATED_QUANTITY <> 0
2579 --bug3700564 added trunc
2580 AND TRUNC(AD.DEMAND_DATE) < NVL(p_itf, TRUNC(AD.DEMAND_DATE) + 1)
2581 UNION ALL
2582 --bug3700564 added trunc
2583 SELECT TRUNC(SA.SUPPLY_DATE) SD_DATE,
2584 SA.ALLOCATED_QUANTITY SD_QTY
2585 FROM MSC_ALLOC_SUPPLIES SA,
2586 MSC_SYSTEM_ITEMS I
2587 WHERE I.SR_INVENTORY_ITEM_ID in (p_sr_member_id, p_sr_family_id)
2588 AND I.ORGANIZATION_ID = p_org_id
2589 AND I.SR_INSTANCE_ID = p_instance_id
2590 AND I.PLAN_ID = p_plan_id
2591 AND SA.PLAN_ID = I.PLAN_ID
2592 AND SA.SR_INSTANCE_ID = I.SR_INSTANCE_ID
2593 AND SA.INVENTORY_ITEM_ID = I.INVENTORY_ITEM_ID
2594 AND SA.ORGANIZATION_ID = I.ORGANIZATION_ID
2595 AND SA.ALLOCATED_QUANTITY <> 0
2596 --bug3700564 added trunc
2597 AND TRUNC(SA.SUPPLY_DATE) >= DECODE(SA.ORIGINAL_ORDER_TYPE,
2598 27, TRUNC(SYSDATE),
2599 28, TRUNC(SYSDATE),
2600 TRUNC(SA.SUPPLY_DATE))
2601 AND TRUNC(SA.SUPPLY_DATE) < NVL(p_itf, TRUNC(SA.SUPPLY_DATE) + 1)
2602 )
2603 GROUP BY SD_DATE
2604 order by SD_DATE; --4698199
2605
2606 EXCEPTION
2607 WHEN OTHERS THEN
2608 IF PG_DEBUG in ('Y', 'C') THEN
2609 msc_sch_wb.atp_debug('Get_Mat_Avail_Pf_Pds: ' || 'Error occurred: ' || to_char(sqlcode) || ':' || SQLERRM);
2610 END IF;
2611 x_return_status := FND_API.G_RET_STS_ERROR;
2612
2613 END Get_Mat_Avail_Pf_Pds;
2614
2615 /*--Get_Mat_Avail_Pf_Ods_Dtls-----------------------------------------------
2616 | o Existing code for PF ODS details moved to this procedure.
2617 +-------------------------------------------------------------------------*/
2618 PROCEDURE Get_Mat_Avail_Pf_Ods_Dtls (
2619 p_item_id IN NUMBER,
2620 p_request_item_id IN NUMBER,
2621 p_org_id IN NUMBER,
2622 p_instance_id IN NUMBER,
2623 p_plan_id IN NUMBER,
2624 p_cal_code IN VARCHAR2,
2625 p_sysdate_seq_num IN NUMBER,
2626 p_sys_next_date IN DATE,
2627 p_demand_class IN VARCHAR2,
2628 p_default_atp_rule_id IN NUMBER,
2629 p_default_dmd_class IN VARCHAR2,
2630 p_itf IN DATE,
2631 p_level IN NUMBER,
2632 p_scenario_id IN NUMBER,
2633 p_identifier IN NUMBER,
2634 x_return_status OUT NOCOPY VARCHAR2
2635 ) IS
2636 l_null_num NUMBER;
2637 l_null_char VARCHAR2(1);
2638 l_null_date DATE; --bug3814584
2639 l_sysdate DATE := sysdate;
2640
2641 BEGIN
2642 IF PG_DEBUG in ('Y', 'C') THEN
2643 msc_sch_wb.atp_debug('Begin Get_Mat_Avail_Pf_Ods_Dtls');
2644 END IF;
2645
2646 -- Initializing API return code
2647 x_return_status := FND_API.G_RET_STS_SUCCESS;
2648
2649 INSERT INTO msc_atp_sd_details_temp (
2650 ATP_Level,
2651 Order_line_id,
2652 Scenario_Id,
2653 Inventory_Item_Id,
2654 Request_Item_Id,
2655 Organization_Id,
2656 Department_Id,
2657 Resource_Id,
2658 Supplier_Id,
2659 Supplier_Site_Id,
2660 From_Organization_Id,
2661 From_Location_Id,
2662 To_Organization_Id,
2663 To_Location_Id,
2664 Ship_Method,
2665 UOM_code,
2666 Supply_Demand_Type,
2667 Supply_Demand_Source_Type,
2668 Supply_Demand_Source_Type_Name,
2669 Identifier1,
2670 Identifier2,
2671 Identifier3,
2672 Identifier4,
2673 Supply_Demand_Quantity,
2674 Supply_Demand_Date,
2675 Disposition_Type,
2676 Disposition_Name,
2677 Pegging_Id,
2678 End_Pegging_Id,
2679 creation_date,
2680 created_by,
2681 last_update_date,
2682 last_updated_by,
2683 last_update_login,
2684 ORIG_CUSTOMER_SITE_NAME,--bug3263368
2685 ORIG_CUSTOMER_NAME, --bug3263368
2686 ORIG_DEMAND_CLASS, --bug3263368
2687 ORIG_REQUEST_DATE --bug3263368
2688 )
2689
2690 ( -- SQL Query changes Begin 2640489
2691 SELECT p_level col1,
2692 p_identifier col2,
2693 p_scenario_id col3,
2694 p_item_id col4 ,
2695 p_request_item_id col5,
2696 p_org_id col6,
2697 l_null_num col7,
2698 l_null_num col8,
2699 l_null_num col9,
2700 l_null_num col10,
2701 l_null_num col11,
2702 l_null_num col12,
2703 l_null_num col13,
2704 l_null_num col14,
2705 l_null_char col15,
2706 I.UOM_CODE col16,
2707 1 col17, -- demand
2708 D.ORIGINATION_TYPE col18,
2709 l_null_char col19,
2710 D.SR_INSTANCE_ID col20,
2711 l_null_num col21,
2712 D.DEMAND_ID col22,
2713 l_null_num col23,
2714 -1* D.USING_REQUIREMENT_QUANTITY col24,
2715 C.PRIOR_DATE col25,
2716 l_null_num col26,
2717 DECODE(D.ORIGINATION_TYPE, 1, to_char(D.DISPOSITION_ID), D.ORDER_NUMBER) col27,
2718 -- rajjain 04/25/2003 Bug 2771075
2719 -- For Planned Order Demands We will populate disposition_id
2720 -- in disposition_name column
2721 l_null_num col28,
2722 l_null_num col29,
2723 l_sysdate,
2724 G_USER_ID,
2725 l_sysdate,
2726 G_USER_ID,
2727 G_USER_ID,
2728 MTPS.LOCATION, --bug3263368
2729 MTP.PARTNER_NAME, --bug3263368
2730 D.DEMAND_CLASS, --bug3263368
2731 DECODE(D.ORDER_DATE_TYPE_CODE,2,D.REQUEST_DATE,
2732 D.REQUEST_SHIP_DATE) --bug3263368
2733 FROM MSC_CALENDAR_DATES C,
2734 MSC_DEMANDS D,
2735 MSC_ATP_RULES R,
2736 MSC_SYSTEM_ITEMS I,
2737 MSC_SYSTEM_ITEMS I0,
2738 MSC_TRADING_PARTNERS MTP,--bug3263368
2739 MSC_TRADING_PARTNER_SITES MTPS --bug3263368
2740 WHERE I0.SR_INVENTORY_ITEM_ID = p_item_id
2741 AND I0.ORGANIZATION_ID = p_org_id
2742 AND I0.SR_INSTANCE_ID = p_instance_id
2743 AND I0.PLAN_ID = p_plan_id
2744 AND I.PRODUCT_FAMILY_ID = I0.INVENTORY_ITEM_ID
2745 AND I.ORGANIZATION_ID = I0.ORGANIZATION_ID
2746 AND I.SR_INSTANCE_ID = I0.SR_INSTANCE_ID
2747 AND I.PLAN_ID = I0.PLAN_ID
2748 AND R.RULE_ID (+) = NVL(I.ATP_RULE_ID, p_default_atp_rule_id)
2749 AND R.SR_INSTANCE_ID (+) = I.SR_INSTANCE_ID
2750 AND D.PLAN_ID = I.PLAN_ID
2751 AND D.SR_INSTANCE_ID = I.SR_INSTANCE_ID
2752 AND D.INVENTORY_ITEM_ID = I.INVENTORY_ITEM_ID
2753 AND D.ORGANIZATION_ID = I.ORGANIZATION_ID
2754 AND USING_REQUIREMENT_QUANTITY <> 0
2755 AND D.ORIGINATION_TYPE in (
2756 DECODE(R.INCLUDE_DISCRETE_WIP_DEMAND, 1, 3, -1),
2757 DECODE(R.INCLUDE_FLOW_SCHEDULE_DEMAND, 1, 25, -1),
2758 DECODE(R.INCLUDE_USER_DEFINED_DEMAND, 1, 42, -1),
2759 DECODE(R.INCLUDE_NONSTD_WIP_RECEIPTS, 1, 2, -1),
2760 DECODE(R.INCLUDE_REP_WIP_DEMAND, 1, 4, -1))
2761 AND D.SHIP_TO_SITE_ID = MTPS.PARTNER_SITE_ID(+) --bug3263368
2762 AND D.CUSTOMER_ID = MTP.PARTNER_ID(+)--bug3263368
2763 AND C.CALENDAR_CODE=p_cal_code
2764 AND C.EXCEPTION_SET_ID=G_CAL_EXC_SET_ID
2765 AND C.SR_INSTANCE_ID = p_instance_id
2766 -- since we store repetitive schedule demand in different ways for
2767 -- ods (total quantity on start date) and pds (daily quantity from
2768 -- start date to end date), we need to make sure we only select work day
2769 -- for pds's repetitive schedule demand.
2770 AND C.CALENDAR_DATE BETWEEN TRUNC(D.USING_ASSEMBLY_DEMAND_DATE) AND
2771 TRUNC(NVL(D.ASSEMBLY_DEMAND_COMP_DATE,
2772 D.USING_ASSEMBLY_DEMAND_DATE))
2773 AND (R.PAST_DUE_DEMAND_CUTOFF_FENCE is NULL OR
2774 C.PRIOR_SEQ_NUM >= p_sysdate_seq_num - R.PAST_DUE_DEMAND_CUTOFF_FENCE)
2775 AND C.PRIOR_DATE < NVL(p_itf, C.PRIOR_DATE + 1)
2776 AND (R.DEMAND_CLASS_ATP_FLAG <> 1 OR
2777 NVL(D.DEMAND_CLASS, NVL(p_default_dmd_class,'@@@')) =
2778 NVL(P_DEMAND_CLASS, NVL(p_default_dmd_class,'@@@')) )
2779 UNION ALL
2780 SELECT p_level col1,
2781 p_identifier col2,
2782 p_scenario_id col3,
2783 p_item_id col4,
2784 p_request_item_id col5,
2785 p_org_id col6,
2786 l_null_num col7,
2787 l_null_num col8,
2788 l_null_num col9,
2789 l_null_num col10,
2790 l_null_num col11,
2791 l_null_num col12,
2792 l_null_num col13,
2793 l_null_num col14,
2794 l_null_char col15,
2795 I.UOM_CODE col16,
2796 1 col17, -- demand
2797 DECODE(D.RESERVATION_TYPE, 1, 6, 10) col18,
2798 l_null_char col19,
2799 D.SR_INSTANCE_ID col20,
2800 l_null_num col21,
2801 to_number(D.DEMAND_SOURCE_LINE) col22,
2802 l_null_num col23,
2803 -1*(D.PRIMARY_UOM_QUANTITY-
2804 GREATEST(NVL(D.RESERVATION_QUANTITY,0), D.COMPLETED_QUANTITY))
2805 col24,
2806 --C.PRIOR_DATE
2807 -- bug 2461071 to_date
2808 DECODE(D.RESERVATION_TYPE,2,p_sys_next_date, TRUNC(D.REQUIREMENT_DATE)) col25 ,
2809 l_null_num col26,
2810 D.SALES_ORDER_NUMBER col27,
2811 l_null_num col28,
2812 l_null_num col29,
2813 l_sysdate,
2814 G_USER_ID,
2815 l_sysdate,
2816 G_USER_ID,
2817 G_USER_ID,
2818 MTPS.LOCATION, --bug3263368
2819 MTP.PARTNER_NAME, --bug3263368
2820 D.DEMAND_CLASS, --bug3263368
2821 DECODE(D.ORDER_DATE_TYPE_CODE,2,D.REQUEST_DATE,
2822 D.REQUEST_SHIP_DATE) --bug3263368
2823 FROM
2824 MSC_SALES_ORDERS D,
2825 MSC_ATP_RULES R,
2826 MSC_SYSTEM_ITEMS I,
2827 MSC_SYSTEM_ITEMS I0,
2828 MSC_CALENDAR_DATES C,
2829 MSC_TRADING_PARTNERS MTP,--bug3263368
2830 MSC_TRADING_PARTNER_SITES MTPS --bug3263368
2831 WHERE I0.SR_INVENTORY_ITEM_ID = p_item_id
2832 AND I0.ORGANIZATION_ID = p_org_id
2833 AND I0.SR_INSTANCE_ID = p_instance_id
2834 AND I0.PLAN_ID = p_plan_id
2835 AND I.PRODUCT_FAMILY_ID = I0.INVENTORY_ITEM_ID
2836 AND I.ORGANIZATION_ID = I0.ORGANIZATION_ID
2837 AND I.SR_INSTANCE_ID = I0.SR_INSTANCE_ID
2838 AND I.PLAN_ID = I0.PLAN_ID
2839 AND R.RULE_ID (+) = NVL(I.ATP_RULE_ID, p_default_atp_rule_id)
2840 AND R.SR_INSTANCE_ID (+) = I.SR_INSTANCE_ID
2841 AND D.SR_INSTANCE_ID = I.SR_INSTANCE_ID
2842 AND D.INVENTORY_ITEM_ID = I.INVENTORY_ITEM_ID
2843 AND D.ORGANIZATION_ID = I.ORGANIZATION_ID
2844 AND D.DEMAND_SOURCE_TYPE <> DECODE(R.INCLUDE_SALES_ORDERS,2,2,-1)
2845 AND D.DEMAND_SOURCE_TYPE <> DECODE(R.INCLUDE_INTERNAL_ORDERS,2,8,-1)
2846 AND D.PRIMARY_UOM_QUANTITY > GREATEST(NVL(D.RESERVATION_QUANTITY,0),
2847 D.COMPLETED_QUANTITY)
2848 AND DECODE(MSC_ATP_PVT.G_APPS_VER,3,D.COMPLETED_QUANTITY,0) = 0 -- 2300767
2849 AND (D.SUBINVENTORY IS NULL OR D.SUBINVENTORY IN
2850 (SELECT S.SUB_INVENTORY_CODE
2851 FROM MSC_SUB_INVENTORIES S
2852 WHERE S.ORGANIZATION_ID=D.ORGANIZATION_ID
2853 AND S.PLAN_ID = I.PLAN_ID
2854 AND S.SR_INSTANCE_ID = D.SR_INSTANCE_ID
2855 AND S.INVENTORY_ATP_CODE =DECODE(R.DEFAULT_ATP_SOURCES,
2856 1, 1, NULL, 1, S.INVENTORY_ATP_CODE)
2857 AND S.NETTING_TYPE =DECODE(R.DEFAULT_ATP_SOURCES,
2858 2, 1, S.NETTING_TYPE)))
2859 AND (D.RESERVATION_TYPE = 2
2860 OR D.PARENT_DEMAND_ID IS NULL
2861 OR (D.RESERVATION_TYPE = 3 AND
2862 ((R.INCLUDE_DISCRETE_WIP_RECEIPTS = 1) or
2863 (R.INCLUDE_NONSTD_WIP_RECEIPTS = 1))))
2864 -- new clause, remove existing Exists Query 2640489
2865 AND D.SHIP_TO_SITE_USE_ID = MTPS.PARTNER_SITE_ID(+) --bug3263368
2866 AND D.CUSTOMER_ID = MTP.PARTNER_ID(+) --bug3263368
2867 AND (R.PAST_DUE_DEMAND_CUTOFF_FENCE is NULL OR
2868 C.PRIOR_SEQ_NUM >= p_sysdate_seq_num - R.PAST_DUE_DEMAND_CUTOFF_FENCE)
2869 AND C.CALENDAR_CODE = p_cal_code
2870 AND C.SR_INSTANCE_ID = I.SR_INSTANCE_ID
2871 AND C.EXCEPTION_SET_ID = -1
2872 AND C.CALENDAR_DATE = TRUNC(D.REQUIREMENT_DATE)
2873 AND C.PRIOR_DATE < NVL(p_itf, C.PRIOR_DATE + 1)
2874 AND (R.DEMAND_CLASS_ATP_FLAG <> 1
2875 OR NVL(D.DEMAND_CLASS, NVL(p_default_dmd_class,'@@@'))
2876 = NVL(P_DEMAND_CLASS, NVL(p_default_dmd_class,'@@@')) )
2877 UNION ALL
2878 SELECT p_level col1,
2879 p_identifier col2,
2880 p_scenario_id col3,
2881 p_item_id col4 ,
2882 p_request_item_id col5,
2883 p_org_id col6,
2884 l_null_num col7,
2885 l_null_num col8,
2886 l_null_num col9,
2887 l_null_num col10,
2888 l_null_num col11,
2889 l_null_num col12,
2890 l_null_num col13,
2891 l_null_num col14,
2892 l_null_char col15,
2893 I.UOM_CODE col16,
2894 2 col17, -- supply
2895 S.ORDER_TYPE col18,
2896 l_null_char col19,
2897 S.SR_INSTANCE_ID col20,
2898 l_null_num col21,
2899 S.TRANSACTION_ID col22,
2900 l_null_num col23,
2901 ---bug 1843471
2902 --NVL(S.FIRM_QUANTITY,S.NEW_ORDER_QUANTITY) col24,
2903 Decode(order_type,
2904 30, Decode(Sign(S.Daily_rate * (TRUNC(C.Calendar_date) -
2905 TRUNC(S.FIRST_UNIT_START_DATE) )- S.qty_completed),
2906 -1,S.Daily_rate* (TRUNC(C.Calendar_date) - TRUNC(S.First_Unit_Start_date) +1)- S.qty_completed,
2907 S.Daily_rate),
2908 -- Bug 2132288, 2442009, 2563139
2909 5, NVL(S.DAILY_RATE, NVL(S.FIRM_QUANTITY,S.NEW_ORDER_QUANTITY)),
2910 -- End Bug 2132288, 2442009
2911
2912 -- Bug 2439264, for OPM, lots with order_processing = "N" will be populated with
2913 -- non_nettable_qty and need to be excluded from ATP calculations.
2914
2915 (NVL(S.FIRM_QUANTITY,S.NEW_ORDER_QUANTITY) - NVL(S.NON_NETTABLE_QTY, 0)) ) col24,
2916
2917 -- NVL(S.FIRM_QUANTITY,S.NEW_ORDER_QUANTITY) ) col24,
2918 C.NEXT_DATE col25,
2919 l_null_num col26,
2920 DECODE(S.ORDER_TYPE,
2921 1, S.ORDER_NUMBER,
2922 2, S.ORDER_NUMBER,
2923 3, S.ORDER_NUMBER,
2924 7, S.ORDER_NUMBER,
2925 8, S.ORDER_NUMBER,
2926 5, MSC_ATP_FUNC.Get_Designator(S.SCHEDULE_DESIGNATOR_ID),
2927 11, S.ORDER_NUMBER,
2928 12, S.ORDER_NUMBER,
2929 14, S.ORDER_NUMBER,
2930 15, S.ORDER_NUMBER,
2931 27, S.ORDER_NUMBER,
2932 28, S.ORDER_NUMBER,
2933 41, S.ORDER_NUMBER, -- bug 4085497 'User Defined Supply'
2934 --NULL) col27,
2935 l_null_char) col27, -- bug 4365873 fixed as a part of this bug
2936 l_null_num col28,
2937 l_null_num col29,
2938 l_sysdate,
2939 G_USER_ID,
2940 l_sysdate,
2941 G_USER_ID,
2942 G_USER_ID,
2943 --null,--bug3263368 ORIG_CUSTOMER_SITE_NAME
2944 --null, --bug3263368 ORIG_CUSTOMER_NAME
2945 --null, --bug3263368 ORIG_DEMAND_CLASS
2946 --null --bug3263368 ORIG_REQUEST_DATE
2947 l_null_char, --bug3814584
2948 l_null_char, --bug3814584
2949 l_null_char, --bug3814584
2950 l_null_date --bug3814584
2951 FROM MSC_CALENDAR_DATES C,
2952 MSC_SUPPLIES S,
2953 MSC_ATP_RULES R,
2954 MSC_SYSTEM_ITEMS I,
2955 MSC_SYSTEM_ITEMS I0, --Bug 13072988
2956 MSC_SUB_INVENTORIES MSI
2957 WHERE I0.SR_INVENTORY_ITEM_ID = p_item_id -- Bug 13072988, aggregate the supply of member-items
2958 AND I0.ORGANIZATION_ID = p_org_id -- as we are aggregating the demands also.
2959 AND I0.SR_INSTANCE_ID = p_instance_id
2960 AND I0.PLAN_ID = p_plan_id
2961 AND I.PRODUCT_FAMILY_ID = I0.INVENTORY_ITEM_ID
2962 AND I.ORGANIZATION_ID = I0.ORGANIZATION_ID
2963 AND I.SR_INSTANCE_ID = I0.SR_INSTANCE_ID
2964 AND I.PLAN_ID = I0.PLAN_ID
2965 AND R.RULE_ID (+) = NVL(I.ATP_RULE_ID, p_default_atp_rule_id)
2966 AND R.SR_INSTANCE_ID (+) = I.SR_INSTANCE_ID
2967 AND S.PLAN_ID = I.PLAN_ID
2968 AND S.SR_INSTANCE_ID = I.SR_INSTANCE_ID
2969 AND S.INVENTORY_ITEM_ID = I.INVENTORY_ITEM_ID
2970 AND S.ORGANIZATION_ID = I.ORGANIZATION_ID
2971 --- bug 1843471
2972 --AND NVL(S.FIRM_QUANTITY,S.NEW_ORDER_QUANTITY) <> 0 -- 1243985
2973 -- Bug 2132288, 2442009, 2453938
2974 -- Do not include supplies equal to 0 as per 1243985
2975 -- However at the same time, support negative supplies as per Bug 2362079 use ABS.
2976 -- Support Repetitive schedules as per 1843471
2977 -- Support Repetitive MPS as per 2132288, 2442009
2978 -- TRUNC dates 2563139
2979 AND Decode(S.order_type, 30, S.Daily_rate* (TRUNC(C.Calendar_date)
2980 - TRUNC(S.First_Unit_Start_date) + 1),
2981 5, NVL(S.Daily_rate, ABS(NVL(S.FIRM_QUANTITY,S.NEW_ORDER_QUANTITY)) ),
2982 ABS(NVL(S.FIRM_QUANTITY,S.NEW_ORDER_QUANTITY)) ) >
2983 Decode(S.order_type, 30, S.qty_completed,0)
2984 -- End Bug 2132288, 2442009, 2453938
2985 AND (S.ORDER_TYPE IN (
2986 DECODE(R.INCLUDE_PURCHASE_ORDERS, 1, 1, -1),
2987 DECODE(R.INCLUDE_PURCHASE_ORDERS, 1, 8, -1), -- 1882898
2988 DECODE(R.INCLUDE_DISCRETE_WIP_RECEIPTS, 1, 3, -1),
2989 DECODE(R.INCLUDE_REP_WIP_RECEIPTS, 1, 30, -1),
2990 DECODE(R.INCLUDE_NONSTD_WIP_RECEIPTS, 1, 7, -1),
2991 DECODE(R.INCLUDE_NONSTD_WIP_RECEIPTS, 1, 15, -1),
2992 DECODE(R.INCLUDE_INTERORG_TRANSFERS, 1, 11, -1),
2993 DECODE(R.INCLUDE_INTERORG_TRANSFERS, 1, 12, -1),
2994 DECODE(R.INCLUDE_ONHAND_AVAILABLE, 1, 18, -1),
2995 DECODE(R.INCLUDE_INTERNAL_REQS, 1, 2, -1),
2996 DECODE(R.INCLUDE_SUPPLIER_REQS, 1, 2, -1),
2997 DECODE(R.INCLUDE_USER_DEFINED_SUPPLY, 1, 41, -1),
2998 DECODE(R.INCLUDE_FLOW_SCHEDULE_RECEIPTS, 1, 27, -1),
2999 DECODE(R.INCLUDE_FLOW_SCHEDULE_RECEIPTS, 1, 28, -1))
3000 OR
3001 ((R.INCLUDE_REP_MPS = 1 OR R.INCLUDE_DISCRETE_MPS = 1) AND
3002 S.ORDER_TYPE = 5
3003 -- bug 2461071
3004 AND exists (SELECT '1'
3005 FROM MSC_DESIGNATORS
3006 WHERE INVENTORY_ATP_FLAG = 1
3007 AND DESIGNATOR_TYPE = 2
3008 AND DESIGNATOR_ID = S.SCHEDULE_DESIGNATOR_ID
3009 AND DECODE(R.demand_class_atp_flag,1,
3010 nvl(demand_class,
3011 nvl(p_default_dmd_class,'@@@')),'@@@') =
3012 DECODE(R.demand_class_atp_flag,1,
3013 nvl(p_demand_class,
3014 nvl(p_default_dmd_class,'@@@')),'@@@')
3015 )))
3016 --AND MSC_ATP_FUNC.MPS_ATP(S.SCHEDULE_DESIGNATOR_ID) = 1))
3017 AND C.CALENDAR_CODE = p_cal_code
3018 AND C.EXCEPTION_SET_ID = G_CAL_EXC_SET_ID
3019 AND C.SR_INSTANCE_ID = p_instance_id
3020 -- Bug 2132288, 2442009
3021 AND C.CALENDAR_DATE BETWEEN TRUNC(NVL(S.FIRM_DATE,S.NEW_SCHEDULE_DATE))
3022 AND TRUNC(NVL(DECODE(S.ORDER_TYPE, 5, S.LAST_UNIT_START_DATE,
3023 S.LAST_UNIT_COMPLETION_DATE), NVL(S.FIRM_DATE,S.NEW_SCHEDULE_DATE)))
3024 AND DECODE(DECODE(S.ORDER_TYPE, 5, S.LAST_UNIT_START_DATE,
3025 S.LAST_UNIT_COMPLETION_DATE),
3026 NULL, C.NEXT_SEQ_NUM, C.SEQ_NUM) IS NOT NULL
3027 -- End Bug 2132288, 2442009
3028 -- new clause 2640489, SIMPLIFY FOR CBO
3029 AND (S.ORDER_TYPE = 18
3030 OR R.PAST_DUE_SUPPLY_CUTOFF_FENCE is NULL
3031 OR C.NEXT_SEQ_NUM >= p_sysdate_seq_num - R.PAST_DUE_SUPPLY_CUTOFF_FENCE)
3032 AND C.NEXT_DATE >= DECODE(S.ORDER_TYPE, 27, TRUNC(l_sysdate),
3033 28, TRUNC(l_sysdate),
3034 C.NEXT_DATE)
3035 AND C.NEXT_DATE < NVL(p_itf, C.NEXT_DATE + 1)
3036 AND (R.DEMAND_CLASS_ATP_FLAG <> 1
3037 OR S.ORDER_TYPE = 5
3038 OR NVL(S.DEMAND_CLASS, NVL(p_default_dmd_class,'@@@')) =
3039 NVL(P_DEMAND_CLASS, NVL(p_default_dmd_class,'@@@')) )
3040 --- filter out non-atpable sub-inventories
3041 AND MSI.plan_id (+) = p_plan_id
3042 AND MSI.organization_id (+) = p_org_id
3043 AND MSI.sr_instance_id (+) = p_instance_id
3044 -- AND S.subinventory_code = MSI.sub_inventory_code
3045 AND MSI.sub_inventory_code (+) = S.subinventory_code
3046 AND NVL(MSI.inventory_atp_code,1) <> 2 -- filter out non-atpable subinventories
3047 -- SQL Query changes End 2640489
3048 )
3049 ;
3050
3051 EXCEPTION
3052 WHEN OTHERS THEN
3053 IF PG_DEBUG in ('Y', 'C') THEN
3054 msc_sch_wb.atp_debug('Get_Mat_Avail_Pf_Ods_Dtls: ' || 'Error occurred: ' || to_char(sqlcode) || ':' || SQLERRM);
3055 END IF;
3056 x_return_status := FND_API.G_RET_STS_ERROR;
3057
3058 END Get_Mat_Avail_Pf_Ods_Dtls;
3059
3060 /*--Get_Mat_Avail_Pf_Pds_Dtls-----------------------------------------------------------
3061 | o Called for unallocated Time Phased PF ATP with Details.
3062 | o The supply demand SQL inserts following in msc_atp_sd_details_temp table:
3063 | - Bucketed demands (origination type 51) for member item upto ATF from
3064 | msc_alloc_demands table.
3065 | - Bucketed demands for family after ATF from msc_alloc_demands table.
3066 | - Rollup supplies (order type 50) for member item upto ATF from
3067 | msc_alloc_supplies table.
3068 | - Rollup supplies for family after ATF from msc_alloc_supplies table.
3069 | o Other important differences from non PF SQLs are:
3070 | - Columns Pf_Display_Flag, Original_Demand_Quantity and Original_Demand_Date
3071 | in msc_atp_sd_details_temp table are populated for demands.
3072 | - Column Original_Supply_Demand_Type is populated for demands and supplies
3073 | and stores the supply demand type of parent supplies and demands.
3074 +-------------------------------------------------------------------------------------*/
3075 PROCEDURE Get_Mat_Avail_Pf_Pds_Dtls (
3076 p_sr_member_id IN NUMBER,
3077 p_sr_family_id IN NUMBER,
3078 p_org_id IN NUMBER,
3079 p_instance_id IN NUMBER,
3080 p_plan_id IN NUMBER,
3081 p_itf IN DATE,
3082 p_level IN NUMBER,
3083 p_scenario_id IN NUMBER,
3084 p_identifier IN NUMBER,
3085 x_return_status OUT NOCOPY VARCHAR2
3086 ) IS
3087 l_null_num NUMBER;
3088 l_null_char VARCHAR2(1);
3089 l_null_date DATE; --bug3814584
3090 l_sysdate DATE := sysdate;
3091
3092 BEGIN
3093 IF PG_DEBUG in ('Y', 'C') THEN
3094 msc_sch_wb.atp_debug('Begin Get_Mat_Avail_Pf_Pds_Dtls');
3095 END IF;
3096
3097 -- Initializing API return code
3098 x_return_status := FND_API.G_RET_STS_SUCCESS;
3099
3100 INSERT INTO msc_atp_sd_details_temp (
3101 ATP_Level,
3102 Order_line_id,
3103 Scenario_Id,
3104 Inventory_Item_Id,
3105 Request_Item_Id,
3106 Organization_Id,
3107 Department_Id,
3108 Resource_Id,
3109 Supplier_Id,
3110 Supplier_Site_Id,
3111 From_Organization_Id,
3112 From_Location_Id,
3113 To_Organization_Id,
3114 To_Location_Id,
3115 Ship_Method,
3116 UOM_code,
3117 Supply_Demand_Type,
3118 Supply_Demand_Source_Type,
3119 Supply_Demand_Source_Type_Name,
3120 Identifier1,
3121 Identifier2,
3122 Identifier3,
3123 Identifier4,
3124 Allocated_Quantity,
3125 Supply_Demand_Date,
3126 Disposition_Type,
3127 Disposition_Name,
3128 Pegging_Id,
3129 End_Pegging_Id,
3130 Pf_Display_Flag,
3131 Supply_Demand_Quantity,
3132 Original_Demand_Quantity,
3133 Original_Demand_Date,
3134 Original_Item_Id,
3135 Original_Supply_Demand_Type,
3136 creation_date,
3137 created_by,
3138 last_update_date,
3139 last_updated_by,
3140 last_update_login,
3141 ORIG_CUSTOMER_SITE_NAME,--bug3263368
3142 ORIG_CUSTOMER_NAME, --bug3263368
3143 ORIG_DEMAND_CLASS, --bug3263368
3144 ORIG_REQUEST_DATE, --bug3263368
3145 Inventory_Item_Name --bug3579625
3146 )
3147 (
3148 SELECT p_level col1,
3149 p_identifier col2,
3150 p_scenario_id col3,
3151 p_sr_family_id col4,
3152 p_sr_member_id col5,
3153 p_org_id col6,
3154 l_null_num col7,
3155 l_null_num col8,
3156 l_null_num col9,
3157 l_null_num col10,
3158 l_null_num col11,
3159 l_null_num col12,
3160 l_null_num col13,
3161 l_null_num col14,
3162 l_null_char col15,
3163 I.UOM_CODE col16,
3164 1 col17, -- demand
3165 AD.ORIGINATION_TYPE col18,
3166 l_null_char col19,
3167 AD.SR_INSTANCE_ID col20,
3168 l_null_num col21,
3169 AD.PARENT_DEMAND_ID col22,
3170 l_null_num col23,
3171 -1 * AD.ALLOCATED_QUANTITY col24,
3172 TRUNC(AD.DEMAND_DATE) col25, --bug3693892 added trunc
3173 l_null_num col26,
3174 AD.ORDER_NUMBER col27,
3175 l_null_num col28,
3176 l_null_num col29,
3177 AD.Pf_Display_Flag,
3178 -1* NVL(AD.Demand_Quantity, AD.ALLOCATED_QUANTITY),
3179 -1* NVL(AD.Demand_Quantity, AD.ALLOCATED_QUANTITY),
3180 trunc(AD.Original_Demand_Date), --Bug_3693892 added trunc
3181 AD.Original_Item_Id,
3182 AD.Original_Origination_Type,
3183 l_sysdate,
3184 G_USER_ID,
3185 l_sysdate,
3186 G_USER_ID,
3187 G_USER_ID,
3188 MTPS.LOCATION, --bug3263368
3189 MTP.PARTNER_NAME, --bug3263368
3190 AD.DEMAND_CLASS, --bug3263368
3191 AD.REQUEST_DATE, --bug3263368
3192 I2.Item_Name --bug3579625
3193
3194 FROM MSC_SYSTEM_ITEMS I,
3195 MSC_SYSTEM_ITEMS I2, --bug3579625
3196 MSC_ALLOC_DEMANDS AD,
3197 MSC_TRADING_PARTNERS MTP,--bug3263368
3198 MSC_TRADING_PARTNER_SITES MTPS --bug3263368
3199 WHERE I.SR_INVENTORY_ITEM_ID in (p_sr_member_id, p_sr_family_id)
3200 AND I.ORGANIZATION_ID = p_org_id
3201 AND I.SR_INSTANCE_ID = p_instance_id
3202 AND I.PLAN_ID = p_plan_id
3203 AND AD.PLAN_ID = I.PLAN_ID
3204 AND AD.SR_INSTANCE_ID = I.SR_INSTANCE_ID
3205 AND AD.INVENTORY_ITEM_ID = I.INVENTORY_ITEM_ID
3206 AND AD.ORGANIZATION_ID = I.ORGANIZATION_ID
3207 -- bug3579625 Addition join with MSC_SYSTEM_ITEMS (I2)
3208 AND AD.PLAN_ID = I2.PLAN_ID
3209 AND AD.SR_INSTANCE_ID = I2.SR_INSTANCE_ID
3210 AND AD.ORIGINAL_ITEM_ID = I2.INVENTORY_ITEM_ID
3211 AND AD.ORGANIZATION_ID = I2.ORGANIZATION_ID
3212 AND AD.ORIGINATION_TYPE <> 52
3213 AND AD.ALLOCATED_QUANTITY <> 0
3214 --bug3700564 added trunc
3215 AND TRUNC(AD.DEMAND_DATE) < NVL(p_itf, TRUNC(AD.DEMAND_DATE) + 1)
3216 AND AD.SHIP_TO_SITE_ID = MTPS.PARTNER_SITE_ID(+) --bug3263368
3217 AND AD.CUSTOMER_ID = MTP.PARTNER_ID(+)--bug3263368
3218 UNION ALL
3219 SELECT p_level col1,
3220 p_identifier col2,
3221 p_scenario_id col3,
3222 p_sr_family_id col4 ,
3223 p_sr_member_id col5,
3224 p_org_id col6,
3225 l_null_num col7,
3226 l_null_num col8,
3227 l_null_num col9,
3228 l_null_num col10,
3229 l_null_num col11,
3230 l_null_num col12,
3231 l_null_num col13,
3232 l_null_num col14,
3233 l_null_char col15,
3234 I.UOM_CODE col16,
3235 2 col17,
3236 SA.ORDER_TYPE col18,
3237 l_null_char col19,
3238 SA.SR_INSTANCE_ID col20,
3239 l_null_num col21,
3240 SA.PARENT_TRANSACTION_ID col22,
3241 l_null_num col23,
3242 SA.ALLOCATED_QUANTITY col24,
3243 trunc(SA.SUPPLY_DATE) col25, --bug3693892 added trunc
3244 l_null_num col26,
3245 DECODE(SA.ORDER_TYPE, 5, to_char(SA.PARENT_TRANSACTION_ID), SA.ORDER_NUMBER) col27,
3246 l_null_num col28,
3247 l_null_num col29,
3248 l_null_num,
3249 NVL(SA.Supply_Quantity, SA.ALLOCATED_QUANTITY),
3250 l_null_num,
3251 to_date(null),
3252 SA.Original_Item_Id,
3253 SA.Original_Order_Type,
3254 l_sysdate,
3255 G_USER_ID,
3256 l_sysdate,
3257 G_USER_ID,
3258 G_USER_ID,
3259 --null, --bug3263368 ORIG_CUSTOMER_SITE_NAME
3260 --null, --bug3263368 ORIG_CUSTOMER_NAME
3261 --null, --bug3263368 ORIG_DEMAND_CLASS
3262 --null, --bug3263368 ORIG_REQUEST_DATE
3263 l_null_char, --bug3814584
3264 l_null_char, --bug3814584
3265 l_null_char, --bug3814584
3266 l_null_date, --bug3814584
3267 I2.Item_Name --bug3579625
3268 FROM MSC_ALLOC_SUPPLIES SA,
3269 MSC_SYSTEM_ITEMS I,
3270 MSC_SYSTEM_ITEMS I2 --bug3579625
3271 WHERE I.SR_INVENTORY_ITEM_ID in (p_sr_member_id, p_sr_family_id)
3272 AND I.ORGANIZATION_ID = p_org_id
3273 AND I.SR_INSTANCE_ID = p_instance_id
3274 AND I.PLAN_ID = p_plan_id
3275 AND SA.PLAN_ID = I.PLAN_ID
3276 AND SA.SR_INSTANCE_ID = I.SR_INSTANCE_ID
3277 AND SA.INVENTORY_ITEM_ID = I.INVENTORY_ITEM_ID
3278 AND SA.ORGANIZATION_ID = I.ORGANIZATION_ID
3279 -- bug3579625 Addition join with MSC_SYSTEM_ITEMS (I2)
3280 AND SA.PLAN_ID = I2.PLAN_ID
3281 AND SA.SR_INSTANCE_ID = I2.SR_INSTANCE_ID
3282 AND SA.ORIGINAL_ITEM_ID = I2.INVENTORY_ITEM_ID
3283 AND SA.ORGANIZATION_ID = I2.ORGANIZATION_ID
3284 --bug3700564 added trunc
3285 AND TRUNC(SA.SUPPLY_DATE) >= DECODE(SA.ORIGINAL_ORDER_TYPE,
3286 27, TRUNC(SYSDATE),
3287 28, TRUNC(SYSDATE),
3288 TRUNC(SA.SUPPLY_DATE))
3289 AND SA.ALLOCATED_QUANTITY <> 0
3290 AND TRUNC(SA.SUPPLY_DATE) < NVL(p_itf, TRUNC(SA.SUPPLY_DATE) + 1)
3291 );
3292
3293 EXCEPTION
3294 WHEN OTHERS THEN
3295 IF PG_DEBUG in ('Y', 'C') THEN
3296 msc_sch_wb.atp_debug('Get_Mat_Avail_Pf_Pds_Dtls: ' || 'Error occurred: ' || to_char(sqlcode) || ':' || SQLERRM);
3297 END IF;
3298 x_return_status := FND_API.G_RET_STS_ERROR;
3299
3300 END Get_Mat_Avail_Pf_Pds_Dtls;
3301
3302 /*--Set_Alloc_Rule_Variables------------------------------------------------------
3303 | o Called from Atp_Check procedure for Allocated Time Phased PF ATP.
3304 | o This procedure sets global variables that tells:
3305 | - Allocation rule to be used for member item inside ATF
3306 | - Allocation rule to be used for family item outside ATF
3307 +-------------------------------------------------------------------------------*/
3308 PROCEDURE Set_Alloc_Rule_Variables (
3309 p_member_id IN NUMBER,
3310 p_family_id IN NUMBER,
3311 p_org_id IN NUMBER,
3312 p_instance_id IN NUMBER,
3313 p_demand_class IN VARCHAR2,
3314 p_atf_date IN DATE,
3315 x_return_status OUT NOCOPY VARCHAR2
3316 ) IS
3317 l_alloc_percent NUMBER;
3318 BEGIN
3319 IF PG_DEBUG in ('Y', 'C') THEN
3320 msc_sch_wb.atp_debug('******* Begin Set_Alloc_Rule_Variables **********');
3321 msc_sch_wb.atp_debug('Set_Alloc_Rule_Variables: p_member_id: ' || p_member_id);
3322 msc_sch_wb.atp_debug('Set_Alloc_Rule_Variables: p_family_id: ' || p_family_id);
3323 msc_sch_wb.atp_debug('Set_Alloc_Rule_Variables: p_instance_id: ' || p_instance_id);
3324 msc_sch_wb.atp_debug('Set_Alloc_Rule_Variables: p_org_id: ' || p_org_id);
3325 msc_sch_wb.atp_debug('Set_Alloc_Rule_Variables: p_demand_class: ' || p_demand_class);
3326 msc_sch_wb.atp_debug('Set_Alloc_Rule_Variables: p_atf_date: ' || p_atf_date);
3327 msc_sch_wb.atp_debug('Set_Alloc_Rule_Variables: G_ALLOCATION_METHOD: ' || MSC_ATP_PVT.G_ALLOCATION_METHOD);
3328 msc_sch_wb.atp_debug('Set_Alloc_Rule_Variables: G_HIERARCHY_PROFILE: ' || MSC_AATP_PVT.G_HIERARCHY_PROFILE);
3329 END IF;
3330
3331 -- Initializing API return code
3332 x_return_status := FND_API.G_RET_STS_SUCCESS;
3333
3334 IF MSC_ATP_PVT.G_ALLOCATION_METHOD = 1 THEN
3335 /* Demand priority allocated ATP
3336 Here we always use allocation rule from family inside/outside ATF
3337 */
3338 IF MSC_AATP_PVT.G_HIERARCHY_PROFILE = 1 THEN
3339 MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF := 'N';
3340 MSC_ATP_PVT.G_PF_RULE_OUTSIDE_ATF := 'Y';
3341 END IF;
3342 ELSE
3343 /* Rule based allocated ATP
3344 Here we support following scenarios:
3345 - Allocation rule defined only at family item
3346 - Allocation rule defined for the member and PF item
3347
3348 ATP logic:
3349 - Check allocation rule on ATF date for member item.
3350 o IF defined use allocation rule from member within ATF
3351 ELSE use allocation rule from family within ATF
3352 - Always use allocation rule from family outside ATF
3353 */
3354 IF PG_DEBUG in ('Y', 'C') THEN
3355 msc_sch_wb.atp_debug('Set_Alloc_Rule_Variables: ' || 'Determine whether rule exist for member item within ATF');
3356 END IF;
3357
3358 IF MSC_AATP_PVT.G_HIERARCHY_PROFILE = 1 THEN
3359 BEGIN
3360 SELECT allocation_percent
3361 INTO l_alloc_percent
3362 FROM msc_item_hierarchy_mv
3363 WHERE inventory_item_id = p_member_id
3364 AND organization_id = p_org_id
3365 AND sr_instance_id = p_instance_id
3366 AND p_atf_date BETWEEN effective_date AND disable_date
3367 AND level_id = -1
3368 AND rownum = 1;
3369
3370 IF l_alloc_percent is not null THEN
3371 MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF := 'Y';
3372 ELSE
3373 MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF := 'N';
3374 END IF;
3375 EXCEPTION
3376 WHEN NO_DATA_FOUND THEN
3377 IF PG_DEBUG in ('Y', 'C') THEN
3378 msc_sch_wb.atp_debug('Set_Alloc_Rule_Variables: ' || 'Alloc Rule not found at member level');
3379 END IF;
3380 MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF := 'N';
3381 END;
3382 ELSE
3383 BEGIN
3384 SELECT allocation_percent
3385 INTO l_alloc_percent
3386 FROM msc_item_hierarchy_mv
3387 WHERE inventory_item_id = p_member_id
3388 AND organization_id = p_org_id
3389 AND sr_instance_id = p_instance_id
3390 AND p_atf_date BETWEEN effective_date AND disable_date
3391 AND level_id <> -1
3392 AND rownum = 1;
3393
3394 IF l_alloc_percent is not null THEN
3395 MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF := 'Y';
3396 ELSE
3397 MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF := 'N';
3398 END IF;
3399 EXCEPTION
3400 WHEN NO_DATA_FOUND THEN
3401 IF PG_DEBUG in ('Y', 'C') THEN
3402 msc_sch_wb.atp_debug('Set_Alloc_Rule_Variables: ' || 'Alloc Rule not found for member within ATF');
3403 END IF;
3404 MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF := 'N';
3405 END;
3406 END IF;
3407
3408 IF PG_DEBUG in ('Y', 'C') THEN
3409 msc_sch_wb.atp_debug('Set_Alloc_Rule_Variables: ' || 'Always use rule for family item outside ATF');
3410 END IF;
3411 MSC_ATP_PVT.G_PF_RULE_OUTSIDE_ATF := 'Y';
3412 END IF;
3413
3414 IF PG_DEBUG in ('Y', 'C') THEN
3415 msc_sch_wb.atp_debug('Set_Alloc_Rule_Variables: ' || 'G_MEM_RULE_WITHIN_ATF = ' || MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF);
3416 msc_sch_wb.atp_debug('Set_Alloc_Rule_Variables: ' || 'G_PF_RULE_OUTSIDE_ATF = ' || MSC_ATP_PVT.G_PF_RULE_OUTSIDE_ATF);
3417 END IF;
3418
3419 EXCEPTION
3420 WHEN OTHERS THEN
3421 IF PG_DEBUG in ('Y', 'C') THEN
3422 msc_sch_wb.atp_debug('Set_Alloc_Rule_Variables: ' || 'Error occurred: ' || to_char(sqlcode) || ':' || SQLERRM);
3423 END IF;
3424 x_return_status := FND_API.G_RET_STS_ERROR;
3425
3426 END Set_Alloc_Rule_Variables;
3427
3428 /*--Item_Alloc_Avail_Pf-----------------------------------------------------------
3429 | o Called from Item_Alloc_Cum_Atp procedure for Rule based Allocated
3430 | Time Phased PF ATP.
3431 | o The supply demand SQL in this procedure gets following:
3432 | - Allocated Bucketed demands (origination type 51) for member item
3433 | upto ATF from msc_alloc_demands table.
3434 | - Allocated Bucketed demands for family after ATF from msc_alloc_demands
3435 | table.
3436 | - Allocated Rollup supplies (order type 50) for member item upto ATF
3437 | from msc_alloc_supplies table.
3438 | - Allocated Rollup supplies for family after ATF from msc_alloc_supplies
3439 | table.
3440 +-------------------------------------------------------------------------------*/
3441 PROCEDURE Item_Alloc_Avail_Pf (
3442 p_member_id IN NUMBER,
3443 p_family_id IN NUMBER,
3444 p_org_id IN NUMBER,
3445 p_instance_id IN NUMBER,
3446 p_plan_id IN NUMBER,
3447 p_demand_class IN VARCHAR2,
3448 p_level_id IN NUMBER,
3449 p_itf IN DATE,
3450 p_sys_next_date IN DATE, --bug3099066
3451 p_atf_date IN DATE,
3452 x_atp_dates OUT NOCOPY MRP_ATP_PUB.date_arr,
3453 x_atp_qtys OUT NOCOPY MRP_ATP_PUB.number_arr,
3454 x_return_status OUT NOCOPY VARCHAR2
3455 ) IS
3456
3457 BEGIN
3458 IF PG_DEBUG in ('Y', 'C') THEN
3459 msc_sch_wb.atp_debug('******* Begin Item_Alloc_Avail_Pf **********');
3460 msc_sch_wb.atp_debug('Item_Alloc_Avail_Pf: p_member_id: ' || p_member_id);
3461 msc_sch_wb.atp_debug('Item_Alloc_Avail_Pf: p_family_id: ' || p_family_id);
3462 msc_sch_wb.atp_debug('Item_Alloc_Avail_Pf: p_instance_id: ' || p_instance_id);
3463 msc_sch_wb.atp_debug('Item_Alloc_Avail_Pf: p_plan_id: ' || p_plan_id);
3464 msc_sch_wb.atp_debug('Item_Alloc_Avail_Pf: p_demand_class: ' || p_demand_class);
3465 msc_sch_wb.atp_debug('Item_Alloc_Avail_Pf: p_level_id: ' || p_level_id);
3466 END IF;
3467
3468 -- Initializing API return code
3469 x_return_status := FND_API.G_RET_STS_SUCCESS;
3470
3471 SELECT SD_DATE,
3472 SUM(SD_QTY)
3473 BULK COLLECT INTO
3474 x_atp_dates,
3475 x_atp_qtys
3476 FROM (
3477 SELECT --TRUNC(AD.DEMAND_DATE) SD_DATE, --bug3099066
3478 GREATEST(TRUNC(AD.DEMAND_DATE),p_sys_next_date) SD_DATE,--3099066
3479 --bug3333114 removed trunc from p_sys_next_date as it is already trucate
3480 -1* AD.ALLOCATED_QUANTITY*
3481 DECODE(DECODE(MSC_AATP_PVT.G_HIERARCHY_PROFILE,
3482 1, decode(AD.Original_Origination_Type,
3483 6, decode(AD.SOURCE_ORGANIZATION_ID,
3484 NULL, DECODE(AD.DEMAND_CLASS, null, null,
3485 DECODE(p_demand_class, '-1',
3486 MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(
3487 null, null, Decode(sign(trunc(AD.Demand_Date) - p_atf_date),
3488 1, p_family_id,
3489 Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
3490 'Y', AD.Original_Item_Id,
3491 p_family_id)), p_org_id,
3492 p_instance_id, trunc(AD.Demand_Date),
3493 p_level_id, AD.DEMAND_CLASS),
3494 AD.DEMAND_CLASS)),
3495 -23453, DECODE(AD.DEMAND_CLASS, null, null,
3496 DECODE(p_demand_class, '-1',
3497 MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(
3498 null, null, Decode(sign(trunc(AD.Demand_Date) - p_atf_date),
3499 1, p_family_id,
3500 Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
3501 'Y', AD.Original_Item_Id,
3502 p_family_id)), p_org_id,
3503 p_instance_id, trunc(AD.Demand_Date),
3504 p_level_id, AD.DEMAND_CLASS),
3505 AD.DEMAND_CLASS)),
3506 AD.ORGANIZATION_ID, DECODE(AD.DEMAND_CLASS, null, null,
3507 DECODE(p_demand_class, '-1',
3508 MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(
3509 null, null, Decode(sign(trunc(AD.Demand_Date) - p_atf_date),
3510 1, p_family_id,
3511 Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
3512 'Y', AD.Original_Item_Id,
3513 p_family_id)), p_org_id,
3514 p_instance_id, trunc(AD.Demand_Date),
3515 p_level_id, AD.DEMAND_CLASS),
3516 AD.DEMAND_CLASS)), TO_CHAR(NULL)),
3517 30, decode(AD.SOURCE_ORGANIZATION_ID,
3518 NULL, DECODE(AD.DEMAND_CLASS, null, null,
3519 DECODE(p_demand_class, '-1',
3520 MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(
3521 null, null, Decode(sign(trunc(AD.Demand_Date) - p_atf_date),
3522 1, p_family_id,
3523 Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
3524 'Y', AD.Original_Item_Id,
3525 p_family_id)), p_org_id,
3526 p_instance_id, trunc(AD.Demand_Date),
3527 p_level_id, AD.DEMAND_CLASS),
3528 AD.DEMAND_CLASS)),
3529 -23453, DECODE(AD.DEMAND_CLASS, null, null,
3530 DECODE(p_demand_class, '-1',
3531 MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(
3532 null, null, Decode(sign(trunc(AD.Demand_Date) - p_atf_date),
3533 1, p_family_id,
3534 Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
3535 'Y', AD.Original_Item_Id,
3536 p_family_id)), p_org_id,
3537 p_instance_id, trunc(AD.Demand_Date),
3538 p_level_id, AD.DEMAND_CLASS),
3539 AD.DEMAND_CLASS)),
3540 AD.ORGANIZATION_ID, DECODE(AD.DEMAND_CLASS, null, null,
3541 DECODE(p_demand_class, '-1',
3542 MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(
3543 null, null, Decode(sign(trunc(AD.Demand_Date) - p_atf_date),
3544 1, p_family_id,
3545 Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
3546 'Y', AD.Original_Item_Id,
3547 p_family_id)), p_org_id,
3548 p_instance_id, trunc(AD.Demand_Date),
3549 p_level_id, AD.DEMAND_CLASS),
3550 AD.DEMAND_CLASS)), TO_CHAR(NULL)),
3551 DECODE(AD.DEMAND_CLASS, null, null,
3552 DECODE(p_demand_class, '-1',
3553 MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(
3554 null, null, Decode(sign(trunc(AD.Demand_Date) - p_atf_date),
3555 1, p_family_id,
3556 Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
3557 'Y', AD.Original_Item_Id,
3558 p_family_id)), p_org_id,
3559 p_instance_id, trunc(AD.Demand_Date),
3560 p_level_id, AD.DEMAND_CLASS),
3561 AD.DEMAND_CLASS))),
3562 2, DECODE(AD.CUSTOMER_ID, NULL, TO_CHAR(NULL),
3563 0, TO_CHAR(NULL),
3564 decode(AD.Original_Origination_Type,
3565 6, decode(AD.SOURCE_ORGANIZATION_ID,
3566 NULL, MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(
3567 AD.CUSTOMER_ID, AD.SHIP_TO_SITE_ID, Decode(sign(trunc(AD.Demand_Date) - p_atf_date),
3568 1, p_family_id,
3569 Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
3570 'Y', AD.Original_Item_Id,
3571 p_family_id)),
3572 p_org_id, p_instance_id, trunc(AD.Demand_Date),
3573 p_level_id, NULL),
3574 -23453, MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(
3575 AD.CUSTOMER_ID, AD.SHIP_TO_SITE_ID, Decode(sign(trunc(AD.Demand_Date) - p_atf_date),
3576 1, p_family_id,
3577 Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
3578 'Y', AD.Original_Item_Id,
3579 p_family_id)),
3580 p_org_id, p_instance_id, trunc(AD.Demand_Date),
3581 p_level_id, NULL),
3582 AD.ORGANIZATION_ID, MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(
3583 AD.CUSTOMER_ID, AD.SHIP_TO_SITE_ID, Decode(sign(trunc(AD.Demand_Date) - p_atf_date),
3584 1, p_family_id,
3585 Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
3586 'Y', AD.Original_Item_Id,
3587 p_family_id)),
3588 p_org_id, p_instance_id, trunc(AD.Demand_Date),
3589 p_level_id, NULL),
3590 TO_CHAR(NULL)),
3591 30, decode(AD.SOURCE_ORGANIZATION_ID,
3592 NULL, MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(
3593 AD.CUSTOMER_ID, AD.SHIP_TO_SITE_ID, Decode(sign(trunc(AD.Demand_Date) - p_atf_date),
3594 1, p_family_id,
3595 Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
3596 'Y', AD.Original_Item_Id,
3597 p_family_id)),
3598 p_org_id, p_instance_id, trunc(AD.Demand_Date),
3599 p_level_id, NULL),
3600 -23453, MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(
3601 AD.CUSTOMER_ID, AD.SHIP_TO_SITE_ID, Decode(sign(trunc(AD.Demand_Date) - p_atf_date),
3602 1, p_family_id,
3603 Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
3604 'Y', AD.Original_Item_Id,
3605 p_family_id)),
3606 p_org_id, p_instance_id, trunc(AD.Demand_Date),
3607 p_level_id, NULL),
3608 AD.ORGANIZATION_ID, MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(
3609 AD.CUSTOMER_ID, AD.SHIP_TO_SITE_ID, Decode(sign(trunc(AD.Demand_Date) - p_atf_date),
3610 1, p_family_id,
3611 Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
3612 'Y', AD.Original_Item_Id,
3613 p_family_id)),
3614 p_org_id, p_instance_id, trunc(AD.Demand_Date),
3615 p_level_id, NULL),
3616 TO_CHAR(NULL)),
3617 MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(
3618 AD.CUSTOMER_ID, AD.SHIP_TO_SITE_ID,
3619 Decode(sign(trunc(AD.Demand_Date) - p_atf_date),
3620 1, p_family_id,
3621 Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
3622 'Y', AD.Original_Item_Id,
3623 p_family_id)), p_org_id, p_instance_id,
3624 trunc(AD.Demand_Date),p_level_id, NULL)))),
3625 p_demand_class, 1,
3626 Decode(AD.Demand_Class, NULL, --4365873 If l_demand_class is not null and demand class is populated
3627 -- on supplies record then 0 should be allocated.
3628 MSC_AATP_FUNC.Get_Item_Demand_Alloc_Percent(p_plan_id,
3629 AD.PARENT_DEMAND_ID,
3630 trunc(AD.Demand_Date),
3631 AD.USING_ASSEMBLY_ITEM_ID,
3632 DECODE(AD.SOURCE_ORGANIZATION_ID,
3633 -23453, null,
3634 AD.SOURCE_ORGANIZATION_ID),
3635 Decode(sign(trunc(AD.Demand_Date) - p_atf_date),
3636 1, p_family_id,
3637 Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
3638 'Y', AD.Original_Item_Id,
3639 p_family_id)),
3640 p_org_id,
3641 p_instance_id,
3642 AD.Original_Origination_Type,
3643 DECODE(MSC_AATP_PVT.G_HIERARCHY_PROFILE,
3644 1, decode(AD.Original_Origination_Type,
3645 6, decode(AD.SOURCE_ORGANIZATION_ID,
3646 NULL, DECODE(AD.DEMAND_CLASS, null, null,
3647 DECODE(p_demand_class, '-1',
3648 MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(
3649 null, null, Decode(sign(trunc(AD.Demand_Date) - p_atf_date),
3650 1, p_family_id,
3651 Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
3652 'Y', AD.Original_Item_Id,
3653 p_family_id)), p_org_id,
3654 p_instance_id, trunc(AD.Demand_Date),
3655 p_level_id, AD.DEMAND_CLASS),
3656 AD.DEMAND_CLASS)),
3657 -23453, DECODE(AD.DEMAND_CLASS, null, null,
3658 DECODE(p_demand_class, '-1',
3659 MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(
3660 null, null, Decode(sign(trunc(AD.Demand_Date) - p_atf_date),
3661 1, p_family_id,
3662 Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
3663 'Y', AD.Original_Item_Id,
3664 p_family_id)), p_org_id,
3665 p_instance_id, trunc(AD.Demand_Date),
3666 p_level_id, AD.DEMAND_CLASS),
3667 AD.DEMAND_CLASS)),
3668 AD.ORGANIZATION_ID, DECODE(AD.DEMAND_CLASS, null, null,
3669 DECODE(p_demand_class, '-1',
3670 MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(
3671 null, null, Decode(sign(trunc(AD.Demand_Date) - p_atf_date),
3672 1, p_family_id,
3673 Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
3674 'Y', AD.Original_Item_Id,
3675 p_family_id)), p_org_id,
3676 p_instance_id, trunc(AD.Demand_Date),
3677 p_level_id, AD.DEMAND_CLASS),
3678 AD.DEMAND_CLASS)),
3679 p_demand_class),
3680 30, decode(AD.SOURCE_ORGANIZATION_ID,
3681 NULL, DECODE(AD.DEMAND_CLASS, null, null,
3682 DECODE(p_demand_class, '-1',
3683 MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(
3684 null, null, Decode(sign(trunc(AD.Demand_Date) - p_atf_date),
3685 1, p_family_id,
3686 Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
3687 'Y', AD.Original_Item_Id,
3688 p_family_id)), p_org_id,
3689 p_instance_id, trunc(AD.Demand_Date),
3690 p_level_id, AD.DEMAND_CLASS),
3691 AD.DEMAND_CLASS)),
3692 -23453, DECODE(AD.DEMAND_CLASS, null, null,
3693 DECODE(p_demand_class, '-1',
3694 MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(
3695 null, null, Decode(sign(trunc(AD.Demand_Date) - p_atf_date),
3696 1, p_family_id,
3697 Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
3698 'Y', AD.Original_Item_Id,
3699 p_family_id)), p_org_id,
3700 p_instance_id, trunc(AD.Demand_Date),
3701 p_level_id, AD.DEMAND_CLASS),
3702 AD.DEMAND_CLASS)),
3703 AD.ORGANIZATION_ID, DECODE(AD.DEMAND_CLASS, null, null,
3704 DECODE(p_demand_class, '-1',
3705 MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(
3706 null, null, Decode(sign(trunc(AD.Demand_Date) - p_atf_date),
3707 1, p_family_id,
3708 Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
3709 'Y', AD.Original_Item_Id,
3710 p_family_id)), p_org_id,
3711 p_instance_id, trunc(AD.Demand_Date),
3712 p_level_id, AD.DEMAND_CLASS),
3713 AD.DEMAND_CLASS)),
3714 p_demand_class),
3715 DECODE(AD.DEMAND_CLASS, null, null,
3716 DECODE(p_demand_class, '-1',
3717 MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(
3718 null, null, Decode(sign(trunc(AD.Demand_Date) - p_atf_date),
3719 1, p_family_id,
3720 Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
3721 'Y', AD.Original_Item_Id,
3722 p_family_id)), p_org_id,
3723 p_instance_id, trunc(AD.Demand_Date),
3724 p_level_id, AD.DEMAND_CLASS),
3725 AD.DEMAND_CLASS))),
3726 2, DECODE(AD.CUSTOMER_ID, NULL, p_demand_class,
3727 0, p_demand_class,
3728 decode(AD.Original_Origination_Type,
3729 6, decode(AD.SOURCE_ORGANIZATION_ID,
3730 NULL, MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(
3731 AD.CUSTOMER_ID, AD.SHIP_TO_SITE_ID, Decode(sign(trunc(AD.Demand_Date) - p_atf_date),
3732 1, p_family_id,
3733 Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
3734 'Y', AD.Original_Item_Id,
3735 p_family_id)),
3736 p_org_id, p_instance_id, trunc(AD.Demand_Date),
3737 p_level_id, NULL),
3738 -23453, MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(
3739 AD.CUSTOMER_ID, AD.SHIP_TO_SITE_ID, Decode(sign(trunc(AD.Demand_Date) - p_atf_date),
3740 1, p_family_id,
3741 Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
3742 'Y', AD.Original_Item_Id,
3743 p_family_id)),
3744 p_org_id, p_instance_id, trunc(AD.Demand_Date),
3745 p_level_id, NULL),
3746 AD.ORGANIZATION_ID, MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(
3747 AD.CUSTOMER_ID, AD.SHIP_TO_SITE_ID, Decode(sign(trunc(AD.Demand_Date) - p_atf_date),
3748 1, p_family_id,
3749 Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
3750 'Y', AD.Original_Item_Id,
3751 p_family_id)),
3752 p_org_id, p_instance_id, trunc(AD.Demand_Date),
3753 p_level_id, NULL),
3754 p_demand_class),
3755 30, decode(AD.SOURCE_ORGANIZATION_ID,
3756 NULL, MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(
3757 AD.CUSTOMER_ID, AD.SHIP_TO_SITE_ID, Decode(sign(trunc(AD.Demand_Date) - p_atf_date),
3758 1, p_family_id,
3759 Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
3760 'Y', AD.Original_Item_Id,
3761 p_family_id)),
3762 p_org_id, p_instance_id, trunc(AD.Demand_Date),
3763 p_level_id, NULL),
3764 -23453, MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(
3765 AD.CUSTOMER_ID, AD.SHIP_TO_SITE_ID, Decode(sign(trunc(AD.Demand_Date) - p_atf_date),
3766 1, p_family_id,
3767 Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
3768 'Y', AD.Original_Item_Id,
3769 p_family_id)),
3770 p_org_id, p_instance_id, trunc(AD.Demand_Date),
3771 p_level_id, NULL),
3772 AD.ORGANIZATION_ID, MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(
3773 AD.CUSTOMER_ID, AD.SHIP_TO_SITE_ID, Decode(sign(trunc(AD.Demand_Date) - p_atf_date),
3774 1, p_family_id,
3775 Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
3776 'Y', AD.Original_Item_Id,
3777 p_family_id)),
3778 p_org_id, p_instance_id, trunc(AD.Demand_Date),
3779 p_level_id, NULL),
3780 p_demand_class),
3781 MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(AD.CUSTOMER_ID, AD.SHIP_TO_SITE_ID,
3782 Decode(sign(trunc(AD.Demand_Date) - p_atf_date),
3783 1, p_family_id,
3784 Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
3785 'Y', AD.Original_Item_Id,
3786 p_family_id)), p_org_id, p_instance_id,
3787 trunc(AD.Demand_Date),p_level_id, NULL)))),
3788 p_demand_class,
3789 p_level_id),0)) SD_QTY --4365873
3790 FROM MSC_ALLOC_DEMANDS AD
3791 WHERE AD.PLAN_ID = p_plan_id
3792 AND AD.SR_INSTANCE_ID = p_instance_id
3793 AND AD.INVENTORY_ITEM_ID in (p_member_id,p_family_id)
3794 AND AD.ORGANIZATION_ID = p_org_id
3795 AND AD.ORIGINATION_TYPE <> 52
3796 AND AD.ALLOCATED_QUANTITY <> 0
3797 --bug3700564 added trunc
3798 AND TRUNC(AD.DEMAND_DATE) < NVL(p_itf, TRUNC(AD.DEMAND_DATE) + 1)
3799 UNION ALL
3800 SELECT --TRUNC(SA.SUPPLY_DATE) SD_DATE, --bug3099066
3801 GREATEST(TRUNC(SA.SUPPLY_DATE),p_sys_next_date) SD_DATE,--3099066
3802 SA.ALLOCATED_QUANTITY*
3803 DECODE(DECODE(MSC_AATP_PVT.G_HIERARCHY_PROFILE,
3804 1, DECODE(SA.DEMAND_CLASS, null, null,
3805 DECODE(p_demand_class, '-1',
3806 MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(
3807 null,
3808 null,
3809 Decode(sign(trunc(SA.Supply_Date) - p_atf_date),
3810 1, p_family_id,
3811 Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
3812 'Y', SA.Original_Item_Id,
3813 p_family_id)),
3814 p_org_id,
3815 p_instance_id,
3816 TRUNC(SA.SUPPLY_DATE),
3817 p_level_id,
3818 SA.DEMAND_CLASS),
3819 SA.DEMAND_CLASS)),
3820 2, DECODE(SA.CUSTOMER_ID, NULL, TO_CHAR(NULL),
3821 0, TO_CHAR(NULL),
3822 MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(
3823 SA.CUSTOMER_ID,
3824 SA.SHIP_TO_SITE_ID,
3825 Decode(sign(trunc(SA.Supply_Date) - p_atf_date),
3826 1, p_family_id,
3827 Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
3828 'Y', SA.Original_Item_Id,
3829 p_family_id)),
3830 p_org_id,
3831 p_instance_id,
3832 TRUNC(SA.SUPPLY_DATE),
3833 p_level_id,
3834 NULL))),
3835 p_demand_class, 1,
3836 NULL, nvl(MIHM.allocation_percent/100,1), --4365873
3837 /*NVL(MSC_AATP_FUNC.Get_DC_Alloc_Percent(
3838 p_instance_id,
3839 Decode(sign(trunc(SA.Supply_Date) - p_atf_date),
3840 1, p_family_id,
3841 Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
3842 'Y', SA.Original_Item_Id,
3843 p_family_id)),
3844 p_org_id,
3845 null,
3846 null,
3847 p_demand_class,
3848 TRUNC(SA.SUPPLY_DATE)),
3849 1),*/
3850 DECODE(
3851 MIHM.allocation_percent/100, --4365873
3852 /*DECODE(MSC_AATP_FUNC.Get_DC_Alloc_Percent(
3853 p_instance_id,
3854 Decode(sign(trunc(SA.Supply_Date) - p_atf_date),
3855 1, p_family_id,
3856 Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
3857 'Y', SA.Original_Item_Id,
3858 p_family_id)),
3859 p_org_id,
3860 null,
3861 null,
3862 p_demand_class,
3863 TRUNC(SA.SUPPLY_DATE)),*/
3864 NULL, 1,
3865 0)) SD_QTY
3866 FROM MSC_ALLOC_SUPPLIES SA, MSC_ITEM_HIERARCHY_MV MIHM --4365873
3867 WHERE SA.PLAN_ID = p_plan_id
3868 AND SA.SR_INSTANCE_ID = p_instance_id
3869 AND SA.INVENTORY_ITEM_ID in (p_member_id, p_family_id)
3870 AND SA.ORGANIZATION_ID = p_org_id
3871 AND SA.ALLOCATED_QUANTITY <> 0
3872 --bug3700564 added trunc
3873 AND TRUNC(SA.SUPPLY_DATE) >= DECODE(SA.ORIGINAL_ORDER_TYPE,
3874 27, TRUNC(SYSDATE),
3875 28, TRUNC(SYSDATE),
3876 TRUNC(SA.SUPPLY_DATE))
3877 AND TRUNC(SA.SUPPLY_DATE) < NVL(p_itf, TRUNC(SA.SUPPLY_DATE) + 1)
3878 --4365874
3879 --5220274 if the rule is assigned to family only then use family id.
3880 AND Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
3881 'N', p_family_id,
3882 SA.INVENTORY_ITEM_ID) = MIHM.INVENTORY_ITEM_ID(+)
3883 AND SA.SR_INSTANCE_ID = MIHM.SR_INSTANCE_ID (+)
3884 AND SA.ORGANIZATION_ID = MIHM.ORGANIZATION_ID (+)
3885 AND decode(MIHM.level_id (+),-1,1,2) = decode(MSC_AATP_PVT.G_HIERARCHY_PROFILE,1,1,2)
3886 AND TRUNC(SA.SUPPLY_DATE) >= MIHM.effective_date (+)
3887 AND TRUNC(SA.SUPPLY_DATE) <= MIHM.disable_date (+)
3888 AND MIHM.demand_class (+) = p_demand_class
3889 )
3890 GROUP BY SD_DATE
3891 order by SD_DATE; --4698199
3892 EXCEPTION
3893 WHEN OTHERS THEN
3894 IF PG_DEBUG in ('Y', 'C') THEN
3895 msc_sch_wb.atp_debug('Item_Alloc_Avail_Pf: ' || 'Error occurred: ' || to_char(sqlcode) || ':' || SQLERRM);
3896 END IF;
3897 x_return_status := FND_API.G_RET_STS_ERROR;
3898
3899 END Item_Alloc_Avail_Pf;
3900
3901 /*--Item_Alloc_Avail_Pf_Unalloc------------------------------------------------
3902 | o Called from Item_Alloc_Cum_Atp procedure for Rule based Allocated Time
3903 | Phased PF ATP (AATP Forward Consumption Method 2).
3904 | o This is similar to previous procedure only difference being that we
3905 | also return unallocated quantities.
3906 +----------------------------------------------------------------------------*/
3907 PROCEDURE Item_Alloc_Avail_Pf_Unalloc (
3908 p_member_id IN NUMBER,
3909 p_family_id IN NUMBER,
3910 p_org_id IN NUMBER,
3911 p_instance_id IN NUMBER,
3912 p_plan_id IN NUMBER,
3913 p_demand_class IN VARCHAR2,
3914 p_level_id IN NUMBER,
3915 p_itf IN DATE,
3916 p_sys_next_date IN DATE, --3099066
3917 p_atf_date IN DATE,
3918 x_atp_dates OUT NOCOPY MRP_ATP_PUB.date_arr,
3919 x_atp_qtys OUT NOCOPY MRP_ATP_PUB.number_arr,
3920 x_atp_unalloc_qtys OUT NOCOPY MRP_ATP_PUB.number_arr,
3921 x_return_status OUT NOCOPY VARCHAR2
3922 ) IS
3923
3924 BEGIN
3925 IF PG_DEBUG in ('Y', 'C') THEN
3926 msc_sch_wb.atp_debug('******* Begin Item_Alloc_Avail_Pf_Unalloc **********');
3927 msc_sch_wb.atp_debug('Item_Alloc_Avail_Pf_Unalloc: p_member_id: ' || p_member_id);
3928 msc_sch_wb.atp_debug('Item_Alloc_Avail_Pf_Unalloc: p_family_id: ' || p_family_id);
3929 msc_sch_wb.atp_debug('Item_Alloc_Avail_Pf_Unalloc: p_instance_id: ' || p_instance_id);
3930 msc_sch_wb.atp_debug('Item_Alloc_Avail_Pf_Unalloc: p_plan_id: ' || p_plan_id);
3931 msc_sch_wb.atp_debug('Item_Alloc_Avail_Pf_Unalloc: p_demand_class: ' || p_demand_class);
3932 msc_sch_wb.atp_debug('Item_Alloc_Avail_Pf_Unalloc: p_level_id: ' || p_level_id);
3933 END IF;
3934
3935 -- Initializing API return code
3936 x_return_status := FND_API.G_RET_STS_SUCCESS;
3937
3938 SELECT SD_DATE,
3939 SUM(UNALLOC_SD_QTY),
3940 SUM(SD_QTY)
3941 BULK COLLECT INTO
3942 x_atp_dates,
3943 x_atp_unalloc_qtys,
3944 x_atp_qtys
3945 FROM (
3946 SELECT --TRUNC(AD.DEMAND_DATE) SD_DATE,
3947 GREATEST(TRUNC(AD.DEMAND_DATE),p_sys_next_date) SD_DATE,--3099066
3948 -1* AD.ALLOCATED_QUANTITY UNALLOC_SD_QTY,
3949 -1* AD.ALLOCATED_QUANTITY*
3950 DECODE(DECODE(MSC_AATP_PVT.G_HIERARCHY_PROFILE,
3951 1, decode(AD.Original_Origination_Type,
3952 6, decode(AD.SOURCE_ORGANIZATION_ID,
3953 NULL, DECODE(AD.DEMAND_CLASS, null, null,
3954 DECODE(p_demand_class, '-1',
3955 MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(
3956 null, null, Decode(sign(trunc(AD.Demand_Date) - p_atf_date),
3957 1, p_family_id,
3958 Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
3959 'Y', AD.Original_Item_Id,
3960 p_family_id)), p_org_id,
3961 p_instance_id, trunc(AD.Demand_Date),
3962 p_level_id, AD.DEMAND_CLASS),
3963 AD.DEMAND_CLASS)),
3964 -23453, DECODE(AD.DEMAND_CLASS, null, null,
3965 DECODE(p_demand_class, '-1',
3966 MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(
3967 null, null, Decode(sign(trunc(AD.Demand_Date) - p_atf_date),
3968 1, p_family_id,
3969 Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
3970 'Y', AD.Original_Item_Id,
3971 p_family_id)), p_org_id,
3972 p_instance_id, trunc(AD.Demand_Date),
3973 p_level_id, AD.DEMAND_CLASS),
3974 AD.DEMAND_CLASS)),
3975 AD.ORGANIZATION_ID, DECODE(AD.DEMAND_CLASS, null, null,
3976 DECODE(p_demand_class, '-1',
3977 MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(
3978 null, null, Decode(sign(trunc(AD.Demand_Date) - p_atf_date),
3979 1, p_family_id,
3980 Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
3981 'Y', AD.Original_Item_Id,
3982 p_family_id)), p_org_id,
3983 p_instance_id, trunc(AD.Demand_Date),
3984 p_level_id, AD.DEMAND_CLASS),
3985 AD.DEMAND_CLASS)), TO_CHAR(NULL)),
3986 30, decode(AD.SOURCE_ORGANIZATION_ID,
3987 NULL, DECODE(AD.DEMAND_CLASS, null, null,
3988 DECODE(p_demand_class, '-1',
3989 MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(
3990 null, null, Decode(sign(trunc(AD.Demand_Date) - p_atf_date),
3991 1, p_family_id,
3992 Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
3993 'Y', AD.Original_Item_Id,
3994 p_family_id)), p_org_id,
3995 p_instance_id, trunc(AD.Demand_Date),
3996 p_level_id, AD.DEMAND_CLASS),
3997 AD.DEMAND_CLASS)),
3998 -23453, DECODE(AD.DEMAND_CLASS, null, null,
3999 DECODE(p_demand_class, '-1',
4000 MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(
4001 null, null, Decode(sign(trunc(AD.Demand_Date) - p_atf_date),
4002 1, p_family_id,
4003 Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
4004 'Y', AD.Original_Item_Id,
4005 p_family_id)), p_org_id,
4006 p_instance_id, trunc(AD.Demand_Date),
4007 p_level_id, AD.DEMAND_CLASS),
4008 AD.DEMAND_CLASS)),
4009 AD.ORGANIZATION_ID, DECODE(AD.DEMAND_CLASS, null, null,
4010 DECODE(p_demand_class, '-1',
4011 MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(
4012 null, null, Decode(sign(trunc(AD.Demand_Date) - p_atf_date),
4013 1, p_family_id,
4014 Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
4015 'Y', AD.Original_Item_Id,
4016 p_family_id)), p_org_id,
4017 p_instance_id, trunc(AD.Demand_Date),
4018 p_level_id, AD.DEMAND_CLASS),
4019 AD.DEMAND_CLASS)), TO_CHAR(NULL)),
4020 DECODE(AD.DEMAND_CLASS, null, null,
4021 DECODE(p_demand_class, '-1',
4022 MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(
4023 null, null, Decode(sign(trunc(AD.Demand_Date) - p_atf_date),
4024 1, p_family_id,
4025 Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
4026 'Y', AD.Original_Item_Id,
4027 p_family_id)), p_org_id,
4028 p_instance_id, trunc(AD.Demand_Date),
4029 p_level_id, AD.DEMAND_CLASS),
4030 AD.DEMAND_CLASS))),
4031 2, DECODE(AD.CUSTOMER_ID, NULL, TO_CHAR(NULL),
4032 0, TO_CHAR(NULL),
4033 decode(AD.Original_Origination_Type,
4034 6, decode(AD.SOURCE_ORGANIZATION_ID,
4035 NULL, MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(
4036 AD.CUSTOMER_ID, AD.SHIP_TO_SITE_ID, Decode(sign(trunc(AD.Demand_Date) - p_atf_date),
4037 1, p_family_id,
4038 Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
4039 'Y', AD.Original_Item_Id,
4040 p_family_id)),
4041 p_org_id, p_instance_id, trunc(AD.Demand_Date),
4042 p_level_id, NULL),
4043 -23453, MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(
4044 AD.CUSTOMER_ID, AD.SHIP_TO_SITE_ID, Decode(sign(trunc(AD.Demand_Date) - p_atf_date),
4045 1, p_family_id,
4046 Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
4047 'Y', AD.Original_Item_Id,
4048 p_family_id)),
4049 p_org_id, p_instance_id, trunc(AD.Demand_Date),
4050 p_level_id, NULL),
4051 AD.ORGANIZATION_ID, MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(
4052 AD.CUSTOMER_ID, AD.SHIP_TO_SITE_ID, Decode(sign(trunc(AD.Demand_Date) - p_atf_date),
4053 1, p_family_id,
4054 Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
4055 'Y', AD.Original_Item_Id,
4056 p_family_id)),
4057 p_org_id, p_instance_id, trunc(AD.Demand_Date),
4058 p_level_id, NULL),
4059 TO_CHAR(NULL)),
4060 30, decode(AD.SOURCE_ORGANIZATION_ID,
4061 NULL, MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(
4062 AD.CUSTOMER_ID, AD.SHIP_TO_SITE_ID, Decode(sign(trunc(AD.Demand_Date) - p_atf_date),
4063 1, p_family_id,
4064 Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
4065 'Y', AD.Original_Item_Id,
4066 p_family_id)),
4067 p_org_id, p_instance_id, trunc(AD.Demand_Date),
4068 p_level_id, NULL),
4069 -23453, MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(
4070 AD.CUSTOMER_ID, AD.SHIP_TO_SITE_ID, Decode(sign(trunc(AD.Demand_Date) - p_atf_date),
4071 1, p_family_id,
4072 Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
4073 'Y', AD.Original_Item_Id,
4074 p_family_id)),
4075 p_org_id, p_instance_id, trunc(AD.Demand_Date),
4076 p_level_id, NULL),
4077 AD.ORGANIZATION_ID, MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(
4078 AD.CUSTOMER_ID, AD.SHIP_TO_SITE_ID, Decode(sign(trunc(AD.Demand_Date) - p_atf_date),
4079 1, p_family_id,
4080 Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
4081 'Y', AD.Original_Item_Id,
4082 p_family_id)),
4083 p_org_id, p_instance_id, trunc(AD.Demand_Date),
4084 p_level_id, NULL),
4085 TO_CHAR(NULL)),
4086 MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(
4087 AD.CUSTOMER_ID, AD.SHIP_TO_SITE_ID,
4088 Decode(sign(trunc(AD.Demand_Date) - p_atf_date),
4089 1, p_family_id,
4090 Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
4091 'Y', AD.Original_Item_Id,
4092 p_family_id)), p_org_id, p_instance_id,
4093 trunc(AD.Demand_Date),p_level_id, NULL)))),
4094 p_demand_class, 1,
4095 Decode(AD.Demand_Class, NULL, --4365873
4096 MSC_AATP_FUNC.Get_Item_Demand_Alloc_Percent(p_plan_id,
4097 AD.PARENT_DEMAND_ID,
4098 trunc(AD.Demand_Date),
4099 AD.USING_ASSEMBLY_ITEM_ID,
4100 DECODE(AD.SOURCE_ORGANIZATION_ID,
4101 -23453, null,
4102 AD.SOURCE_ORGANIZATION_ID),
4103 Decode(sign(trunc(AD.Demand_Date) - p_atf_date),
4104 1, p_family_id,
4105 Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
4106 'Y', AD.Original_Item_Id,
4107 p_family_id)),
4108 p_org_id,
4109 p_instance_id,
4110 AD.Original_Origination_Type,
4111 DECODE(MSC_AATP_PVT.G_HIERARCHY_PROFILE,
4112 1, decode(AD.Original_Origination_Type,
4113 6, decode(AD.SOURCE_ORGANIZATION_ID,
4114 NULL, DECODE(AD.DEMAND_CLASS, null, null,
4115 DECODE(p_demand_class, '-1',
4116 MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(
4117 null, null, Decode(sign(trunc(AD.Demand_Date) - p_atf_date),
4118 1, p_family_id,
4119 Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
4120 'Y', AD.Original_Item_Id,
4121 p_family_id)), p_org_id,
4122 p_instance_id, trunc(AD.Demand_Date),
4123 p_level_id, AD.DEMAND_CLASS),
4124 AD.DEMAND_CLASS)),
4125 -23453, DECODE(AD.DEMAND_CLASS, null, null,
4126 DECODE(p_demand_class, '-1',
4127 MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(
4128 null, null, Decode(sign(trunc(AD.Demand_Date) - p_atf_date),
4129 1, p_family_id,
4130 Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
4131 'Y', AD.Original_Item_Id,
4132 p_family_id)), p_org_id,
4133 p_instance_id, trunc(AD.Demand_Date),
4134 p_level_id, AD.DEMAND_CLASS),
4135 AD.DEMAND_CLASS)),
4136 AD.ORGANIZATION_ID, DECODE(AD.DEMAND_CLASS, null, null,
4137 DECODE(p_demand_class, '-1',
4138 MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(
4139 null, null, Decode(sign(trunc(AD.Demand_Date) - p_atf_date),
4140 1, p_family_id,
4141 Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
4142 'Y', AD.Original_Item_Id,
4143 p_family_id)), p_org_id,
4144 p_instance_id, trunc(AD.Demand_Date),
4145 p_level_id, AD.DEMAND_CLASS),
4146 AD.DEMAND_CLASS)),
4147 p_demand_class),
4148 30, decode(AD.SOURCE_ORGANIZATION_ID,
4149 NULL, DECODE(AD.DEMAND_CLASS, null, null,
4150 DECODE(p_demand_class, '-1',
4151 MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(
4152 null, null, Decode(sign(trunc(AD.Demand_Date) - p_atf_date),
4153 1, p_family_id,
4154 Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
4155 'Y', AD.Original_Item_Id,
4156 p_family_id)), p_org_id,
4157 p_instance_id, trunc(AD.Demand_Date),
4158 p_level_id, AD.DEMAND_CLASS),
4159 AD.DEMAND_CLASS)),
4160 -23453, DECODE(AD.DEMAND_CLASS, null, null,
4161 DECODE(p_demand_class, '-1',
4162 MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(
4163 null, null, Decode(sign(trunc(AD.Demand_Date) - p_atf_date),
4164 1, p_family_id,
4165 Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
4166 'Y', AD.Original_Item_Id,
4167 p_family_id)), p_org_id,
4168 p_instance_id, trunc(AD.Demand_Date),
4169 p_level_id, AD.DEMAND_CLASS),
4170 AD.DEMAND_CLASS)),
4171 AD.ORGANIZATION_ID, DECODE(AD.DEMAND_CLASS, null, null,
4172 DECODE(p_demand_class, '-1',
4173 MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(
4174 null, null, Decode(sign(trunc(AD.Demand_Date) - p_atf_date),
4175 1, p_family_id,
4176 Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
4177 'Y', AD.Original_Item_Id,
4178 p_family_id)), p_org_id,
4179 p_instance_id, trunc(AD.Demand_Date),
4180 p_level_id, AD.DEMAND_CLASS),
4181 AD.DEMAND_CLASS)),
4182 p_demand_class),
4183 DECODE(AD.DEMAND_CLASS, null, null,
4184 DECODE(p_demand_class, '-1',
4185 MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(
4186 null, null, Decode(sign(trunc(AD.Demand_Date) - p_atf_date),
4187 1, p_family_id,
4188 Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
4189 'Y', AD.Original_Item_Id,
4190 p_family_id)), p_org_id,
4191 p_instance_id, trunc(AD.Demand_Date),
4192 p_level_id, AD.DEMAND_CLASS),
4193 AD.DEMAND_CLASS))),
4194 2, DECODE(AD.CUSTOMER_ID, NULL, p_demand_class,
4195 0, p_demand_class,
4196 decode(AD.Original_Origination_Type,
4197 6, decode(AD.SOURCE_ORGANIZATION_ID,
4198 NULL, MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(
4199 AD.CUSTOMER_ID, AD.SHIP_TO_SITE_ID, Decode(sign(trunc(AD.Demand_Date) - p_atf_date),
4200 1, p_family_id,
4201 Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
4202 'Y', AD.Original_Item_Id,
4203 p_family_id)),
4204 p_org_id, p_instance_id, trunc(AD.Demand_Date),
4205 p_level_id, NULL),
4206 -23453, MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(
4207 AD.CUSTOMER_ID, AD.SHIP_TO_SITE_ID, Decode(sign(trunc(AD.Demand_Date) - p_atf_date),
4208 1, p_family_id,
4209 Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
4210 'Y', AD.Original_Item_Id,
4211 p_family_id)),
4212 p_org_id, p_instance_id, trunc(AD.Demand_Date),
4213 p_level_id, NULL),
4214 AD.ORGANIZATION_ID, MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(
4215 AD.CUSTOMER_ID, AD.SHIP_TO_SITE_ID, Decode(sign(trunc(AD.Demand_Date) - p_atf_date),
4216 1, p_family_id,
4217 Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
4218 'Y', AD.Original_Item_Id,
4219 p_family_id)),
4220 p_org_id, p_instance_id, trunc(AD.Demand_Date),
4221 p_level_id, NULL),
4222 p_demand_class),
4223 30, decode(AD.SOURCE_ORGANIZATION_ID,
4224 NULL, MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(
4225 AD.CUSTOMER_ID, AD.SHIP_TO_SITE_ID, Decode(sign(trunc(AD.Demand_Date) - p_atf_date),
4226 1, p_family_id,
4227 Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
4228 'Y', AD.Original_Item_Id,
4229 p_family_id)),
4230 p_org_id, p_instance_id, trunc(AD.Demand_Date),
4231 p_level_id, NULL),
4232 -23453, MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(
4233 AD.CUSTOMER_ID, AD.SHIP_TO_SITE_ID, Decode(sign(trunc(AD.Demand_Date) - p_atf_date),
4234 1, p_family_id,
4235 Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
4236 'Y', AD.Original_Item_Id,
4237 p_family_id)),
4238 p_org_id, p_instance_id, trunc(AD.Demand_Date),
4239 p_level_id, NULL),
4240 AD.ORGANIZATION_ID, MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(
4241 AD.CUSTOMER_ID, AD.SHIP_TO_SITE_ID, Decode(sign(trunc(AD.Demand_Date) - p_atf_date),
4242 1, p_family_id,
4243 Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
4244 'Y', AD.Original_Item_Id,
4245 p_family_id)),
4246 p_org_id, p_instance_id, trunc(AD.Demand_Date),
4247 p_level_id, NULL),
4248 p_demand_class),
4249 MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(
4250 AD.CUSTOMER_ID, AD.SHIP_TO_SITE_ID,
4251 Decode(sign(trunc(AD.Demand_Date) - p_atf_date),
4252 1, p_family_id,
4253 Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
4254 'Y', AD.Original_Item_Id,
4255 p_family_id)), p_org_id, p_instance_id,
4256 trunc(AD.Demand_Date),p_level_id, NULL)))),
4257 p_demand_class,
4258 p_level_id),0)) SD_QTY --4365873
4259 FROM MSC_ALLOC_DEMANDS AD
4260 WHERE AD.PLAN_ID = p_plan_id
4261 AND AD.SR_INSTANCE_ID = p_instance_id
4262 AND AD.INVENTORY_ITEM_ID in (p_member_id,p_family_id)
4263 AND AD.ORGANIZATION_ID = p_org_id
4264 AND AD.ORIGINATION_TYPE <> 52
4265 AND AD.ALLOCATED_QUANTITY <> 0
4266 --bug3700564 added trunc
4267 AND TRUNC(AD.DEMAND_DATE) < NVL(p_itf, TRUNC(AD.DEMAND_DATE) + 1)
4268 UNION ALL
4269 SELECT --TRUNC(SA.SUPPLY_DATE) SD_DATE,
4270 GREATEST(TRUNC(SA.SUPPLY_DATE),p_sys_next_date) SD_DATE,--3099066
4271 SA.ALLOCATED_QUANTITY UNALLOC_SD_QTY,
4272 SA.ALLOCATED_QUANTITY*
4273 DECODE(DECODE(MSC_AATP_PVT.G_HIERARCHY_PROFILE,
4274 1, DECODE(SA.DEMAND_CLASS, null, null,
4275 DECODE(p_demand_class, '-1',
4276 MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(
4277 null,
4278 null,
4279 Decode(sign(trunc(SA.Supply_Date) - p_atf_date),
4280 1, p_family_id,
4281 Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
4282 'Y', SA.Original_Item_Id,
4283 p_family_id)),
4284 p_org_id,
4285 p_instance_id,
4286 TRUNC(sa.SUPPLY_DATE),
4287 p_level_id,
4288 sa.DEMAND_CLASS),
4289 sa.DEMAND_CLASS)),
4290 2, DECODE(sa.CUSTOMER_ID, NULL, TO_CHAR(NULL),
4291 0, TO_CHAR(NULL),
4292 MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(
4293 sa.CUSTOMER_ID,
4294 sa.SHIP_TO_SITE_ID,
4295 Decode(sign(trunc(sa.Supply_Date) - p_atf_date),
4296 1, p_family_id,
4297 Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
4298 'Y', sa.Original_Item_Id,
4299 p_family_id)),
4300 p_org_id,
4301 p_instance_id,
4302 TRUNC(sa.SUPPLY_DATE),
4303 p_level_id,
4304 NULL))),
4305 p_demand_class, 1,
4306 NULL, nvl(MIHM.allocation_percent/100,1), --4365873
4307 /*NVL(MSC_AATP_FUNC.Get_DC_Alloc_Percent(
4308 p_instance_id,
4309 Decode(sign(trunc(sa.Supply_Date) - p_atf_date),
4310 1, p_family_id,
4311 Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
4312 'Y', sa.Original_Item_Id,
4313 p_family_id)),
4314 p_org_id,
4315 null,
4316 null,
4317 p_demand_class,
4318 TRUNC(sa.SUPPLY_DATE)),
4319 1),*/
4320 DECODE(
4321 MIHM.allocation_percent/100, --4365873
4322 /*DECODE(MSC_AATP_FUNC.Get_DC_Alloc_Percent(
4323 p_instance_id,
4324 Decode(sign(trunc(sa.Supply_Date) - p_atf_date),
4325 1, p_family_id,
4326 Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
4327 'Y', sa.Original_Item_Id,
4328 p_family_id)),
4329 p_org_id,
4330 null,
4331 null,
4332 p_demand_class,
4333 TRUNC(sa.SUPPLY_DATE)),*/
4334 NULL, 1,
4335 0)) SD_QTY
4336 FROM MSC_ALLOC_SUPPLIES SA,MSC_ITEM_HIERARCHY_MV MIHM
4337 WHERE SA.PLAN_ID = p_plan_id
4338 AND SA.SR_INSTANCE_ID = p_instance_id
4339 AND SA.INVENTORY_ITEM_ID in (p_member_id, p_family_id)
4340 AND SA.ORGANIZATION_ID = p_org_id
4341 AND SA.ALLOCATED_QUANTITY <> 0
4342 --bug3700564 added trunc
4343 AND TRUNC(SA.SUPPLY_DATE) >= DECODE(SA.ORIGINAL_ORDER_TYPE,
4344 27, TRUNC(SYSDATE),
4345 28, TRUNC(SYSDATE),
4346 TRUNC(SA.SUPPLY_DATE))
4347 AND TRUNC(SA.SUPPLY_DATE) < NVL(p_itf, TRUNC(SA.SUPPLY_DATE) + 1)
4348 --4365874
4349 --5220274 if the rule is assigned to family only then use family id.
4350 AND Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
4351 'N', p_family_id,
4352 sa.INVENTORY_ITEM_ID) = MIHM.INVENTORY_ITEM_ID(+)
4353 AND sa.SR_INSTANCE_ID = MIHM.SR_INSTANCE_ID (+)
4354 AND sa.ORGANIZATION_ID = MIHM.ORGANIZATION_ID (+)
4355 AND decode(MIHM.level_id (+),-1,1,2) = decode(MSC_AATP_PVT.G_HIERARCHY_PROFILE,1,1,2)
4356 AND TRUNC(sa.SUPPLY_DATE) >= MIHM.effective_date (+)
4357 AND TRUNC(sa.SUPPLY_DATE) <= MIHM.disable_date (+)
4358 AND MIHM.demand_class (+) = p_demand_class
4359 )
4360 GROUP BY SD_DATE
4361 order by SD_DATE; --4698199
4362
4363 EXCEPTION
4364 WHEN OTHERS THEN
4365 IF PG_DEBUG in ('Y', 'C') THEN
4366 msc_sch_wb.atp_debug('Item_Alloc_Avail_Pf_Unalloc: ' || 'Error occurred: ' || to_char(sqlcode) || ':' || SQLERRM);
4367 END IF;
4368 x_return_status := FND_API.G_RET_STS_ERROR;
4369
4370 END Item_Alloc_Avail_Pf_Unalloc;
4371
4372 /*--Item_Alloc_Avail_Pf_Dtls-------------------------------------------------------------
4373 | o Called from Item_Alloc_Cum_Atp procedure for Time Phased Rule Based AATP
4374 | scenarios.
4375 | o The supply demand SQL inserts following in msc_atp_sd_details_temp table:
4376 | - Allocated Bucketed demands (origination type 51) for member item upto ATF
4377 | from msc_alloc_demands table.
4378 | - Allocated Bucketed demands for family after ATF from msc_alloc_demands table.
4379 | - Allocated Rollup supplies (order type 50) for member item upto ATF from
4380 | msc_alloc_supplies table.
4381 | - Allocated Rollup supplies for family after ATF from msc_alloc_supplies table.
4382 | o Other important differences from non PF SQLs are:
4383 | - Columns Pf_Display_Flag, Original_Demand_Quantity and Original_Demand_Date
4384 | in msc_atp_sd_details_temp table are populated for demands.
4385 | - Column Original_Supply_Demand_Type is populated for demands and supplies
4386 | and stores the supply demand type of parent supplies and demands.
4387 +--------------------------------------------------------------------------------------*/
4388 PROCEDURE Item_Alloc_Avail_Pf_Dtls (
4389 p_member_id IN NUMBER,
4390 p_family_id IN NUMBER,
4391 p_sr_member_id IN NUMBER,
4392 p_sr_family_id IN NUMBER,
4393 p_org_id IN NUMBER,
4394 p_instance_id IN NUMBER,
4395 p_plan_id IN NUMBER,
4396 p_demand_class IN VARCHAR2,
4397 p_level_id IN NUMBER,
4398 p_itf IN DATE,
4399 p_level IN NUMBER,
4400 p_identifier IN NUMBER,
4401 p_scenario_id IN NUMBER,
4402 p_uom_code IN VARCHAR2,
4403 p_sys_next_date IN DATE, --bug3099066
4404 p_atf_date IN DATE,
4405 x_return_status OUT NOCOPY VARCHAR2
4406 ) IS
4407 l_null_num NUMBER;
4408 l_null_char VARCHAR2(1);
4409 l_null_date DATE; --bug3814584
4410 l_sysdate DATE := sysdate;
4411
4412 BEGIN
4413 IF PG_DEBUG in ('Y', 'C') THEN
4414 msc_sch_wb.atp_debug('******* Begin Item_Alloc_Avail_Pf_Dtls **********');
4415 msc_sch_wb.atp_debug('Item_Alloc_Avail_Pf_Dtls: p_member_id: ' || p_member_id);
4416 msc_sch_wb.atp_debug('Item_Alloc_Avail_Pf_Dtls: p_family_id: ' || p_family_id);
4417 msc_sch_wb.atp_debug('Item_Alloc_Avail_Pf_Dtls: p_sr_member_id: ' || p_sr_member_id);
4418 msc_sch_wb.atp_debug('Item_Alloc_Avail_Pf_Dtls: p_sr_family_id: ' || p_sr_family_id);
4419 msc_sch_wb.atp_debug('Item_Alloc_Avail_Pf_Dtls: p_instance_id: ' || p_instance_id);
4420 msc_sch_wb.atp_debug('Item_Alloc_Avail_Pf_Dtls: p_plan_id: ' || p_plan_id);
4421 msc_sch_wb.atp_debug('Item_Alloc_Avail_Pf_Dtls: p_demand_class: ' || p_demand_class);
4422 msc_sch_wb.atp_debug('Item_Alloc_Avail_Pf_Dtls: p_level_id: ' || p_level_id);
4423 msc_sch_wb.atp_debug('Item_Alloc_Avail_Pf_Dtls: p_identifier: ' || p_identifier);
4424 msc_sch_wb.atp_debug('Item_Alloc_Avail_Pf_Dtls: p_scenario_id: ' || p_scenario_id);
4425 msc_sch_wb.atp_debug('Item_Alloc_Avail_Pf_Dtls: p_uom_code: ' || p_uom_code);
4426 END IF;
4427
4428 -- Initializing API return code
4429 x_return_status := FND_API.G_RET_STS_SUCCESS;
4430
4431 INSERT INTO msc_atp_sd_details_temp (
4432 ATP_Level,
4433 Order_line_id,
4434 Scenario_Id,
4435 Inventory_Item_Id,
4436 Request_Item_Id,
4437 Organization_Id,
4438 Department_Id,
4439 Resource_Id,
4440 Supplier_Id,
4441 Supplier_Site_Id,
4442 From_Organization_Id,
4443 From_Location_Id,
4444 To_Organization_Id,
4445 To_Location_Id,
4446 Ship_Method,
4447 UOM_code,
4448 Supply_Demand_Type,
4449 Supply_Demand_Source_Type,
4450 Supply_Demand_Source_Type_Name,
4451 Identifier1,
4452 Identifier2,
4453 Identifier3,
4454 Identifier4,
4455 Allocated_Quantity,
4456 Supply_Demand_Date,
4457 Disposition_Type,
4458 Disposition_Name,
4459 Pegging_Id,
4460 End_Pegging_Id,
4461 Pf_Display_Flag,
4462 Supply_Demand_Quantity,
4463 Original_Demand_Quantity,
4464 Original_Demand_Date,
4465 Original_Item_Id,
4466 Original_Supply_Demand_Type,
4467 creation_date,
4468 created_by,
4469 last_update_date,
4470 last_updated_by,
4471 last_update_login,
4472 Unallocated_Quantity,
4473 ORIG_CUSTOMER_SITE_NAME,--bug3263368
4474 ORIG_CUSTOMER_NAME, --bug3263368
4475 ORIG_DEMAND_CLASS, --bug3263368
4476 ORIG_REQUEST_DATE, --bug3263368
4477 Inventory_Item_Name --bug3579625
4478 )
4479 (
4480 SELECT p_level col1,
4481 p_identifier col2,
4482 p_scenario_id col3,
4483 p_sr_family_id col4,
4484 p_sr_member_id col5,
4485 p_org_id col6,
4486 l_null_num col7,
4487 l_null_num col8,
4488 l_null_num col9,
4489 l_null_num col10,
4490 l_null_num col11,
4491 l_null_num col12,
4492 l_null_num col13,
4493 l_null_num col14,
4494 l_null_char col15,
4495 p_uom_code col16,
4496 1 col17,
4497 AD.ORIGINATION_TYPE col18,
4498 l_null_char col19,
4499 AD.SR_INSTANCE_ID col20,
4500 l_null_num col21,
4501 AD.PARENT_DEMAND_ID col22,
4502 l_null_num col23,
4503 -1* AD.ALLOCATED_QUANTITY *
4504 DECODE(DECODE(MSC_AATP_PVT.G_HIERARCHY_PROFILE,
4505 1, decode(AD.Original_Origination_Type,
4506 6, decode(AD.SOURCE_ORGANIZATION_ID,
4507 NULL, DECODE(AD.DEMAND_CLASS, null, null,
4508 DECODE(p_demand_class, '-1',
4509 MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(
4510 null, null, Decode(sign(trunc(AD.Demand_Date) - p_atf_date),
4511 1, p_family_id,
4512 Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
4513 'Y', AD.Original_Item_Id,
4514 p_family_id)), p_org_id,
4515 p_instance_id, trunc(AD.Demand_Date),
4516 p_level_id, AD.DEMAND_CLASS),
4517 AD.DEMAND_CLASS)),
4518 -23453, DECODE(AD.DEMAND_CLASS, null, null,
4519 DECODE(p_demand_class, '-1',
4520 MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(
4521 null, null, Decode(sign(trunc(AD.Demand_Date) - p_atf_date),
4522 1, p_family_id,
4523 Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
4524 'Y', AD.Original_Item_Id,
4525 p_family_id)), p_org_id,
4526 p_instance_id, trunc(AD.Demand_Date),
4527 p_level_id, AD.DEMAND_CLASS),
4528 AD.DEMAND_CLASS)),
4529 AD.ORGANIZATION_ID, DECODE(AD.DEMAND_CLASS, null, null,
4530 DECODE(p_demand_class, '-1',
4531 MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(
4532 null, null, Decode(sign(trunc(AD.Demand_Date) - p_atf_date),
4533 1, p_family_id,
4534 Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
4535 'Y', AD.Original_Item_Id,
4536 p_family_id)), p_org_id,
4537 p_instance_id, trunc(AD.Demand_Date),
4538 p_level_id, AD.DEMAND_CLASS),
4539 AD.DEMAND_CLASS)), TO_CHAR(NULL)),
4540 30, decode(AD.SOURCE_ORGANIZATION_ID,
4541 NULL, DECODE(AD.DEMAND_CLASS, null, null,
4542 DECODE(p_demand_class, '-1',
4543 MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(
4544 null, null, Decode(sign(trunc(AD.Demand_Date) - p_atf_date),
4545 1, p_family_id,
4546 Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
4547 'Y', AD.Original_Item_Id,
4548 p_family_id)), p_org_id,
4549 p_instance_id, trunc(AD.Demand_Date),
4550 p_level_id, AD.DEMAND_CLASS),
4551 AD.DEMAND_CLASS)),
4552 -23453, DECODE(AD.DEMAND_CLASS, null, null,
4553 DECODE(p_demand_class, '-1',
4554 MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(
4555 null, null, Decode(sign(trunc(AD.Demand_Date) - p_atf_date),
4556 1, p_family_id,
4557 Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
4558 'Y', AD.Original_Item_Id,
4559 p_family_id)), p_org_id,
4560 p_instance_id, trunc(AD.Demand_Date),
4561 p_level_id, AD.DEMAND_CLASS),
4562 AD.DEMAND_CLASS)),
4563 AD.ORGANIZATION_ID, DECODE(AD.DEMAND_CLASS, null, null,
4564 DECODE(p_demand_class, '-1',
4565 MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(
4566 null, null, Decode(sign(trunc(AD.Demand_Date) - p_atf_date),
4567 1, p_family_id,
4568 Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
4569 'Y', AD.Original_Item_Id,
4570 p_family_id)), p_org_id,
4571 p_instance_id, trunc(AD.Demand_Date),
4572 p_level_id, AD.DEMAND_CLASS),
4573 AD.DEMAND_CLASS)), TO_CHAR(NULL)),
4574 DECODE(AD.DEMAND_CLASS, null, null,
4575 DECODE(p_demand_class, '-1',
4576 MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(
4577 null, null, Decode(sign(trunc(AD.Demand_Date) - p_atf_date),
4578 1, p_family_id,
4579 Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
4580 'Y', AD.Original_Item_Id,
4581 p_family_id)), p_org_id,
4582 p_instance_id, trunc(AD.Demand_Date),
4583 p_level_id, AD.DEMAND_CLASS),
4584 AD.DEMAND_CLASS))),
4585 2, DECODE(AD.CUSTOMER_ID, NULL, TO_CHAR(NULL),
4586 0, TO_CHAR(NULL),
4587 decode(AD.Original_Origination_Type,
4588 6, decode(AD.SOURCE_ORGANIZATION_ID,
4589 NULL, MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(
4590 AD.CUSTOMER_ID, AD.SHIP_TO_SITE_ID, Decode(sign(trunc(AD.Demand_Date) - p_atf_date),
4591 1, p_family_id,
4592 Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
4593 'Y', AD.Original_Item_Id,
4594 p_family_id)),
4595 p_org_id, p_instance_id, trunc(AD.Demand_Date),
4596 p_level_id, NULL),
4597 -23453, MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(
4598 AD.CUSTOMER_ID, AD.SHIP_TO_SITE_ID, Decode(sign(trunc(AD.Demand_Date) - p_atf_date),
4599 1, p_family_id,
4600 Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
4601 'Y', AD.Original_Item_Id,
4602 p_family_id)),
4603 p_org_id, p_instance_id, trunc(AD.Demand_Date),
4604 p_level_id, NULL),
4605 AD.ORGANIZATION_ID, MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(
4606 AD.CUSTOMER_ID, AD.SHIP_TO_SITE_ID, Decode(sign(trunc(AD.Demand_Date) - p_atf_date),
4607 1, p_family_id,
4608 Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
4609 'Y', AD.Original_Item_Id,
4610 p_family_id)),
4611 p_org_id, p_instance_id, trunc(AD.Demand_Date),
4612 p_level_id, NULL),
4613 TO_CHAR(NULL)),
4614 30, decode(AD.SOURCE_ORGANIZATION_ID,
4615 NULL, MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(
4616 AD.CUSTOMER_ID, AD.SHIP_TO_SITE_ID, Decode(sign(trunc(AD.Demand_Date) - p_atf_date),
4617 1, p_family_id,
4618 Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
4619 'Y', AD.Original_Item_Id,
4620 p_family_id)),
4621 p_org_id, p_instance_id, trunc(AD.Demand_Date),
4622 p_level_id, NULL),
4623 -23453, MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(
4624 AD.CUSTOMER_ID, AD.SHIP_TO_SITE_ID, Decode(sign(trunc(AD.Demand_Date) - p_atf_date),
4625 1, p_family_id,
4626 Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
4627 'Y', AD.Original_Item_Id,
4628 p_family_id)),
4629 p_org_id, p_instance_id, trunc(AD.Demand_Date),
4630 p_level_id, NULL),
4631 AD.ORGANIZATION_ID, MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(
4632 AD.CUSTOMER_ID, AD.SHIP_TO_SITE_ID, Decode(sign(trunc(AD.Demand_Date) - p_atf_date),
4633 1, p_family_id,
4634 Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
4635 'Y', AD.Original_Item_Id,
4636 p_family_id)),
4637 p_org_id, p_instance_id, trunc(AD.Demand_Date),
4638 p_level_id, NULL),
4639 TO_CHAR(NULL)),
4640 MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(
4641 AD.CUSTOMER_ID, AD.SHIP_TO_SITE_ID,
4642 Decode(sign(trunc(AD.Demand_Date) - p_atf_date),
4643 1, p_family_id,
4644 Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
4645 'Y', AD.Original_Item_Id,
4646 p_family_id)), p_org_id, p_instance_id,
4647 trunc(AD.Demand_Date),p_level_id, NULL)))),
4648 p_demand_class, 1,
4649 Decode(AD.Demand_Class, NULL, --4365873 If l_demand_class is not null and demand class is populated
4650 -- on supplies record then 0 should be allocated.
4651 MSC_AATP_FUNC.Get_Item_Demand_Alloc_Percent(p_plan_id,
4652 AD.PARENT_DEMAND_ID,
4653 trunc(AD.Demand_Date),
4654 AD.USING_ASSEMBLY_ITEM_ID,
4655 DECODE(AD.SOURCE_ORGANIZATION_ID,
4656 -23453, null,
4657 AD.SOURCE_ORGANIZATION_ID),
4658 Decode(sign(trunc(AD.Demand_Date) - p_atf_date),
4659 1, p_family_id,
4660 Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
4661 'Y', AD.Original_Item_Id,
4662 p_family_id)),
4663 p_org_id,
4664 p_instance_id,
4665 AD.Original_Origination_Type,
4666 DECODE(MSC_AATP_PVT.G_HIERARCHY_PROFILE,
4667 1, decode(AD.Original_Origination_Type,
4668 6, decode(AD.SOURCE_ORGANIZATION_ID,
4669 NULL, DECODE(AD.DEMAND_CLASS, null, null,
4670 DECODE(p_demand_class, '-1',
4671 MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(
4672 null, null, Decode(sign(trunc(AD.Demand_Date) - p_atf_date),
4673 1, p_family_id,
4674 Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
4675 'Y', AD.Original_Item_Id,
4676 p_family_id)), p_org_id,
4677 p_instance_id, trunc(AD.Demand_Date),
4678 p_level_id, AD.DEMAND_CLASS),
4679 AD.DEMAND_CLASS)),
4680 -23453, DECODE(AD.DEMAND_CLASS, null, null,
4681 DECODE(p_demand_class, '-1',
4682 MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(
4683 null, null, Decode(sign(trunc(AD.Demand_Date) - p_atf_date),
4684 1, p_family_id,
4685 Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
4686 'Y', AD.Original_Item_Id,
4687 p_family_id)), p_org_id,
4688 p_instance_id, trunc(AD.Demand_Date),
4689 p_level_id, AD.DEMAND_CLASS),
4690 AD.DEMAND_CLASS)),
4691 AD.ORGANIZATION_ID, DECODE(AD.DEMAND_CLASS, null, null,
4692 DECODE(p_demand_class, '-1',
4693 MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(
4694 null, null, Decode(sign(trunc(AD.Demand_Date) - p_atf_date),
4695 1, p_family_id,
4696 Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
4697 'Y', AD.Original_Item_Id,
4698 p_family_id)), p_org_id,
4699 p_instance_id, trunc(AD.Demand_Date),
4700 p_level_id, AD.DEMAND_CLASS),
4701 AD.DEMAND_CLASS)),
4702 p_demand_class),
4703 30, decode(AD.SOURCE_ORGANIZATION_ID,
4704 NULL, DECODE(AD.DEMAND_CLASS, null, null,
4705 DECODE(p_demand_class, '-1',
4706 MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(
4707 null, null, Decode(sign(trunc(AD.Demand_Date) - p_atf_date),
4708 1, p_family_id,
4709 Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
4710 'Y', AD.Original_Item_Id,
4711 p_family_id)), p_org_id,
4712 p_instance_id, trunc(AD.Demand_Date),
4713 p_level_id, AD.DEMAND_CLASS),
4714 AD.DEMAND_CLASS)),
4715 -23453, DECODE(AD.DEMAND_CLASS, null, null,
4716 DECODE(p_demand_class, '-1',
4717 MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(
4718 null, null, Decode(sign(trunc(AD.Demand_Date) - p_atf_date),
4719 1, p_family_id,
4720 Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
4721 'Y', AD.Original_Item_Id,
4722 p_family_id)), p_org_id,
4723 p_instance_id, trunc(AD.Demand_Date),
4724 p_level_id, AD.DEMAND_CLASS),
4725 AD.DEMAND_CLASS)),
4726 AD.ORGANIZATION_ID, DECODE(AD.DEMAND_CLASS, null, null,
4727 DECODE(p_demand_class, '-1',
4728 MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(
4729 null, null, Decode(sign(trunc(AD.Demand_Date) - p_atf_date),
4730 1, p_family_id,
4731 Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
4732 'Y', AD.Original_Item_Id,
4733 p_family_id)), p_org_id,
4734 p_instance_id, trunc(AD.Demand_Date),
4735 p_level_id, AD.DEMAND_CLASS),
4736 AD.DEMAND_CLASS)),
4737 p_demand_class),
4738 DECODE(AD.DEMAND_CLASS, null, null,
4739 DECODE(p_demand_class, '-1',
4740 MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(
4741 null, null, Decode(sign(trunc(AD.Demand_Date) - p_atf_date),
4742 1, p_family_id,
4743 Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
4744 'Y', AD.Original_Item_Id,
4745 p_family_id)), p_org_id,
4746 p_instance_id, trunc(AD.Demand_Date),
4747 p_level_id, AD.DEMAND_CLASS),
4748 AD.DEMAND_CLASS))),
4749 2, DECODE(AD.CUSTOMER_ID, NULL, p_demand_class,
4750 0, p_demand_class,
4751 decode(AD.Original_Origination_Type,
4752 6, decode(AD.SOURCE_ORGANIZATION_ID,
4753 NULL, MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(
4754 AD.CUSTOMER_ID, AD.SHIP_TO_SITE_ID, Decode(sign(trunc(AD.Demand_Date) - p_atf_date),
4755 1, p_family_id,
4756 Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
4757 'Y', AD.Original_Item_Id,
4758 p_family_id)),
4759 p_org_id, p_instance_id, trunc(AD.Demand_Date),
4760 p_level_id, NULL),
4761 -23453, MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(
4762 AD.CUSTOMER_ID, AD.SHIP_TO_SITE_ID, Decode(sign(trunc(AD.Demand_Date) - p_atf_date),
4763 1, p_family_id,
4764 Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
4765 'Y', AD.Original_Item_Id,
4766 p_family_id)),
4767 p_org_id, p_instance_id, trunc(AD.Demand_Date),
4768 p_level_id, NULL),
4769 AD.ORGANIZATION_ID, MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(
4770 AD.CUSTOMER_ID, AD.SHIP_TO_SITE_ID, Decode(sign(trunc(AD.Demand_Date) - p_atf_date),
4771 1, p_family_id,
4772 Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
4773 'Y', AD.Original_Item_Id,
4774 p_family_id)),
4775 p_org_id, p_instance_id, trunc(AD.Demand_Date),
4776 p_level_id, NULL),
4777 p_demand_class),
4778 30, decode(AD.SOURCE_ORGANIZATION_ID,
4779 NULL, MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(
4780 AD.CUSTOMER_ID, AD.SHIP_TO_SITE_ID, Decode(sign(trunc(AD.Demand_Date) - p_atf_date),
4781 1, p_family_id,
4782 Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
4783 'Y', AD.Original_Item_Id,
4784 p_family_id)),
4785 p_org_id, p_instance_id, trunc(AD.Demand_Date),
4786 p_level_id, NULL),
4787 -23453, MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(
4788 AD.CUSTOMER_ID, AD.SHIP_TO_SITE_ID, Decode(sign(trunc(AD.Demand_Date) - p_atf_date),
4789 1, p_family_id,
4790 Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
4791 'Y', AD.Original_Item_Id,
4792 p_family_id)),
4793 p_org_id, p_instance_id, trunc(AD.Demand_Date),
4794 p_level_id, NULL),
4795 AD.ORGANIZATION_ID, MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(
4796 AD.CUSTOMER_ID, AD.SHIP_TO_SITE_ID, Decode(sign(trunc(AD.Demand_Date) - p_atf_date),
4797 1, p_family_id,
4798 Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
4799 'Y', AD.Original_Item_Id,
4800 p_family_id)),
4801 p_org_id, p_instance_id, trunc(AD.Demand_Date),
4802 p_level_id, NULL),
4803 p_demand_class),
4804 MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(
4805 AD.CUSTOMER_ID, AD.SHIP_TO_SITE_ID,
4806 Decode(sign(trunc(AD.Demand_Date) - p_atf_date),
4807 1, p_family_id,
4808 Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
4809 'Y', AD.Original_Item_Id,
4810 p_family_id)), p_org_id, p_instance_id,
4811 trunc(AD.Demand_Date),p_level_id, NULL)))),
4812 p_demand_class,
4813 p_level_id),0)) col24, --4365873
4814 --TRUNC(AD.DEMAND_DATE) col25,
4815 GREATEST(TRUNC(AD.DEMAND_DATE),p_sys_next_date) col25, --3099066
4816 l_null_num col26,
4817 AD.ORDER_NUMBER col27,
4818 l_null_num col28,
4819 l_null_num col29,
4820 Decode(AD.inventory_item_id, p_family_id,
4821 Decode(AD.original_item_id, p_member_id,
4822 AD.Pf_Display_Flag,
4823 Decode(sign(trunc(AD.Original_Demand_Date) - p_atf_date),
4824 1, AD.Pf_Display_Flag,
4825 1)),
4826 AD.Pf_Display_Flag),
4827 -1* NVL(AD.Demand_Quantity, AD.ALLOCATED_QUANTITY),
4828 -1* NVL(AD.Demand_Quantity, AD.ALLOCATED_QUANTITY) *
4829 DECODE(DECODE(MSC_AATP_PVT.G_HIERARCHY_PROFILE,
4830 1, decode(AD.Original_Origination_Type,
4831 6, decode(AD.SOURCE_ORGANIZATION_ID,
4832 NULL, DECODE(AD.DEMAND_CLASS, null, null,
4833 DECODE(p_demand_class, '-1',
4834 MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(
4835 null, null, Decode(sign(trunc(AD.Demand_Date) - p_atf_date),
4836 1, p_family_id,
4837 Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
4838 'Y', AD.Original_Item_Id,
4839 p_family_id)), p_org_id,
4840 p_instance_id, trunc(AD.Demand_Date),
4841 p_level_id, AD.DEMAND_CLASS),
4842 AD.DEMAND_CLASS)),
4843 -23453, DECODE(AD.DEMAND_CLASS, null, null,
4844 DECODE(p_demand_class, '-1',
4845 MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(
4846 null, null, Decode(sign(trunc(AD.Demand_Date) - p_atf_date),
4847 1, p_family_id,
4848 Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
4849 'Y', AD.Original_Item_Id,
4850 p_family_id)), p_org_id,
4851 p_instance_id, trunc(AD.Demand_Date),
4852 p_level_id, AD.DEMAND_CLASS),
4853 AD.DEMAND_CLASS)),
4854 AD.ORGANIZATION_ID, DECODE(AD.DEMAND_CLASS, null, null,
4855 DECODE(p_demand_class, '-1',
4856 MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(
4857 null, null, Decode(sign(trunc(AD.Demand_Date) - p_atf_date),
4858 1, p_family_id,
4859 Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
4860 'Y', AD.Original_Item_Id,
4861 p_family_id)), p_org_id,
4862 p_instance_id, trunc(AD.Demand_Date),
4863 p_level_id, AD.DEMAND_CLASS),
4864 AD.DEMAND_CLASS)), TO_CHAR(NULL)),
4865 30, decode(AD.SOURCE_ORGANIZATION_ID,
4866 NULL, DECODE(AD.DEMAND_CLASS, null, null,
4867 DECODE(p_demand_class, '-1',
4868 MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(
4869 null, null, Decode(sign(trunc(AD.Demand_Date) - p_atf_date),
4870 1, p_family_id,
4871 Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
4872 'Y', AD.Original_Item_Id,
4873 p_family_id)), p_org_id,
4874 p_instance_id, trunc(AD.Demand_Date),
4875 p_level_id, AD.DEMAND_CLASS),
4876 AD.DEMAND_CLASS)),
4877 -23453, DECODE(AD.DEMAND_CLASS, null, null,
4878 DECODE(p_demand_class, '-1',
4879 MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(
4880 null, null, Decode(sign(trunc(AD.Demand_Date) - p_atf_date),
4881 1, p_family_id,
4882 Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
4883 'Y', AD.Original_Item_Id,
4884 p_family_id)), p_org_id,
4885 p_instance_id, trunc(AD.Demand_Date),
4886 p_level_id, AD.DEMAND_CLASS),
4887 AD.DEMAND_CLASS)),
4888 AD.ORGANIZATION_ID, DECODE(AD.DEMAND_CLASS, null, null,
4889 DECODE(p_demand_class, '-1',
4890 MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(
4891 null, null, Decode(sign(trunc(AD.Demand_Date) - p_atf_date),
4892 1, p_family_id,
4893 Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
4894 'Y', AD.Original_Item_Id,
4895 p_family_id)), p_org_id,
4896 p_instance_id, trunc(AD.Demand_Date),
4897 p_level_id, AD.DEMAND_CLASS),
4898 AD.DEMAND_CLASS)), TO_CHAR(NULL)),
4899 DECODE(AD.DEMAND_CLASS, null, null,
4900 DECODE(p_demand_class, '-1',
4901 MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(
4902 null, null, Decode(sign(trunc(AD.Demand_Date) - p_atf_date),
4903 1, p_family_id,
4904 Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
4905 'Y', AD.Original_Item_Id,
4906 p_family_id)), p_org_id,
4907 p_instance_id, trunc(AD.Demand_Date),
4908 p_level_id, AD.DEMAND_CLASS),
4909 AD.DEMAND_CLASS))),
4910 2, DECODE(AD.CUSTOMER_ID, NULL, TO_CHAR(NULL),
4911 0, TO_CHAR(NULL),
4912 decode(AD.Original_Origination_Type,
4913 6, decode(AD.SOURCE_ORGANIZATION_ID,
4914 NULL, MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(
4915 AD.CUSTOMER_ID, AD.SHIP_TO_SITE_ID, Decode(sign(trunc(AD.Demand_Date) - p_atf_date),
4916 1, p_family_id,
4917 Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
4918 'Y', AD.Original_Item_Id,
4919 p_family_id)),
4920 p_org_id, p_instance_id, trunc(AD.Demand_Date),
4921 p_level_id, NULL),
4922 -23453, MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(
4923 AD.CUSTOMER_ID, AD.SHIP_TO_SITE_ID, Decode(sign(trunc(AD.Demand_Date) - p_atf_date),
4924 1, p_family_id,
4925 Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
4926 'Y', AD.Original_Item_Id,
4927 p_family_id)),
4928 p_org_id, p_instance_id, trunc(AD.Demand_Date),
4929 p_level_id, NULL),
4930 AD.ORGANIZATION_ID, MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(
4931 AD.CUSTOMER_ID, AD.SHIP_TO_SITE_ID, Decode(sign(trunc(AD.Demand_Date) - p_atf_date),
4932 1, p_family_id,
4933 Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
4934 'Y', AD.Original_Item_Id,
4935 p_family_id)),
4936 p_org_id, p_instance_id, trunc(AD.Demand_Date),
4937 p_level_id, NULL),
4938 TO_CHAR(NULL)),
4939 30, decode(AD.SOURCE_ORGANIZATION_ID,
4940 NULL, MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(
4941 AD.CUSTOMER_ID, AD.SHIP_TO_SITE_ID, Decode(sign(trunc(AD.Demand_Date) - p_atf_date),
4942 1, p_family_id,
4943 Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
4944 'Y', AD.Original_Item_Id,
4945 p_family_id)),
4946 p_org_id, p_instance_id, trunc(AD.Demand_Date),
4947 p_level_id, NULL),
4948 -23453, MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(
4949 AD.CUSTOMER_ID, AD.SHIP_TO_SITE_ID, Decode(sign(trunc(AD.Demand_Date) - p_atf_date),
4950 1, p_family_id,
4951 Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
4952 'Y', AD.Original_Item_Id,
4953 p_family_id)),
4954 p_org_id, p_instance_id, trunc(AD.Demand_Date),
4955 p_level_id, NULL),
4956 AD.ORGANIZATION_ID, MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(
4957 AD.CUSTOMER_ID, AD.SHIP_TO_SITE_ID, Decode(sign(trunc(AD.Demand_Date) - p_atf_date),
4958 1, p_family_id,
4959 Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
4960 'Y', AD.Original_Item_Id,
4961 p_family_id)),
4962 p_org_id, p_instance_id, trunc(AD.Demand_Date),
4963 p_level_id, NULL),
4964 TO_CHAR(NULL)),
4965 MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(
4966 AD.CUSTOMER_ID, AD.SHIP_TO_SITE_ID,
4967 Decode(sign(trunc(AD.Demand_Date) - p_atf_date),
4968 1, p_family_id,
4969 Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
4970 'Y', AD.Original_Item_Id,
4971 p_family_id)), p_org_id, p_instance_id,
4972 trunc(AD.Demand_Date),p_level_id, NULL)))),
4973 p_demand_class, 1,
4974 MSC_AATP_FUNC.Get_Item_Demand_Alloc_Percent(p_plan_id,
4975 AD.PARENT_DEMAND_ID,
4976 trunc(AD.Demand_Date),
4977 AD.USING_ASSEMBLY_ITEM_ID,
4978 DECODE(AD.SOURCE_ORGANIZATION_ID,
4979 -23453, null,
4980 AD.SOURCE_ORGANIZATION_ID),
4981 Decode(sign(trunc(AD.Demand_Date) - p_atf_date),
4982 1, p_family_id,
4983 Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
4984 'Y', AD.Original_Item_Id,
4985 p_family_id)),
4986 p_org_id,
4987 p_instance_id,
4988 AD.Original_Origination_Type,
4989 DECODE(MSC_AATP_PVT.G_HIERARCHY_PROFILE,
4990 1, decode(AD.Original_Origination_Type,
4991 6, decode(AD.SOURCE_ORGANIZATION_ID,
4992 NULL, DECODE(AD.DEMAND_CLASS, null, null,
4993 DECODE(p_demand_class, '-1',
4994 MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(
4995 null, null, Decode(sign(trunc(AD.Demand_Date) - p_atf_date),
4996 1, p_family_id,
4997 Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
4998 'Y', AD.Original_Item_Id,
4999 p_family_id)), p_org_id,
5000 p_instance_id, trunc(AD.Demand_Date),
5001 p_level_id, AD.DEMAND_CLASS),
5002 AD.DEMAND_CLASS)),
5003 -23453, DECODE(AD.DEMAND_CLASS, null, null,
5004 DECODE(p_demand_class, '-1',
5005 MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(
5006 null, null, Decode(sign(trunc(AD.Demand_Date) - p_atf_date),
5007 1, p_family_id,
5008 Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
5009 'Y', AD.Original_Item_Id,
5010 p_family_id)), p_org_id,
5011 p_instance_id, trunc(AD.Demand_Date),
5012 p_level_id, AD.DEMAND_CLASS),
5013 AD.DEMAND_CLASS)),
5014 AD.ORGANIZATION_ID, DECODE(AD.DEMAND_CLASS, null, null,
5015 DECODE(p_demand_class, '-1',
5016 MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(
5017 null, null, Decode(sign(trunc(AD.Demand_Date) - p_atf_date),
5018 1, p_family_id,
5019 Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
5020 'Y', AD.Original_Item_Id,
5021 p_family_id)), p_org_id,
5022 p_instance_id, trunc(AD.Demand_Date),
5023 p_level_id, AD.DEMAND_CLASS),
5024 AD.DEMAND_CLASS)),
5025 p_demand_class),
5026 30, decode(AD.SOURCE_ORGANIZATION_ID,
5027 NULL, DECODE(AD.DEMAND_CLASS, null, null,
5028 DECODE(p_demand_class, '-1',
5029 MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(
5030 null, null, Decode(sign(trunc(AD.Demand_Date) - p_atf_date),
5031 1, p_family_id,
5032 Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
5033 'Y', AD.Original_Item_Id,
5034 p_family_id)), p_org_id,
5035 p_instance_id, trunc(AD.Demand_Date),
5036 p_level_id, AD.DEMAND_CLASS),
5037 AD.DEMAND_CLASS)),
5038 -23453, DECODE(AD.DEMAND_CLASS, null, null,
5039 DECODE(p_demand_class, '-1',
5040 MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(
5041 null, null, Decode(sign(trunc(AD.Demand_Date) - p_atf_date),
5042 1, p_family_id,
5043 Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
5044 'Y', AD.Original_Item_Id,
5045 p_family_id)), p_org_id,
5046 p_instance_id, trunc(AD.Demand_Date),
5047 p_level_id, AD.DEMAND_CLASS),
5048 AD.DEMAND_CLASS)),
5049 AD.ORGANIZATION_ID, DECODE(AD.DEMAND_CLASS, null, null,
5050 DECODE(p_demand_class, '-1',
5051 MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(
5052 null, null, Decode(sign(trunc(AD.Demand_Date) - p_atf_date),
5053 1, p_family_id,
5054 Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
5055 'Y', AD.Original_Item_Id,
5056 p_family_id)), p_org_id,
5057 p_instance_id, trunc(AD.Demand_Date),
5058 p_level_id, AD.DEMAND_CLASS),
5059 AD.DEMAND_CLASS)),
5060 p_demand_class),
5061 DECODE(AD.DEMAND_CLASS, null, null,
5062 DECODE(p_demand_class, '-1',
5063 MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(
5064 null, null, Decode(sign(trunc(AD.Demand_Date) - p_atf_date),
5065 1, p_family_id,
5066 Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
5067 'Y', AD.Original_Item_Id,
5068 p_family_id)), p_org_id,
5069 p_instance_id, trunc(AD.Demand_Date),
5070 p_level_id, AD.DEMAND_CLASS),
5071 AD.DEMAND_CLASS))),
5072 2, DECODE(AD.CUSTOMER_ID, NULL, p_demand_class,
5073 0, p_demand_class,
5074 decode(AD.Original_Origination_Type,
5075 6, decode(AD.SOURCE_ORGANIZATION_ID,
5076 NULL, MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(
5077 AD.CUSTOMER_ID, AD.SHIP_TO_SITE_ID, Decode(sign(trunc(AD.Demand_Date) - p_atf_date),
5078 1, p_family_id,
5079 Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
5080 'Y', AD.Original_Item_Id,
5081 p_family_id)),
5082 p_org_id, p_instance_id, trunc(AD.Demand_Date),
5083 p_level_id, NULL),
5084 -23453, MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(
5085 AD.CUSTOMER_ID, AD.SHIP_TO_SITE_ID, Decode(sign(trunc(AD.Demand_Date) - p_atf_date),
5086 1, p_family_id,
5087 Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
5088 'Y', AD.Original_Item_Id,
5089 p_family_id)),
5090 p_org_id, p_instance_id, trunc(AD.Demand_Date),
5091 p_level_id, NULL),
5092 AD.ORGANIZATION_ID, MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(
5093 AD.CUSTOMER_ID, AD.SHIP_TO_SITE_ID, Decode(sign(trunc(AD.Demand_Date) - p_atf_date),
5094 1, p_family_id,
5095 Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
5096 'Y', AD.Original_Item_Id,
5097 p_family_id)),
5098 p_org_id, p_instance_id, trunc(AD.Demand_Date),
5099 p_level_id, NULL),
5100 p_demand_class),
5101 30, decode(AD.SOURCE_ORGANIZATION_ID,
5102 NULL, MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(
5103 AD.CUSTOMER_ID, AD.SHIP_TO_SITE_ID, Decode(sign(trunc(AD.Demand_Date) - p_atf_date),
5104 1, p_family_id,
5105 Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
5106 'Y', AD.Original_Item_Id,
5107 p_family_id)),
5108 p_org_id, p_instance_id, trunc(AD.Demand_Date),
5109 p_level_id, NULL),
5110 -23453, MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(
5111 AD.CUSTOMER_ID, AD.SHIP_TO_SITE_ID, Decode(sign(trunc(AD.Demand_Date) - p_atf_date),
5112 1, p_family_id,
5113 Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
5114 'Y', AD.Original_Item_Id,
5115 p_family_id)),
5116 p_org_id, p_instance_id, trunc(AD.Demand_Date),
5117 p_level_id, NULL),
5118 AD.ORGANIZATION_ID, MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(
5119 AD.CUSTOMER_ID, AD.SHIP_TO_SITE_ID, Decode(sign(trunc(AD.Demand_Date) - p_atf_date),
5120 1, p_family_id,
5121 Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
5122 'Y', AD.Original_Item_Id,
5123 p_family_id)),
5124 p_org_id, p_instance_id, trunc(AD.Demand_Date),
5125 p_level_id, NULL),
5126 p_demand_class),
5127 MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(
5128 AD.CUSTOMER_ID, AD.SHIP_TO_SITE_ID,
5129 Decode(sign(trunc(AD.Demand_Date) - p_atf_date),
5130 1, p_family_id,
5131 Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
5132 'Y', AD.Original_Item_Id,
5133 p_family_id)), p_org_id, p_instance_id,
5134 trunc(AD.Demand_Date),p_level_id, NULL)))),
5135 p_demand_class,
5136 p_level_id)),
5137 trunc(AD.Original_Demand_Date),
5138 AD.Original_Item_Id,
5139 AD.Original_Origination_Type,
5140 l_sysdate,
5141 G_USER_ID,
5142 l_sysdate,
5143 G_USER_ID,
5144 G_USER_ID,
5145 -1* AD.ALLOCATED_QUANTITY, -- bug 3282426
5146 MTPS.LOCATION, --bug3263368
5147 MTP.PARTNER_NAME, --bug3263368
5148 AD.DEMAND_CLASS, --bug3263368
5149 AD.REQUEST_DATE, --bug3263368
5150 I.Item_Name -- bug3579625
5151 FROM MSC_ALLOC_DEMANDS AD,
5152 MSC_TRADING_PARTNERS MTP,--bug3263368
5153 MSC_TRADING_PARTNER_SITES MTPS, --bug3263368
5154 MSC_SYSTEM_ITEMS I --bug3579625
5155 WHERE AD.PLAN_ID = p_plan_id
5156 AND AD.SR_INSTANCE_ID = p_instance_id
5157 AND AD.INVENTORY_ITEM_ID in (p_member_id,p_family_id)
5158 AND AD.ORGANIZATION_ID = p_org_id
5159 AND AD.ORIGINATION_TYPE <> 52
5160 AND AD.ALLOCATED_QUANTITY <> 0
5161 --bug3700564 added trunc
5162 AND TRUNC(AD.DEMAND_DATE) < NVL(p_itf, TRUNC(AD.DEMAND_DATE) + 1)
5163 AND AD.SHIP_TO_SITE_ID = MTPS.PARTNER_SITE_ID(+) --bug3263368
5164 AND AD.CUSTOMER_ID = MTP.PARTNER_ID(+)--bug3263368
5165 -- bug3579625 Addition join with MSC_SYSTEM_ITEMS (I)
5166 AND AD.PLAN_ID = I.PLAN_ID
5167 AND AD.SR_INSTANCE_ID = I.SR_INSTANCE_ID
5168 AND AD.ORIGINAL_ITEM_ID = I.INVENTORY_ITEM_ID
5169 AND AD.ORGANIZATION_ID = I.ORGANIZATION_ID
5170
5171 UNION ALL
5172 SELECT p_level col1,
5173 p_identifier col2,
5174 p_scenario_id col3,
5175 p_sr_family_id col4 ,
5176 p_sr_member_id col5,
5177 p_org_id col6,
5178 l_null_num col7,
5179 l_null_num col8,
5180 l_null_num col9,
5181 l_null_num col10,
5182 l_null_num col11,
5183 l_null_num col12,
5184 l_null_num col13,
5185 l_null_num col14,
5186 l_null_char col15,
5187 p_uom_code col16,
5188 2 col17,
5189 CSA.ORDER_TYPE col18,
5190 l_null_char col19,
5191 CSA.SR_INSTANCE_ID col20,
5192 l_null_num col21,
5193 CSA.PARENT_TRANSACTION_ID col22,
5194 l_null_num col23,
5195 CSA.ALLOCATED_QUANTITY*
5196 DECODE(DECODE(MSC_AATP_PVT.G_HIERARCHY_PROFILE,
5197 1, DECODE(CSA.DEMAND_CLASS, null, null,
5198 DECODE(p_demand_class, '-1',
5199 MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(
5200 null,
5201 null,
5202 Decode(sign(trunc(CSA.Supply_Date) - p_atf_date),
5203 1, p_family_id,
5204 Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
5205 'Y', CSA.Original_Item_Id,
5206 p_family_id)),
5207 p_org_id,
5208 p_instance_id,
5209 TRUNC(CSA.SUPPLY_DATE),
5210 p_level_id,
5211 CSA.DEMAND_CLASS),
5212 CSA.DEMAND_CLASS)),
5213 2, DECODE(CSA.CUSTOMER_ID, NULL, TO_CHAR(NULL),
5214 0, TO_CHAR(NULL),
5215 MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(
5216 CSA.CUSTOMER_ID,
5217 CSA.SHIP_TO_SITE_ID,
5218 Decode(sign(trunc(CSA.Supply_Date) - p_atf_date),
5219 1, p_family_id,
5220 Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
5221 'Y', CSA.Original_Item_Id,
5222 p_family_id)),
5223 p_org_id,
5224 p_instance_id,
5225 TRUNC(CSA.SUPPLY_DATE),
5226 p_level_id,
5227 NULL))),
5228 p_demand_class, 1,
5229 NULL, nvl(MIHM.allocation_percent/100,1), --4365873
5230 /*NVL(MSC_AATP_FUNC.Get_DC_Alloc_Percent(
5231 p_instance_id,
5232 Decode(sign(trunc(CSA.Supply_Date) - p_atf_date),
5233 1, p_family_id,
5234 Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
5235 'Y', CSA.Original_Item_Id,
5236 p_family_id)),
5237 p_org_id,
5238 null,
5239 null,
5240 p_demand_class,
5241 TRUNC(CSA.SUPPLY_DATE)),
5242 1),*/
5243 DECODE(
5244 MIHM.allocation_percent/100, --4365873
5245 /*DECODE(MSC_AATP_FUNC.Get_DC_Alloc_Percent(
5246 p_instance_id,
5247 Decode(sign(trunc(CSA.Supply_Date) - p_atf_date),
5248 1, p_family_id,
5249 Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
5250 'Y', CSA.Original_Item_Id,
5251 p_family_id)),
5252 p_org_id,
5253 null,
5254 null,
5255 p_demand_class,
5256 TRUNC(CSA.SUPPLY_DATE)),*/
5257 NULL, 1,
5258 0)) col24,
5259 --TRUNC(SA.SUPPLY_DATE) col25,
5260 GREATEST(TRUNC(CSA.SUPPLY_DATE),p_sys_next_date) col25, --3099066
5261 l_null_num col26,
5262 CSA.ORDER_NUMBER col27,
5263 l_null_num col28,
5264 l_null_num col29,
5265 l_null_num,
5266 NVL(CSA.Supply_Quantity, CSA.ALLOCATED_QUANTITY),
5267 l_null_num,
5268 to_date(null),
5269 CSA.Original_Item_Id,
5270 CSA.Original_Order_Type,
5271 l_sysdate,
5272 G_USER_ID,
5273 l_sysdate,
5274 G_USER_ID,
5275 G_USER_ID,
5276 CSA.ALLOCATED_QUANTITY, -- bug 3282426
5277 --null,
5278 --null,
5279 --null,
5280 --null,
5281 l_null_char, --bug3814584
5282 l_null_char, --bug3814584
5283 l_null_char, --bug3814584
5284 l_null_date, --bug3814584
5285 CSA.Item_Name -- bug3579625
5286 FROM
5287 (
5288 select
5289 SA.SUPPLY_DATE,
5290 SA.DEMAND_CLASS,
5291 SA.Original_Item_Id,
5292 SA.CUSTOMER_ID,
5293 SA.SHIP_TO_SITE_ID,
5294 SA.ORGANIZATION_ID,
5295 SA.SR_INSTANCE_ID,
5296 SA.INVENTORY_ITEM_ID,
5297 SA.ORIGINAL_ORDER_TYPE,
5298 SA.ORDER_NUMBER,
5299 I.Item_Name,
5300 SA.Supply_Quantity,
5301 SA.ALLOCATED_QUANTITY,
5302 SA.PARENT_TRANSACTION_ID,
5303 SA.ORDER_TYPE
5304 FROM MSC_ALLOC_SUPPLIES SA,
5305 MSC_SYSTEM_ITEMS I
5306 WHERE SA.PLAN_ID = p_plan_id
5307 AND SA.SR_INSTANCE_ID = p_instance_id
5308 AND SA.INVENTORY_ITEM_ID in (p_member_id, p_family_id)
5309 AND SA.ORGANIZATION_ID = p_org_id
5310 AND SA.ALLOCATED_QUANTITY <> 0
5311 AND TRUNC(SA.SUPPLY_DATE) >= DECODE(SA.ORIGINAL_ORDER_TYPE,
5312 27, TRUNC(SYSDATE),
5313 28, TRUNC(SYSDATE),
5314 TRUNC(SA.SUPPLY_DATE))
5315 --bug3700564 added trunc
5316 AND TRUNC(SA.SUPPLY_DATE) < NVL(p_itf, TRUNC(SA.SUPPLY_DATE) + 1)
5317 -- bug3579625 Addition join with MSC_SYSTEM_ITEMS (I)
5318 AND SA.PLAN_ID = I.PLAN_ID
5319 AND SA.SR_INSTANCE_ID = I.SR_INSTANCE_ID
5320 AND SA.ORIGINAL_ITEM_ID = I.INVENTORY_ITEM_ID
5321 AND SA.ORGANIZATION_ID = I.ORGANIZATION_ID) CSA,
5322 MSC_ITEM_HIERARCHY_MV MIHM
5323 WHERE
5324 --4365873
5325 --5220274 if the rule is assigned to family only then use family id.
5326 Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
5327 'N', p_family_id,
5328 CSA.INVENTORY_ITEM_ID) = MIHM.INVENTORY_ITEM_ID(+)
5329 AND CSA.SR_INSTANCE_ID = MIHM.SR_INSTANCE_ID (+)
5330 AND CSA.ORGANIZATION_ID = MIHM.ORGANIZATION_ID (+)
5331 AND decode(MIHM.level_id (+),-1,1,2) = decode(MSC_AATP_PVT.G_HIERARCHY_PROFILE,1,1,2)
5332 AND TRUNC(CSA.SUPPLY_DATE) >= MIHM.effective_date (+)
5333 AND TRUNC(CSA.SUPPLY_DATE) <= MIHM.disable_date (+)
5334 AND MIHM.demand_class (+) = p_demand_class
5335 )
5336 ;
5337 EXCEPTION
5338 WHEN OTHERS THEN
5339 IF PG_DEBUG in ('Y', 'C') THEN
5340 msc_sch_wb.atp_debug('Item_Alloc_Avail_Pf_Dtls: ' || 'Error occurred: ' || to_char(sqlcode) || ':' || SQLERRM);
5341 END IF;
5342 x_return_status := FND_API.G_RET_STS_ERROR;
5343
5344 END Item_Alloc_Avail_Pf_Dtls;
5345
5346 /*--Item_Prealloc_Avail_Pf--------------------------------------------------------
5347 | o Called from Item_Pre_Allocated_Atp procedure for Demand Priority based
5348 | Allocated Time Phased PF ATP.
5349 +-------------------------------------------------------------------------------*/
5350 PROCEDURE Item_Prealloc_Avail_Pf (
5351 p_member_id IN NUMBER,
5352 p_family_id IN NUMBER,
5353 p_org_id IN NUMBER,
5354 p_instance_id IN NUMBER,
5355 p_plan_id IN NUMBER,
5356 p_demand_class IN VARCHAR2,
5357 p_itf IN DATE,
5358 x_atp_dates OUT NOCOPY MRP_ATP_PUB.date_arr,
5359 x_atp_qtys OUT NOCOPY MRP_ATP_PUB.number_arr,
5360 x_return_status OUT NOCOPY VARCHAR2
5361 ) IS
5362
5363 BEGIN
5364 IF PG_DEBUG in ('Y', 'C') THEN
5365 msc_sch_wb.atp_debug('******* Begin Item_Prealloc_Avail_Pf **********');
5366 msc_sch_wb.atp_debug('Item_Prealloc_Avail_Pf: p_member_id: ' || p_member_id);
5367 msc_sch_wb.atp_debug('Item_Prealloc_Avail_Pf: p_family_id: ' || p_family_id);
5368 msc_sch_wb.atp_debug('Item_Prealloc_Avail_Pf: p_instance_id: ' || p_instance_id);
5369 msc_sch_wb.atp_debug('Item_Prealloc_Avail_Pf: p_plan_id: ' || p_plan_id);
5370 msc_sch_wb.atp_debug('Item_Prealloc_Avail_Pf p_demand_class: ' || p_demand_class);
5371 END IF;
5372
5373 -- Initializing API return code
5374 x_return_status := FND_API.G_RET_STS_SUCCESS;
5375
5376 SELECT SD_DATE,
5377 SUM(SD_QTY)
5378 BULK COLLECT INTO
5379 x_atp_dates,
5380 x_atp_qtys
5381 FROM (
5382 SELECT TRUNC(AD.DEMAND_DATE) SD_DATE,
5383 -1 * AD.ALLOCATED_QUANTITY SD_QTY
5384 FROM MSC_ALLOC_DEMANDS AD
5385 WHERE AD.PLAN_ID = p_plan_id
5386 AND AD.SR_INSTANCE_ID = p_instance_id
5387 AND AD.INVENTORY_ITEM_ID in (p_member_id, p_family_id)
5388 AND AD.ORIGINATION_TYPE <> 52 -- ATP Bucketed Demand
5389 AND AD.ORGANIZATION_ID = p_org_id
5390 AND AD.DEMAND_CLASS = NVL(p_demand_class, AD.DEMAND_CLASS)
5391 AND AD.ALLOCATED_QUANTITY <> 0 --4501434
5392 AND TRUNC(AD.DEMAND_DATE) < p_itf
5393 UNION ALL
5394 SELECT TRUNC(SA.SUPPLY_DATE) SD_DATE,
5395 SA.ALLOCATED_QUANTITY SD_QTY
5396 FROM MSC_ALLOC_SUPPLIES SA
5397 WHERE SA.PLAN_ID = p_plan_id
5398 AND SA.SR_INSTANCE_ID = p_instance_id
5399 AND SA.INVENTORY_ITEM_ID in (p_member_id, p_family_id)
5400 AND TRUNC(SA.SUPPLY_DATE) >= DECODE(SA.ORIGINAL_ORDER_TYPE,
5401 27, TRUNC(SYSDATE),
5402 28, TRUNC(SYSDATE),
5403 TRUNC(SA.SUPPLY_DATE))
5404 AND SA.ORGANIZATION_ID = p_org_id
5405 AND SA.ALLOCATED_QUANTITY <> 0
5406 AND SA.DEMAND_CLASS = NVL(p_demand_class, SA.DEMAND_CLASS)
5407 AND TRUNC(SA.SUPPLY_DATE) < p_itf
5408 )
5409 GROUP BY SD_DATE
5410 order by SD_DATE; --4698199
5411
5412 EXCEPTION
5413 WHEN OTHERS THEN
5414 IF PG_DEBUG in ('Y', 'C') THEN
5415 msc_sch_wb.atp_debug('Item_Prealloc_Avail_Pf: ' || 'Error occurred: ' || to_char(sqlcode) || ':' || SQLERRM);
5416 END IF;
5417 x_return_status := FND_API.G_RET_STS_ERROR;
5418
5419 END Item_Prealloc_Avail_Pf;
5420
5421 /*--Item_Prealloc_Avail_Pf_Summ---------------------------------------------------
5422 | o Called from Item_Pre_Allocated_Atp procedure for Demand Priority based
5423 | Allocated Time Phased PF ATP.
5424 +-------------------------------------------------------------------------------*/
5425 PROCEDURE Item_Prealloc_Avail_Pf_Summ (
5426 p_member_id IN NUMBER,
5427 p_family_id IN NUMBER,
5428 p_org_id IN NUMBER,
5429 p_instance_id IN NUMBER,
5430 p_plan_id IN NUMBER,
5431 p_demand_class IN VARCHAR2,
5432 p_itf IN DATE,
5433 p_refresh_number IN NUMBER,
5434 x_atp_dates OUT NOCOPY MRP_ATP_PUB.date_arr,
5435 x_atp_qtys OUT NOCOPY MRP_ATP_PUB.number_arr,
5436 x_return_status OUT NOCOPY VARCHAR2
5437 ) IS
5438
5439 BEGIN
5440 IF PG_DEBUG in ('Y', 'C') THEN
5441 msc_sch_wb.atp_debug('******* Begin Item_Prealloc_Avail_Pf_Summ **********');
5442 msc_sch_wb.atp_debug('Item_Prealloc_Avail_Pf_Summ: p_member_id: ' || p_member_id);
5443 msc_sch_wb.atp_debug('Item_Prealloc_Avail_Pf_Summ: p_family_id: ' || p_family_id);
5444 msc_sch_wb.atp_debug('Item_Prealloc_Avail_Pf_Summ: p_instance_id: ' || p_instance_id);
5445 msc_sch_wb.atp_debug('Item_Prealloc_Avail_Pf_Summ: p_plan_id: ' || p_plan_id);
5446 msc_sch_wb.atp_debug('Item_Prealloc_Avail_Pf_Summ p_demand_class: ' || p_demand_class);
5447 END IF;
5448
5449 -- Initializing API return code
5450 x_return_status := FND_API.G_RET_STS_SUCCESS;
5451
5452 -- SQL changed for summary enhancement
5453 SELECT SD_DATE,
5454 SUM(SD_QTY)
5455 BULK COLLECT INTO
5456 x_atp_dates,
5457 x_atp_qtys
5458 FROM
5459 (
5460 SELECT /*+ INDEX(S MSC_ATP_SUMMARY_SD_U1) */
5461 SD_DATE, SD_QTY
5462 FROM MSC_ATP_SUMMARY_SD S
5463 WHERE S.PLAN_ID = p_plan_id
5464 AND S.SR_INSTANCE_ID = p_instance_id
5465 AND S.INVENTORY_ITEM_ID in (p_member_id, p_family_id)
5466 AND S.ORGANIZATION_ID = p_org_id
5467 AND S.DEMAND_CLASS = NVL(p_demand_class, S.DEMAND_CLASS)
5468 AND S.SD_DATE < p_itf
5469
5470 UNION ALL
5471
5472 SELECT TRUNC(AD.DEMAND_DATE) SD_DATE,
5473 decode(AD.ALLOCATED_QUANTITY, -- Consider unscheduled orders as dummy supplies
5474 0, OLD_ALLOCATED_QUANTITY,-- For summary enhancement
5475 -1 * AD.ALLOCATED_QUANTITY) SD_QTY
5476 FROM MSC_ALLOC_DEMANDS AD,
5477 MSC_PLANS P -- For summary enhancement
5478 WHERE AD.PLAN_ID = p_plan_id
5479 AND AD.SR_INSTANCE_ID = p_instance_id
5480 AND AD.INVENTORY_ITEM_ID in (p_member_id, p_family_id)
5481 AND AD.ORGANIZATION_ID = p_org_id
5482 AND AD.DEMAND_CLASS = NVL(p_demand_class, AD.DEMAND_CLASS)
5483 AND TRUNC(AD.DEMAND_DATE) < p_itf
5484 AND P.PLAN_ID = AD.PLAN_ID
5485 AND (AD.REFRESH_NUMBER > P.LATEST_REFRESH_NUMBER
5486 OR AD.REFRESH_NUMBER = p_refresh_number)
5487 -- since repetitive schedule demand is not supported in this case
5488 -- join to msc_calendar_dates is not needed.
5489
5490 UNION ALL
5491
5492 SELECT TRUNC(SA.SUPPLY_DATE) SD_DATE,
5493 decode(SA.ALLOCATED_QUANTITY, -- Consider deleted stealing records as dummy demands
5494 0, -1 * OLD_ALLOCATED_QUANTITY, -- For summary enhancement
5495 SA.ALLOCATED_QUANTITY) SD_QTY
5496 FROM MSC_ALLOC_SUPPLIES SA,
5497 MSC_PLANS P -- For summary enhancement
5498 WHERE SA.PLAN_ID = p_plan_id
5499 AND SA.SR_INSTANCE_ID = p_instance_id
5500 AND SA.INVENTORY_ITEM_ID in (p_member_id, p_family_id)
5501 AND SA.ORGANIZATION_ID = p_org_id
5502 AND SA.DEMAND_CLASS = NVL(p_demand_class, SA.DEMAND_CLASS)
5503 AND TRUNC(SA.SUPPLY_DATE) < p_itf
5504 AND P.PLAN_ID = SA.PLAN_ID
5505 AND TRUNC(SA.SUPPLY_DATE) >= DECODE(SA.ORIGINAL_ORDER_TYPE,
5506 27, TRUNC(SYSDATE),
5507 28, TRUNC(SYSDATE),
5508 TRUNC(SA.SUPPLY_DATE))
5509 AND (SA.REFRESH_NUMBER > P.LATEST_REFRESH_NUMBER
5510 OR SA.REFRESH_NUMBER = p_refresh_number)
5511 )
5512 GROUP BY SD_DATE
5513 order by SD_DATE; --4698199
5514
5515 EXCEPTION
5516 WHEN OTHERS THEN
5517 IF PG_DEBUG in ('Y', 'C') THEN
5518 msc_sch_wb.atp_debug('Item_Prealloc_Avail_Pf_Summ: ' || 'Error occurred: ' || to_char(sqlcode) || ':' || SQLERRM);
5519 END IF;
5520 x_return_status := FND_API.G_RET_STS_ERROR;
5521
5522 END Item_Prealloc_Avail_Pf_Summ;
5523
5524 /*--Item_Prealloc_Avail_Pf_Dtls---------------------------------------------------
5525 | o Called from Item_Pre_Allocated_Atp procedure for Demand Priority based
5526 | Allocated Time Phased PF ATP.
5527 +-------------------------------------------------------------------------------*/
5528 PROCEDURE Item_Prealloc_Avail_Pf_Dtls (
5529 p_member_id IN NUMBER,
5530 p_family_id IN NUMBER,
5531 p_sr_member_id IN NUMBER,
5532 p_sr_family_id IN NUMBER,
5533 p_org_id IN NUMBER,
5534 p_instance_id IN NUMBER,
5535 p_plan_id IN NUMBER,
5536 p_demand_class IN VARCHAR2,
5537 p_itf IN DATE,
5538 p_atf_date IN DATE,
5539 p_level IN NUMBER,
5540 p_identifier IN NUMBER,
5541 p_scenario_id IN NUMBER,
5542 p_uom_code IN VARCHAR2,
5543 x_return_status OUT NOCOPY VARCHAR2
5544 ) IS
5545 l_sysdate DATE := sysdate;
5546 l_null_num NUMBER;
5547 l_null_char VARCHAR2(1);
5548 l_null_date DATE; --bug3814584
5549 l_return_status VARCHAR2(1);
5550 BEGIN
5551 IF PG_DEBUG in ('Y', 'C') THEN
5552 msc_sch_wb.atp_debug('******* Begin Item_Prealloc_Avail_Pf_Dtls **********');
5553 msc_sch_wb.atp_debug('Item_Prealloc_Avail_Pf_Dtls: p_member_id: ' || p_member_id);
5554 msc_sch_wb.atp_debug('Item_Prealloc_Avail_Pf_Dtls: p_family_id: ' || p_family_id);
5555 msc_sch_wb.atp_debug('Item_Prealloc_Avail_Pf_Dtls: p_instance_id: ' || p_instance_id);
5556 msc_sch_wb.atp_debug('Item_Prealloc_Avail_Pf_Dtls: p_plan_id: ' || p_plan_id);
5557 msc_sch_wb.atp_debug('Item_Prealloc_Avail_Pf_Dtls p_demand_class: ' || p_demand_class);
5558 END IF;
5559
5560 -- Initializing API return code
5561 x_return_status := FND_API.G_RET_STS_SUCCESS;
5562
5563 INSERT INTO msc_atp_sd_details_temp (
5564 ATP_Level,
5565 Order_line_id,
5566 Scenario_Id,
5567 Inventory_Item_Id,
5568 Request_Item_Id,
5569 Organization_Id,
5570 Department_Id,
5571 Resource_Id,
5572 Supplier_Id,
5573 Supplier_Site_Id,
5574 From_Organization_Id,
5575 From_Location_Id,
5576 To_Organization_Id,
5577 To_Location_Id,
5578 Ship_Method,
5579 UOM_code,
5580 Supply_Demand_Type,
5581 Supply_Demand_Source_Type,
5582 Supply_Demand_Source_Type_Name,
5583 Identifier1,
5584 Identifier2,
5585 Identifier3,
5586 Identifier4,
5587 Allocated_Quantity,
5588 Supply_Demand_Date,
5589 Disposition_Type,
5590 Disposition_Name,
5591 Pegging_Id,
5592 End_Pegging_Id,
5593 Pf_Display_Flag,
5594 Supply_Demand_Quantity,
5595 Original_Demand_Quantity,
5596 Original_Demand_Date,
5597 Original_Item_Id,
5598 Original_Supply_Demand_Type,
5599 creation_date,
5600 created_by,
5601 last_update_date,
5602 last_updated_by,
5603 last_update_login,
5604 ORIG_CUSTOMER_SITE_NAME,--bug3263368
5605 ORIG_CUSTOMER_NAME, --bug3263368
5606 ORIG_DEMAND_CLASS, --bug3263368
5607 ORIG_REQUEST_DATE, --bug3263368
5608 Inventory_Item_Name --bug3579625
5609 )
5610 (
5611 SELECT p_level col1,
5612 p_identifier col2,
5613 p_scenario_id col3,
5614 p_sr_family_id col4 ,
5615 p_sr_member_id col5,
5616 p_org_id col6,
5617 l_null_num col7,
5618 l_null_num col8,
5619 l_null_num col9,
5620 l_null_num col10,
5621 l_null_num col11,
5622 l_null_num col12,
5623 l_null_num col13,
5624 l_null_num col14,
5625 l_null_char col15,
5626 p_uom_code col16,
5627 1 col17, -- demand
5628 AD.ORIGINATION_TYPE col18,
5629 l_null_char col19,
5630 AD.SR_INSTANCE_ID col20,
5631 l_null_num col21,
5632 AD.PARENT_DEMAND_ID col22,
5633 l_null_num col23,
5634 -1 * AD.ALLOCATED_QUANTITY col24,
5635 TRUNC(AD.DEMAND_DATE) col25,
5636 l_null_num col26,
5637 AD.ORDER_NUMBER col27,
5638 l_null_num col28,
5639 l_null_num col29,
5640 Decode(AD.inventory_item_id, p_family_id,
5641 Decode(AD.original_item_id, p_member_id,
5642 AD.Pf_Display_Flag,
5643 Decode(sign(trunc(AD.Original_Demand_Date) - p_atf_date),
5644 1, AD.Pf_Display_Flag,
5645 1)),
5646 AD.Pf_Display_Flag),
5647 -1* NVL(AD.Demand_Quantity, AD.ALLOCATED_QUANTITY),
5648 -1* NVL(AD.Demand_Quantity, AD.ALLOCATED_QUANTITY),
5649 TRUNC(AD.Original_Demand_Date),
5650 AD.Original_Item_Id,
5651 AD.Original_Origination_Type,
5652 l_sysdate,
5653 G_USER_ID,
5654 l_sysdate,
5655 G_USER_ID,
5656 G_USER_ID,
5657 MTPS.LOCATION, --bug3263368
5658 MTP.PARTNER_NAME, --bug3263368
5659 AD.DEMAND_CLASS, --bug3263368
5660 AD.REQUEST_DATE, --bug3263368
5661 I.Item_Name --bug3579625
5662 FROM MSC_ALLOC_DEMANDS AD,
5663 MSC_TRADING_PARTNERS MTP,--bug3263368
5664 MSC_TRADING_PARTNER_SITES MTPS, --bug3263368
5665 MSC_SYSTEM_ITEMS I --bug3579625
5666 WHERE AD.PLAN_ID = p_plan_id
5667 AND AD.SR_INSTANCE_ID = p_instance_id
5668 AND AD.INVENTORY_ITEM_ID in (p_member_id, p_family_id)
5669 AND AD.ORIGINATION_TYPE <> 52
5670 AND AD.ORGANIZATION_ID = p_org_id
5671 AND AD.ALLOCATED_QUANTITY <> 0 --4501434
5672 AND AD.DEMAND_CLASS = NVL(p_demand_class, AD.DEMAND_CLASS)
5673 AND TRUNC(AD.DEMAND_DATE) < p_itf
5674 AND AD.SHIP_TO_SITE_ID = MTPS.PARTNER_SITE_ID(+) --bug3263368
5675 AND AD.CUSTOMER_ID = MTP.PARTNER_ID(+)--bug3263368
5676 -- bug3579625 Addition join with MSC_SYSTEM_ITEMS (I)
5677 AND AD.PLAN_ID = I.PLAN_ID
5678 AND AD.SR_INSTANCE_ID = I.SR_INSTANCE_ID
5679 AND AD.ORIGINAL_ITEM_ID = I.INVENTORY_ITEM_ID
5680 AND AD.ORGANIZATION_ID = I.ORGANIZATION_ID
5681
5682 UNION ALL
5683 SELECT p_level col1,
5684 p_identifier col2,
5685 p_scenario_id col3,
5686 p_sr_family_id col4 ,
5687 p_sr_member_id col5,
5688 p_org_id col6,
5689 l_null_num col7,
5690 l_null_num col8,
5691 l_null_num col9,
5692 l_null_num col10,
5693 l_null_num col11,
5694 l_null_num col12,
5695 l_null_num col13,
5696 l_null_num col14,
5697 l_null_char col15,
5698 p_uom_code col16,
5699 2 col17, -- supply
5700 SA.ORDER_TYPE col18,
5701 l_null_char col19,
5702 SA.SR_INSTANCE_ID col20,
5703 l_null_num col21,
5704 SA.PARENT_TRANSACTION_ID col22,
5705 l_null_num col23,
5706 SA.ALLOCATED_QUANTITY col24,
5707 TRUNC(SA.SUPPLY_DATE) col25,
5708 l_null_num col26,
5709 DECODE(SA.ORDER_TYPE, 5, to_char(SA.PARENT_TRANSACTION_ID), SA.ORDER_NUMBER) col27,
5710 l_null_num col28,
5711 l_null_num col29,
5712 l_null_num,
5713 NVL(SA.Supply_Quantity, SA.ALLOCATED_QUANTITY),
5714 l_null_num,
5715 to_date(null),
5716 SA.Original_Item_Id,
5717 DECODE(SA.ORIGINAL_ORDER_TYPE,
5718 46, 48, -- Change Supply due to Stealing to Supply Adjustment
5719 47, 48, -- Change Demand due to Stealing to Supply Adjustment
5720 SA.ORIGINAL_ORDER_TYPE),
5721 l_sysdate,
5722 G_USER_ID,
5723 l_sysdate,
5724 G_USER_ID,
5725 G_USER_ID,
5726 MTPS.LOCATION, --bug3684383
5727 MTP.PARTNER_NAME, --bug3684383
5728 SA.DEMAND_CLASS, --bug3684383
5729 --null, --bug3684383
5730 l_null_date, --bug3814584
5731 I.Item_Name --bug3579625
5732
5733 FROM MSC_ALLOC_SUPPLIES SA,
5734 MSC_SYSTEM_ITEMS I, --bug3579625
5735 MSC_TRADING_PARTNERS MTP,--bug3684383
5736 MSC_TRADING_PARTNER_SITES MTPS --bug3684383
5737
5738 WHERE SA.PLAN_ID = p_plan_id
5739 AND SA.SR_INSTANCE_ID = p_instance_id
5740 AND SA.INVENTORY_ITEM_ID in (p_member_id, p_family_id)
5741 AND TRUNC(SA.SUPPLY_DATE) >= DECODE(SA.ORIGINAL_ORDER_TYPE,
5742 27, TRUNC(SYSDATE),
5743 28, TRUNC(SYSDATE),
5744 TRUNC(SA.SUPPLY_DATE))
5745 AND SA.ORGANIZATION_ID = p_org_id
5746 AND SA.ALLOCATED_QUANTITY <> 0
5747 AND SA.DEMAND_CLASS = NVL(p_demand_class, SA.DEMAND_CLASS )
5748 AND TRUNC(SA.SUPPLY_DATE) < p_itf
5749 -- bug3579625 Addition join with MSC_SYSTEM_ITEMS (I)
5750 AND SA.PLAN_ID = I.PLAN_ID
5751 AND SA.SR_INSTANCE_ID = I.SR_INSTANCE_ID
5752 AND SA.ORIGINAL_ITEM_ID = I.INVENTORY_ITEM_ID
5753 AND SA.ORGANIZATION_ID = I.ORGANIZATION_ID
5754 AND SA.SHIP_TO_SITE_ID = MTPS.PARTNER_SITE_ID(+) --bug3684383
5755 AND SA.CUSTOMER_ID = MTP.PARTNER_ID(+)--bug3684383
5756 );
5757
5758 /* Now populate Original_Demand_Qty*/
5759 Populate_Original_Demand_Qty(
5760 MASDDT,
5761 NULL,
5762 p_plan_id,
5763 p_demand_class,
5764 l_return_status
5765 );
5766
5767 IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
5768 IF PG_DEBUG in ('Y', 'C') THEN
5769 msc_sch_wb.atp_debug('Item_Prealloc_Avail_Pf_Dtls: ' || 'Error occured in procedure Populate_Original_Demand_Qty');
5770 END IF;
5771 x_return_status := FND_API.G_RET_STS_ERROR;
5772 return;
5773 END IF;
5774
5775 EXCEPTION
5776 WHEN OTHERS THEN
5777 IF PG_DEBUG in ('Y', 'C') THEN
5778 msc_sch_wb.atp_debug('Item_Prealloc_Avail_Pf_Dtls: ' || 'Error occurred: ' || to_char(sqlcode) || ':' || SQLERRM);
5779 END IF;
5780 x_return_status := FND_API.G_RET_STS_ERROR;
5781
5782 END Item_Prealloc_Avail_Pf_Dtls;
5783
5784 /*--Get_Forward_Mat_Pf------------------------------------------------------------
5785 | o Called from Item_Pre_Allocated_Atp procedure for Demand Priority based
5786 | Allocated Time Phased PF ATP.
5787 +-------------------------------------------------------------------------------*/
5788 PROCEDURE Get_Forward_Mat_Pf (
5789 p_member_id IN NUMBER,
5790 p_family_id IN NUMBER,
5791 p_org_id IN NUMBER,
5792 p_instance_id IN NUMBER,
5793 p_plan_id IN NUMBER,
5794 p_itf IN DATE,
5795 x_atp_dates OUT NOCOPY MRP_ATP_PUB.date_arr,
5796 x_atp_qtys OUT NOCOPY MRP_ATP_PUB.number_arr,
5797 x_atp_dcs OUT NOCOPY MRP_ATP_PUB.char80_arr,
5798 x_return_status OUT NOCOPY VARCHAR2
5799 ) IS
5800
5801 BEGIN
5802 IF PG_DEBUG in ('Y', 'C') THEN
5803 msc_sch_wb.atp_debug('******* Begin Get_Forward_Mat_Pf **********');
5804 msc_sch_wb.atp_debug('Get_Forward_Mat_Pf: p_member_id: ' || p_member_id);
5805 msc_sch_wb.atp_debug('Get_Forward_Mat_Pf: p_family_id: ' || p_family_id);
5806 msc_sch_wb.atp_debug('Get_Forward_Mat_Pf: p_instance_id: ' || p_instance_id);
5807 msc_sch_wb.atp_debug('Get_Forward_Mat_Pf: p_plan_id: ' || p_plan_id);
5808 END IF;
5809
5810 -- Initializing API return code
5811 x_return_status := FND_API.G_RET_STS_SUCCESS;
5812
5813 SELECT SD_DATE,
5814 SUM(SD_QTY),
5815 DEMAND_CLASS
5816 BULK COLLECT INTO
5817 x_atp_dates,
5818 x_atp_qtys,
5819 x_atp_dcs
5820 FROM
5821 (
5822 SELECT TRUNC(AD.DEMAND_DATE) SD_DATE,
5823 -1 * AD.ALLOCATED_QUANTITY SD_QTY,
5824 AD.DEMAND_CLASS
5825 FROM MSC_ALLOC_DEMANDS AD
5826 WHERE AD.PLAN_ID = p_plan_id
5827 AND AD.SR_INSTANCE_ID = p_instance_id
5828 AND AD.INVENTORY_ITEM_ID in (p_member_id, p_family_id)
5829 AND AD.ORGANIZATION_ID = p_org_id
5830 AND AD.ALLOCATED_QUANTITY <> 0 --4501434
5831 AND AD.ORIGINATION_TYPE <> 52 -- Ignore copy SO and copy stealing records for summary enhancement
5832 AND AD.DEMAND_CLASS IN (
5833 SELECT demand_class
5834 FROM msc_alloc_temp
5835 WHERE demand_class IS NOT NULL)
5836 --bug3700564 added trunc
5837 AND TRUNC(AD.DEMAND_DATE) < p_itf
5838
5839 UNION ALL
5840
5841 SELECT TRUNC(SA.SUPPLY_DATE) SD_DATE,
5842 SA.ALLOCATED_QUANTITY SD_QTY,
5843 SA.DEMAND_CLASS
5844 FROM MSC_ALLOC_SUPPLIES SA
5845 WHERE SA.PLAN_ID = p_plan_id
5846 AND SA.SR_INSTANCE_ID = p_instance_id
5847 AND SA.INVENTORY_ITEM_ID in (p_member_id, p_family_id)
5848 AND SA.ORGANIZATION_ID = p_org_id
5849 AND SA.ALLOCATED_QUANTITY <> 0
5850 -- fixed as part of time_phased_atp chagnes
5851 AND TRUNC(SA.SUPPLY_DATE) >= DECODE(SA.ORIGINAL_ORDER_TYPE,
5852 27, TRUNC(SYSDATE),
5853 28, TRUNC(SYSDATE),
5854 TRUNC(SA.SUPPLY_DATE))
5855 AND SA.DEMAND_CLASS IN (
5856 SELECT demand_class
5857 FROM msc_alloc_temp
5858 WHERE demand_class IS NOT NULL)
5859 --bug3700564 added trunc
5860 AND TRUNC(SA.SUPPLY_DATE) < p_itf
5861 )
5862 GROUP BY DEMAND_CLASS, SD_DATE
5863 order by DEMAND_CLASS, SD_DATE; --4698199 --5353882
5864
5865 EXCEPTION
5866 WHEN OTHERS THEN
5867 IF PG_DEBUG in ('Y', 'C') THEN
5868 msc_sch_wb.atp_debug('Get_Forward_Mat_Pf: ' || 'Error occurred: ' || to_char(sqlcode) || ':' || SQLERRM);
5869 END IF;
5870 x_return_status := FND_API.G_RET_STS_ERROR;
5871
5872 END Get_Forward_Mat_Pf;
5873
5874 /*--Get_Forward_Mat_Pf_Summ---------------------------------------------------
5875 | o Called from Item_Pre_Allocated_Atp procedure for Demand Priority based
5876 | Allocated Time Phased PF ATP.
5877 +-------------------------------------------------------------------------------*/
5878 PROCEDURE Get_Forward_Mat_Pf_Summ (
5879 p_member_id IN NUMBER,
5880 p_family_id IN NUMBER,
5881 p_org_id IN NUMBER,
5882 p_instance_id IN NUMBER,
5883 p_plan_id IN NUMBER,
5884 p_itf IN DATE,
5885 p_refresh_number IN NUMBER,
5886 x_atp_dates OUT NOCOPY MRP_ATP_PUB.date_arr,
5887 x_atp_qtys OUT NOCOPY MRP_ATP_PUB.number_arr,
5888 x_atp_dcs OUT NOCOPY MRP_ATP_PUB.char80_arr,
5889 x_return_status OUT NOCOPY VARCHAR2
5890 ) IS
5891
5892 BEGIN
5893 IF PG_DEBUG in ('Y', 'C') THEN
5894 msc_sch_wb.atp_debug('******* Begin Get_Forward_Mat_Pf_Summ **********');
5895 msc_sch_wb.atp_debug('Get_Forward_Mat_Pf_Summ: p_member_id: ' || p_member_id);
5896 msc_sch_wb.atp_debug('Get_Forward_Mat_Pf_Summ: p_family_id: ' || p_family_id);
5897 msc_sch_wb.atp_debug('Get_Forward_Mat_Pf_Summ: p_instance_id: ' || p_instance_id);
5898 msc_sch_wb.atp_debug('Get_Forward_Mat_Pf_Summ: p_plan_id: ' || p_plan_id);
5899 END IF;
5900
5901 -- Initializing API return code
5902 x_return_status := FND_API.G_RET_STS_SUCCESS;
5903
5904 -- Summary SQL can be used
5905 SELECT SD_DATE,
5906 SUM(SD_QTY),
5907 DEMAND_CLASS
5908 BULK COLLECT INTO
5909 x_atp_dates,
5910 x_atp_qtys,
5911 x_atp_dcs
5912 FROM
5913 (
5914 SELECT /*+ INDEX(S MSC_ATP_SUMMARY_SD_U1) */
5915 SD_DATE, SD_QTY, DEMAND_CLASS
5916 FROM MSC_ATP_SUMMARY_SD S
5917 WHERE S.PLAN_ID = p_plan_id
5918 AND S.SR_INSTANCE_ID = p_instance_id
5919 AND S.INVENTORY_ITEM_ID in (p_member_id, p_family_id)
5920 AND S.ORGANIZATION_ID = p_org_id
5921 AND S.DEMAND_CLASS IN (
5922 SELECT demand_class
5923 FROM msc_alloc_temp
5924 WHERE demand_class IS NOT NULL)
5925 AND S.SD_DATE < p_itf
5926
5927 UNION ALL
5928
5929 SELECT TRUNC(AD.DEMAND_DATE) SD_DATE,
5930 decode(AD.ALLOCATED_QUANTITY, -- Consider unscheduled orders as dummy supplies
5931 0, nvl(OLD_ALLOCATED_QUANTITY,0), --4658238 -- For summary enhancement
5932 -1 * AD.ALLOCATED_QUANTITY) SD_QTY,
5933 AD.DEMAND_CLASS
5934 FROM MSC_ALLOC_DEMANDS AD,
5935 MSC_PLANS P -- For summary enhancement
5936 WHERE AD.PLAN_ID = p_plan_id
5937 AND AD.SR_INSTANCE_ID = p_instance_id
5938 AND AD.INVENTORY_ITEM_ID in (p_member_id, p_family_id)
5939 AND AD.ORGANIZATION_ID = p_org_id
5940 AND AD.DEMAND_CLASS IN (
5941 SELECT demand_class
5942 FROM msc_alloc_temp
5943 WHERE demand_class IS NOT NULL)
5944 --bug3700564 added trunc
5945 AND TRUNC(AD.DEMAND_DATE) < p_itf
5946 AND P.PLAN_ID = AD.PLAN_ID
5947 AND (AD.REFRESH_NUMBER > P.LATEST_REFRESH_NUMBER
5948 OR AD.REFRESH_NUMBER = p_refresh_number)
5949
5950 UNION ALL
5951
5952 SELECT TRUNC(SA.SUPPLY_DATE) SD_DATE,
5953 decode(SA.ALLOCATED_QUANTITY, -- Consider deleted stealing records as dummy demands
5954 0, -1 * OLD_ALLOCATED_QUANTITY, -- For summary enhancement
5955 SA.ALLOCATED_QUANTITY) SD_QTY ,
5956 SA.DEMAND_CLASS
5957 FROM MSC_ALLOC_SUPPLIES SA,
5958 MSC_PLANS P -- For summary enhancement
5959 WHERE SA.PLAN_ID = p_plan_id
5960 AND SA.SR_INSTANCE_ID = p_instance_id
5961 AND SA.INVENTORY_ITEM_ID in (p_member_id, p_family_id)
5962 AND SA.ORGANIZATION_ID = p_org_id
5963 AND SA.DEMAND_CLASS IN (
5964 SELECT demand_class
5965 FROM msc_alloc_temp
5966 WHERE demand_class IS NOT NULL)
5967 --bug3700564 added trunc
5968 AND TRUNC(SA.SUPPLY_DATE) < p_itf
5969 AND P.PLAN_ID = SA.PLAN_ID
5970 AND (SA.REFRESH_NUMBER > P.LATEST_REFRESH_NUMBER
5971 OR SA.REFRESH_NUMBER = p_refresh_number)
5972 )
5973 GROUP BY DEMAND_CLASS, SD_DATE
5974 order by DEMAND_CLASS, SD_DATE; --4698199;
5975
5976 EXCEPTION
5977 WHEN OTHERS THEN
5978 IF PG_DEBUG in ('Y', 'C') THEN
5979 msc_sch_wb.atp_debug('Get_Forward_Mat_Pf_Summ: ' || 'Error occurred: ' || to_char(sqlcode) || ':' || SQLERRM);
5980 END IF;
5981 x_return_status := FND_API.G_RET_STS_ERROR;
5982
5983 END Get_Forward_Mat_Pf_Summ;
5984
5985 /*--Insert_SD_Into_Details_Temp-----------------------------------------------
5986 | o Called from Item_Alloc_Cum_Atp procedure for Rule based Allocated Time
5987 | o This is similar to previous procedure only difference being that we
5988 +---------------------------------------------------------------------------*/
5989 PROCEDURE Insert_SD_Into_Details_Temp(
5990 p_type IN INTEGER,
5991 p_member_id IN NUMBER,
5992 p_family_id IN NUMBER,
5993 p_sr_member_id IN NUMBER,
5994 p_sr_family_id IN NUMBER,
5995 p_org_id IN NUMBER,
5996 --bug3671294 now we donot need this as we will join with msc_system_items
5997 --p_inv_item_name IN VARCHAR2,
5998 p_org_code IN VARCHAR2,
5999 p_instance_id IN NUMBER,
6000 p_plan_id IN NUMBER,
6001 p_itf IN DATE,
6002 p_level_id IN PLS_INTEGER,
6003 p_session_id IN NUMBER,
6004 p_record_type IN PLS_INTEGER,
6005 p_scenario_id IN NUMBER,
6006 p_uom_code IN VARCHAR2,
6007 x_insert_count OUT NOCOPY NUMBER,
6008 x_return_status OUT NOCOPY VARCHAR2
6009 ) IS
6010 l_null_num NUMBER;
6011 l_null_date DATE; -- Bug 3875786
6012 l_null_char VARCHAR(1); -- Bug 3875786
6013 l_return_status VARCHAR2(1);
6014 BEGIN
6015
6016 IF PG_DEBUG in ('Y', 'C') THEN
6017 msc_sch_wb.atp_debug('******* Begin Insert_SD_Into_Details_Temp **********');
6018 msc_sch_wb.atp_debug('Insert_SD_Into_Details_Temp: p_type: ' || p_type);
6019 msc_sch_wb.atp_debug('Insert_SD_Into_Details_Temp: p_member_id: ' || p_member_id);
6020 msc_sch_wb.atp_debug('Insert_SD_Into_Details_Temp: p_family_id: ' || p_family_id);
6021 msc_sch_wb.atp_debug('Insert_SD_Into_Details_Temp: p_sr_member_id: ' || p_sr_member_id);
6022 msc_sch_wb.atp_debug('Insert_SD_Into_Details_Temp: p_sr_family_id: ' || p_sr_family_id);
6023 msc_sch_wb.atp_debug('Insert_SD_Into_Details_Temp: p_org_id: ' || p_org_id);
6024 --bug3671294
6025 --msc_sch_wb.atp_debug('Insert_SD_Into_Details_Temp: p_inv_item_name: ' || p_inv_item_name);
6026 msc_sch_wb.atp_debug('Insert_SD_Into_Details_Temp: p_org_code: ' || p_org_code);
6027 msc_sch_wb.atp_debug('Insert_SD_Into_Details_Temp: p_instance_id: ' || p_instance_id);
6028 msc_sch_wb.atp_debug('Insert_SD_Into_Details_Temp: p_plan_id: ' || p_plan_id);
6029 msc_sch_wb.atp_debug('Insert_SD_Into_Details_Temp: p_itf: ' || p_itf);
6030 msc_sch_wb.atp_debug('Insert_SD_Into_Details_Temp: p_level_id: ' || p_level_id);
6031 msc_sch_wb.atp_debug('Insert_SD_Into_Details_Temp: p_session_id: ' || p_session_id);
6032 msc_sch_wb.atp_debug('Insert_SD_Into_Details_Temp: p_record_type: ' || p_record_type);
6033 msc_sch_wb.atp_debug('Insert_SD_Into_Details_Temp: p_scenario_id: ' || p_scenario_id);
6034 msc_sch_wb.atp_debug('Insert_SD_Into_Details_Temp: p_uom_code: ' || p_uom_code);
6035 END IF;
6036
6037 -- initialize API return status to success
6038 x_return_status := FND_API.G_RET_STS_SUCCESS;
6039
6040 IF p_type = Demand_Priority THEN
6041 INSERT INTO MRP_ATP_DETAILS_TEMP
6042 (session_id, atp_level, inventory_item_id, organization_id, identifier1, identifier3,
6043 supply_demand_type, supply_demand_date, supply_demand_quantity, supply_demand_source_type,
6044 allocated_quantity, record_type, scenario_id, disposition_name, demand_class, char1,
6045 uom_code, plan_id, inventory_item_name, organization_code,
6046 pf_display_flag, original_demand_quantity, original_demand_date,
6047 original_item_id, original_supply_demand_type, request_item_id,
6048 ORIG_CUSTOMER_SITE_NAME,ORIG_CUSTOMER_NAME,ORIG_DEMAND_CLASS,ORIG_REQUEST_DATE )--bug3263368
6049 SELECT col1, col2, col3, col4, col5, col6, col7, col8, col9, col10,
6050 col11, col12, col13, col14, col15, col16, col17, col18, col19, col20,
6051 col21, col22, col23, col24, col25, col26,col27,col28,col29,col30
6052 FROM
6053 (SELECT p_session_id col1, -- session_id
6054 p_level_id col2, -- level_id
6055 p_sr_family_id col3, -- inventory_item_id
6056 p_org_id col4, -- organization_id
6057 p_instance_id col5, -- Identifier1
6058 AD.PARENT_DEMAND_ID col6, -- Identifier3
6059 1 col7, -- supply_demand_type
6060 TRUNC(AD.DEMAND_DATE) col8, -- supply_demand_date
6061 -1 * NVL(AD.DEMAND_QUANTITY,
6062 AD.ALLOCATED_QUANTITY) col9, -- supply_demand_quantity
6063 AD.ORIGINATION_TYPE col10, -- supply_demand_source_type
6064 -1 * AD.ALLOCATED_QUANTITY col11, -- allocated_quantity
6065 p_record_type col12, -- record_type
6066 p_scenario_id col13, -- scenario_id
6067 AD.ORDER_NUMBER col14, -- disposition_name
6068 AD.DEMAND_CLASS col15, -- demand_class
6069 l_null_char col16, -- from_demand_class --Bug 3875786
6070 p_uom_code col17, -- UOM Code
6071 p_plan_id col18, -- Plan id
6072 --bug3671294
6073 msi.item_name col19, -- Item name
6074 --p_inv_item_name col19, -- Item name
6075 p_org_code col20, -- Organization code
6076 Decode(AD.inventory_item_id, p_family_id,
6077 Decode(AD.original_item_id, p_member_id,
6078 AD.Pf_Display_Flag,
6079 Decode(sign(trunc(AD.Original_Demand_Date) - MSC_ATP_ALLOC.G_Atf_Date),
6080 1, AD.Pf_Display_Flag,
6081 1)),
6082 AD.Pf_Display_Flag) col21,
6083 -1 * NVL(AD.DEMAND_QUANTITY,
6084 AD.ALLOCATED_QUANTITY) col22,
6085 trunc(AD.original_demand_date) col23, --Bug_3693892 added trunc
6086 AD.original_item_id col24,
6087 AD.original_origination_type col25,
6088 p_sr_member_id col26,
6089 MTPS.LOCATION col27, --bug3263368
6090 MTP.PARTNER_NAME col28, --bug3263368
6091 AD.DEMAND_CLASS col29, --bug3263368
6092 AD.REQUEST_DATE col30 --bug3263368
6093 FROM
6094 MSC_ALLOC_DEMANDS AD,
6095 MSC_ALLOC_TEMP TEMP,
6096 MSC_TRADING_PARTNERS MTP,--bug3263368
6097 MSC_TRADING_PARTNER_SITES MTPS, --bug3263368
6098 MSC_SYSTEM_ITEMS msi --bug3671294
6099 WHERE
6100 AD.PLAN_ID = p_plan_id
6101 AND AD.SR_INSTANCE_ID = p_instance_id
6102 AND AD.INVENTORY_ITEM_ID in (p_member_id, p_family_id)
6103 AND AD.ORGANIZATION_ID = p_org_id
6104 AND AD.ALLOCATED_QUANTITY <> 0
6105 AND AD.DEMAND_CLASS = TEMP.DEMAND_CLASS
6106 --bug3671294 start
6107 AND msi.PLAN_ID = AD.PLAN_ID
6108 AND msi.SR_INSTANCE_ID = AD.SR_INSTANCE_ID
6109 AND msi.ORGANIZATION_ID = AD.ORGANIZATION_ID
6110 AND msi.INVENTORY_ITEM_ID = AD.ORIGINAL_ITEM_ID
6111 --bug3671294 end
6112 --bug3700564 added trunc
6113 AND TRUNC(AD.DEMAND_DATE) < NVL(p_itf, TRUNC(AD.DEMAND_DATE) + 1)
6114 AND AD.ORIGINATION_TYPE <> 52 -- Ignore copy SO and copy stealing records for allocation WB - summary enhancement
6115 AND AD.SHIP_TO_SITE_ID = MTPS.PARTNER_SITE_ID(+) --bug3263368
6116 AND AD.CUSTOMER_ID = MTP.PARTNER_ID(+) --bug3263368
6117 UNION ALL
6118 SELECT p_session_id col1,
6119 p_level_id col2,
6120 p_sr_family_id col3 ,
6121 p_org_id col4,
6122 p_instance_id col5,
6123 SA.PARENT_TRANSACTION_ID col6,
6124 2 col7, -- supply
6125 TRUNC(SA.SUPPLY_DATE) col8,
6126 NVL(SA.SUPPLY_QUANTITY,
6127 SA.ALLOCATED_QUANTITY) col9,
6128 SA.ORDER_TYPE col10,
6129 SA.ALLOCATED_QUANTITY col11,
6130 p_record_type col12, -- record_type
6131 p_scenario_id col13, -- scenario_id
6132 DECODE(SA.ORIGINAL_ORDER_TYPE, -- SA.ORDER_TYPE, /*bug 3229032*/
6133 5, to_char(SA.PARENT_TRANSACTION_ID),
6134 SA.ORDER_NUMBER) col14,
6135 SA.DEMAND_CLASS col15,
6136 SA.FROM_DEMAND_CLASS col16,
6137 p_uom_code col17,
6138 p_plan_id col18,
6139 --bug3671294
6140 msi.item_name col19, -- Item name
6141 --p_inv_item_name col19, -- Item name
6142 p_org_code col20, -- Organization code
6143 l_null_num col21, -- Bug 3875786 - local variable used for NULL
6144 l_null_num col22, -- Bug 3875786 - local variable used for NULL
6145 l_null_date col23, -- Bug 3875786 - local variable used for NULL
6146 SA.original_item_id col24,
6147 /*bug 3229032*/
6148 DECODE(SA.ORIGINAL_ORDER_TYPE,
6149 46, 48, -- Change Supply due to Stealing to Supply Adjustment
6150 47, 48, -- Change Demand due to Stealing to Supply Adjustment
6151 SA.ORIGINAL_ORDER_TYPE
6152 ) col25,
6153 p_sr_member_id col26,
6154 MTPS.LOCATION col27, --bug3684383
6155 MTP.PARTNER_NAME col28, --bug3684383
6156 SA.DEMAND_CLASS col29, --bug3684383
6157 l_null_date col30 --bug3684383 -- Bug 3875786 - local variable used for NULL
6158 FROM
6159 MSC_ALLOC_SUPPLIES SA,
6160 MSC_ALLOC_TEMP TEMP,
6161 MSC_SYSTEM_ITEMS msi, --bug3671294
6162 MSC_TRADING_PARTNER_SITES MTPS, --bug3684383
6163 MSC_TRADING_PARTNERS MTP --bug3684383
6164 WHERE
6165 SA.PLAN_ID = p_plan_id
6166 AND SA.SR_INSTANCE_ID = p_instance_id
6167 AND SA.INVENTORY_ITEM_ID in (p_member_id, p_family_id)
6168 AND SA.ORGANIZATION_ID = p_org_id
6169 AND SA.ALLOCATED_QUANTITY <> 0
6170 --bug3671294 start
6171 AND msi.PLAN_ID = SA.PLAN_ID
6172 AND msi.SR_INSTANCE_ID = SA.SR_INSTANCE_ID
6173 AND msi.ORGANIZATION_ID = SA.ORGANIZATION_ID
6174 AND msi.INVENTORY_ITEM_ID = SA.ORIGINAL_ITEM_ID
6175 --bug3671294 end
6176 AND TRUNC(SA.SUPPLY_DATE) >= DECODE(SA.ORIGINAL_ORDER_TYPE,
6177 27, TRUNC(SYSDATE),
6178 28, TRUNC(SYSDATE),
6179 TRUNC(SA.SUPPLY_DATE))
6180 AND SA.DEMAND_CLASS = TEMP.DEMAND_CLASS
6181 AND TRUNC(SA.SUPPLY_DATE) < NVL(p_itf, TRUNC(SA.SUPPLY_DATE) + 1)
6182 AND SA.SHIP_TO_SITE_ID = MTPS.PARTNER_SITE_ID(+) --bug3684383
6183 AND SA.CUSTOMER_ID = MTP.PARTNER_ID(+) --bug3684383
6184 );
6185
6186 ELSIF p_type = User_Defined_DC THEN
6187 INSERT INTO MRP_ATP_DETAILS_TEMP
6188 (session_id, atp_level, inventory_item_id, organization_id, identifier1, identifier3,
6189 supply_demand_type, supply_demand_date, supply_demand_quantity, supply_demand_source_type,
6190 allocated_quantity, record_type, scenario_id, disposition_name, demand_class, uom_code,
6191 inventory_item_name, organization_code, identifier2, identifier4, request_item_id,
6192 pf_display_flag, original_demand_quantity, original_demand_date, original_item_id,
6193 original_supply_demand_type, unallocated_quantity,
6194 ORIG_CUSTOMER_SITE_NAME,ORIG_CUSTOMER_NAME,ORIG_DEMAND_CLASS,ORIG_REQUEST_DATE )--bug3263368
6195 SELECT col1, col2, col3, col4, col5, col6, col7, col8, col9, col10,
6196 col11, col12, col13, col14, col15, col16, col17, col18, col19, col20,
6197 col21, col22, col23, col24, col25, col26, col27,col28,col29,col30,col31
6198 FROM
6199 (SELECT p_session_id col1, -- session_id
6200 p_level_id col2, -- level_id
6201 p_sr_family_id col3, -- inventory_item_id
6202 p_org_id col4, -- organization_id
6203 p_instance_id col5, -- Identifier1
6204 AD.PARENT_DEMAND_ID col6, -- Identifier3
6205 1 col7, -- supply_demand_type
6206 TRUNC(AD.DEMAND_DATE) col8, -- supply_demand_date
6207 -1 * NVL(AD.DEMAND_QUANTITY,
6208 AD.ALLOCATED_QUANTITY) col9, -- supply_demand_quantity
6209 AD.ORIGINAL_ORIGINATION_TYPE col10,-- supply_demand_source_type
6210 -1 * AD.ALLOCATED_QUANTITY*
6211 DECODE(decode(AD.ORIGINAL_ORIGINATION_TYPE,
6212 6, decode(AD.source_organization_id,
6213 NULL, DECODE(AD.DEMAND_CLASS, null, null,
6214 DECODE(TEMP.DEMAND_CLASS, '-1',
6215 MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(
6216 null, null,
6217 Decode(sign(trunc(AD.Demand_Date) - MSC_ATP_ALLOC.G_Atf_Date),
6218 1, p_family_id,
6219 Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
6220 'Y', AD.Original_Item_Id,
6221 p_family_id)),
6222 p_org_id,
6223 p_instance_id, trunc(AD.DEMAND_DATE),
6224 p_level_id, AD.DEMAND_CLASS),
6225 AD.DEMAND_CLASS)),
6226 -23453, DECODE(AD.DEMAND_CLASS, null, null,
6227 DECODE(TEMP.DEMAND_CLASS, '-1',
6228 MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(
6229 null, null,
6230 Decode(sign(trunc(AD.Demand_Date) - MSC_ATP_ALLOC.G_Atf_Date),
6231 1, p_family_id,
6232 Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
6233 'Y', AD.Original_Item_Id,
6234 p_family_id)),
6235 p_org_id,
6236 p_instance_id, trunc(AD.DEMAND_DATE),
6237 p_level_id, AD.DEMAND_CLASS),
6238 AD.DEMAND_CLASS)),
6239 AD.organization_id, DECODE(AD.DEMAND_CLASS, null, null,
6240 DECODE(TEMP.DEMAND_CLASS, '-1',
6241 MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(
6242 null, null,
6243 Decode(sign(trunc(AD.Demand_Date) - MSC_ATP_ALLOC.G_Atf_Date),
6244 1, p_family_id,
6245 Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
6246 'Y', AD.Original_Item_Id,
6247 p_family_id)),
6248 p_org_id,
6249 p_instance_id, trunc(AD.DEMAND_DATE),
6250 p_level_id, AD.DEMAND_CLASS),
6251 AD.DEMAND_CLASS)), NULL),
6252 30, decode(AD.source_organization_id,
6253 NULL, DECODE(AD.DEMAND_CLASS, null, null,
6254 DECODE(TEMP.DEMAND_CLASS, '-1',
6255 MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(
6256 null, null,
6257 Decode(sign(trunc(AD.Demand_Date) - MSC_ATP_ALLOC.G_Atf_Date),
6258 1, p_family_id,
6259 Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
6260 'Y', AD.Original_Item_Id,
6261 p_family_id)),
6262 p_org_id,
6263 p_instance_id, trunc(AD.DEMAND_DATE),
6264 p_level_id, AD.DEMAND_CLASS),
6265 AD.DEMAND_CLASS)),
6266 -23453, DECODE(AD.DEMAND_CLASS, null, null,
6267 DECODE(TEMP.DEMAND_CLASS, '-1',
6268 MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(
6269 null, null,
6270 Decode(sign(trunc(AD.Demand_Date) - MSC_ATP_ALLOC.G_Atf_Date),
6271 1, p_family_id,
6272 Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
6273 'Y', AD.Original_Item_Id,
6274 p_family_id)),
6275 p_org_id,
6276 p_instance_id, trunc(AD.DEMAND_DATE),
6277 p_level_id, AD.DEMAND_CLASS),
6278 AD.DEMAND_CLASS)),
6279 AD.organization_id, DECODE(AD.DEMAND_CLASS, null, null,
6280 DECODE(TEMP.DEMAND_CLASS, '-1',
6281 MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(
6282 null, null,
6283 Decode(sign(trunc(AD.Demand_Date) - MSC_ATP_ALLOC.G_Atf_Date),
6284 1, p_family_id,
6285 Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
6286 'Y', AD.Original_Item_Id,
6287 p_family_id)),
6288 p_org_id,
6289 p_instance_id, trunc(AD.DEMAND_DATE),
6290 p_level_id, AD.DEMAND_CLASS),
6291 AD.DEMAND_CLASS)), NULL),
6292 DECODE(AD.DEMAND_CLASS, null, null,
6293 DECODE(TEMP.DEMAND_CLASS, '-1',
6294 MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(
6295 null, null,
6296 Decode(sign(trunc(AD.Demand_Date) - MSC_ATP_ALLOC.G_Atf_Date),
6297 1, p_family_id,
6298 Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
6299 'Y', AD.Original_Item_Id,
6300 p_family_id)),
6301 p_org_id,
6302 p_instance_id, trunc(AD.DEMAND_DATE),
6303 p_level_id, AD.DEMAND_CLASS),
6304 AD.DEMAND_CLASS))),
6305 TEMP.DEMAND_CLASS, 1,
6306 MSC_AATP_FUNC.Get_Item_Demand_Alloc_Percent(p_plan_id,
6307 AD.PARENT_DEMAND_ID,
6308 trunc(AD.DEMAND_DATE),
6309 AD.USING_ASSEMBLY_ITEM_ID,
6310 DECODE(AD.SOURCE_ORGANIZATION_ID,
6311 -23453, null,
6312 AD.SOURCE_ORGANIZATION_ID),
6313 Decode(sign(trunc(AD.Demand_Date) - MSC_ATP_ALLOC.G_Atf_Date),
6314 1, p_family_id,
6315 Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
6316 'Y', AD.Original_Item_Id,
6317 p_family_id)),
6318 p_org_id,
6319 p_instance_id,
6320 AD.ORIGINAL_ORIGINATION_TYPE,
6321 decode(AD.ORIGINAL_ORIGINATION_TYPE,
6322 6, decode(AD.source_organization_id,
6323 NULL, DECODE(AD.DEMAND_CLASS, null, null,
6324 DECODE(TEMP.DEMAND_CLASS, '-1',
6325 MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(
6326 null, null,
6327 Decode(sign(trunc(AD.Demand_Date) - MSC_ATP_ALLOC.G_Atf_Date),
6328 1, p_family_id,
6329 Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
6330 'Y', AD.Original_Item_Id,
6331 p_family_id)),
6332 p_org_id,
6333 p_instance_id, trunc(AD.DEMAND_DATE),
6334 p_level_id, AD.DEMAND_CLASS),
6335 AD.DEMAND_CLASS)),
6336 -23453, DECODE(AD.DEMAND_CLASS, null, null,
6337 DECODE(TEMP.DEMAND_CLASS, '-1',
6338 MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(
6339 null, null,
6340 Decode(sign(trunc(AD.Demand_Date) - MSC_ATP_ALLOC.G_Atf_Date),
6341 1, p_family_id,
6342 Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
6343 'Y', AD.Original_Item_Id,
6344 p_family_id)),
6345 p_org_id,
6346 p_instance_id, trunc(AD.DEMAND_DATE),
6347 p_level_id, AD.DEMAND_CLASS),
6348 AD.DEMAND_CLASS)),
6349 AD.organization_id, DECODE(AD.DEMAND_CLASS, null, null,
6350 DECODE(TEMP.DEMAND_CLASS, '-1',
6351 MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(
6352 null, null,
6353 Decode(sign(trunc(AD.Demand_Date) - MSC_ATP_ALLOC.G_Atf_Date),
6354 1, p_family_id,
6355 Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
6356 'Y', AD.Original_Item_Id,
6357 p_family_id)),
6358 p_org_id,
6359 p_instance_id, trunc(AD.DEMAND_DATE),
6360 p_level_id, AD.DEMAND_CLASS),
6361 AD.DEMAND_CLASS)), TEMP.DEMAND_CLASS),
6362 30, decode(AD.source_organization_id,
6363 NULL, DECODE(AD.DEMAND_CLASS, null, null,
6364 DECODE(TEMP.DEMAND_CLASS, '-1',
6365 MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(
6366 null, null,
6367 Decode(sign(trunc(AD.Demand_Date) - MSC_ATP_ALLOC.G_Atf_Date),
6368 1, p_family_id,
6369 Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
6370 'Y', AD.Original_Item_Id,
6371 p_family_id)),
6372 p_org_id,
6373 p_instance_id, trunc(AD.DEMAND_DATE),
6374 p_level_id, AD.DEMAND_CLASS),
6375 AD.DEMAND_CLASS)),
6376 -23453, DECODE(AD.DEMAND_CLASS, null, null,
6377 DECODE(TEMP.DEMAND_CLASS, '-1',
6378 MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(
6379 null, null,
6380 Decode(sign(trunc(AD.Demand_Date) - MSC_ATP_ALLOC.G_Atf_Date),
6381 1, p_family_id,
6382 Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
6383 'Y', AD.Original_Item_Id,
6384 p_family_id)),
6385 p_org_id,
6386 p_instance_id, trunc(AD.DEMAND_DATE),
6387 p_level_id, AD.DEMAND_CLASS),
6388 AD.DEMAND_CLASS)),
6389 AD.organization_id, DECODE(AD.DEMAND_CLASS, null, null,
6390 DECODE(TEMP.DEMAND_CLASS, '-1',
6391 MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(
6392 null, null,
6393 Decode(sign(trunc(AD.Demand_Date) - MSC_ATP_ALLOC.G_Atf_Date),
6394 1, p_family_id,
6395 Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
6396 'Y', AD.Original_Item_Id,
6397 p_family_id)),
6398 p_org_id,
6399 p_instance_id, trunc(AD.DEMAND_DATE),
6400 p_level_id, AD.DEMAND_CLASS),
6401 AD.DEMAND_CLASS)), TEMP.DEMAND_CLASS),
6402 DECODE(AD.DEMAND_CLASS, null, null,
6403 DECODE(TEMP.DEMAND_CLASS, '-1',
6404 MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(
6405 null, null,
6406 Decode(sign(trunc(AD.Demand_Date) - MSC_ATP_ALLOC.G_Atf_Date),
6407 1, p_family_id,
6408 Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
6409 'Y', AD.Original_Item_Id,
6410 p_family_id)),
6411 p_org_id,
6412 p_instance_id, trunc(AD.DEMAND_DATE),
6413 p_level_id, AD.DEMAND_CLASS),
6414 AD.DEMAND_CLASS))),
6415 TEMP.DEMAND_CLASS,
6416 p_level_id)) col11, -- allocated_quantity
6417 p_record_type col12, -- record_type
6418 p_scenario_id col13, -- scenario_id
6419 AD.ORDER_NUMBER col14, -- disposition_name
6420 TEMP.DEMAND_CLASS col15, -- demand_class
6421 p_uom_code col16, -- UOM Code
6422 --bug3671294
6423 msi.item_name col17, -- Item name
6424 --p_inv_item_name col17, -- Item name
6425 p_org_code col18, -- Organization code
6426 TEMP.PRIORITY col19, -- sysdate priroty
6427 TEMP.ALLOCATION_PERCENT col20, -- sysdate allocation percent
6428 -- time_phased_atp
6429 p_sr_member_id col21, -- request_item_id
6430 Decode(AD.inventory_item_id, p_family_id,
6431 Decode(AD.original_item_id, p_member_id,
6432 AD.Pf_Display_Flag,
6433 Decode(sign(trunc(AD.Original_Demand_Date) - MSC_ATP_ALLOC.G_Atf_Date),
6434 1, AD.Pf_Display_Flag,
6435 1)),
6436 AD.Pf_Display_Flag) col22,
6437 -1 * NVL(AD.DEMAND_QUANTITY,
6438 AD.ALLOCATED_QUANTITY)*
6439 DECODE(decode(AD.ORIGINAL_ORIGINATION_TYPE,
6440 6, decode(AD.source_organization_id,
6441 NULL, DECODE(AD.DEMAND_CLASS, null, null,
6442 DECODE(TEMP.DEMAND_CLASS, '-1',
6443 MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(
6444 null, null,
6445 Decode(sign(trunc(AD.Demand_Date) - MSC_ATP_ALLOC.G_Atf_Date),
6446 1, p_family_id,
6447 Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
6448 'Y', AD.Original_Item_Id,
6449 p_family_id)),
6450 p_org_id,
6451 p_instance_id, trunc(AD.DEMAND_DATE),
6452 p_level_id, AD.DEMAND_CLASS),
6453 AD.DEMAND_CLASS)),
6454 -23453, DECODE(AD.DEMAND_CLASS, null, null,
6455 DECODE(TEMP.DEMAND_CLASS, '-1',
6456 MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(
6457 null, null,
6458 Decode(sign(trunc(AD.Demand_Date) - MSC_ATP_ALLOC.G_Atf_Date),
6459 1, p_family_id,
6460 Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
6461 'Y', AD.Original_Item_Id,
6462 p_family_id)),
6463 p_org_id,
6464 p_instance_id, trunc(AD.DEMAND_DATE),
6465 p_level_id, AD.DEMAND_CLASS),
6466 AD.DEMAND_CLASS)),
6467 AD.organization_id, DECODE(AD.DEMAND_CLASS, null, null,
6468 DECODE(TEMP.DEMAND_CLASS, '-1',
6469 MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(
6470 null, null,
6471 Decode(sign(trunc(AD.Demand_Date) - MSC_ATP_ALLOC.G_Atf_Date),
6472 1, p_family_id,
6473 Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
6474 'Y', AD.Original_Item_Id,
6475 p_family_id)),
6476 p_org_id,
6477 p_instance_id, trunc(AD.DEMAND_DATE),
6478 p_level_id, AD.DEMAND_CLASS),
6479 AD.DEMAND_CLASS)), NULL),
6480 30, decode(AD.source_organization_id,
6481 NULL, DECODE(AD.DEMAND_CLASS, null, null,
6482 DECODE(TEMP.DEMAND_CLASS, '-1',
6483 MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(
6484 null, null,
6485 Decode(sign(trunc(AD.Demand_Date) - MSC_ATP_ALLOC.G_Atf_Date),
6486 1, p_family_id,
6487 Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
6488 'Y', AD.Original_Item_Id,
6489 p_family_id)),
6490 p_org_id,
6491 p_instance_id, trunc(AD.DEMAND_DATE),
6492 p_level_id, AD.DEMAND_CLASS),
6493 AD.DEMAND_CLASS)),
6494 -23453, DECODE(AD.DEMAND_CLASS, null, null,
6495 DECODE(TEMP.DEMAND_CLASS, '-1',
6496 MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(
6497 null, null,
6498 Decode(sign(trunc(AD.Demand_Date) - MSC_ATP_ALLOC.G_Atf_Date),
6499 1, p_family_id,
6500 Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
6501 'Y', AD.Original_Item_Id,
6502 p_family_id)),
6503 p_org_id,
6504 p_instance_id, trunc(AD.DEMAND_DATE),
6505 p_level_id, AD.DEMAND_CLASS),
6506 AD.DEMAND_CLASS)),
6507 AD.organization_id, DECODE(AD.DEMAND_CLASS, null, null,
6508 DECODE(TEMP.DEMAND_CLASS, '-1',
6509 MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(
6510 null, null,
6511 Decode(sign(trunc(AD.Demand_Date) - MSC_ATP_ALLOC.G_Atf_Date),
6512 1, p_family_id,
6513 Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
6514 'Y', AD.Original_Item_Id,
6515 p_family_id)),
6516 p_org_id,
6517 p_instance_id, trunc(AD.DEMAND_DATE),
6518 p_level_id, AD.DEMAND_CLASS),
6519 AD.DEMAND_CLASS)), NULL),
6520 DECODE(AD.DEMAND_CLASS, null, null,
6521 DECODE(TEMP.DEMAND_CLASS, '-1',
6522 MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(
6523 null, null,
6524 Decode(sign(trunc(AD.Demand_Date) - MSC_ATP_ALLOC.G_Atf_Date),
6525 1, p_family_id,
6526 Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
6527 'Y', AD.Original_Item_Id,
6528 p_family_id)),
6529 p_org_id,
6530 p_instance_id, trunc(AD.DEMAND_DATE),
6531 p_level_id, AD.DEMAND_CLASS),
6532 AD.DEMAND_CLASS))),
6533 TEMP.DEMAND_CLASS, 1,
6534 MSC_AATP_FUNC.Get_Item_Demand_Alloc_Percent(p_plan_id,
6535 AD.PARENT_DEMAND_ID,
6536 trunc(AD.DEMAND_DATE),
6537 AD.USING_ASSEMBLY_ITEM_ID,
6538 DECODE(AD.SOURCE_ORGANIZATION_ID,
6539 -23453, null,
6540 AD.SOURCE_ORGANIZATION_ID),
6541 Decode(sign(trunc(AD.Demand_Date) - MSC_ATP_ALLOC.G_Atf_Date),
6542 1, p_family_id,
6543 Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
6544 'Y', AD.Original_Item_Id,
6545 p_family_id)),
6546 p_org_id,
6547 p_instance_id,
6548 AD.ORIGINAL_ORIGINATION_TYPE,
6549 decode(AD.ORIGINAL_ORIGINATION_TYPE,
6550 6, decode(AD.source_organization_id,
6551 NULL, DECODE(AD.DEMAND_CLASS, null, null,
6552 DECODE(TEMP.DEMAND_CLASS, '-1',
6553 MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(
6554 null, null,
6555 Decode(sign(trunc(AD.Demand_Date) - MSC_ATP_ALLOC.G_Atf_Date),
6556 1, p_family_id,
6557 Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
6558 'Y', AD.Original_Item_Id,
6559 p_family_id)),
6560 p_org_id,
6561 p_instance_id, trunc(AD.DEMAND_DATE),
6562 p_level_id, AD.DEMAND_CLASS),
6563 AD.DEMAND_CLASS)),
6564 -23453, DECODE(AD.DEMAND_CLASS, null, null,
6565 DECODE(TEMP.DEMAND_CLASS, '-1',
6566 MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(
6567 null, null,
6568 Decode(sign(trunc(AD.Demand_Date) - MSC_ATP_ALLOC.G_Atf_Date),
6569 1, p_family_id,
6570 Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
6571 'Y', AD.Original_Item_Id,
6572 p_family_id)),
6573 p_org_id,
6574 p_instance_id, trunc(AD.DEMAND_DATE),
6575 p_level_id, AD.DEMAND_CLASS),
6576 AD.DEMAND_CLASS)),
6577 AD.organization_id, DECODE(AD.DEMAND_CLASS, null, null,
6578 DECODE(TEMP.DEMAND_CLASS, '-1',
6579 MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(
6580 null, null,
6581 Decode(sign(trunc(AD.Demand_Date) - MSC_ATP_ALLOC.G_Atf_Date),
6582 1, p_family_id,
6583 Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
6584 'Y', AD.Original_Item_Id,
6585 p_family_id)),
6586 p_org_id,
6587 p_instance_id, trunc(AD.DEMAND_DATE),
6588 p_level_id, AD.DEMAND_CLASS),
6589 AD.DEMAND_CLASS)), TEMP.DEMAND_CLASS),
6590 30, decode(AD.source_organization_id,
6591 NULL, DECODE(AD.DEMAND_CLASS, null, null,
6592 DECODE(TEMP.DEMAND_CLASS, '-1',
6593 MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(
6594 null, null,
6595 Decode(sign(trunc(AD.Demand_Date) - MSC_ATP_ALLOC.G_Atf_Date),
6596 1, p_family_id,
6597 Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
6598 'Y', AD.Original_Item_Id,
6599 p_family_id)),
6600 p_org_id,
6601 p_instance_id, trunc(AD.DEMAND_DATE),
6602 p_level_id, AD.DEMAND_CLASS),
6603 AD.DEMAND_CLASS)),
6604 -23453, DECODE(AD.DEMAND_CLASS, null, null,
6605 DECODE(TEMP.DEMAND_CLASS, '-1',
6606 MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(
6607 null, null,
6608 Decode(sign(trunc(AD.Demand_Date) - MSC_ATP_ALLOC.G_Atf_Date),
6609 1, p_family_id,
6610 Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
6611 'Y', AD.Original_Item_Id,
6612 p_family_id)),
6613 p_org_id,
6614 p_instance_id, trunc(AD.DEMAND_DATE),
6615 p_level_id, AD.DEMAND_CLASS),
6616 AD.DEMAND_CLASS)),
6617 AD.organization_id, DECODE(AD.DEMAND_CLASS, null, null,
6618 DECODE(TEMP.DEMAND_CLASS, '-1',
6619 MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(
6620 null, null,
6621 Decode(sign(trunc(AD.Demand_Date) - MSC_ATP_ALLOC.G_Atf_Date),
6622 1, p_family_id,
6623 Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
6624 'Y', AD.Original_Item_Id,
6625 p_family_id)),
6626 p_org_id,
6627 p_instance_id, trunc(AD.DEMAND_DATE),
6628 p_level_id, AD.DEMAND_CLASS),
6629 AD.DEMAND_CLASS)), TEMP.DEMAND_CLASS),
6630 DECODE(AD.DEMAND_CLASS, null, null,
6631 DECODE(TEMP.DEMAND_CLASS, '-1',
6632 MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(
6633 null, null,
6634 Decode(sign(trunc(AD.Demand_Date) - MSC_ATP_ALLOC.G_Atf_Date),
6635 1, p_family_id,
6636 Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
6637 'Y', AD.Original_Item_Id,
6638 p_family_id)),
6639 p_org_id,
6640 p_instance_id, trunc(AD.DEMAND_DATE),
6641 p_level_id, AD.DEMAND_CLASS),
6642 AD.DEMAND_CLASS))),
6643 TEMP.DEMAND_CLASS,
6644 p_level_id)) col23, -- original demand quantity
6645 trunc(AD.original_demand_date) col24, --Bug_3693892 added trunc
6646 AD.original_item_id col25,
6647 AD.original_origination_type col26,
6648 -1 * AD.ALLOCATED_QUANTITY col27, -- unallocated quantity
6649 MTPS.LOCATION col28, --bug3263368
6650 MTP.PARTNER_NAME col29, --bug3263368
6651 AD.DEMAND_CLASS col30, --bug3263368
6652 AD.REQUEST_DATE col31 --bug3263368
6653 FROM
6654 MSC_ALLOC_DEMANDS AD,
6655 MSC_ALLOC_TEMP TEMP,
6656 MSC_TRADING_PARTNERS MTP,--bug3263368
6657 MSC_TRADING_PARTNER_SITES MTPS, --bug3263368
6658 MSC_SYSTEM_ITEMS msi --bug3671294
6659 WHERE
6660 AD.PLAN_ID = p_plan_id
6661 AND AD.SR_INSTANCE_ID = p_instance_id
6662 AND AD.INVENTORY_ITEM_ID in (p_member_id, p_family_id)
6663 AND AD.ORGANIZATION_ID = p_org_id
6664 AND AD.ALLOCATED_QUANTITY <> 0
6665 --bug3671294 start
6666 AND msi.PLAN_ID = AD.PLAN_ID
6667 AND msi.SR_INSTANCE_ID = AD.SR_INSTANCE_ID
6668 AND msi.ORGANIZATION_ID = AD.ORGANIZATION_ID
6669 AND msi.INVENTORY_ITEM_ID = AD.ORIGINAL_ITEM_ID
6670 --bug3671294 end
6671 AND TRUNC(AD.DEMAND_DATE) < NVL(p_itf, TRUNC(AD.DEMAND_DATE) + 1)
6672 AND AD.ORIGINATION_TYPE <> 52 -- Ignore copy SO and copy stealing records for allocation WB
6673 AND AD.SHIP_TO_SITE_ID = MTPS.PARTNER_SITE_ID(+) --bug3263368
6674 AND AD.CUSTOMER_ID = MTP.PARTNER_ID(+) --bug3263368
6675
6676 UNION ALL
6677
6678 SELECT p_session_id col1,
6679 p_level_id col2,
6680 p_sr_member_id col3 ,
6681 p_org_id col4,
6682 p_instance_id col5,
6683 SA.PARENT_TRANSACTION_ID col6,
6684 2 col7, -- supply
6685 TRUNC(SA.SUPPLY_DATE) col8,
6686 NVL(SA.SUPPLY_QUANTITY,
6687 SA.ALLOCATED_QUANTITY) col9,
6688 SA.ORDER_TYPE col10,
6689 SA.ALLOCATED_QUANTITY
6690 * DECODE(DECODE(SA.DEMAND_CLASS, null, null,
6691 DECODE(TEMP.DEMAND_CLASS,'-1',
6692 MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(
6693 null,
6694 null,
6695 Decode(sign(trunc(SA.Supply_Date) - MSC_ATP_ALLOC.G_Atf_Date),
6696 1, p_family_id,
6697 Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
6698 'Y', SA.Original_Item_Id,
6699 p_family_id)),
6700 p_org_id,
6701 p_instance_id,
6702 TRUNC(SA.SUPPLY_DATE),
6703 p_level_id,
6704 SA.DEMAND_CLASS),
6705 SA.DEMAND_CLASS)),
6706 TEMP.DEMAND_CLASS,
6707 1,
6708 NULL,
6709 NVL(MSC_AATP_FUNC.Get_DC_Alloc_Percent(
6710 p_instance_id,
6711 Decode(sign(trunc(SA.Supply_Date) - MSC_ATP_ALLOC.G_Atf_Date),
6712 1, p_family_id,
6713 Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
6714 'Y', SA.Original_Item_Id,
6715 p_family_id)),
6716 p_org_id,
6717 null,
6718 null,
6719 TEMP.DEMAND_CLASS,
6720 TRUNC(SA.SUPPLY_DATE)),
6721 1),
6722 DECODE(MSC_AATP_FUNC.Get_DC_Alloc_Percent(
6723 p_instance_id,
6724 Decode(sign(trunc(SA.Supply_Date) - MSC_ATP_ALLOC.G_Atf_Date),
6725 1, p_family_id,
6726 Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
6727 'Y', SA.Original_Item_Id,
6728 p_family_id)),
6729 p_org_id,
6730 null,
6731 null,
6732 TEMP.DEMAND_CLASS,
6733 TRUNC(SA.SUPPLY_DATE)),
6734 NULL,
6735 1,
6736 0)
6737 ) col11, -- allocated_quantity
6738 p_record_type col12, -- record_type
6739 p_scenario_id col13, -- scenario_id
6740 DECODE(SA.ORIGINAL_ORDER_TYPE,
6741 5, to_char(SA.PARENT_TRANSACTION_ID),
6742 SA.ORDER_NUMBER) col14, -- disposition_name
6743 TEMP.DEMAND_CLASS col15, -- demand_class
6744 p_uom_code col16, -- UOM Code
6745 --bug3671294
6746 msi.item_name col17, -- Item name
6747 --p_inv_item_name col17, -- Item name
6748 p_org_code col18, -- Org code
6749 TEMP.PRIORITY col19, -- sysdate priroty
6750 TEMP.ALLOCATION_PERCENT col20, -- sysdate allocation percent
6751 p_sr_family_id col21,
6752 l_null_num col22, -- Bug 3875786 - local variable used for NULL
6753 l_null_num col23, -- Bug 3875786 - local variable used for NULL
6754 l_null_date col24, -- Bug 3875786 - local variable used for NULL
6755 SA.original_item_id col25,
6756 SA.ORIGINAL_ORDER_TYPE col26,
6757 SA.ALLOCATED_QUANTITY col27, -- unallocated quantity
6758 l_null_char col28, --bug3263368 ORIG_CUSTOMER_SITE_NAME --Bug 3875786
6759 l_null_char col29, --bug3263368 ORIG_CUSTOMER_NAME --Bug 3875786
6760 l_null_char col30, --bug3263368 ORIG_DEMAND_CLASS --Bug 3875786
6761 l_null_date col31 --bug3263368 ORIG_REQUEST_DATE -- Bug 3875786 - local variable used for NULL
6762
6763 FROM
6764 MSC_ALLOC_SUPPLIES SA,
6765 MSC_ALLOC_TEMP TEMP,
6766 MSC_SYSTEM_ITEMS msi --bug3671294
6767 WHERE
6768 SA.PLAN_ID = p_plan_id
6769 AND SA.SR_INSTANCE_ID = p_instance_id
6770 AND SA.INVENTORY_ITEM_ID in (p_member_id, p_family_id)
6771 AND SA.ORGANIZATION_ID = p_org_id
6772 AND SA.ALLOCATED_QUANTITY <> 0
6773 --bug3671294 start
6774 AND msi.PLAN_ID = SA.PLAN_ID
6775 AND msi.SR_INSTANCE_ID = SA.SR_INSTANCE_ID
6776 AND msi.ORGANIZATION_ID = SA.ORGANIZATION_ID
6777 AND msi.INVENTORY_ITEM_ID = SA.ORIGINAL_ITEM_ID
6778 --bug3671294 end
6779 AND TRUNC(SA.SUPPLY_DATE) >= DECODE(SA.ORIGINAL_ORDER_TYPE,
6780 27, TRUNC(SYSDATE),
6781 28, TRUNC(SYSDATE),
6782 TRUNC(SA.SUPPLY_DATE))
6783 AND TRUNC(SA.SUPPLY_DATE) < NVL(p_itf, TRUNC(SA.SUPPLY_DATE) + 1)
6784 );
6785 ELSIF p_type = User_Defined_CC THEN
6786 INSERT INTO MRP_ATP_DETAILS_TEMP
6787 (session_id, atp_level, inventory_item_id, organization_id, identifier1, identifier3,
6788 supply_demand_type, supply_demand_date, supply_demand_quantity, supply_demand_source_type,
6789 allocated_quantity, record_type, scenario_id, disposition_name, demand_class, class, customer_id,
6790 customer_site_id, uom_code, inventory_item_name, organization_code, identifier2, identifier4,
6791 Customer_Name, Customer_Site_Name, request_item_id, pf_display_flag, original_demand_quantity,
6792 original_demand_date, original_item_id, original_supply_demand_type, unallocated_quantity,
6793 ORIG_CUSTOMER_SITE_NAME,ORIG_CUSTOMER_NAME,ORIG_DEMAND_CLASS,ORIG_REQUEST_DATE ) --bug3263368
6794 SELECT col1, col2, col3, col4, col5, col6, col7, col8, col9, col10,
6795 col11, col12, col13, col14, col15, col16, col17, col18, col19, col20, col21, col22, col23, col24, col25,
6796 col26, col27, col28, col29, col30, col31, col32,col33,col34,col35,col36
6797 FROM
6798 (SELECT p_session_id col1, -- session_id
6799 p_level_id col2, -- level_id
6800 p_sr_member_id col3, -- inventory_item_id
6801 p_org_id col4, -- organization_id
6802 p_instance_id col5, -- Identifier1
6803 AD.PARENT_DEMAND_ID col6, -- Identifier3
6804 1 col7, -- supply_demand_type
6805 TRUNC(AD.DEMAND_DATE) col8, -- supply_demand_date
6806 -1 * NVL(AD.DEMAND_QUANTITY,
6807 AD.ALLOCATED_QUANTITY) col9, -- supply_demand_quantity
6808 AD.ORIGINATION_TYPE col10,-- supply_demand_source_type
6809 -1 * AD.ALLOCATED_QUANTITY *
6810 DECODE(DECODE(AD.CUSTOMER_ID, NULL, NULL,
6811 0, NULL,
6812 decode(AD.origination_type,
6813 6, decode(AD.source_organization_id,
6814 NULL, MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(
6815 AD.CUSTOMER_ID, AD.SHIP_TO_SITE_ID,
6816 Decode(sign(trunc(AD.Demand_Date) - MSC_ATP_ALLOC.G_Atf_Date),
6817 1, p_family_id,
6818 Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
6819 'Y', AD.Original_Item_Id,
6820 p_family_id)),
6821 p_org_id, p_instance_id, TRUNC(AD.ORIGINAL_DEMAND_DATE),
6822 p_level_id, NULL),
6823 -23453, MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(
6824 AD.CUSTOMER_ID, AD.SHIP_TO_SITE_ID,
6825 Decode(sign(trunc(AD.Demand_Date) - MSC_ATP_ALLOC.G_Atf_Date),
6826 1, p_family_id,
6827 Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
6828 'Y', AD.Original_Item_Id,
6829 p_family_id)),
6830 p_org_id, p_instance_id, TRUNC(AD.ORIGINAL_DEMAND_DATE),
6831 p_level_id, NULL),
6832 AD.organization_id, MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(
6833 AD.CUSTOMER_ID, AD.SHIP_TO_SITE_ID,
6834 Decode(sign(trunc(AD.Demand_Date) - MSC_ATP_ALLOC.G_Atf_Date),
6835 1, p_family_id,
6836 Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
6837 'Y', AD.Original_Item_Id,
6838 p_family_id)),
6839 p_org_id, p_instance_id, TRUNC(AD.ORIGINAL_DEMAND_DATE),
6840 p_level_id, NULL),
6841 NULL),
6842 30, decode(AD.source_organization_id,
6843 NULL, MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(
6844 AD.CUSTOMER_ID, AD.SHIP_TO_SITE_ID,
6845 Decode(sign(trunc(AD.Demand_Date) - MSC_ATP_ALLOC.G_Atf_Date),
6846 1, p_family_id,
6847 Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
6848 'Y', AD.Original_Item_Id,
6849 p_family_id)),
6850 p_org_id, p_instance_id, TRUNC(AD.ORIGINAL_DEMAND_DATE),
6851 p_level_id, NULL),
6852 -23453, MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(
6853 AD.CUSTOMER_ID, AD.SHIP_TO_SITE_ID,
6854 Decode(sign(trunc(AD.Demand_Date) - MSC_ATP_ALLOC.G_Atf_Date),
6855 1, p_family_id,
6856 Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
6857 'Y', AD.Original_Item_Id,
6858 p_family_id)),
6859 p_org_id, p_instance_id, TRUNC(AD.ORIGINAL_DEMAND_DATE),
6860 p_level_id, NULL),
6861 AD.organization_id, MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(
6862 AD.CUSTOMER_ID, AD.SHIP_TO_SITE_ID,
6863 Decode(sign(trunc(AD.Demand_Date) - MSC_ATP_ALLOC.G_Atf_Date),
6864 1, p_family_id,
6865 Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
6866 'Y', AD.Original_Item_Id,
6867 p_family_id)),
6868 p_org_id, p_instance_id, TRUNC(AD.ORIGINAL_DEMAND_DATE),
6869 p_level_id, NULL),
6870 NULL),
6871 MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(
6872 AD.CUSTOMER_ID, AD.SHIP_TO_SITE_ID,
6873 Decode(sign(trunc(AD.Demand_Date) - MSC_ATP_ALLOC.G_Atf_Date),
6874 1, p_family_id,
6875 Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
6876 'Y', AD.Original_Item_Id,
6877 p_family_id)),
6878 p_org_id, p_instance_id,
6879 TRUNC(AD.ORIGINAL_DEMAND_DATE),
6880 p_level_id, NULL))),
6881 TEMP.LEVEL_3_DEMAND_CLASS, 1,
6882 MSC_AATP_FUNC.Get_Item_Demand_Alloc_Percent(p_plan_id,
6883 AD.PARENT_DEMAND_ID,
6884 TRUNC(AD.ORIGINAL_DEMAND_DATE),
6885 AD.USING_ASSEMBLY_ITEM_ID,
6886 DECODE(AD.SOURCE_ORGANIZATION_ID,
6887 -23453, null,
6888 AD.SOURCE_ORGANIZATION_ID),
6889 Decode(sign(trunc(AD.Demand_Date) - MSC_ATP_ALLOC.G_Atf_Date),
6890 1, p_family_id,
6891 Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
6892 'Y', AD.Original_Item_Id,
6893 p_family_id)),
6894 p_org_id,
6895 p_instance_id,
6896 AD.ORIGINATION_TYPE,
6897 DECODE(AD.CUSTOMER_ID, NULL, TEMP.LEVEL_3_DEMAND_CLASS,
6898 0, TEMP.LEVEL_3_DEMAND_CLASS,
6899 decode(AD.origination_type,
6900 6, decode(AD.source_organization_id,
6901 NULL, MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(
6902 AD.CUSTOMER_ID, AD.SHIP_TO_SITE_ID,
6903 Decode(sign(trunc(AD.Demand_Date) - MSC_ATP_ALLOC.G_Atf_Date),
6904 1, p_family_id,
6905 Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
6906 'Y', AD.Original_Item_Id,
6907 p_family_id)),
6908 p_org_id, p_instance_id, TRUNC(AD.ORIGINAL_DEMAND_DATE),
6909 p_level_id, NULL),
6910 -23453, MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(
6911 AD.CUSTOMER_ID, AD.SHIP_TO_SITE_ID,
6912 Decode(sign(trunc(AD.Demand_Date) - MSC_ATP_ALLOC.G_Atf_Date),
6913 1, p_family_id,
6914 Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
6915 'Y', AD.Original_Item_Id,
6916 p_family_id)),
6917 p_org_id, p_instance_id, TRUNC(AD.ORIGINAL_DEMAND_DATE),
6918 p_level_id, NULL),
6919 AD.organization_id, MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(
6920 AD.CUSTOMER_ID, AD.SHIP_TO_SITE_ID,
6921 Decode(sign(trunc(AD.Demand_Date) - MSC_ATP_ALLOC.G_Atf_Date),
6922 1, p_family_id,
6923 Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
6924 'Y', AD.Original_Item_Id,
6925 p_family_id)),
6926 p_org_id, p_instance_id, TRUNC(AD.ORIGINAL_DEMAND_DATE),
6927 p_level_id, NULL),
6928 TEMP.LEVEL_3_DEMAND_CLASS),
6929 30, decode(AD.source_organization_id,
6930 NULL, MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(
6931 AD.CUSTOMER_ID, AD.SHIP_TO_SITE_ID,
6932 Decode(sign(trunc(AD.Demand_Date) - MSC_ATP_ALLOC.G_Atf_Date),
6933 1, p_family_id,
6934 Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
6935 'Y', AD.Original_Item_Id,
6936 p_family_id)),
6937 p_org_id, p_instance_id, TRUNC(AD.ORIGINAL_DEMAND_DATE),
6938 p_level_id, NULL),
6939 -23453, MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(
6940 AD.CUSTOMER_ID, AD.SHIP_TO_SITE_ID,
6941 Decode(sign(trunc(AD.Demand_Date) - MSC_ATP_ALLOC.G_Atf_Date),
6942 1, p_family_id,
6943 Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
6944 'Y', AD.Original_Item_Id,
6945 p_family_id)),
6946 p_org_id, p_instance_id, TRUNC(AD.ORIGINAL_DEMAND_DATE),
6947 p_level_id, NULL),
6948 AD.organization_id, MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(
6949 AD.CUSTOMER_ID, AD.SHIP_TO_SITE_ID,
6950 Decode(sign(trunc(AD.Demand_Date) - MSC_ATP_ALLOC.G_Atf_Date),
6951 1, p_family_id,
6952 Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
6953 'Y', AD.Original_Item_Id,
6954 p_family_id)),
6955 p_org_id, p_instance_id, TRUNC(AD.ORIGINAL_DEMAND_DATE),
6956 p_level_id, NULL),
6957 TEMP.LEVEL_3_DEMAND_CLASS),
6958 MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(
6959 AD.CUSTOMER_ID, AD.SHIP_TO_SITE_ID,
6960 Decode(sign(trunc(AD.Demand_Date) - MSC_ATP_ALLOC.G_Atf_Date),
6961 1, p_family_id,
6962 Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
6963 'Y', AD.Original_Item_Id,
6964 p_family_id)),
6965 p_org_id, p_instance_id,
6966 TRUNC(AD.ORIGINAL_DEMAND_DATE),
6967 p_level_id, NULL))),
6968 TEMP.LEVEL_3_DEMAND_CLASS,
6969 p_level_id)) col11, -- allocated_quantity
6970 p_record_type col12, -- record_type
6971 p_scenario_id col13, -- scenario_id
6972 AD.ORDER_NUMBER col14, -- disposition_name
6973 TEMP.LEVEL_3_DEMAND_CLASS col15, -- demand_class
6974 TEMP.LEVEL_1_DEMAND_CLASS col16, -- class
6975 TEMP.PARTNER_ID col17, -- partner_id
6976 TEMP.PARTNER_SITE_ID col18, -- partner_site_id
6977 p_uom_code col19, -- UOM Code
6978 --bug3671294
6979 msi.item_name col20, -- Item name
6980 --p_inv_item_name col20, -- Item name
6981 p_org_code col21, -- Org code
6982 TEMP.LEVEL_3_DEMAND_CLASS_PRIORITY col22, -- Level 3 priority
6983 TEMP.ALLOCATION_PERCENT col23, -- Sysdate allocation percent
6984 TEMP.customer_name col24, -- Customer Name
6985 TEMP.customer_site_name col25, -- Customer Site Name
6986 p_sr_member_id col26, -- request_item_id
6987 Decode(AD.inventory_item_id, p_family_id,
6988 Decode(AD.original_item_id, p_member_id,
6989 AD.Pf_Display_Flag,
6990 Decode(sign(trunc(AD.Original_Demand_Date) - MSC_ATP_ALLOC.G_Atf_Date),
6991 1, AD.Pf_Display_Flag,
6992 1)),
6993 AD.Pf_Display_Flag) col27,
6994 -1 * NVL(AD.DEMAND_QUANTITY,
6995 AD.ALLOCATED_QUANTITY)*
6996 DECODE(DECODE(AD.CUSTOMER_ID, NULL, NULL,
6997 0, NULL,
6998 decode(AD.origination_type,
6999 6, decode(AD.source_organization_id,
7000 NULL, MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(
7001 AD.CUSTOMER_ID, AD.SHIP_TO_SITE_ID,
7002 Decode(sign(trunc(AD.Demand_Date) - MSC_ATP_ALLOC.G_Atf_Date),
7003 1, p_family_id,
7004 Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
7005 'Y', AD.Original_Item_Id,
7006 p_family_id)),
7007 p_org_id, p_instance_id, TRUNC(AD.ORIGINAL_DEMAND_DATE),
7008 p_level_id, NULL),
7009 -23453, MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(
7010 AD.CUSTOMER_ID, AD.SHIP_TO_SITE_ID,
7011 Decode(sign(trunc(AD.Demand_Date) - MSC_ATP_ALLOC.G_Atf_Date),
7012 1, p_family_id,
7013 Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
7014 'Y', AD.Original_Item_Id,
7015 p_family_id)),
7016 p_org_id, p_instance_id, TRUNC(AD.ORIGINAL_DEMAND_DATE),
7017 p_level_id, NULL),
7018 AD.organization_id, MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(
7019 AD.CUSTOMER_ID, AD.SHIP_TO_SITE_ID,
7020 Decode(sign(trunc(AD.Demand_Date) - MSC_ATP_ALLOC.G_Atf_Date),
7021 1, p_family_id,
7022 Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
7023 'Y', AD.Original_Item_Id,
7024 p_family_id)),
7025 p_org_id, p_instance_id, TRUNC(AD.ORIGINAL_DEMAND_DATE),
7026 p_level_id, NULL),
7027 NULL),
7028 30, decode(AD.source_organization_id,
7029 NULL, MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(
7030 AD.CUSTOMER_ID, AD.SHIP_TO_SITE_ID,
7031 Decode(sign(trunc(AD.Demand_Date) - MSC_ATP_ALLOC.G_Atf_Date),
7032 1, p_family_id,
7033 Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
7034 'Y', AD.Original_Item_Id,
7035 p_family_id)),
7036 p_org_id, p_instance_id, TRUNC(AD.ORIGINAL_DEMAND_DATE),
7037 p_level_id, NULL),
7038 -23453, MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(
7039 AD.CUSTOMER_ID, AD.SHIP_TO_SITE_ID,
7040 Decode(sign(trunc(AD.Demand_Date) - MSC_ATP_ALLOC.G_Atf_Date),
7041 1, p_family_id,
7042 Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
7043 'Y', AD.Original_Item_Id,
7044 p_family_id)),
7045 p_org_id, p_instance_id, TRUNC(AD.ORIGINAL_DEMAND_DATE),
7046 p_level_id, NULL),
7047 AD.organization_id, MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(
7048 AD.CUSTOMER_ID, AD.SHIP_TO_SITE_ID,
7049 Decode(sign(trunc(AD.Demand_Date) - MSC_ATP_ALLOC.G_Atf_Date),
7050 1, p_family_id,
7051 Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
7052 'Y', AD.Original_Item_Id,
7053 p_family_id)),
7054 p_org_id, p_instance_id, TRUNC(AD.ORIGINAL_DEMAND_DATE),
7055 p_level_id, NULL),
7056 NULL),
7057 MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(
7058 AD.CUSTOMER_ID, AD.SHIP_TO_SITE_ID,
7059 Decode(sign(trunc(AD.Demand_Date) - MSC_ATP_ALLOC.G_Atf_Date),
7060 1, p_family_id,
7061 Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
7062 'Y', AD.Original_Item_Id,
7063 p_family_id)),
7064 p_org_id, p_instance_id,
7065 TRUNC(AD.ORIGINAL_DEMAND_DATE),
7066 p_level_id, NULL))),
7067 TEMP.LEVEL_3_DEMAND_CLASS, 1,
7068 MSC_AATP_FUNC.Get_Item_Demand_Alloc_Percent(p_plan_id,
7069 AD.PARENT_DEMAND_ID,
7070 TRUNC(AD.ORIGINAL_DEMAND_DATE),
7071 AD.USING_ASSEMBLY_ITEM_ID,
7072 DECODE(AD.SOURCE_ORGANIZATION_ID,
7073 -23453, null,
7074 AD.SOURCE_ORGANIZATION_ID),
7075 Decode(sign(trunc(AD.Demand_Date) - MSC_ATP_ALLOC.G_Atf_Date),
7076 1, p_family_id,
7077 Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
7078 'Y', AD.Original_Item_Id,
7079 p_family_id)),
7080 p_org_id,
7081 p_instance_id,
7082 AD.ORIGINATION_TYPE,
7083 DECODE(AD.CUSTOMER_ID, NULL, TEMP.LEVEL_3_DEMAND_CLASS,
7084 0, TEMP.LEVEL_3_DEMAND_CLASS,
7085 decode(AD.origination_type,
7086 6, decode(AD.source_organization_id,
7087 NULL, MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(
7088 AD.CUSTOMER_ID, AD.SHIP_TO_SITE_ID,
7089 Decode(sign(trunc(AD.Demand_Date) - MSC_ATP_ALLOC.G_Atf_Date),
7090 1, p_family_id,
7091 Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
7092 'Y', AD.Original_Item_Id,
7093 p_family_id)),
7094 p_org_id, p_instance_id, TRUNC(AD.ORIGINAL_DEMAND_DATE),
7095 p_level_id, NULL),
7096 -23453, MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(
7097 AD.CUSTOMER_ID, AD.SHIP_TO_SITE_ID,
7098 Decode(sign(trunc(AD.Demand_Date) - MSC_ATP_ALLOC.G_Atf_Date),
7099 1, p_family_id,
7100 Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
7101 'Y', AD.Original_Item_Id,
7102 p_family_id)),
7103 p_org_id, p_instance_id, TRUNC(AD.ORIGINAL_DEMAND_DATE),
7104 p_level_id, NULL),
7105 AD.organization_id, MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(
7106 AD.CUSTOMER_ID, AD.SHIP_TO_SITE_ID,
7107 Decode(sign(trunc(AD.Demand_Date) - MSC_ATP_ALLOC.G_Atf_Date),
7108 1, p_family_id,
7109 Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
7110 'Y', AD.Original_Item_Id,
7111 p_family_id)),
7112 p_org_id, p_instance_id, TRUNC(AD.ORIGINAL_DEMAND_DATE),
7113 p_level_id, NULL),
7114 TEMP.LEVEL_3_DEMAND_CLASS),
7115 30, decode(AD.source_organization_id,
7116 NULL, MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(
7117 AD.CUSTOMER_ID, AD.SHIP_TO_SITE_ID,
7118 Decode(sign(trunc(AD.Demand_Date) - MSC_ATP_ALLOC.G_Atf_Date),
7119 1, p_family_id,
7120 Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
7121 'Y', AD.Original_Item_Id,
7122 p_family_id)),
7123 p_org_id, p_instance_id, TRUNC(AD.ORIGINAL_DEMAND_DATE),
7124 p_level_id, NULL),
7125 -23453, MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(
7126 AD.CUSTOMER_ID, AD.SHIP_TO_SITE_ID,
7127 Decode(sign(trunc(AD.Demand_Date) - MSC_ATP_ALLOC.G_Atf_Date),
7128 1, p_family_id,
7129 Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
7130 'Y', AD.Original_Item_Id,
7131 p_family_id)),
7132 p_org_id, p_instance_id, TRUNC(AD.ORIGINAL_DEMAND_DATE),
7133 p_level_id, NULL),
7134 AD.organization_id, MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(
7135 AD.CUSTOMER_ID, AD.SHIP_TO_SITE_ID,
7136 Decode(sign(trunc(AD.Demand_Date) - MSC_ATP_ALLOC.G_Atf_Date),
7137 1, p_family_id,
7138 Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
7139 'Y', AD.Original_Item_Id,
7140 p_family_id)),
7141 p_org_id, p_instance_id, TRUNC(AD.ORIGINAL_DEMAND_DATE),
7142 p_level_id, NULL),
7143 TEMP.LEVEL_3_DEMAND_CLASS),
7144 MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(
7145 AD.CUSTOMER_ID, AD.SHIP_TO_SITE_ID,
7146 Decode(sign(trunc(AD.Demand_Date) - MSC_ATP_ALLOC.G_Atf_Date),
7147 1, p_family_id,
7148 Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
7149 'Y', AD.Original_Item_Id,
7150 p_family_id)),
7151 p_org_id, p_instance_id,
7152 TRUNC(AD.ORIGINAL_DEMAND_DATE),
7153 p_level_id, NULL))),
7154 TEMP.LEVEL_3_DEMAND_CLASS,
7155 p_level_id)) col28, -- original demand quantity
7156 trunc(AD.original_demand_date) col29, --Bug_3693892 added trunc
7157 AD.original_item_id col30,
7158 AD.original_origination_type col31,
7159 -1 * AD.ALLOCATED_QUANTITY col32, -- unallocated quantity
7160 MTPS.LOCATION col33, --bug3263368
7161 MTP.PARTNER_NAME col34, --bug3263368
7162 AD.DEMAND_CLASS col35, --bug3263368
7163 AD.REQUEST_DATE col36 --bug3263368
7164 FROM
7165 MSC_ALLOC_DEMANDS AD,
7166 MSC_ALLOC_HIERARCHY_TEMP TEMP,
7167 MSC_TRADING_PARTNERS MTP,--bug3263368
7168 MSC_TRADING_PARTNER_SITES MTPS, --bug3263368
7169 MSC_SYSTEM_ITEMS msi --bug3671294
7170 WHERE
7171 AD.PLAN_ID = p_plan_id
7172 AND AD.SR_INSTANCE_ID = p_instance_id
7173 AND AD.INVENTORY_ITEM_ID in (p_member_id, p_family_id)
7174 AND AD.ORGANIZATION_ID = p_org_id
7175 AND AD.ORIGINATION_TYPE <> 52 -- For summary enhancement
7176 AND TRUNC(AD.DEMAND_DATE) < NVL(p_itf, TRUNC(AD.DEMAND_DATE) + 1)
7177 AND AD.ALLOCATED_QUANTITY <> 0
7178 --bug3671294 start
7179 AND msi.PLAN_ID = AD.PLAN_ID
7180 AND msi.SR_INSTANCE_ID = AD.SR_INSTANCE_ID
7181 AND msi.ORGANIZATION_ID = AD.ORGANIZATION_ID
7182 AND msi.INVENTORY_ITEM_ID = AD.ORIGINAL_ITEM_ID
7183 --bug3671294 end
7184 AND AD.SHIP_TO_SITE_ID = MTPS.PARTNER_SITE_ID(+) --bug3263368
7185 AND AD.CUSTOMER_ID = MTP.PARTNER_ID(+)--bug3263368
7186 UNION ALL
7187 SELECT p_session_id col1, -- session_id
7188 p_level_id col2, -- level_id
7189 p_sr_member_id col3, -- inventory_item_id
7190 p_org_id col4, -- organization_id
7191 p_instance_id col5, -- Identifier1
7192 SA.PARENT_TRANSACTION_ID col6, -- Identifier3
7193 2 col7, -- supply_demand_type
7194 TRUNC(SA.SUPPLY_DATE) col8, -- supply_demand_date
7195 NVL(SA.SUPPLY_QUANTITY,
7196 SA.ALLOCATED_QUANTITY) col9, -- supply_demand_source_quantity
7197 SA.ORDER_TYPE col10, -- supply_demand_source_type
7198 SA.ALLOCATED_QUANTITY
7199 * DECODE(DECODE(SA.CUSTOMER_ID, NULL, NULL,
7200 MSC_AATP_FUNC.Get_Hierarchy_Demand_Class(
7201 SA.CUSTOMER_ID,
7202 SA.SHIP_TO_SITE_ID,
7203 Decode(sign(trunc(SA.Supply_Date) - MSC_ATP_ALLOC.G_Atf_Date),
7204 1, p_family_id,
7205 Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
7206 'Y', SA.Original_Item_Id,
7207 p_family_id)),
7208 p_org_id,
7209 p_instance_id,
7210 TRUNC(SA.SUPPLY_DATE),
7211 p_level_id,
7212 NULL)),
7213 TEMP.LEVEL_3_DEMAND_CLASS,
7214 1,
7215 NULL,
7216 NVL(MSC_AATP_FUNC.Get_DC_Alloc_Percent(
7217 p_instance_id,
7218 Decode(sign(trunc(SA.Supply_Date) - MSC_ATP_ALLOC.G_Atf_Date),
7219 1, p_family_id,
7220 Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
7221 'Y', SA.Original_Item_Id,
7222 p_family_id)),
7223 p_org_id,
7224 null,
7225 null,
7226 TEMP.LEVEL_3_DEMAND_CLASS,
7227 TRUNC(SA.SUPPLY_DATE)), 1),
7228 DECODE(MSC_AATP_FUNC.Get_DC_Alloc_Percent(
7229 p_instance_id,
7230 Decode(sign(trunc(SA.Supply_Date) - MSC_ATP_ALLOC.G_Atf_Date),
7231 1, p_family_id,
7232 Decode(MSC_ATP_PVT.G_MEM_RULE_WITHIN_ATF,
7233 'Y', SA.Original_Item_Id,
7234 p_family_id)),
7235 p_org_id,
7236 null,
7237 null,
7238 TEMP.LEVEL_3_DEMAND_CLASS,
7239 TRUNC(SA.SUPPLY_DATE)),
7240 NULL, 1, 0)
7241 ) col11, -- allocated_quantity
7242 p_record_type col12, -- record_type
7243 p_scenario_id col13, -- scenario_id
7244 DECODE(SA.ORIGINAL_ORDER_TYPE,
7245 5, to_char(SA.PARENT_TRANSACTION_ID),
7246 SA.ORDER_NUMBER) col14, -- disposition_name
7247 TEMP.LEVEL_3_DEMAND_CLASS col15, -- demand_class
7248 TEMP.LEVEL_1_DEMAND_CLASS col16, -- class
7249 TEMP.PARTNER_ID col17, -- partner_id
7250 TEMP.PARTNER_SITE_ID col18, -- partner_site_id
7251 p_uom_code col19, -- UOM Code
7252 --bug3671294
7253 msi.item_name col20, -- Item name
7254 --p_inv_item_name col20, -- Item name
7255 p_org_code col21, -- Org code
7256 TEMP.LEVEL_3_DEMAND_CLASS_PRIORITY col22, -- Level 3 priority
7257 TEMP.ALLOCATION_PERCENT col23, -- Sysdate allocation percent
7258 TEMP.customer_name col24, -- Customer Name
7259 TEMP.customer_site_name col25, -- Customer Site Name
7260 p_sr_member_id col26, -- request_item_id
7261 l_null_num col27,
7262 l_null_num col28,
7263 l_null_date col29, -- Bug 3875786 - local variable used for NULL
7264 SA.Original_Item_Id col30,
7265 SA.ORIGINAL_ORDER_TYPE col31,
7266 SA.ALLOCATED_QUANTITY col32, -- unallocated quantity
7267 l_null_char col33, --bug3263368 ORIG_CUSTOMER_SITE_NAME --Bug 3875786
7268 l_null_char col34, --bug3263368 ORIG_CUSTOMER_NAME --Bug 3875786
7269 l_null_char col35, --bug3263368 ORIG_DEMAND_CLASS --Bug 3875786
7270 l_null_date col36 --bug3263368 ORIG_REQUEST_DATE -- Bug 3875786 - local variable used for NULL
7271 FROM
7272 MSC_ALLOC_SUPPLIES SA,
7273 MSC_ALLOC_HIERARCHY_TEMP TEMP,
7274 MSC_SYSTEM_ITEMS msi --bug3671294
7275 WHERE
7276 SA.PLAN_ID = p_plan_id
7277 AND SA.SR_INSTANCE_ID = p_instance_id
7278 AND SA.INVENTORY_ITEM_ID in (p_member_id, p_family_id)
7279 AND SA.ORGANIZATION_ID = p_org_id
7280 AND SA.ALLOCATED_QUANTITY <> 0
7281 --bug3671294 start
7282 AND msi.PLAN_ID = SA.PLAN_ID
7283 AND msi.SR_INSTANCE_ID = SA.SR_INSTANCE_ID
7284 AND msi.ORGANIZATION_ID = SA.ORGANIZATION_ID
7285 AND msi.INVENTORY_ITEM_ID = SA.ORIGINAL_ITEM_ID
7286 --bug3671294 end
7287 AND TRUNC(SA.SUPPLY_DATE) >= DECODE(SA.ORIGINAL_ORDER_TYPE,
7288 27, TRUNC(SYSDATE),
7289 28, TRUNC(SYSDATE),
7290 TRUNC(SA.SUPPLY_DATE))
7291 AND TRUNC(SA.SUPPLY_DATE) < NVL(p_itf, TRUNC(SA.SUPPLY_DATE) + 1)
7292 );
7293 END IF;
7294
7295 x_insert_count := SQL%ROWCOUNT;
7296
7297 EXCEPTION
7298 WHEN OTHERS THEN
7299 IF PG_DEBUG in ('Y', 'C') THEN
7300 msc_sch_wb.atp_debug('Insert_SD_Into_Details_Temp: ' || 'Error code:' || to_char(sqlcode));
7301 END IF;
7302 x_return_status := FND_API.G_RET_STS_ERROR;
7303
7304 END Insert_SD_Into_Details_Temp;
7305
7306 /*--Populate_Original_Demand_Qty--------------------------------------------
7307 | o Called for population of original_demand_quantity column in
7308 | demand priority AATP scenarios
7309 +-------------------------------------------------------------------------*/
7310 PROCEDURE Populate_Original_Demand_Qty(
7311 p_table IN NUMBER,
7312 p_session_id IN NUMBER,
7313 p_plan_id IN NUMBER,
7314 p_demand_class IN VARCHAR2,
7315 x_return_status OUT NOCOPY VARCHAR2
7316 )
7317 IS
7318 -- local variables
7319 BEGIN
7320
7321 IF PG_DEBUG in ('Y', 'C') THEN
7322 msc_sch_wb.atp_debug('********** Begin Populate_Original_Demand_Qty Procedure **********');
7323 msc_sch_wb.atp_debug('Populate_Original_Demand_Qty: ' || 'p_table: '|| to_char(p_table));
7324 msc_sch_wb.atp_debug('Populate_Original_Demand_Qty: ' || 'p_session_id: '|| to_char(p_session_id));
7325 END IF;
7326
7327 -- Initializing API return code
7328 x_return_status := FND_API.G_RET_STS_SUCCESS;
7329
7330 /* Clear msc_alloc_temp before use */
7331 DELETE msc_alloc_temp;
7332
7333 IF p_table = MADT THEN
7334
7335 /* Do netting in SQL and insert original demand qtys in alloc temp table*/
7336 INSERT INTO MSC_ALLOC_TEMP(
7337 demand_class,
7338 demand_id,
7339 supply_demand_quantity
7340 )
7341 (SELECT demand_class,
7342 parent_demand_id,
7343 sum(allocated_quantity)
7344 FROM msc_alloc_demands
7345 WHERE (demand_class, parent_demand_id) in
7346 (SELECT demand_class,
7347 identifier3
7348 FROM mrp_atp_details_temp
7349 WHERE session_id = p_session_id
7350 AND supply_demand_type = 1
7351 AND record_type = 2)
7352 AND plan_id = p_plan_id
7353 GROUP BY
7354 demand_class,
7355 parent_demand_id
7356 );
7357
7358 /* Now update original demand qtys in mrp_atp_details_temp table*/
7359 UPDATE mrp_atp_details_temp madt
7360 SET madt.original_demand_quantity =
7361 (select -1*mat.supply_demand_quantity
7362 from msc_alloc_temp mat
7363 where mat.demand_class = madt.demand_class
7364 and mat.demand_id = madt.identifier3)
7365 WHERE madt.session_id = p_session_id
7366 AND madt.supply_demand_type = 1
7367 AND madt.record_type = 2;
7368
7369 ELSIF p_table = MASDDT THEN
7370
7371 /* Do netting in SQL and insert original demand qtys in alloc temp table*/
7372 INSERT INTO MSC_ALLOC_TEMP(
7373 demand_id,
7374 supply_demand_quantity
7375 )
7376 SELECT parent_demand_id,
7377 sum(allocated_quantity)
7378 FROM msc_alloc_demands
7379 WHERE parent_demand_id in
7380 (SELECT identifier3
7381 FROM msc_atp_sd_details_temp
7382 WHERE supply_demand_type = 1)
7383 AND plan_id = p_plan_id
7384 AND demand_class = nvl(p_demand_class, demand_class)
7385 GROUP BY
7386 parent_demand_id;
7387
7388 /* Now update original demand qtys in msc_atp_sd_details_temp table*/
7389 UPDATE msc_atp_sd_details_temp masddt
7390 SET masddt.original_demand_quantity =
7391 (select -1*mat.supply_demand_quantity
7392 from msc_alloc_temp mat
7393 where mat.demand_id = masddt.identifier3)
7394 WHERE masddt.supply_demand_type = 1;
7395
7396 END IF;
7397
7398 IF PG_DEBUG in ('Y', 'C') THEN
7399 msc_sch_wb.atp_debug('**********End Populate_Original_Demand_Qty Procedure************');
7400 END IF;
7401
7402 EXCEPTION
7403 WHEN OTHERS THEN
7404 IF PG_DEBUG in ('Y', 'C') THEN
7405 msc_sch_wb.atp_debug('Populate_Original_Demand_Qty: ' || 'Error occurred: ' || to_char(sqlcode) || ':' || SQLERRM);
7406 END IF;
7407 x_return_status := FND_API.G_RET_STS_ERROR;
7408
7409 END Populate_Original_Demand_Qty;
7410
7411 /*--PF_Atp_Consume----------------------------------------------------------
7412 | o Called for consumption in product family scenarios.
7413 | o This procedure combines various procedures for consumption we have in
7414 | one procedure.
7415 | o Logic is similar only difference being that we do not do b/w and f/w
7416 | consumption across aggregate time fence. So for a negative bucket
7417 | we exit from inner loop during backward consumption when crossing
7418 | aggregate time fence.
7419 | o Also this procedure incorporates better algorithm for consumption.
7420 | o This procedure does following depending on the value of input variable
7421 | p_consumption_type:
7422 | - Backward(1) : Backward consumption
7423 | - Forward(2) : Forward consumption
7424 | - Cum(3) : Accumulation
7425 | - Bw_Fw_Cum(4) : Backward consumption, forward consumption and accumulation
7426 | - Bw_Fw(5) : Backward consumption and forward consumption
7427 +-------------------------------------------------------------------------*/
7428 PROCEDURE PF_Atp_Consume(
7429 p_atp_qty IN OUT NOCOPY MRP_ATP_PUB.number_arr,
7430 x_return_status OUT NOCOPY VARCHAR2,
7431 p_atp_period IN MRP_ATP_PUB.date_arr :=NULL,
7432 p_consumption_type IN NUMBER := Bw_Fw_Cum,
7433 p_atf_date IN DATE := NULL
7434 )
7435 IS
7436 -- local variables
7437 i NUMBER;
7438 j NUMBER;
7439 l_fw_nullifying_bucket_index NUMBER := 1;
7440
7441
7442 BEGIN
7443
7444 IF PG_DEBUG in ('Y', 'C') THEN
7445 msc_sch_wb.atp_debug('********** Begin PF_Atp_Consume Procedure **********');
7446 msc_sch_wb.atp_debug('PF_Atp_Consume: ' || 'p_consumption_type: '|| to_char(p_consumption_type));
7447 msc_sch_wb.atp_debug('PF_Atp_Consume: ' || 'p_atf_date: '|| to_char(p_atf_date));
7448 END IF;
7449
7450 -- Initializing API return code
7451 x_return_status := FND_API.G_RET_STS_SUCCESS;
7452
7453 /* p_consumption_type
7454 * 1 = b/w consumption
7455 * 2 = f/w consumption
7456 * 3 = accumulation
7457 * 4 = b/w, f/w consumption and accumulation
7458 * 5 = b/w and f/w consumption
7459 */
7460 IF p_consumption_type = Backward THEN
7461 -- this for loop will do backward consumption
7462 FOR i in 2..p_atp_qty.COUNT LOOP
7463 -- backward consumption when neg atp quantity occurs
7464 IF (p_atp_qty(i) < 0 ) THEN
7465 j := i - 1;
7466 WHILE ((j>0) and (p_atp_qty(j)>=0)) LOOP
7467 IF ((p_atp_period(i)>p_atf_date) and (p_atp_period(j)<=p_atf_date)) THEN
7468 -- exit loop when crossing time fence
7469 j := 0;
7470 ELSIF (p_atp_qty(j) = 0) THEN
7471 -- backward one more period
7472 j := j-1 ;
7473 ELSE
7474 IF (p_atp_qty(j) + p_atp_qty(i) < 0) THEN
7475 -- not enough to cover the shortage
7476 p_atp_qty(i) := p_atp_qty(i) + p_atp_qty(j);
7477 p_atp_qty(j) := 0;
7478 j := j-1;
7479 ELSE
7480 -- enough to cover the shortage
7481 p_atp_qty(j) := p_atp_qty(j) + p_atp_qty(i);
7482 p_atp_qty(i) := 0;
7483 j := -1;
7484 END IF;
7485 END IF;
7486 END LOOP;
7487 END IF;
7488 END LOOP;
7489 ELSIF p_consumption_type = Forward THEN
7490 -- this for loop will do forward consumption
7491 FOR i in 1..p_atp_qty.COUNT LOOP
7492 -- forward consumption when neg atp quantity occurs
7493 IF (p_atp_qty(i) < 0 ) THEN
7494 j := i + 1;
7495 WHILE (j <= p_atp_qty.COUNT) LOOP
7496 IF ((p_atp_period(i)<=p_atf_date) and (p_atp_period(j)>p_atf_date)) THEN
7497 -- exit loop when crossing time fence
7498 j := p_atp_qty.COUNT+1;
7499 ELSIF (p_atp_qty(j) <= 0 OR j < l_fw_nullifying_bucket_index) THEN
7500 -- forward one more period if next period is negative or
7501 -- less than nullifying bucket index
7502 j := j+1 ;
7503 ELSE
7504 -- You can get something from here. So set the nullifying bucket index
7505 l_fw_nullifying_bucket_index := j;
7506 IF (p_atp_qty(j) + p_atp_qty(i) < 0) THEN
7507 -- not enough to cover the shortage
7508 p_atp_qty(i) := p_atp_qty(i) + p_atp_qty(j);
7509 p_atp_qty(j) := 0;
7510 j := j+1;
7511 ELSE
7512 -- enough to cover the shortage
7513 p_atp_qty(j) := p_atp_qty(j) + p_atp_qty(i);
7514 p_atp_qty(i) := 0;
7515 j := p_atp_qty.COUNT + 1;
7516 END IF;
7517 END IF;
7518 END LOOP;
7519 END IF;
7520 END LOOP;
7521 ELSIF (p_consumption_type = Bw_Fw_Cum) OR (p_consumption_type = Bw_Fw) THEN
7522 -- this for loop will do backward consumption
7523 FOR i in 1..p_atp_qty.COUNT LOOP
7524 -- Do backward consumption only when neg bucket and current index
7525 -- greater l_fw_nullifying_bucket_index.
7526 IF (p_atp_qty(i) < 0 AND i > l_fw_nullifying_bucket_index) THEN
7527 j := i - 1;
7528 WHILE ((j >= l_fw_nullifying_bucket_index) and (p_atp_qty(j)>=0)) LOOP
7529 IF ((p_atp_period(i)>p_atf_date) and (p_atp_period(j)<=p_atf_date)) THEN
7530 -- exit loop when crossing time fence
7531 j := 0;
7532 ELSIF (p_atp_qty(j) = 0) THEN
7533 -- backward one more period
7534 j := j-1 ;
7535 ELSE
7536 IF (p_atp_qty(j) + p_atp_qty(i) < 0) THEN
7537 -- not enough to cover the shortage
7538 p_atp_qty(i) := p_atp_qty(i) + p_atp_qty(j);
7539 p_atp_qty(j) := 0;
7540 j := j-1;
7541 ELSE
7542 -- enough to cover the shortage
7543 p_atp_qty(j) := p_atp_qty(j) + p_atp_qty(i);
7544 p_atp_qty(i) := 0;
7545 j := -1;
7546 END IF;
7547 END IF;
7548 END LOOP;
7549 END IF;
7550
7551 -- forward consumption when neg atp quantity occurs
7552 IF (p_atp_qty(i) < 0 ) THEN
7553 j := i + 1;
7554 WHILE (j <= p_atp_qty.COUNT) LOOP
7555 IF ((p_atp_period(i)<=p_atf_date) and (p_atp_period(j)>p_atf_date)) THEN
7556 -- exit loop when crossing time fence
7557 j := p_atp_qty.COUNT+1;
7558 ELSIF (p_atp_qty(j) <= 0 OR j < l_fw_nullifying_bucket_index) THEN
7559 -- forward one more period if next period is negative or
7560 -- less than nullifying bucket index
7561 j := j+1 ;
7562 ELSE
7563 -- You can get something from here. So set the nullifying bucket index
7564 l_fw_nullifying_bucket_index := j;
7565 IF (p_atp_qty(j) + p_atp_qty(i) < 0) THEN
7566 -- not enough to cover the shortage
7567 p_atp_qty(i) := p_atp_qty(i) + p_atp_qty(j);
7568 p_atp_qty(j) := 0;
7569 j := j+1;
7570 ELSE
7571 -- enough to cover the shortage
7572 p_atp_qty(j) := p_atp_qty(j) + p_atp_qty(i);
7573 p_atp_qty(i) := 0;
7574 j := p_atp_qty.COUNT + 1;
7575 END IF;
7576 END IF;
7577 END LOOP;
7578 END IF;
7579 END LOOP;
7580 END IF;
7581
7582 IF (p_consumption_type = Cum) or (p_consumption_type = Bw_Fw_Cum) THEN
7583 --Bug 3919388 (Cum is decreasing)
7584 IF ( p_atp_qty.count > 0 ) THEN
7585 IF ( p_atp_qty(1) < 0) THEN
7586 p_atp_qty(1) := 0;
7587 END IF;
7588 END IF;
7589 -- this for loop will do the acculumation
7590 FOR i in 2..p_atp_qty.COUNT LOOP
7591 p_atp_qty(i) := GREATEST(p_atp_qty(i), 0) + GREATEST(p_atp_qty(i-1), 0); --Bug 3919388 (Cum is decreasing)
7592 END LOOP;
7593 END IF;
7594
7595 IF PG_DEBUG in ('Y', 'C') THEN
7596 msc_sch_wb.atp_debug('**********End PF_Atp_Consume Procedure************');
7597 END IF;
7598
7599 EXCEPTION
7600 WHEN OTHERS THEN
7601 IF PG_DEBUG in ('Y', 'C') THEN
7602 msc_sch_wb.atp_debug('PF_Atp_Consume: ' || 'Error occurred: ' || to_char(sqlcode) || ':' || SQLERRM);
7603 END IF;
7604 x_return_status := FND_API.G_RET_STS_ERROR;
7605
7606 END PF_Atp_Consume;
7607
7608 /*--PF_Atp_Alloc_Consume-------------------------------------------------------
7609 | o Called for consumption in demand priority AATP scenario.
7610 | o Differences from Atp_Alloc_Consume:
7611 | - We do not do b/w and f/w consumption across aggregate time fence.
7612 | So for a negative bucket we exit from inner loop during backward
7613 | consumption when crossing aggregate time fence.
7614 | - Incorporates better algorithm for consumption.
7615 +----------------------------------------------------------------------------*/
7616 PROCEDURE PF_Atp_Alloc_Consume(
7617 p_atp_qty IN OUT NOCOPY MRP_ATP_PUB.number_arr,
7618 p_atp_period IN MRP_ATP_PUB.date_arr,
7619 p_atp_dc_tab IN MRP_ATP_PUB.char80_arr,
7620 p_atf_date IN DATE,
7621 x_dc_list_tab OUT NOCOPY MRP_ATP_PUB.char80_arr,
7622 x_dc_start_index OUT NOCOPY MRP_ATP_PUB.number_arr,
7623 x_dc_end_index OUT NOCOPY MRP_ATP_PUB.number_arr,
7624 x_return_status OUT NOCOPY VARCHAR2
7625 )
7626 IS
7627 i NUMBER;
7628 j NUMBER;
7629 l_fw_nullifying_bucket_index NUMBER := 1;
7630
7631
7632 BEGIN
7633 IF PG_DEBUG in ('Y', 'C') THEN
7634 msc_sch_wb.atp_debug('**********Begin PF_Atp_Alloc_Consume Procedure************');
7635 END IF;
7636
7637 -- Initializing API return code
7638 x_return_status := FND_API.G_RET_STS_SUCCESS;
7639
7640 x_dc_list_tab := MRP_ATP_PUB.Char80_Arr();
7641 x_dc_start_index := MRP_ATP_PUB.Number_Arr();
7642 x_dc_end_index := MRP_ATP_PUB.Number_Arr();
7643
7644 x_dc_list_tab.EXTEND;
7645 x_dc_start_index.EXTEND;
7646 x_dc_end_index.EXTEND;
7647
7648 IF PG_DEBUG in ('Y', 'C') THEN
7649 msc_sch_wb.atp_debug('PF_Atp_Alloc_Consume: ' || 'after extend : ' || p_atp_dc_tab(p_atp_dc_tab.FIRST));
7650 END IF;
7651
7652 x_dc_list_tab(1) := p_atp_dc_tab(p_atp_dc_tab.FIRST);
7653 x_dc_start_index(1) := 1;
7654 IF PG_DEBUG in ('Y', 'C') THEN
7655 msc_sch_wb.atp_debug('PF_Atp_Alloc_Consume: ' || 'after assign : ' || x_dc_list_tab(1));
7656 msc_sch_wb.atp_debug('PF_Atp_Alloc_Consume: ' || 'start index : ' || x_dc_start_index(1));
7657 END IF;
7658
7659 FOR i in 1..p_atp_dc_tab.COUNT LOOP
7660 IF PG_DEBUG in ('Y', 'C') THEN
7661 msc_sch_wb.atp_debug('PF_Atp_Alloc_Consume: ' || 'index : ' || i);
7662 msc_sch_wb.atp_debug('PF_Atp_Alloc_Consume: ' || 'x_dc_list_tab : ' || x_dc_list_tab(x_dc_list_tab.COUNT));
7663 msc_sch_wb.atp_debug('PF_Atp_Alloc_Consume: ' || 'p_atp_dc_tab : ' || p_atp_dc_tab(i));
7664 END IF;
7665
7666 -- If demand class changes, re-initialize these variables.
7667 IF p_atp_dc_tab(i) <> x_dc_list_tab(x_dc_list_tab.COUNT) THEN
7668 x_dc_end_index(x_dc_end_index.COUNT) := i - 1;
7669 IF PG_DEBUG in ('Y', 'C') THEN
7670 msc_sch_wb.atp_debug('PF_Atp_Alloc_Consume: ' || 'inside IF');
7671 msc_sch_wb.atp_debug('PF_Atp_Alloc_Consume: ' || 'end index : ' || x_dc_end_index(x_dc_end_index.COUNT));
7672 END IF;
7673 x_dc_list_tab.EXTEND;
7674 x_dc_start_index.EXTEND;
7675 x_dc_end_index.EXTEND;
7676 x_dc_list_tab(x_dc_list_tab.COUNT) := p_atp_dc_tab(i);
7677 x_dc_start_index(x_dc_start_index.COUNT) := i;
7678 ELSE
7679 x_dc_end_index(x_dc_end_index.COUNT) := i;
7680 END IF;
7681
7682 IF PG_DEBUG in ('Y', 'C') THEN
7683 msc_sch_wb.atp_debug('PF_Atp_Alloc_Consume: ' || 'start index : ' || x_dc_start_index(x_dc_start_index.COUNT));
7684 msc_sch_wb.atp_debug('PF_Atp_Alloc_Consume: ' || 'end index : ' || x_dc_end_index(x_dc_end_index.COUNT));
7685 END IF;
7686 -- Do backward consumption only when neg bucket and current index
7687 -- greater l_fw_nullifying_bucket_index.
7688 IF (p_atp_qty(i) < 0 AND i > l_fw_nullifying_bucket_index) THEN
7689 j := i - 1;
7690 WHILE ((j >= x_dc_start_index(x_dc_start_index.COUNT)) and (p_atp_qty(j) >= 0)) LOOP
7691 IF ((p_atp_period(i) > p_atf_date) and (p_atp_period(j) <= p_atf_date)) THEN
7692 -- exit loop when crossing time fence
7693 j := 0;
7694 ELSIF (p_atp_qty(j) = 0) THEN
7695 -- backward one more period
7696 j := j-1 ;
7697 ELSE
7698 IF (p_atp_qty(j) + p_atp_qty(i) < 0) THEN
7699 -- not enough to cover the shortage
7700 p_atp_qty(i) := p_atp_qty(i) + p_atp_qty(j);
7701 p_atp_qty(j) := 0;
7702 j := j-1;
7703 ELSE
7704 -- enough to cover the shortage
7705 p_atp_qty(j) := p_atp_qty(j) + p_atp_qty(i);
7706 p_atp_qty(i) := 0;
7707 j := -1;
7708 END IF;
7709 END IF;
7710 END LOOP;
7711 END IF;
7712
7713 IF PG_DEBUG in ('Y', 'C') THEN
7714 msc_sch_wb.atp_debug('PF_Atp_Alloc_Consume: ' || 'before forward consumption');
7715 END IF;
7716
7717 -- forward consumption when neg atp quantity occurs
7718 IF (p_atp_qty(i) < 0 ) THEN
7719 j := i + 1;
7720 IF PG_DEBUG in ('Y', 'C') THEN
7721 msc_sch_wb.atp_debug('PF_Atp_Alloc_Consume: ' || 'in forward consumption : ' || i || ':' || j);
7722 msc_sch_wb.atp_debug('PF_Atp_Alloc_Consume: ' || 'in forward : ' || p_atp_dc_tab.COUNT);
7723 END IF;
7724
7725 IF j < p_atp_dc_tab.COUNT THEN
7726 IF PG_DEBUG in ('Y', 'C') THEN
7727 msc_sch_wb.atp_debug('PF_Atp_Alloc_Consume: ' || 'in j : ' || p_atp_dc_tab.COUNT);
7728 END IF;
7729 WHILE (p_atp_dc_tab(j) = x_dc_list_tab(x_dc_list_tab.COUNT)) LOOP
7730 IF ((p_atp_period(i) <= p_atf_date) and (p_atp_period(j) > p_atf_date)) THEN
7731 -- exit loop when crossing time fence
7732 EXIT;
7733 ELSIF (p_atp_qty(j) <= 0 OR j < l_fw_nullifying_bucket_index) THEN
7734 -- forward one more period
7735 j := j+1 ;
7736 ELSE
7737 -- You can get something from here. So set the nullifying bucket index
7738 l_fw_nullifying_bucket_index := j;
7739 IF (p_atp_qty(j) + p_atp_qty(i) < 0) THEN
7740 -- not enough to cover the shortage
7741 p_atp_qty(i) := p_atp_qty(i) + p_atp_qty(j);
7742 p_atp_qty(j) := 0;
7743 j := j + 1;
7744 ELSE
7745 -- enough to cover the shortage
7746 p_atp_qty(j) := p_atp_qty(j) + p_atp_qty(i);
7747 p_atp_qty(i) := 0;
7748 EXIT;
7749 END IF;
7750 END IF;
7751 IF j > p_atp_dc_tab.COUNT THEN
7752 EXIT;
7753 END IF;
7754 END LOOP;
7755 END IF;
7756 END IF;
7757 END LOOP;
7758
7759 x_dc_end_index(x_dc_end_index.count) := p_atp_dc_tab.count;
7760
7761 IF PG_DEBUG in ('Y', 'C') THEN
7762 FOR i in 1..x_dc_list_tab.COUNT LOOP
7763 msc_sch_wb.atp_debug('PF_Atp_Alloc_Consume: ' || 'DC:start:end - ' || x_dc_list_tab(i) || ':' ||
7764 x_dc_start_index(i) || ':' ||
7765 x_dc_end_index(i));
7766 END LOOP;
7767
7768 msc_sch_wb.atp_debug('PF_Atp_Alloc_Consume: ' || 'x_dc_list_tab : ' || x_dc_list_tab.COUNT);
7769 END IF;
7770
7771 -- this for loop will do atp consume on each dc
7772 FOR j in 1..x_dc_list_tab.COUNT LOOP
7773 --Bug 3919388 (Cum is decreasing)
7774 IF ( p_atp_qty(x_dc_start_index(j)) < 0) THEN
7775 p_atp_qty(x_dc_start_index(j)) := 0;
7776 END IF;
7777 FOR i in (x_dc_start_index(j) + 1)..x_dc_end_index(j) LOOP
7778 IF PG_DEBUG in ('Y', 'C') THEN
7779 msc_sch_wb.atp_debug('PF_Atp_Alloc_Consume: ' || 'inside accumulation : ' || i);
7780 END IF;
7781 --Bug 3919388 (Cum is decreasing)
7782 p_atp_qty(i) := GREATEST(p_atp_qty(i), 0) + GREATEST(p_atp_qty(i-1),0);
7783 END LOOP;
7784 END LOOP; --FOR i in 1..x_dc_list_tab.COUNT LOOP
7785
7786 IF PG_DEBUG in ('Y', 'C') THEN
7787 msc_sch_wb.atp_debug('**********End PF_Atp_Alloc_Consume Procedure************');
7788 END IF;
7789
7790 EXCEPTION
7791 WHEN OTHERS THEN
7792 IF PG_DEBUG in ('Y', 'C') THEN
7793 msc_sch_wb.atp_debug('PF_Atp_Alloc_Consume: ' || 'Error occurred: ' || to_char(sqlcode) || ':' || SQLERRM);
7794 END IF;
7795 x_return_status := FND_API.G_RET_STS_ERROR;
7796
7797 END PF_Atp_Alloc_Consume;
7798
7799 /*--Get_Period_Data_From_Sd_Temp--------------------------------------------
7800 | o This procedure is called from Item_Alloc_Cum_Atp and
7801 | Item_Pre_Allocated_Atp procedures to get the period data from
7802 | msc_atp_sd_details_temp table.
7803 | o Differences from the one in MSC_ATP_PROC:
7804 | - For Total_Demand_Quantity only demands with Pf_Display_Flag equal
7805 | to 1 are looked at. Demand quantity is picked from
7806 | Original_Demand_Quantity column.
7807 | o For Total_Bucketed_Demand_Quantity all demands are looked at.
7808 +-------------------------------------------------------------------------*/
7809 PROCEDURE Get_Period_Data_From_Sd_Temp(
7810 x_atp_period OUT NOCOPY MRP_ATP_PUB.ATP_Period_Typ,
7811 x_return_status OUT NOCOPY VARCHAR2
7812 ) IS
7813 i NUMBER;
7814 j NUMBER;
7815
7816 BEGIN
7817
7818 IF PG_DEBUG in ('Y', 'C') THEN
7819 msc_sch_wb.atp_debug('PROCEDURE Get_Period_Data_From_Sd_Temp');
7820 END IF;
7821
7822 -- Initializing API return code
7823 x_return_status := FND_API.G_RET_STS_SUCCESS;
7824
7825 SELECT SD_View.ATP_level
7826 ,SD_View.scenario_id
7827 ,SD_View.inventory_item_id
7828 ,SD_View.request_item_id
7829 ,SD_View.organization_id
7830 ,SD_View.supplier_id
7831 ,SD_View.supplier_site_id
7832 ,SD_View.department_id
7833 ,SD_View.resource_id
7834 ,SD_View.supply_demand_date
7835 ,SD_View.identifier1
7836 ,SD_View.identifier2
7837 ,SUM(SD_View.demand_quantity)
7838 ,SUM(SD_View.bucketed_demand_quantity)
7839 ,SUM(SD_View.supply_quantity)
7840 ,SUM(SD_View.period_quantity)
7841 BULK COLLECT INTO
7842 x_atp_period.Level,
7843 x_atp_period.Scenario_Id,
7844 x_atp_period.Inventory_Item_Id,
7845 x_atp_period.Request_Item_Id,
7846 x_atp_period.Organization_id,
7847 x_atp_period.Supplier_ID,
7848 x_atp_period.Supplier_Site_ID,
7849 x_atp_period.Department_id,
7850 x_atp_period.Resource_id,
7851 x_atp_period.Period_Start_Date,
7852 x_atp_period.Identifier1,
7853 x_atp_period.Identifier2,
7854 x_atp_period.Total_Demand_Quantity,
7855 x_atp_period.Total_Bucketed_Demand_Quantity,
7856 x_atp_period.Total_Supply_Quantity,
7857 x_atp_period.Period_Quantity
7858 FROM (
7859 SELECT ATP_level
7860 ,scenario_id
7861 ,inventory_item_id
7862 ,request_item_id
7863 ,organization_id
7864 ,supplier_id
7865 ,supplier_site_id
7866 ,department_id
7867 ,resource_id
7868 ,trunc(supply_demand_date) supply_demand_date --Bug_3693892 added trunc
7869 ,identifier1
7870 ,identifier2
7871 ,(DECODE(supply_demand_type, 1,
7872 DECODE(pf_display_flag, 1,
7873 --Bug_3693892 added trunc
7874 DECODE(trunc(original_demand_date), trunc(supply_demand_date),
7875 original_demand_quantity, 0),
7876 0),
7877 0)) demand_quantity
7878 ,(DECODE(supply_demand_type, 1,
7879 allocated_quantity,
7880 0)) bucketed_demand_quantity
7881 ,(DECODE(supply_demand_type, 2,
7882 allocated_quantity,
7883 0)) supply_quantity
7884 ,allocated_quantity period_quantity
7885 FROM msc_atp_sd_details_temp
7886
7887 UNION ALL
7888
7889 SELECT
7890 ATP_level
7891 ,scenario_id
7892 ,inventory_item_id
7893 ,request_item_id
7894 ,organization_id
7895 ,supplier_id
7896 ,supplier_site_id
7897 ,department_id
7898 ,resource_id
7899 ,trunc(original_demand_date) supply_demand_date --Bug_3693892 added trunc
7900 ,identifier1
7901 ,identifier2
7902 ,original_demand_quantity demand_quantity
7903 ,0 bucketed_demand_quantity
7904 ,0 supply_quantity
7905 ,0 period_quantity
7906 FROM msc_atp_sd_details_temp
7907 WHERE supply_demand_type = 1
7908 AND pf_display_flag = 1
7909 AND trunc(supply_demand_date) <> trunc(original_demand_date) --Bug_3693892 added trunc
7910 ) SD_View
7911 GROUP BY
7912 SD_View.supply_demand_date
7913 ,SD_View.ATP_level
7914 ,SD_View.scenario_id
7915 ,SD_View.inventory_item_id
7916 ,SD_View.request_item_id
7917 ,SD_View.organization_id
7918 ,SD_View.supplier_id
7919 ,SD_View.supplier_site_id
7920 ,SD_View.department_id
7921 ,SD_View.resource_id
7922 ,SD_View.identifier1
7923 ,SD_View.identifier2
7924 ORDER BY
7925 SD_View.supply_demand_date;
7926
7927 -- set the period end dates and
7928 -- extend the remaining fields to ensure same behaviour as before
7929 i := x_atp_period.Period_Start_Date.COUNT;
7930
7931 x_atp_period.Identifier.EXTEND(i);
7932 x_atp_period.Pegging_Id.EXTEND(i);
7933 x_atp_period.End_Pegging_Id.EXTEND(i);
7934 x_atp_period.Period_End_Date.EXTEND(i);
7935 x_atp_period.From_Location_Id.EXTEND(i);
7936 x_atp_period.From_Organization_Id.EXTEND(i);
7937 x_atp_period.Ship_Method.EXTEND(i);
7938 x_atp_period.To_Location_Id.EXTEND(i);
7939 x_atp_period.To_Organization_Id.EXTEND(i);
7940 x_atp_period.Uom.EXTEND(i);
7941
7942 FOR j IN 1..(i-1) LOOP
7943 x_atp_period.Period_End_Date(j) :=
7944 x_atp_period.Period_Start_Date(j+1) - 1;
7945 END LOOP;
7946
7947 EXCEPTION
7948 WHEN OTHERS THEN
7949 IF PG_DEBUG in ('Y', 'C') THEN
7950 msc_sch_wb.atp_debug('Get_Period_Data_From_Sd_Temp: ' || 'Error occurred: ' || to_char(sqlcode) || ':' || SQLERRM);
7951 END IF;
7952 x_return_status := FND_API.G_RET_STS_ERROR;
7953
7954 END Get_Period_Data_From_Sd_Temp;
7955
7956 /*--Get_Unalloc_Data_From_Sd_Temp-------------------------------------------
7957 | o Called from Item_Alloc_Cum_Atp procedure for Rule based Allocated Time
7958 | Phased PF ATP (AATP Forward Consumption Method 2).
7959 | o This is similar to previous procedure only difference being that we
7960 | also return unallocated quantities.
7961 +-------------------------------------------------------------------------*/
7962 PROCEDURE Get_Unalloc_Data_From_Sd_Temp(
7963 x_atp_period OUT NOCOPY MRP_ATP_PUB.ATP_Period_Typ,
7964 p_unallocated_atp IN OUT NOCOPY MRP_ATP_PVT.ATP_Info,
7965 x_return_status OUT NOCOPY VARCHAR2
7966 ) IS
7967 i NUMBER;
7968 j NUMBER;
7969
7970 BEGIN
7971
7972 IF PG_DEBUG in ('Y', 'C') THEN
7973 msc_sch_wb.atp_debug('PROCEDURE Get_Unalloc_Data_From_Sd_Temp');
7974 END IF;
7975
7976 -- initialize API return status to success
7977 x_return_status := FND_API.G_RET_STS_SUCCESS;
7978
7979 -- do netting for unallocated qty also
7980 SELECT SD_View.ATP_level
7981 ,SD_View.scenario_id
7982 ,SD_View.inventory_item_id
7983 ,SD_View.request_item_id
7984 ,SD_View.organization_id
7985 ,SD_View.supplier_id
7986 ,SD_View.supplier_site_id
7987 ,SD_View.department_id
7988 ,SD_View.resource_id
7989 ,SD_View.supply_demand_date
7990 ,SD_View.identifier1
7991 ,SD_View.identifier2
7992 ,SUM(SD_View.demand_quantity)
7993 ,SUM(SD_View.bucketed_demand_quantity)
7994 ,SUM(SD_View.supply_quantity)
7995 ,SUM(SD_View.period_quantity)
7996 ,SUM(SD_View.unallocated_quantity)
7997 BULK COLLECT INTO
7998 x_atp_period.Level,
7999 x_atp_period.Scenario_Id,
8000 x_atp_period.Inventory_Item_Id,
8001 x_atp_period.Request_Item_Id,
8002 x_atp_period.Organization_id,
8003 x_atp_period.Supplier_ID,
8004 x_atp_period.Supplier_Site_ID,
8005 x_atp_period.Department_id,
8006 x_atp_period.Resource_id,
8007 x_atp_period.Period_Start_Date,
8008 x_atp_period.Identifier1,
8009 x_atp_period.Identifier2,
8010 x_atp_period.Total_Demand_Quantity,
8011 x_atp_period.Total_Bucketed_Demand_Quantity,
8012 x_atp_period.Total_Supply_Quantity,
8013 x_atp_period.Period_Quantity,
8014 p_unallocated_atp.atp_qty
8015 FROM (
8016 SELECT ATP_level
8017 ,scenario_id
8018 ,inventory_item_id
8019 ,request_item_id
8020 ,organization_id
8021 ,supplier_id
8022 ,supplier_site_id
8023 ,department_id
8024 ,resource_id
8025 ,trunc(supply_demand_date) supply_demand_date --Bug_3693892 added trunc
8026 ,identifier1
8027 ,identifier2
8028 ,DECODE(supply_demand_type, 1,
8029 DECODE(pf_display_flag, 1,
8030 --Bug_3693892 added trunc
8031 DECODE(trunc(original_demand_date), trunc(supply_demand_date),
8032 original_demand_quantity, 0),
8033 0),
8034 0) demand_quantity
8035 ,DECODE(supply_demand_type, 1,
8036 allocated_quantity,
8037 0) bucketed_demand_quantity
8038 ,DECODE(supply_demand_type, 2,
8039 allocated_quantity,
8040 0) supply_quantity
8041 ,allocated_quantity period_quantity
8042 ,unallocated_quantity
8043 FROM msc_atp_sd_details_temp
8044
8045 UNION ALL
8046
8047 SELECT
8048 ATP_level
8049 ,scenario_id
8050 ,inventory_item_id
8051 ,request_item_id
8052 ,organization_id
8053 ,supplier_id
8054 ,supplier_site_id
8055 ,department_id
8056 ,resource_id
8057 ,trunc(original_demand_date) supply_demand_date --Bug_3693892 added trunc
8058 ,identifier1
8059 ,identifier2
8060 ,original_demand_quantity demand_quantity
8061 ,0 bucketed_demand_quantity
8062 ,0 supply_quantity
8063 ,0 period_quantity
8064 ,0 unallocated_quantity
8065 FROM msc_atp_sd_details_temp
8066 WHERE supply_demand_type = 1
8067 AND pf_display_flag = 1
8068 AND trunc(supply_demand_date) <> trunc(original_demand_date) --Bug_3693892 added trunc
8069 ) SD_View
8070 GROUP BY
8071 SD_View.supply_demand_date
8072 ,SD_View.ATP_level
8073 ,SD_View.scenario_id
8074 ,SD_View.inventory_item_id
8075 ,SD_View.request_item_id
8076 ,SD_View.organization_id
8077 ,SD_View.supplier_id
8078 ,SD_View.supplier_site_id
8079 ,SD_View.department_id
8080 ,SD_View.resource_id
8081 ,SD_View.identifier1
8082 ,SD_View.identifier2
8083 ORDER BY
8084 SD_View.supply_demand_date;
8085
8086
8087 -- set the period end dates and
8088 -- extend the remaining fields to ensure same behaviour as before
8089 i := x_atp_period.Period_Start_Date.COUNT;
8090
8091 x_atp_period.Identifier.EXTEND(i);
8092 x_atp_period.Pegging_Id.EXTEND(i);
8093 x_atp_period.End_Pegging_Id.EXTEND(i);
8094 x_atp_period.Period_End_Date.EXTEND(i);
8095 x_atp_period.From_Location_Id.EXTEND(i);
8096 x_atp_period.From_Organization_Id.EXTEND(i);
8097 x_atp_period.Ship_Method.EXTEND(i);
8098 x_atp_period.To_Location_Id.EXTEND(i);
8099 x_atp_period.To_Organization_Id.EXTEND(i);
8100 x_atp_period.Uom.EXTEND(i);
8101
8102 FOR j IN 1..(i-1) LOOP
8103 x_atp_period.Period_End_Date(j) :=
8104 x_atp_period.Period_Start_Date(j+1) - 1;
8105 END LOOP;
8106
8107 EXCEPTION
8108 WHEN OTHERS THEN
8109 IF PG_DEBUG in ('Y', 'C') THEN
8110 msc_sch_wb.atp_debug('Get_Unalloc_Data_From_Sd_Temp: ' || 'Error code:' || to_char(sqlcode));
8111 END IF;
8112 x_return_status := FND_API.G_RET_STS_ERROR;
8113
8114 END Get_Unalloc_Data_From_Sd_Temp;
8115
8116 /*--Get_Period_From_Details_Temp--------------------------------------------
8117 | o Called from Compute_Allocation_Details in time phased pf scenarios.
8118 | o This function returns the period data from mrp_atp_details_temp.
8119 +-------------------------------------------------------------------------*/
8120 PROCEDURE Get_Period_From_Details_Temp(
8121 p_type IN INTEGER,
8122 p_inv_item_id IN NUMBER,
8123 p_org_id IN NUMBER,
8124 p_instance_id IN NUMBER,
8125 p_scenario_id IN NUMBER,
8126 p_level_id IN NUMBER,
8127 p_record_type IN PLS_INTEGER,
8128 p_session_id IN NUMBER,
8129 x_atp_period OUT NOCOPY MRP_ATP_PUB.ATP_Period_Typ,
8130 x_return_status OUT NOCOPY VARCHAR2
8131 ) IS
8132
8133 BEGIN
8134
8135 IF PG_DEBUG in ('Y', 'C') THEN
8136 msc_sch_wb.atp_debug('PROCEDURE Get_Period_From_Details_Temp');
8137 END IF;
8138
8139 -- initialize API return status to success
8140 x_return_status := FND_API.G_RET_STS_SUCCESS;
8141
8142 IF p_type = Demand_Priority THEN
8143 SELECT
8144 final.col1,
8145 final.col2,
8146 SUM(final.col3),
8147 SUM(final.col4),
8148 SUM(final.col5),
8149 SUM(final.col6),
8150 SUM(final.col7),
8151 SUM(final.col8),
8152 p_inv_item_id,
8153 p_org_id,
8154 p_instance_id,
8155 p_scenario_id,
8156 p_level_id,
8157 null, -- Initialize period end date with null
8158 0, -- Initialize backward_forward_quantity with 0
8159 0 -- Initialize cumulative quantity with 0
8160 BULK COLLECT INTO
8161 x_atp_period.Demand_Class,
8162 x_atp_period.Period_Start_Date,
8163 x_atp_period.Allocated_Supply_Quantity,
8164 x_atp_period.Supply_Adjustment_Quantity,
8165 x_atp_period.Total_Supply_Quantity,
8166 x_atp_period.Total_Demand_Quantity,
8167 x_atp_period.Total_Bucketed_Demand_Quantity,
8168 x_atp_period.Period_Quantity,
8169 x_atp_period.Inventory_Item_Id,
8170 x_atp_period.Organization_Id,
8171 x_atp_period.Identifier1,
8172 x_atp_period.Scenario_Id,
8173 x_atp_period.Level,
8174 x_atp_period.Period_End_Date,
8175 x_atp_period.Backward_Forward_Quantity,
8176 x_atp_period.Cumulative_Quantity
8177 FROM
8178 (
8179 SELECT DEMAND_CLASS col1, --Bug_3693892 added trunc
8180 trunc(SUPPLY_DEMAND_DATE) col2,
8181 DECODE(SUPPLY_DEMAND_TYPE, 2,
8182 DECODE(ORIGINAL_SUPPLY_DEMAND_TYPE,
8183 48, 0,
8184 ALLOCATED_QUANTITY),
8185 0) col3, -- Allocated Supply Quantity
8186 DECODE(SUPPLY_DEMAND_TYPE, 2,
8187 DECODE(ORIGINAL_SUPPLY_DEMAND_TYPE,
8188 48, ALLOCATED_QUANTITY,
8189 0),
8190 0) col4, -- Supply Adjustment Quantity
8191 DECODE(SUPPLY_DEMAND_TYPE, 2, ALLOCATED_QUANTITY, 0) col5, -- Total Supply
8192 DECODE(SUPPLY_DEMAND_TYPE, 1,
8193 DECODE(PF_DISPLAY_FLAG, 1,
8194 --Bug_3693892 added trunc
8195 DECODE(trunc(ORIGINAL_DEMAND_DATE), trunc(SUPPLY_DEMAND_DATE),
8196 ORIGINAL_DEMAND_QUANTITY, 0),
8197 0),
8198 0) col6, -- Total Demand
8199 DECODE(SUPPLY_DEMAND_TYPE, 1, ALLOCATED_QUANTITY, 0) col7, -- Total Bucketed Demand
8200 ALLOCATED_QUANTITY col8 -- Period Quantity
8201 FROM
8202 MRP_ATP_DETAILS_TEMP
8203 WHERE
8204 SESSION_ID = p_session_id
8205 AND RECORD_TYPE = p_record_type
8206
8207 UNION ALL
8208
8209 SELECT DEMAND_CLASS col1,
8210 trunc(ORIGINAL_DEMAND_DATE) col2, --Bug_3693892 added trunc
8211 0 col3, -- Allocated Supply Quantity
8212 0 col4, -- Supply Adjustment Quantity
8213 0 col5, -- Total Supply
8214 ORIGINAL_DEMAND_QUANTITY col6, -- Total Demand
8215 0 col7, -- Total Bucketed Demand
8216 0 col8 -- Period Quantity
8217 FROM
8218 MRP_ATP_DETAILS_TEMP
8219 WHERE
8220 SESSION_ID = p_session_id
8221 AND RECORD_TYPE = p_record_type
8222 AND SUPPLY_DEMAND_TYPE = 1
8223 AND PF_DISPLAY_FLAG = 1
8224 AND trunc(SUPPLY_DEMAND_DATE) <> trunc(ORIGINAL_DEMAND_DATE) --Bug_3693892 added trunc
8225 ) final
8226 GROUP BY
8227 final.col1,
8228 final.col2,
8229 p_inv_item_id,
8230 p_org_id,
8231 p_instance_id,
8232 p_scenario_id,
8233 p_level_id
8234 ORDER BY
8235 final.col1,
8236 final.col2
8237 ;
8238 ELSIF p_type = User_Defined_DC THEN
8239 SELECT
8240 final.col1,
8241 final.col2,
8242 SUM(final.col3),
8243 SUM(final.col4),
8244 SUM(final.col5),
8245 SUM(final.col6),
8246 p_inv_item_id,
8247 p_org_id,
8248 p_instance_id,
8249 p_scenario_id,
8250 p_level_id,
8251 null,
8252 0,
8253 0,
8254 final.col7,
8255 SUM(final.col8),
8256 SUM(final.col9),
8257 SUM(final.col10),
8258 SUM(final.col11),
8259 final.col12
8260 BULK COLLECT INTO
8261 x_atp_period.Demand_Class,
8262 x_atp_period.Period_Start_Date,
8263 x_atp_period.Total_Supply_Quantity,
8264 x_atp_period.Total_Demand_Quantity,
8265 x_atp_period.Total_Bucketed_Demand_Quantity,
8266 x_atp_period.Period_Quantity,
8267 x_atp_period.Inventory_Item_Id,
8268 x_atp_period.Organization_Id,
8269 x_atp_period.Identifier1,
8270 x_atp_period.Scenario_Id,
8271 x_atp_period.Level,
8272 x_atp_period.Period_End_Date,
8273 x_atp_period.Cumulative_Quantity,
8274 x_atp_period.Demand_Adjustment_Quantity,
8275 x_atp_period.Identifier2,
8276 x_atp_period.Unallocated_Supply_Quantity,
8277 x_atp_period.Unallocated_Demand_Quantity,
8278 x_atp_period.Unalloc_Bucketed_Demand_Qty,
8279 x_atp_period.Unallocated_Net_Quantity,
8280 x_atp_period.Identifier4
8281 FROM
8282 (
8283 SELECT DEMAND_CLASS col1,
8284 trunc(SUPPLY_DEMAND_DATE) col2, --Bug_3693892 added trunc
8285 DECODE(SUPPLY_DEMAND_TYPE, 2, ALLOCATED_QUANTITY, 0) col3,
8286 DECODE(SUPPLY_DEMAND_TYPE, 1,
8287 DECODE(PF_DISPLAY_FLAG, 1,
8288 --Bug_3693892 added trunc
8289 DECODE(trunc(ORIGINAL_DEMAND_DATE), trunc(SUPPLY_DEMAND_DATE),
8290 ORIGINAL_DEMAND_QUANTITY, 0),
8291 0),
8292 0) col4, -- Total Demand
8293 DECODE(SUPPLY_DEMAND_TYPE, 1, ALLOCATED_QUANTITY, 0) col5, -- Total Bucketed Demand
8294 ALLOCATED_QUANTITY col6,
8295 IDENTIFIER2 col7,
8296 DECODE(SUPPLY_DEMAND_TYPE, 2, UNALLOCATED_QUANTITY, 0) col8,
8297 DECODE(SUPPLY_DEMAND_TYPE, 1,
8298 DECODE(PF_DISPLAY_FLAG, 1,
8299 --Bug_3693892 added trunc
8300 DECODE(trunc(ORIGINAL_DEMAND_DATE), trunc(SUPPLY_DEMAND_DATE),
8301 SUPPLY_DEMAND_QUANTITY, 0),
8302 0),
8303 0) col9, -- Unallocated Demand
8304 DECODE(SUPPLY_DEMAND_TYPE, 1, UNALLOCATED_QUANTITY, 0) col10, -- Unallocated Bucketed Demand
8305 UNALLOCATED_QUANTITY col11, -- Unallocated Net
8306 IDENTIFIER4 col12
8307 FROM MRP_ATP_DETAILS_TEMP
8308 WHERE SESSION_ID = p_session_id
8309 AND RECORD_TYPE = p_record_type
8310
8311 UNION ALL
8312
8313 SELECT DEMAND_CLASS col1,
8314 trunc(ORIGINAL_DEMAND_DATE) col2, --Bug_3693892 added trunc
8315 0 col3,
8316 ORIGINAL_DEMAND_QUANTITY col4, -- Total Demand
8317 0 col5,
8318 0 col6,
8319 IDENTIFIER2 col7,
8320 0 col8, -- Period Quantity
8321 SUPPLY_DEMAND_QUANTITY col9,
8322 0 col10,
8323 0 col11,
8324 IDENTIFIER4 col12
8325 FROM
8326 MRP_ATP_DETAILS_TEMP
8327 WHERE
8328 SESSION_ID = p_session_id
8329 AND RECORD_TYPE = p_record_type
8330 AND SUPPLY_DEMAND_TYPE = 1
8331 AND PF_DISPLAY_FLAG = 1
8332 AND trunc(SUPPLY_DEMAND_DATE) <> trunc(ORIGINAL_DEMAND_DATE) --Bug_3693892 added trunc
8333 ) final
8334 GROUP BY
8335 final.col1,
8336 final.col2,
8337 p_inv_item_id,
8338 p_org_id,
8339 p_instance_id,
8340 p_scenario_id,
8341 p_level_id,
8342 final.col7,
8343 final.col12
8344 ORDER BY
8345 final.col7 asc,
8346 final.col12 desc,
8347 final.col1 asc,
8348 final.col2
8349 ;
8350 ELSIF p_type = User_Defined_CC THEN
8351 SELECT
8352 final.col1,
8353 final.col2,
8354 SUM(final.col3),
8355 SUM(final.col4),
8356 SUM(final.col5),
8357 SUM(final.col6),
8358 p_inv_item_id,
8359 p_org_id,
8360 p_instance_id,
8361 p_scenario_id,
8362 p_level_id,
8363 null,
8364 0,
8365 0,
8366 final.col7,
8367 final.col8,
8368 final.col9,
8369 final.col10,
8370 SUM(final.col11),
8371 SUM(final.col12),
8372 SUM(final.col13),
8373 SUM(final.col14),
8374 final.col15
8375 BULK COLLECT INTO
8376 x_atp_period.Demand_Class,
8377 x_atp_period.Period_Start_Date,
8378 x_atp_period.Total_Supply_Quantity,
8379 x_atp_period.Total_Demand_Quantity,
8380 x_atp_period.Total_Bucketed_Demand_Quantity,
8381 x_atp_period.Period_Quantity,
8382 x_atp_period.Inventory_Item_Id,
8383 x_atp_period.Organization_Id,
8384 x_atp_period.Identifier1,
8385 x_atp_period.Scenario_Id,
8386 x_atp_period.Level,
8387 x_atp_period.Period_End_Date,
8388 x_atp_period.Cumulative_Quantity,
8389 x_atp_period.Demand_Adjustment_Quantity,
8390 x_atp_period.Identifier2,
8391 x_atp_period.Identifier4,
8392 x_atp_period.Class,
8393 x_atp_period.Customer_Id,
8394 x_atp_period.Unallocated_Supply_Quantity,
8395 x_atp_period.Unallocated_Demand_Quantity,
8396 x_atp_period.Unalloc_Bucketed_Demand_Qty,
8397 x_atp_period.Unallocated_Net_Quantity,
8398 x_atp_period.Customer_Site_Id
8399 FROM
8400 (
8401 SELECT DEMAND_CLASS col1, --Bug_3693892 added trunc
8402 trunc(SUPPLY_DEMAND_DATE) col2,
8403 DECODE(SUPPLY_DEMAND_TYPE, 2, ALLOCATED_QUANTITY, 0) col3,
8404 DECODE(SUPPLY_DEMAND_TYPE, 1,
8405 DECODE(PF_DISPLAY_FLAG, 1,
8406 --Bug_3693892 added trunc
8407 DECODE(trunc(ORIGINAL_DEMAND_DATE), trunc(SUPPLY_DEMAND_DATE),
8408 ORIGINAL_DEMAND_QUANTITY, 0),
8409 0),
8410 0) col4, -- Total Demand
8411 DECODE(SUPPLY_DEMAND_TYPE, 1, ALLOCATED_QUANTITY, 0) col5, -- Total Bucketed Demand
8412 ALLOCATED_QUANTITY col6,
8413 IDENTIFIER2 col7,
8414 IDENTIFIER4 col8,
8415 CLASS col9,
8416 CUSTOMER_ID col10,
8417 DECODE(SUPPLY_DEMAND_TYPE, 2, UNALLOCATED_QUANTITY, 0) col11,
8418 DECODE(SUPPLY_DEMAND_TYPE, 1,
8419 DECODE(PF_DISPLAY_FLAG, 1,
8420 --Bug_3693892 added trunc
8421 DECODE(trunc(ORIGINAL_DEMAND_DATE), trunc(SUPPLY_DEMAND_DATE),
8422 SUPPLY_DEMAND_QUANTITY, 0),
8423 0),
8424 0) col12, -- Unallocated Demand
8425 DECODE(SUPPLY_DEMAND_TYPE, 1, UNALLOCATED_QUANTITY, 0) col13, -- Unallocated Bucketed Demand
8426 UNALLOCATED_QUANTITY col14, -- Unallocated Net
8427 CUSTOMER_SITE_ID col15
8428 FROM MRP_ATP_DETAILS_TEMP
8429 WHERE SESSION_ID = p_session_id
8430 AND RECORD_TYPE = p_record_type
8431
8432 UNION ALL
8433
8434 SELECT DEMAND_CLASS col1,
8435 trunc(ORIGINAL_DEMAND_DATE) col2, --Bug_3693892 added trunc
8436 0 col3,
8437 ORIGINAL_DEMAND_QUANTITY col4, -- Total Demand
8438 0 col5,
8439 0 col6,
8440 IDENTIFIER2 col7,
8441 IDENTIFIER4 col8,
8442 CLASS col9,
8443 CUSTOMER_ID col10,
8444 0 col11,
8445 SUPPLY_DEMAND_QUANTITY col12,
8446 0 col13,
8447 0 col14,
8448 CUSTOMER_SITE_ID col15
8449 FROM
8450 MRP_ATP_DETAILS_TEMP
8451 WHERE
8452 SESSION_ID = p_session_id
8453 AND RECORD_TYPE = p_record_type
8454 AND SUPPLY_DEMAND_TYPE = 1
8455 AND PF_DISPLAY_FLAG = 1
8456 AND trunc(SUPPLY_DEMAND_DATE) <> trunc(ORIGINAL_DEMAND_DATE) --Bug_3693892 added trunc
8457 ) final
8458 GROUP BY
8459 final.col1,
8460 final.col2,
8461 p_inv_item_id,
8462 p_org_id,
8463 p_instance_id,
8464 p_scenario_id,
8465 p_level_id,
8466 final.col7,
8467 final.col8,
8468 final.col9,
8469 final.col10,
8470 final.col15
8471 ORDER BY
8472 trunc(final.col7,-3), -- Customer class priority
8473 final.col9, -- Customer class
8474 trunc(final.col7,-2), -- Customer priority
8475 final.col10, -- Customer
8476 final.col7, -- Customer site priority
8477 final.col15,
8478 final.col2
8479 ;
8480 END IF;
8481
8482 EXCEPTION
8483 WHEN OTHERS THEN
8484 IF PG_DEBUG in ('Y', 'C') THEN
8485 msc_sch_wb.atp_debug('Get_Period_From_Details_Temp: ' || 'Error code:' || to_char(sqlcode));
8486 END IF;
8487 x_return_status := FND_API.G_RET_STS_ERROR;
8488
8489 END Get_Period_From_Details_Temp;
8490
8491 /*--Get_Pf_Atp_Item_Id------------------------------------------------------
8492 | o This function returns the source id of the family item if the item
8493 | passed belongs to an atpable family.
8494 | o Otherwise it returns the same item id.
8495 +-------------------------------------------------------------------------*/
8496 FUNCTION Get_Pf_Atp_Item_Id(
8497 p_instance_id IN NUMBER,
8498 p_plan_id IN NUMBER,
8499 p_inventory_item_id IN NUMBER,
8500 p_organization_id IN NUMBER
8501 )
8502 RETURN NUMBER
8503 IS
8504 l_pf_atp_item_id NUMBER;
8505
8506 BEGIN
8507 IF PG_DEBUG in ('Y', 'C') THEN
8508 msc_sch_wb.atp_debug('*********Begin function Get_Pf_Atp_Item_Id ********');
8509 msc_sch_wb.atp_debug('Get_Pf_Atp_Item_Id: ' || 'p_instance_id = ' ||to_char(p_instance_id));
8510 msc_sch_wb.atp_debug('Get_Pf_Atp_Item_Id: ' || 'p_plan_id = ' ||to_char(p_plan_id));
8511 msc_sch_wb.atp_debug('Get_Pf_Atp_Item_Id: ' || 'p_inventory_item_id = ' ||to_char(p_inventory_item_id));
8512 msc_sch_wb.atp_debug('Get_Pf_Atp_Item_Id: ' || 'p_organization_id = ' ||to_char(p_organization_id));
8513 END IF;
8514
8515 SELECT DECODE(i2.bom_item_type,
8516 5, DECODE(i2.atp_flag,
8517 'N', i1.sr_inventory_item_id,
8518 i2.sr_inventory_item_id),
8519 i1.sr_inventory_item_id
8520 )
8521 INTO l_pf_atp_item_id
8522 FROM msc_system_items i2,
8523 msc_system_items i1
8524 WHERE i1.sr_inventory_item_id = p_inventory_item_id
8525 AND i1.organization_id = p_organization_id
8526 AND i1.plan_id = p_plan_id
8527 AND i1.sr_instance_id = p_instance_id
8528 AND i2.inventory_item_id = DECODE(i1.product_family_id,
8529 NULL, i1.inventory_item_id,
8530 -23453, i1.inventory_item_id,
8531 i1.product_family_id)
8532 AND i2.organization_id = i1.organization_id
8533 AND i2.sr_instance_id = i1.sr_instance_id
8534 AND i2.plan_id = i1.plan_id;
8535
8536 IF PG_DEBUG in ('Y', 'C') THEN
8537 msc_sch_wb.atp_debug('Get_Pf_Atp_Item_Id: ' || 'PF Item Id = ' ||to_char(l_pf_atp_item_id));
8538 msc_sch_wb.atp_debug('*********End function Get_Pf_Atp_Item_Id ********');
8539 END IF;
8540
8541 return l_pf_atp_item_id;
8542
8543 EXCEPTION WHEN NO_DATA_FOUND THEN
8544 return p_inventory_item_id;
8545
8546 END Get_Pf_Atp_Item_Id;
8547
8548 /*--Get_Atf_Date------------------------------------------------------------
8549 | o This function returns the ATF date for item-org-instance-plan
8550 | combination passed.
8551 +-------------------------------------------------------------------------*/
8552 FUNCTION Get_Atf_Date(
8553 p_instance_id IN NUMBER,
8554 p_inventory_item_id IN NUMBER,
8555 p_organization_id IN NUMBER,
8556 p_plan_id IN NUMBER
8557 )
8558 RETURN DATE
8559 IS
8560 l_atf_date DATE;
8561
8562 BEGIN
8563 IF PG_DEBUG in ('Y', 'C') THEN
8564 msc_sch_wb.atp_debug('Begin Get_Atf_Date');
8565 msc_sch_wb.atp_debug('Get_Atf_Date : p_instance_id = ' || p_instance_id);
8566 msc_sch_wb.atp_debug('Get_Atf_Date : p_inventory_item_id = ' || p_inventory_item_id);
8567 msc_sch_wb.atp_debug('Get_Atf_Date : p_organization_id = ' || p_organization_id);
8568 msc_sch_wb.atp_debug('Get_Atf_Date : p_plan_id = ' || p_plan_id);
8569 END IF;
8570
8571 SELECT i.aggregate_time_fence_date
8572 INTO l_atf_date
8573 FROM msc_system_items i
8574 WHERE i.plan_id = p_plan_id
8575 AND i.sr_instance_id = p_instance_id
8576 AND i.organization_id = p_organization_id
8577 AND i.sr_inventory_item_id = p_inventory_item_id;
8578
8579 IF PG_DEBUG in ('Y', 'C') THEN
8580 msc_sch_wb.atp_debug('Get_Atf_Date : ATF Date = ' || l_atf_date);
8581 END IF;
8582
8583 return l_atf_date;
8584
8585 EXCEPTION
8586 WHEN NO_DATA_FOUND THEN
8587 return null;
8588
8589 END Get_Atf_Date;
8590
8591 /*--Get_Atf_Days------------------------------------------------------------
8592 | o This function returns the ATF days for item-org-instance-plan
8593 | combination passed.
8594 +-------------------------------------------------------------------------*/
8595 FUNCTION Get_Atf_Days(
8596 p_instance_id IN NUMBER,
8597 p_inventory_item_id IN NUMBER,
8598 p_organization_id IN NUMBER
8599 )
8600 RETURN NUMBER
8601 IS
8602 l_atf_days NUMBER;
8603
8604 BEGIN
8605 IF PG_DEBUG in ('Y', 'C') THEN
8606 msc_sch_wb.atp_debug('Begin Get_Atf_Days');
8607 msc_sch_wb.atp_debug('Get_Atf_Days : p_instance_id = ' || p_instance_id);
8608 msc_sch_wb.atp_debug('Get_Atf_Days : p_inventory_item_id = ' || p_inventory_item_id);
8609 msc_sch_wb.atp_debug('Get_Atf_Days : p_organization_id = ' || p_organization_id);
8610 END IF;
8611
8612 SELECT DECODE(r.aggregate_time_fence_code,
8613 1, NULL,
8614 2, i2.demand_time_fence_days,
8615 3, i2.planning_time_fence_days,
8616 4, r.aggregate_time_fence
8617 )
8618 INTO l_atf_days
8619 FROM msc_system_items i2,
8620 msc_system_items i1,
8621 msc_atp_rules r,
8622 msc_trading_partners tp
8623 WHERE i1.inventory_item_id = p_inventory_item_id
8624 AND i1.organization_id = p_organization_id
8625 AND i1.plan_id = -1
8626 AND i1.sr_instance_id = p_instance_id
8627 AND i2.inventory_item_id = NVL(i1.product_family_id,
8628 i1.inventory_item_id)
8629 AND i2.organization_id = i1.organization_id
8630 AND i2.sr_instance_id = i1.sr_instance_id
8631 AND i2.plan_id = i1.plan_id
8632 AND i2.bom_item_type = 5
8633 AND i2.atp_flag = 'Y'
8634 AND tp.sr_tp_id = i2.organization_id
8635 AND tp.sr_instance_id = i2.sr_instance_id
8636 AND tp.partner_type = 3
8637 AND r.sr_instance_id = tp.sr_instance_id
8638 AND r.rule_id = NVL(i2.atp_rule_id, tp.default_atp_rule_id);
8639
8640 IF PG_DEBUG in ('Y', 'C') THEN
8641 msc_sch_wb.atp_debug('Get_Atf_Days : ATF Days = ' || l_atf_days);
8642 END IF;
8643
8644 return l_atf_days;
8645
8646 EXCEPTION
8647 WHEN NO_DATA_FOUND THEN
8648 IF PG_DEBUG in ('Y', 'C') THEN
8649 msc_sch_wb.atp_debug('Get_Atf_Days : ATF Days = ' || l_atf_days);
8650 END IF;
8651 return null;
8652
8653 END Get_Atf_Days;
8654
8655 /*--Get_Family_Item_Info----------------------------------------------------
8656 | o This procedure returns the source id, destination id and ATF date
8657 | of the family item if the item passed belongs to an atpable family.
8658 +-------------------------------------------------------------------------*/
8659 PROCEDURE Get_Family_Item_Info(
8660 p_instance_id IN NUMBER,
8661 p_plan_id IN NUMBER,
8662 p_inventory_item_id IN NUMBER,
8663 p_organization_id IN NUMBER,
8664 p_family_id OUT NOCOPY NUMBER,
8665 p_sr_family_id OUT NOCOPY NUMBER,
8666 p_atf_date OUT NOCOPY DATE,
8667 --bug3700564 added family name
8668 p_family_name OUT NOCOPY VARCHAR2,
8669 x_return_status OUT NOCOPY VARCHAR2
8670 )
8671 IS
8672
8673
8674 BEGIN
8675 IF PG_DEBUG in ('Y', 'C') THEN
8676 msc_sch_wb.atp_debug('*********Begin procedure Get_Family_Item_Info ********');
8677 msc_sch_wb.atp_debug('Get_Family_Item_Info: ' || 'p_instance_id = ' ||to_char(p_instance_id));
8678 msc_sch_wb.atp_debug('Get_Family_Item_Info: ' || 'p_plan_id = ' ||to_char(p_plan_id));
8679 msc_sch_wb.atp_debug('Get_Family_Item_Info: ' || 'p_inventory_item_id = ' ||to_char(p_inventory_item_id));
8680 msc_sch_wb.atp_debug('Get_Family_Item_Info: ' || 'p_organization_id = ' ||to_char(p_organization_id));
8681 END IF;
8682
8683 -- Initializing API return code
8684 x_return_status := FND_API.G_RET_STS_SUCCESS;
8685
8686 SELECT DECODE(i2.bom_item_type,
8687 5, DECODE(i2.atp_flag,
8688 'N', i1.inventory_item_id,
8689 i2.inventory_item_id),
8690 i1.inventory_item_id
8691 ),
8692 DECODE(i2.bom_item_type,
8693 5, DECODE(i2.atp_flag,
8694 'N', i1.sr_inventory_item_id,
8695 i2.sr_inventory_item_id),
8696 i1.sr_inventory_item_id
8697 ),
8698 i1.aggregate_time_fence_date,
8699 i2.item_name --bug3700564
8700 INTO p_family_id,
8701 p_sr_family_id,
8702 p_atf_date,
8703 p_family_name --bug3700564
8704 FROM msc_system_items i2,
8705 msc_system_items i1
8706 WHERE i1.inventory_item_id = p_inventory_item_id
8707 AND i1.organization_id = p_organization_id
8708 AND i1.plan_id = p_plan_id
8709 AND i1.sr_instance_id = p_instance_id
8710 AND i2.inventory_item_id = DECODE(i1.product_family_id,
8711 NULL, i1.inventory_item_id,
8712 -23453, i1.inventory_item_id,
8713 i1.product_family_id)
8714 AND i2.organization_id = i1.organization_id
8715 AND i2.sr_instance_id = i1.sr_instance_id
8716 AND i2.plan_id = i1.plan_id;
8717
8718 IF PG_DEBUG in ('Y', 'C') THEN
8719 msc_sch_wb.atp_debug('Get_Family_Item_Info: ' || 'ATF Date = ' ||to_char(p_atf_date));
8720 msc_sch_wb.atp_debug('*********End procedure Get_Family_Item_Info ********');
8721 END IF;
8722
8723 EXCEPTION
8724
8725 -- bug 5574547
8726 WHEN NO_DATA_FOUND THEN
8727 SELECT i1.inventory_item_id,
8728 i1.sr_inventory_item_id,
8729 i1.aggregate_time_fence_date,
8730 i1.item_name
8731 INTO p_family_id,
8732 p_sr_family_id,
8733 p_atf_date,
8734 p_family_name
8735 FROM msc_system_items i1
8736 WHERE i1.inventory_item_id = p_inventory_item_id
8737 AND i1.organization_id = p_organization_id
8738 AND i1.plan_id = p_plan_id
8739 AND i1.sr_instance_id = p_instance_id;
8740
8741 IF PG_DEBUG in ('Y', 'C') THEN
8742 msc_sch_wb.atp_debug('Get_Family_Item_Info: ' || 'Passing back the values originally sent to API');
8743 END IF;
8744
8745
8746 WHEN OTHERS THEN
8747 IF PG_DEBUG in ('Y', 'C') THEN
8748 msc_sch_wb.atp_debug('Get_Family_Item_Info: ' || 'Error occurred: ' || to_char(sqlcode) || ':' || SQLERRM);
8749 END IF;
8750 x_return_status := FND_API.G_RET_STS_ERROR;
8751
8752 END Get_Family_Item_Info;
8753
8754 /*--Get_PF_Plan_Info----------------------------------------------------------
8755 | o This procedure finds the plan to be used in PF scenarios
8756 | o Logic to select plan is as follows:
8757 | -
8758 +---------------------------------------------------------------------------*/
8759 PROCEDURE Get_PF_Plan_Info(
8760 p_instance_id IN NUMBER,
8761 p_member_item_id IN NUMBER,
8762 p_family_item_id IN NUMBER,
8763 p_org_id IN NUMBER,
8764 p_demand_class IN VARCHAR2,
8765 p_atf_date OUT NOCOPY DATE,
8766 p_error_code OUT NOCOPY NUMBER,
8767 x_return_status OUT NOCOPY VARCHAR2,
8768 p_parent_plan_id IN NUMBER DEFAULT NULL --bug3510475
8769 ) IS
8770 -- local variables
8771
8772
8773 BEGIN
8774 IF PG_DEBUG in ('Y', 'C') THEN
8775 msc_sch_wb.atp_debug('*********Begin procedure Get_PF_Plan_Info ********');
8776 msc_sch_wb.atp_debug('p_instance_id := ' || p_instance_id);
8777 msc_sch_wb.atp_debug('p_member_item_id := ' || p_member_item_id);
8778 msc_sch_wb.atp_debug('p_family_item_id := ' || p_family_item_id);
8779 msc_sch_wb.atp_debug('p_org_id := ' || p_org_id);
8780 msc_sch_wb.atp_debug('p_demand_class := ' || p_demand_class);
8781
8782 END IF;
8783
8784 -- initialize API return status to success
8785 x_return_status := FND_API.G_RET_STS_SUCCESS;
8786
8787 /* First get member item's plan*/
8788 MSC_ATP_PROC.get_global_plan_info(
8789 p_instance_id,
8790 p_member_item_id,
8791 p_org_id,
8792 p_demand_class,
8793 p_parent_plan_id --bug3510475
8794 );
8795
8796 IF (MSC_ATP_PVT.G_PLAN_INFO_REC.plan_id = -300) THEN
8797 IF PG_DEBUG in ('Y', 'C') THEN
8798 msc_sch_wb.atp_debug('Get_PF_Plan_Info: ' || 'ATP Downtime');
8799 END IF;
8800
8801 x_return_status := FND_API.G_RET_STS_ERROR;
8802 MSC_ATP_PVT.G_DOWNTIME_HIT := 'Y';
8803 p_error_code := MSC_ATP_PVT.PLAN_DOWN_TIME;
8804 RAISE NO_DATA_FOUND;
8805 END IF;
8806
8807 IF PG_DEBUG in ('Y', 'C') THEN
8808 msc_sch_wb.atp_debug('Get_PF_Plan_Info: ' || 'MSC_ATP_PVT.G_PLAN_INFO_REC.plan_id = '||MSC_ATP_PVT.G_PLAN_INFO_REC.plan_id);
8809 END IF;
8810
8811 -- ATP4drp begin
8812 IF NVL(MSC_ATP_PVT.G_PLAN_INFO_REC.plan_type, 1) = 5 THEN
8813 IF PG_DEBUG in ('Y', 'C') THEN
8814 msc_sch_wb.atp_debug('----- ATP4drp Specific Debug Messages -----');
8815 msc_sch_wb.atp_debug('Get_PF_Plan_Info: ' || 'PF and Allocated ATP not applicable for DRP plans');
8816 msc_sch_wb.atp_debug('Get_PF_Plan_Info: ' || 'ATF date will not be obtained.');
8817 msc_sch_wb.atp_debug('----- ATP4drp Specific Debug Messages -----');
8818 END IF;
8819 ELSIF (p_family_item_id <> p_member_item_id) THEN
8820 -- plan is not a DRP plan
8821 -- ATP4drp end
8822 /* Now Get ATF Date in PF case to check whether this is time phased atp case or old PF case*/
8823 p_atf_date := MSC_ATP_PF.Get_Atf_Date(
8824 p_instance_id,
8825 p_member_item_id,
8826 p_org_id,
8827 MSC_ATP_PVT.G_PLAN_INFO_REC.plan_id
8828 );
8829
8830 IF PG_DEBUG in ('Y', 'C') THEN
8831 msc_sch_wb.atp_debug('Get_PF_Plan_Info: ' || 'ATF Date = '||p_atf_date);
8832 END IF;
8833
8834 /* check if it is time phased atp scenario, if yes then we are done
8835 else look for family item's plan*/
8836 IF p_atf_date is not null THEN
8837 IF PG_DEBUG in ('Y', 'C') THEN
8838 msc_sch_wb.atp_debug('Get_PF_Plan_Info: ' || '*** Time Phased ATP Scenario *** ');
8839 END IF;
8840 ELSE
8841 IF PG_DEBUG in ('Y', 'C') THEN
8842 msc_sch_wb.atp_debug('Schedule: ' || '*** Product Family(non-time phased) ATP Scenario *** ');
8843 msc_sch_wb.atp_debug('Get_PF_Plan_Info: ' || 'Now trying to find old plan for family item...');
8844 END IF;
8845
8846 MSC_ATP_PROC.get_global_plan_info(
8847 p_instance_id,
8848 p_family_item_id,
8849 p_org_id,
8850 p_demand_class,
8851 p_parent_plan_id --bug3510475
8852 );
8853
8854 IF (MSC_ATP_PVT.G_PLAN_INFO_REC.plan_id = -300) THEN
8855 IF PG_DEBUG in ('Y', 'C') THEN
8856 msc_sch_wb.atp_debug('Get_PF_Plan_Info: ' || 'ATP Downtime');
8857 END IF;
8858
8859 x_return_status := FND_API.G_RET_STS_ERROR;
8860 MSC_ATP_PVT.G_DOWNTIME_HIT := 'Y';
8861 p_error_code := MSC_ATP_PVT.PLAN_DOWN_TIME;
8862 RAISE NO_DATA_FOUND;
8863 END IF;
8864 END IF;
8865 ELSE
8866 IF PG_DEBUG in ('Y', 'C') THEN
8867 msc_sch_wb.atp_debug('Get_PF_Plan_Info: ' || '*** Regular PDS ATP Scenario *** ');
8868 END IF;
8869 END IF;
8870
8871 IF PG_DEBUG in ('Y', 'C') THEN
8872 msc_sch_wb.atp_debug('*********End of procedure Get_PF_Plan_Info ********');
8873 END IF;
8874
8875 EXCEPTION
8876 WHEN OTHERS THEN
8877 IF PG_DEBUG in ('Y', 'C') THEN
8878 msc_sch_wb.atp_debug('Get_PF_Plan_Info: ' || 'Exception: ' || sqlerrm);
8879 msc_sch_wb.atp_debug('Get_PF_Plan_Info: ' || 'Error code:' || to_char(sqlcode));
8880 END IF;
8881 x_return_status := FND_API.G_RET_STS_ERROR;
8882
8883 END Get_PF_Plan_Info;
8884
8885 /*--Populate_ATF_Dates--------------------------------------------------------
8886 | o This procedure populate ATF dates for:
8887 | - All atpable family items having ATF setup.
8888 | - All atpable member items belonging to the above atpable families.
8889 | o Returns number of member items whose ATF dates were populated.
8890 +---------------------------------------------------------------------------*/
8891 PROCEDURE Populate_ATF_Dates(
8892 p_plan_id IN NUMBER,
8893 x_member_count OUT NOCOPY NUMBER,
8894 x_return_status OUT NOCOPY VARCHAR2
8895 ) IS
8896 -- local variables
8897 --bug3663487 start
8898 l_organization_id MRP_ATP_PUB.number_arr := MRP_ATP_PUB.number_arr();
8899 l_sr_instance_id MRP_ATP_PUB.number_arr := MRP_ATP_PUB.number_arr();
8900 l_inventory_item_id MRP_ATP_PUB.number_arr := MRP_ATP_PUB.number_arr();
8901 l_atf_date mrp_atp_pub.date_arr := mrp_atp_pub.date_arr();
8902 j NUMBER;
8903 k NUMBER;
8904 --bug3663487 end
8905
8906 BEGIN
8907 IF PG_DEBUG in ('Y', 'C') THEN
8908 msc_util.msc_log('*********Begin procedure Populate_ATF_Dates ********');
8909 msc_util.msc_log('Populate_ATF_Dates: ' || 'p_plan_id = ' ||to_char(p_plan_id));
8910 END IF;
8911
8912 -- initialize API return status to success
8913 x_return_status := FND_API.G_RET_STS_SUCCESS;
8914
8915 --bug3663487 start SQL ID 9426916 and 9426907
8916 SELECT c2.calendar_date,i2.organization_id,i2.sr_instance_id,i2.inventory_item_id
8917 BULK COLLECT INTO l_atf_date,l_organization_id,l_sr_instance_id,l_inventory_item_id
8918 FROM msc_plans mp,
8919 msc_plan_organizations po,
8920 msc_system_items i2,
8921 msc_trading_partners tp,
8922 msc_atp_rules r,
8923 msc_calendar_dates c1,
8924 msc_calendar_dates c2
8925 WHERE mp.plan_id = p_plan_id
8926 AND po.plan_id = mp.plan_id
8927 AND i2.organization_id = po.organization_id
8928 AND i2.sr_instance_id = po.sr_instance_id
8929 AND i2.plan_id = po.plan_id
8930 AND i2.bom_item_type = 5
8931 AND i2.atp_flag = 'Y'
8932 AND tp.sr_tp_id = i2.organization_id
8933 AND tp.sr_instance_id = i2.sr_instance_id
8934 AND tp.partner_type = 3
8935 AND r.sr_instance_id = tp.sr_instance_id
8936 AND r.rule_id = NVL(i2.atp_rule_id, tp.default_atp_rule_id)
8937 AND c1.sr_instance_id = r.sr_instance_id
8938 AND c1.calendar_date = trunc(mp.plan_start_date)
8939 AND c1.calendar_code = tp.calendar_code
8940 AND c1.exception_set_id = -1
8941 AND c2.sr_instance_id = c1.sr_instance_id
8942 AND c2.seq_num = c1.next_seq_num +
8943 DECODE(r.aggregate_time_fence_code,
8944 1, NULL,
8945 2, i2.demand_time_fence_days,
8946 3, i2.planning_time_fence_days,
8947 4, r.aggregate_time_fence
8948 )
8949 AND c2.calendar_code = c1.calendar_code
8950 AND c2.exception_set_id = -1;
8951
8952 IF PG_DEBUG in ('Y', 'C') THEN
8953 msc_util.msc_log('Populate_ATF_Dates: ' || 'l_inventory_item_id.COUNT = ' ||l_inventory_item_id.COUNT);
8954 END IF;
8955
8956 IF l_inventory_item_id IS NOT NULL AND l_inventory_item_id.COUNT > 0 THEN
8957
8958 FORALL j IN l_inventory_item_id.first.. l_inventory_item_id.last
8959 UPDATE msc_system_items i
8960 SET aggregate_time_fence_date = l_atf_date(j)
8961 WHERE i.plan_id = p_plan_id
8962 AND i.ORGANIZATION_ID = l_organization_id(j)
8963 AND i.SR_INSTANCE_ID = l_sr_instance_id(j)
8964 AND i.inventory_item_id = l_inventory_item_id(j);
8965
8966 FORALL k IN l_inventory_item_id.first.. l_inventory_item_id.last
8967 UPDATE msc_system_items i
8968 SET aggregate_time_fence_date = l_atf_date(k)
8969 WHERE i.plan_id = p_plan_id
8970 AND i.ORGANIZATION_ID = l_organization_id(k)
8971 AND i.SR_INSTANCE_ID = l_sr_instance_id(k)
8972 AND i.product_family_id = l_inventory_item_id(k);
8973
8974 x_member_count := SQL%ROWCOUNT;
8975
8976 END IF;
8977 --bug3663487 end
8978
8979 ----bug3663487 code commented for Performance fix
8980 /*
8981 -- populate ATF date for PF items
8982 UPDATE msc_system_items i
8983 SET aggregate_time_fence_date =
8984 (SELECT c2.calendar_date
8985 FROM msc_calendar_dates c2,
8986 msc_calendar_dates c1,
8987 msc_atp_rules r,
8988 msc_trading_partners tp,
8989 msc_plans mp,
8990 msc_system_items i2
8991 WHERE i2.inventory_item_id = i.inventory_item_id
8992 AND i2.organization_id = i.organization_id
8993 AND i2.sr_instance_id = i.sr_instance_id
8994 AND i2.plan_id = -1
8995 AND tp.sr_tp_id = i2.organization_id
8996 AND tp.sr_instance_id = i2.sr_instance_id
8997 AND tp.partner_type = 3
8998 AND mp.plan_id = p_plan_id
8999 AND r.sr_instance_id = tp.sr_instance_id
9000 AND r.rule_id = NVL(i2.atp_rule_id, tp.default_atp_rule_id)
9001 AND c1.sr_instance_id = r.sr_instance_id
9002 AND c1.calendar_date = mp.plan_start_date
9003 AND c1.calendar_code = tp.calendar_code
9004 AND c1.exception_set_id = -1
9005 AND c2.sr_instance_id = c1.sr_instance_id
9006 AND c2.seq_num = c1.next_seq_num +
9007 DECODE(r.aggregate_time_fence_code,
9008 1, NULL,
9009 2, i2.demand_time_fence_days,
9010 3, i2.planning_time_fence_days,
9011 4, r.aggregate_time_fence
9012 )
9013 AND c2.calendar_code = c1.calendar_code
9014 AND c2.exception_set_id = -1
9015 )
9016 WHERE i.plan_id = p_plan_id
9017 AND i.bom_item_type = 5
9018 AND i.atp_flag = 'Y';
9019
9020 -- populate ATF date for atpable member items
9021 UPDATE msc_system_items i
9022 SET aggregate_time_fence_date =
9023 (SELECT i2.aggregate_time_fence_date
9024 FROM msc_system_items i2
9025 WHERE i2.inventory_item_id = i.product_family_id
9026 AND i2.sr_instance_id = i.sr_instance_id
9027 AND i2.organization_id = i.organization_id
9028 AND i2.plan_id = i.plan_id
9029 AND i2.aggregate_time_fence_date is not null
9030 )
9031 WHERE i.plan_id = p_plan_id
9032 AND i.inventory_item_id <> DECODE(i.product_family_id,
9033 NULL, i.inventory_item_id,
9034 -23453, i.inventory_item_id,
9035 i.product_family_id)
9036 AND i.bom_item_type <> 5
9037 AND i.atp_flag = 'Y'
9038 AND EXISTS (SELECT 1
9039 FROM msc_system_items i2
9040 WHERE i2.inventory_item_id = i.product_family_id
9041 AND i2.sr_instance_id = i.sr_instance_id
9042 AND i2.organization_id = i.organization_id
9043 AND i2.plan_id = i.plan_id
9044 AND i2.aggregate_time_fence_date is not null
9045 );
9046 */
9047
9048 IF PG_DEBUG in ('Y', 'C') THEN
9049 msc_util.msc_log('Populate_ATF_Dates: ' || 'Member Count = ' ||to_char(x_member_count));
9050 msc_util.msc_log('*********End of procedure Populate_ATF_Dates ********');
9051 END IF;
9052
9053 EXCEPTION
9054 WHEN OTHERS THEN
9055 IF PG_DEBUG in ('Y', 'C') THEN
9056 msc_util.msc_log('Populate_ATF_Dates: ' || 'Exception: ' || sqlerrm);
9057 msc_util.msc_log('Populate_ATF_Dates: ' || 'Error code:' || to_char(sqlcode));
9058 END IF;
9059 x_return_status := FND_API.G_RET_STS_ERROR;
9060
9061 END Populate_ATF_Dates;
9062
9063 /*--Calculate_Alloc_Percentages-----------------------------------------------
9064 | o This procedure calculate allocation percentages for:
9065 | - All end demands for atpable items.
9066 | o Populate temp table with this information
9067 +---------------------------------------------------------------------------*/
9068 PROCEDURE Calculate_Alloc_Percentages(
9069 p_plan_id IN NUMBER,
9070 x_return_status OUT NOCOPY VARCHAR2
9071 ) IS
9072 -- local variables
9073 l_sysdate DATE;
9074 i NUMBER;
9075 l_plan_id NUMBER;
9076 l_ret_code NUMBER;
9077 l_summary_flag NUMBER;
9078 l_user_id NUMBER;
9079 dummy1 VARCHAR2(10);
9080 dummy2 VARCHAR2(10);
9081 l_alloc_atp VARCHAR2(1);
9082 l_applsys_schema VARCHAR2(10);
9083 l_err_msg VARCHAR2(1000);
9084 l_ind_tbspace VARCHAR2(30);
9085 l_insert_stmt VARCHAR2(8000);
9086 l_msc_schema VARCHAR2(30);
9087 l_other_dc VARCHAR2(30) := '-1';
9088 l_partition_name VARCHAR2(30);
9089 l_share_partition VARCHAR2(1);
9090 l_sql_stmt VARCHAR2(300);
9091 l_sql_stmt_1 VARCHAR2(16000);
9092 l_table_name VARCHAR2(30);
9093 l_tbspace VARCHAR2(30);
9094 l_temp_table VARCHAR2(30);
9095 l_plan_name varchar2(10);
9096 cur_handler NUMBER;
9097 rows_processed NUMBER;
9098 l_hash_size NUMBER := -1;
9099 l_sort_size NUMBER := -1;
9100 l_parallel_degree NUMBER := 1;
9101 l_excess_supply_by_dc VARCHAR2(1);
9102 l_return_status VARCHAR2(1);
9103
9104
9105 BEGIN
9106 IF PG_DEBUG in ('Y', 'C') THEN
9107 msc_util.msc_log('*********Begin procedure Calculate_Alloc_Percentages ********');
9108 msc_util.msc_log('Calculate_Alloc_Percentages: ' || 'p_plan_id = ' ||to_char(p_plan_id));
9109 END IF;
9110
9111 -- initialize API return status to success
9112 x_return_status := FND_API.G_RET_STS_SUCCESS;
9113
9114 /* populate allocated quantity for planned order at product family that are blown down as production forecasts*/
9115 insert into msc_alloc_temp(
9116 transaction_id,
9117 demand_class,
9118 supply_demand_quantity
9119 )
9120 (select sup.transaction_id,
9121 decode(d1.inventory_item_id, NULL, '-2', d1.demand_class),
9122 sum(peg1.allocated_quantity)
9123 from
9124 (select /*+ NO_MERGE */ distinct d.disposition_id transaction_id --13021736 perf issue
9125 from msc_demands d,
9126 msc_system_items msi
9127 where msi.plan_id = p_plan_id
9128 and msi.bom_item_type <> 5
9129 and NVL(msi.product_family_id, -23453) <> -23453 -- Bug 3629191
9130 --and msi.product_family_id is not null
9131 and msi.atp_flag = 'Y'
9132 and d.inventory_item_id = msi.inventory_item_id
9133 and d.organization_id = msi.organization_id
9134 and d.sr_instance_id = msi.sr_instance_id
9135 and d.plan_id = msi.plan_id
9136 and d.origination_type = 22
9137 ) sup,
9138 msc_full_pegging peg1,
9139 msc_demands d1
9140 where peg1.plan_id = p_plan_id
9141 and peg1.pegging_id = peg1.end_pegging_id
9142 and peg1.transaction_id = sup.transaction_id
9143 and d1.plan_id (+) = peg1.plan_id
9144 and d1.inventory_item_id (+) = peg1.inventory_item_id
9145 and d1.organization_id (+) = peg1.organization_id
9146 and d1.sr_instance_id (+) = peg1.sr_instance_id
9147 and d1.demand_id (+) = peg1.demand_id
9148 and d1.origination_type (+) not in (6, 10, 30)
9149 group by
9150 sup.transaction_id,
9151 decode(d1.inventory_item_id, NULL, '-2', d1.demand_class)
9152 );
9153
9154 -- update allocation percentages
9155 --changed update statement for bug3387166
9156 /* update msc_alloc_temp mat1
9157 set mat1.allocation_percent =
9158 mat1.supply_demand_quantity/(select sum(mat2.supply_demand_quantity)
9159 from msc_alloc_temp mat2
9160 where mat2.transaction_id = mat1.transaction_id
9161 ); */
9162 update msc_alloc_temp mat1
9163 set mat1.allocation_percent =
9164 (select mat1.supply_demand_quantity/sum(mat2.supply_demand_quantity)
9165 from msc_alloc_temp mat2
9166 where mat2.transaction_id = mat1.transaction_id
9167 );
9168
9169 IF PG_DEBUG in ('Y', 'C') THEN
9170 msc_util.msc_log('Calculate_Alloc_Percentages: ' || 'Row Count in MSC_ALLOC_TEMP = '|| SQL%ROWCOUNT);
9171 msc_util.msc_log('*********End of procedure Calculate_Alloc_Percentages ********');
9172 END IF;
9173
9174 EXCEPTION
9175 WHEN OTHERS THEN
9176 IF PG_DEBUG in ('Y', 'C') THEN
9177 msc_util.msc_log('Calculate_Alloc_Percentages: ' || 'Exception: ' || sqlerrm);
9178 msc_util.msc_log('Calculate_Alloc_Percentages: ' || 'Error code:' || to_char(sqlcode));
9179 END IF;
9180 x_return_status := FND_API.G_RET_STS_ERROR;
9181
9182 END Calculate_Alloc_Percentages;
9183
9184 /*--Pf_Post_Plan_Proc-----------------------------------------------------------------
9185 | o This procedure is called from Load_Plan_Sd procedure for ATP Post
9186 | Plan Processing (pre-allocation, supplies rollup and bucketing)
9187 | only if there is atleast one item having ATF date not null.
9188 | o It calls following private procedures:
9189 | - Prepare_Demands_Stmt1 - to prepare demands statement for:
9190 | : Pre-allocation and bucketing for demands pegged to excess
9191 | if it is demand priority AATP case.
9192 | : Bucketing if it is not demand priority AATP case.
9193 | - Prepare_Demands_Stmt2 - to prepare demands statement for pre-allocation
9194 | and bucketing for demands not pegged to excess if it is demand
9195 | priority AATP case.
9196 | - Prepare_Supplies_Stmt1 - to prepare supplies statement for:
9197 | : Preallocation and rollup for supplies pegged to excess/safety stock
9198 | if it is demand priority AATP case.
9199 | : Rollup if it is not demand priority AATP case.
9200 | - Prepare_Supplies_Stmt2 - to prepare supplies statement for
9201 | preallocation and rollup for supplies not pegged to excess/safety stock
9202 | if it is demand priority AATP case.
9203 | o Calls private procedure Update_Pf_Display_Flag procedure to update
9204 | Pf_Display_Flag to handle scenario when a demand on one side of ATF is
9205 | satisfied totally from supplies on the other side of ATF.
9206 +-----------------------------------------------------------------------------------*/
9207 PROCEDURE Pf_Post_Plan_Proc(
9208 ERRBUF OUT NOCOPY VARCHAR2,
9209 RETCODE OUT NOCOPY NUMBER,
9210 p_plan_id IN NUMBER,
9211 p_demand_priority IN VARCHAR2
9212 )
9213 IS
9214 -- local variables
9215 G_ERROR NUMBER := 1;
9216 G_SUCCESS NUMBER := 0;
9217 MAXVALUE CONSTANT NUMBER := 999999;
9218 l_retval BOOLEAN;
9219 l_sysdate DATE;
9220 i NUMBER;
9221 l_alloc_method NUMBER;
9222 l_class_hrchy NUMBER;
9223 l_count NUMBER;
9224 l_inv_ctp NUMBER;
9225 l_plan_id NUMBER;
9226 l_ret_code NUMBER;
9227 l_summary_flag NUMBER;
9228 l_user_id NUMBER;
9229 dummy1 VARCHAR2(10);
9230 dummy2 VARCHAR2(10);
9231 l_alloc_atp VARCHAR2(1);
9232 l_applsys_schema VARCHAR2(10);
9233 l_err_msg VARCHAR2(1000);
9234 l_ind_tbspace VARCHAR2(30);
9235 l_insert_stmt VARCHAR2(8000);
9236 l_msc_schema VARCHAR2(30);
9237 l_other_dc VARCHAR2(30) := '-1';
9238 l_partition_name VARCHAR2(30);
9239 l_share_partition VARCHAR2(1);
9240 l_sql_stmt VARCHAR2(300);
9241 l_sql_stmt_1 VARCHAR2(16000);
9242 l_table_name VARCHAR2(30);
9243 l_tbspace VARCHAR2(30);
9244 l_temp_table VARCHAR2(30);
9245 atp_summ_tab MRP_ATP_PUB.char30_arr :=
9246 MRP_ATP_PUB.char30_arr(
9247 'ALLOC_DEMANDS',
9248 'ALLOC_SUPPLIES'
9249 );
9250 l_plan_name varchar2(10);
9251 cur_handler NUMBER;
9252 rows_processed NUMBER;
9253 l_hash_size NUMBER := -1;
9254 l_sort_size NUMBER := -1;
9255 l_parallel_degree NUMBER := 1;
9256 l_excess_supply_by_dc VARCHAR2(1);
9257 l_return_status VARCHAR2(1);
9258 l_alloc_temp_table VARCHAR2(30);
9259 l_yes VARCHAR2(1) := 'Y';
9260 l_excess_dc VARCHAR2(30) := '-2';
9261
9262 BEGIN
9263 msc_util.msc_log('*********Begin procedure Pf_Post_Plan_Proc ********');
9264
9265 --project atp
9266 l_excess_supply_by_dc := NVL(FND_PROFILE.VALUE('MSC_EXCESS_SUPPLY_BY_DC'), 'N');
9267 msc_util.msc_log('l_excess_supply_by_dc := ' || l_excess_supply_by_dc);
9268
9269 BEGIN
9270 msc_util.msc_log('Calling custom procedure MSC_ATP_CUSTOM.Custom_Pre_Allocation...');
9271 MSC_ATP_CUSTOM.Custom_Pre_Allocation(p_plan_id);
9272 msc_util.msc_log('End MSC_ATP_CUSTOM.Custom_Pre_Allocation.');
9273 EXCEPTION
9274 WHEN OTHERS THEN
9275 msc_util.msc_log('Error in custom procedure call');
9276 msc_util.msc_log('Error Code: '|| sqlerrm);
9277 END;
9278 --project atp
9279
9280 msc_util.msc_log('begin Loading pre-allocation demand/supply data for plan: ' || p_plan_id);
9281 RETCODE := G_SUCCESS;
9282
9283 l_share_partition := fnd_profile.value('MSC_SHARE_PARTITIONS');
9284
9285 msc_util.msc_log('l_share_partition := ' || l_share_partition);
9286
9287 SELECT NVL(summary_flag,1), compile_designator
9288 INTO l_summary_flag, l_plan_name
9289 FROM msc_plans
9290 WHERE plan_id = p_plan_id;
9291
9292 IF NVL(l_summary_flag,1) = 2 THEN
9293 msc_util.msc_log('Another session is running post-plan allocation program for this plan');
9294 RETCODE := G_ERROR;
9295 RETURN;
9296 END IF;
9297
9298 l_retval := FND_INSTALLATION.GET_APP_INFO('FND', dummy1, dummy2, l_applsys_schema);
9299 SELECT a.oracle_username,
9300 sysdate,
9301 FND_GLOBAL.USER_ID
9302 INTO l_msc_schema,
9303 l_sysdate,
9304 l_user_id
9305 FROM fnd_oracle_userid a,
9306 fnd_product_installations b
9307 WHERE a.oracle_id = b.oracle_id
9308 AND b.application_id = 724;
9309
9310 FOR i in 1..atp_summ_tab.count LOOP
9311
9312 l_table_name := 'MSC_' || atp_summ_tab(i);
9313
9314 IF (l_share_partition = 'Y') THEN
9315 l_plan_id := MAXVALUE;
9316 ELSE
9317 l_plan_id := p_plan_id;
9318 END IF;
9319
9320 l_partition_name := atp_summ_tab(i)|| '_' || l_plan_id;
9321 msc_util.msc_log('l_partition_name := ' || l_partition_name);
9322
9323 BEGIN
9324 SELECT count(*)
9325 INTO l_count
9326 FROM all_tab_partitions
9327 WHERE table_name = l_table_name
9328 AND partition_name = l_partition_name
9329 AND table_owner = l_msc_schema;
9330 EXCEPTION
9331 WHEN OTHERS THEN
9332 msc_util.msc_log('Inside Exception');
9333 l_count := 0;
9334 END;
9335
9336 IF (l_count = 0) THEN
9337 FND_MESSAGE.SET_NAME('MSC', 'MSC_ATP_PLAN_PARTITION_MISSING');
9338 FND_MESSAGE.SET_TOKEN('PLAN_NAME', l_plan_name);
9339 FND_MESSAGE.SET_TOKEN('TABLE_NAME', 'MSC_' || atp_summ_tab(i));
9340 msc_util.msc_log(FND_MESSAGE.GET);
9341 RETCODE := G_ERROR;
9342 RETURN;
9343 END IF;
9344 END LOOP;
9345
9346 BEGIN
9347 update msc_plans
9348 set summary_flag = 2
9349 where plan_id = p_plan_id;
9350 commit;
9351 EXCEPTION
9352 WHEN OTHERS THEN
9353 ERRBUF := sqlerrm;
9354 RETCODE := G_ERROR;
9355 RETURN;
9356 END;
9357
9358 msc_util.msc_log('l_share_partition := ' || l_share_partition);
9359
9360 BEGIN
9361 SELECT NVL(pre_alloc_hash_size, -1),
9362 NVL(pre_alloc_sort_size, -1),
9363 NVL(pre_alloc_parallel_degree, 1)
9364 INTO l_hash_size,
9365 l_sort_size,
9366 l_parallel_degree
9367 FROM msc_atp_parameters
9368 WHERE rownum = 1;
9369 EXCEPTION
9370 WHEN others THEN
9371 msc_util.msc_log('Error getting performance param: ' || sqlcode || ': ' || sqlerrm);
9372 l_hash_size := -1;
9373 l_sort_size := -1;
9374 l_parallel_degree := 1;
9375 END;
9376
9377 msc_util.msc_log('Hash: ' || l_hash_size || ' Sort: ' || l_sort_size || ' Parallel: ' || l_parallel_degree);
9378
9379 IF NVL(l_hash_size, -1) <> -1 THEN
9380 l_sql_stmt_1 := 'alter session set hash_area_size = ' || to_char(l_hash_size);
9381 msc_util.msc_log('l_sql_stmt : ' || l_sql_stmt_1);
9382 execute immediate l_sql_stmt_1;
9383 END IF;
9384
9385 IF NVL(l_sort_size, -1) <> -1 THEN
9386 l_sql_stmt_1 := 'alter session set sort_area_size = ' || to_char(l_sort_size);
9387 msc_util.msc_log('l_sql_stmt : ' || l_sql_stmt_1);
9388 execute immediate l_sql_stmt_1;
9389 END IF;
9390
9391 /* forecast at PF changes begin
9392 Changes to populate demand class allocation information in a temp table*/
9393 IF p_demand_priority = 'Y' THEN
9394 l_alloc_temp_table := 'MSC_ALLOC_TEMP_' || to_char(p_plan_id);
9395
9396 msc_util.msc_log('temp table : ' || l_alloc_temp_table);
9397
9398 /* Create temp table in tablespace of MSC_ALLOC_DEMANDS*/
9399 SELECT t.tablespace_name, NVL(i.def_tablespace_name, t.tablespace_name)
9400 INTO l_tbspace, l_ind_tbspace
9401 FROM all_tab_partitions t,
9402 all_part_indexes i
9403 WHERE t.table_owner = l_msc_schema
9404 AND t.table_name = 'MSC_ALLOC_DEMANDS'
9405 AND t.partition_name = 'ALLOC_DEMANDS_' || to_char(l_plan_id)
9406 AND i.owner (+) = t.table_owner
9407 AND i.table_name (+) = t.table_name
9408 AND rownum = 1;
9409
9410 msc_util.msc_log('tb space : ' || l_tbspace);
9411 msc_util.msc_log('ind tbspace : ' || l_ind_tbspace);
9412
9413 l_insert_stmt := 'CREATE TABLE ' || l_alloc_temp_table || '(
9414 PEGGING_ID NUMBER,
9415 DEMAND_CLASS VARCHAR2(30),
9416 ALLOCATION_PERCENT NUMBER)
9417 TABLESPACE ' || l_tbspace || '
9418 PCTFREE 0 STORAGE(INITIAL 40K NEXT 5M PCTINCREASE 0)';
9419
9420 msc_util.msc_log('before creating table : ' || l_alloc_temp_table);
9421
9422 BEGIN
9423 ad_ddl.do_ddl(APPLSYS_SCHEMA => l_applsys_schema,
9424 APPLICATION_SHORT_NAME => 'MSC',
9425 STATEMENT_TYPE => ad_ddl.create_table,
9426 STATEMENT => l_insert_stmt,
9427 OBJECT_NAME => l_alloc_temp_table);
9428 msc_util.msc_log('after creating table : ' || l_alloc_temp_table);
9429
9430 EXCEPTION
9431 WHEN others THEN
9432 msc_util.msc_log(sqlcode || ': ' || sqlerrm);
9433 msc_util.msc_log('Exception of create table : ' || l_alloc_temp_table);
9434
9435 ad_ddl.do_ddl(APPLSYS_SCHEMA => l_applsys_schema,
9436 APPLICATION_SHORT_NAME => 'MSC',
9437 STATEMENT_TYPE => ad_ddl.drop_table,
9438 STATEMENT => 'DROP TABLE ' || l_alloc_temp_table,
9439 OBJECT_NAME => l_alloc_temp_table);
9440
9441 msc_util.msc_log('After Drop table : ' ||l_alloc_temp_table);
9442 msc_util.msc_log('Before exception create table : ' ||l_alloc_temp_table);
9443
9444 ad_ddl.do_ddl(APPLSYS_SCHEMA => l_applsys_schema,
9445 APPLICATION_SHORT_NAME => 'MSC',
9446 STATEMENT_TYPE => ad_ddl.create_table,
9447 STATEMENT => l_insert_stmt,
9448 OBJECT_NAME => l_alloc_temp_table);
9449
9450 msc_util.msc_log('After exception create table : ' ||l_alloc_temp_table);
9451 END;
9452
9453 Calculate_Alloc_Percentages(p_plan_id, l_return_status);
9454
9455 IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
9456 IF PG_DEBUG in ('Y', 'C') THEN
9457 msc_util.msc_log('Pf_Post_Plan_Proc: ' || 'Error occured in procedure Calculate_Alloc_Percentages');
9458 END IF;
9459 RAISE FND_API.G_EXC_ERROR;
9460 END IF;
9461
9462 msc_util.msc_log('Before generating the SQL');
9463
9464 l_insert_stmt := 'insert into '|| l_alloc_temp_table ||'(
9465 pegging_id,
9466 demand_class,
9467 allocation_percent
9468 )
9469 (select peg1.pegging_id,
9470 :l_excess_dc,
9471 1
9472 from msc_full_pegging peg1
9473 where peg1.plan_id = :p_plan_id
9474 and peg1.pegging_id = peg1.end_pegging_id
9475 and peg1.demand_id in (-1, -2)
9476
9477 UNION ALL
9478
9479 select peg1.pegging_id,
9480 decode(mat.transaction_id, NULL, d.demand_class,
9481 mat.demand_class),
9482 decode(mat.transaction_id, NULL, 1,
9483 mat.allocation_percent)
9484 from msc_full_pegging peg1,
9485 msc_demands d,
9486 msc_alloc_temp mat
9487 where peg1.plan_id = :p_plan_id
9488 and peg1.pegging_id = peg1.end_pegging_id
9489 and peg1.demand_id = d.demand_id
9490 and peg1.plan_id = d.plan_id
9491 and d.disposition_id = mat.transaction_id (+)
9492 )';
9493
9494 msc_util.msc_log(l_insert_stmt);
9495 msc_util.msc_log('After generating the SQL');
9496
9497 -- Obtain cursor handler for sql_stmt
9498 cur_handler := DBMS_SQL.OPEN_CURSOR;
9499
9500 DBMS_SQL.PARSE(cur_handler, l_insert_stmt, DBMS_SQL.NATIVE);
9501
9502 msc_util.msc_log('After parsing the SQL');
9503
9504 DBMS_SQL.BIND_VARIABLE(cur_handler, ':l_excess_dc', l_excess_dc);
9505 DBMS_SQL.BIND_VARIABLE(cur_handler, ':p_plan_id', p_plan_id);
9506
9507 msc_util.msc_log('after binding the variables');
9508
9509 -- Execute the cursor
9510 rows_processed := DBMS_SQL.EXECUTE(cur_handler);
9511
9512 msc_util.msc_log('After executing the cursor');
9513
9514 commit;
9515
9516 msc_util.msc_log('before creating indexes on temp table');
9517
9518 l_sql_stmt_1 := 'CREATE INDEX ' || l_alloc_temp_table || '_N1 ON ' || l_alloc_temp_table || '
9519 (pegging_id)
9520 STORAGE(INITIAL 40K NEXT 2M PCTINCREASE 0) tablespace ' || l_ind_tbspace;
9521
9522 msc_util.msc_log('Before index : ' || l_alloc_temp_table || '.' || l_alloc_temp_table || '_N1');
9523
9524 ad_ddl.do_ddl(APPLSYS_SCHEMA => l_applsys_schema,
9525 APPLICATION_SHORT_NAME => 'MSC',
9526 STATEMENT_TYPE => ad_ddl.create_index,
9527 STATEMENT => l_sql_stmt_1,
9528 OBJECT_NAME => l_alloc_temp_table);
9529
9530 msc_util.msc_log('After index : ' || l_alloc_temp_table || '.' || l_alloc_temp_table || '_N1');
9531 msc_util.msc_log('Done creating indexes on temp table');
9532 msc_util.msc_log('Gather Table Stats');
9533
9534 -- Use p_plan_id instead of l_plan_id
9535 --fnd_stats.gather_table_stats('MSC', 'MSC_ALLOC_TEMP_' || to_char(l_plan_id), granularity => 'ALL');
9536 fnd_stats.gather_table_stats(l_msc_schema, l_alloc_temp_table, granularity => 'ALL');
9537 END IF;
9538 /* forecast at PF changes end*/
9539
9540 IF l_share_partition = 'Y' THEN
9541
9542 msc_util.msc_log('Inside shared partition');
9543
9544 -- first delete the existing data from tables
9545 msc_util.msc_log('before deleteing data from the table');
9546
9547 DELETE MSC_ALLOC_DEMANDS where plan_id = p_plan_id;
9548 msc_util.msc_log('After deleting data from MSC_ALLOC_DEMANDS table');
9549
9550 DELETE MSC_ALLOC_SUPPLIES where plan_id = p_plan_id;
9551 msc_util.msc_log('After deleting data from MSC_ALLOC_SUPPLIES table');
9552
9553 /*--------------------------------------------------------------------------
9554 | <<<<<<<<<<<<<<<<<<<<<<< Begin Demands SQL1 >>>>>>>>>>>>>>>>>>>>>>>>>>>
9555 +-------------------------------------------------------------------------*/
9556 msc_util.msc_log('Before generating Demands SQL1');
9557
9558 /* forecast at PF changes begin*/
9559 Prepare_Demands_Stmt(l_share_partition, p_demand_priority, l_excess_supply_by_dc,
9560 NULL, l_alloc_temp_table, l_parallel_degree, l_sql_stmt_1, l_return_status);
9561 IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
9562 IF PG_DEBUG in ('Y', 'C') THEN
9563 msc_util.msc_log('Pf_Post_Plan_Proc: ' || 'Error occured in procedure Prepare_Demands_Stmt');
9564 END IF;
9565 RAISE FND_API.G_EXC_ERROR;
9566 END IF;
9567
9568 msc_util.msc_log('After generating Demands SQL1');
9569 msc_util.msc_log(l_sql_stmt_1);
9570
9571 -- Obtain cursor handler for sql_stmt
9572 cur_handler := DBMS_SQL.OPEN_CURSOR;
9573
9574 DBMS_SQL.PARSE(cur_handler, l_sql_stmt_1, DBMS_SQL.NATIVE);
9575 msc_util.msc_log('After parsing Demands SQL1');
9576
9577 DBMS_SQL.BIND_VARIABLE(cur_handler, ':l_user_id', l_user_id);
9578 DBMS_SQL.BIND_VARIABLE(cur_handler, ':l_sysdate', l_sysdate);
9579 DBMS_SQL.BIND_VARIABLE(cur_handler, ':p_plan_id', p_plan_id);
9580 DBMS_SQL.BIND_VARIABLE(cur_handler, ':l_yes', l_yes);
9581 IF p_demand_priority = 'Y' THEN
9582 DBMS_SQL.BIND_VARIABLE(cur_handler, ':l_excess_dc', l_excess_dc);
9583 DBMS_SQL.BIND_VARIABLE(cur_handler, ':p_excess_supply_by_dc', l_excess_supply_by_dc);
9584 DBMS_SQL.BIND_VARIABLE(cur_handler, ':def_num', '-1');
9585 END IF;
9586 msc_util.msc_log('after binding the variables');
9587
9588 -- Execute the cursor
9589 rows_processed := DBMS_SQL.EXECUTE(cur_handler);
9590 msc_util.msc_log('After executing the cursor');
9591
9592 msc_util.msc_log('rows processed: ' || rows_processed);
9593 msc_util.msc_log('after inserting item data into MSC_ALLOC_DEMANDS tables');
9594
9595 /*--------------------------------------------------------------------------
9596 | <<<<<<<<<<<<<<<<<<<<<<< Begin Supplies SQL1 >>>>>>>>>>>>>>>>>>>>>>>>>>>
9597 +-------------------------------------------------------------------------*/
9598 msc_util.msc_log('Before generating Supplies SQL1');
9599
9600 Prepare_Supplies_Stmt(l_share_partition, p_demand_priority,
9601 l_excess_supply_by_dc, NULL, l_alloc_temp_table, l_parallel_degree, l_sql_stmt_1, l_return_status);
9602
9603 IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
9604 IF PG_DEBUG in ('Y', 'C') THEN
9605 msc_util.msc_log('Pf_Post_Plan_Proc: ' || 'Error occured in procedure Prepare_Supplies_Stmt');
9606 END IF;
9607 RAISE FND_API.G_EXC_ERROR;
9608 END IF;
9609
9610 msc_util.msc_log(l_sql_stmt_1);
9611 msc_util.msc_log('After Generating Supplies SQL1');
9612
9613 -- Parse cursor handler for sql_stmt: Don't open as its already opened
9614
9615 DBMS_SQL.PARSE(cur_handler, l_sql_stmt_1, DBMS_SQL.NATIVE);
9616 msc_util.msc_log('After parsing Supplies SQL1');
9617
9618 DBMS_SQL.BIND_VARIABLE(cur_handler, ':l_user_id', l_user_id);
9619 DBMS_SQL.BIND_VARIABLE(cur_handler, ':l_sysdate', l_sysdate);
9620 DBMS_SQL.BIND_VARIABLE(cur_handler, ':p_plan_id', p_plan_id);
9621 DBMS_SQL.BIND_VARIABLE(cur_handler, ':l_yes', l_yes);
9622 IF p_demand_priority = 'Y' THEN
9623 DBMS_SQL.BIND_VARIABLE(cur_handler, ':l_excess_dc', l_excess_dc);
9624 DBMS_SQL.BIND_VARIABLE(cur_handler, ':p_excess_supply_by_dc', l_excess_supply_by_dc);
9625 DBMS_SQL.BIND_VARIABLE(cur_handler, ':def_num', '-1');
9626 END IF;
9627 /* forecast at PF changes end*/
9628
9629 msc_util.msc_log('after binding the variables');
9630
9631 -- Execute the cursor
9632 rows_processed := DBMS_SQL.EXECUTE(cur_handler);
9633 msc_util.msc_log('After executing first supplies cursor');
9634
9635 msc_util.msc_log('rows processed: ' || rows_processed);
9636 msc_util.msc_log('after inserting item data into MSC_ALLOC_SUPPLIES tables');
9637
9638 msc_util.msc_log('Analyze Plan partition for MSC_ALLOC_DEMANDS');
9639 fnd_stats.gather_table_stats(ownname=>l_msc_schema,tabname=>'MSC_ALLOC_DEMANDS',
9640 partname=>'ALLOC_DEMANDS_999999',
9641 granularity=>'PARTITION',
9642 percent =>10);
9643
9644 msc_util.msc_log('Analyze Plan partition for MSC_ALLOC_SUPPLIES');
9645 fnd_stats.gather_table_stats(ownname=>l_msc_schema,tabname=>'MSC_ALLOC_SUPPLIES',
9646 partname=>'ALLOC_SUPPLIES_999999',
9647 granularity=>'PARTITION',
9648 percent =>10);
9649
9650 ELSE
9651
9652 msc_util.msc_log('not a shared plan partition, insert data into temp tables');
9653
9654 l_temp_table := 'MSC_TEMP_ALLOC_DEM_' || to_char(l_plan_id);
9655
9656 msc_util.msc_log('temp table : ' || l_temp_table);
9657
9658 IF p_demand_priority <> 'Y' THEN
9659 SELECT t.tablespace_name, NVL(i.def_tablespace_name, t.tablespace_name)
9660 INTO l_tbspace, l_ind_tbspace
9661 FROM all_tab_partitions t,
9662 all_part_indexes i
9663 WHERE t.table_owner = l_msc_schema
9664 AND t.table_name = 'MSC_ALLOC_DEMANDS'
9665 AND t.partition_name = 'ALLOC_DEMANDS_' || to_char(l_plan_id)
9666 AND i.owner (+) = t.table_owner
9667 AND i.table_name (+) = t.table_name
9668 AND rownum = 1;
9669
9670 msc_util.msc_log('tb space : ' || l_tbspace);
9671 msc_util.msc_log('ind tbspace : ' || l_ind_tbspace);
9672 END IF;
9673
9674 --bug 6113544
9675 l_insert_stmt := 'CREATE TABLE ' || l_temp_table
9676 || ' TABLESPACE ' || l_tbspace
9677 || ' PCTFREE 0 STORAGE(INITIAL 40K NEXT 5M PCTINCREASE 0)'
9678 || ' as select * from MSC_ALLOC_DEMANDS where 1=2 ';
9679
9680 /*
9681 l_insert_stmt := 'CREATE TABLE ' || l_temp_table || '(
9682 PLAN_ID NUMBER NOT NULL,
9683 INVENTORY_ITEM_ID NUMBER NOT NULL,
9684 ORGANIZATION_ID NUMBER NOT NULL,
9685 SR_INSTANCE_ID NUMBER NOT NULL,
9686 DEMAND_CLASS VARCHAR2(30), --bug3272444
9687 DEMAND_DATE DATE NOT NULL,
9688 PARENT_DEMAND_ID NUMBER NOT NULL,
9689 ALLOCATED_QUANTITY NUMBER NOT NULL,
9690 ORIGINATION_TYPE NUMBER NOT NULL,
9691 ORDER_NUMBER VARCHAR2(62),
9692 SALES_ORDER_LINE_ID NUMBER,
9693 OLD_DEMAND_DATE DATE,
9694 OLD_ALLOCATED_QUANTITY NUMBER,
9695 CREATED_BY NUMBER NOT NULL,
9696 CREATION_DATE DATE NOT NULL,
9697 LAST_UPDATED_BY NUMBER NOT NULL,
9698 LAST_UPDATE_DATE DATE NOT NULL,
9699 DEMAND_QUANTITY NUMBER,
9700 PF_DISPLAY_FLAG NUMBER,
9701 ORIGINAL_ITEM_ID NUMBER,
9702 ORIGINAL_ORIGINATION_TYPE NUMBER,
9703 ORIGINAL_DEMAND_DATE DATE,
9704 SOURCE_ORGANIZATION_ID NUMBER, --bug3272444
9705 USING_ASSEMBLY_ITEM_ID NUMBER, --bug3272444
9706 CUSTOMER_ID NUMBER,
9707 SHIP_TO_SITE_ID NUMBER,
9708 REFRESH_NUMBER NUMBER, --bug3272444
9709 OLD_REFRESH_NUMBER NUMBER, --bug3272444
9710 DEMAND_SOURCE_TYPE NUMBER, --cmro
9711 REQUEST_DATE DATE) --bug3263368
9712 TABLESPACE ' || l_tbspace || '
9713 PCTFREE 0 STORAGE(INITIAL 40K NEXT 5M PCTINCREASE 0)';
9714 */
9715
9716 msc_util.msc_log('before creating table : ' || l_temp_table);
9717 BEGIN
9718 ad_ddl.do_ddl(APPLSYS_SCHEMA => l_applsys_schema,
9719 APPLICATION_SHORT_NAME => 'MSC',
9720 STATEMENT_TYPE => ad_ddl.create_table,
9721 STATEMENT => l_insert_stmt,
9722 OBJECT_NAME => l_temp_table);
9723 msc_util.msc_log('after creating table : ' || l_temp_table);
9724
9725 EXCEPTION
9726 WHEN others THEN
9727 msc_util.msc_log(sqlcode || ': ' || sqlerrm);
9728 msc_util.msc_log('Exception of create table : ' || l_temp_table);
9729
9730 ad_ddl.do_ddl(APPLSYS_SCHEMA => l_applsys_schema,
9731 APPLICATION_SHORT_NAME => 'MSC',
9732 STATEMENT_TYPE => ad_ddl.drop_table,
9733 STATEMENT => 'DROP TABLE ' || l_temp_table,
9734 OBJECT_NAME => l_temp_table);
9735
9736 msc_util.msc_log('After Drop table : ' ||l_temp_table);
9737 msc_util.msc_log('Before exception create table : ' ||l_temp_table);
9738
9739 ad_ddl.do_ddl(APPLSYS_SCHEMA => l_applsys_schema,
9740 APPLICATION_SHORT_NAME => 'MSC',
9741 STATEMENT_TYPE => ad_ddl.create_table,
9742 STATEMENT => l_insert_stmt,
9743 OBJECT_NAME => l_temp_table);
9744 msc_util.msc_log('After exception create table : ' ||l_temp_table);
9745 END;
9746
9747 /*--------------------------------------------------------------------------
9748 | <<<<<<<<<<<<<<<<<<<<<<< Begin Demands SQL1 >>>>>>>>>>>>>>>>>>>>>>>>>>>
9749 +-------------------------------------------------------------------------*/
9750 msc_util.msc_log('Before generating Demands SQL1');
9751
9752 /* forecast at PF changes begin*/
9753 Prepare_Demands_Stmt(l_share_partition, p_demand_priority, l_excess_supply_by_dc,
9754 l_temp_table, l_alloc_temp_table, l_parallel_degree, l_sql_stmt_1, l_return_status);
9755
9756 IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
9757 IF PG_DEBUG in ('Y', 'C') THEN
9758 msc_util.msc_log('Pf_Post_Plan_Proc: ' || 'Error occured in procedure Prepare_Demands_Stmt');
9759 END IF;
9760 RAISE FND_API.G_EXC_ERROR;
9761 END IF;
9762
9763 msc_util.msc_log(l_sql_stmt_1);
9764 msc_util.msc_log('After generating Demands SQL1');
9765
9766 -- Obtain cursor handler for sql_stmt
9767 cur_handler := DBMS_SQL.OPEN_CURSOR;
9768
9769 DBMS_SQL.PARSE(cur_handler, l_sql_stmt_1, DBMS_SQL.NATIVE);
9770 msc_util.msc_log('After parsing Demands SQL1');
9771
9772 DBMS_SQL.BIND_VARIABLE(cur_handler, ':l_user_id', l_user_id);
9773 DBMS_SQL.BIND_VARIABLE(cur_handler, ':l_sysdate', l_sysdate);
9774 DBMS_SQL.BIND_VARIABLE(cur_handler, ':p_plan_id', p_plan_id);
9775 DBMS_SQL.BIND_VARIABLE(cur_handler, ':l_yes', l_yes);
9776 IF p_demand_priority = 'Y' THEN
9777 DBMS_SQL.BIND_VARIABLE(cur_handler, ':l_excess_dc', l_excess_dc);
9778 DBMS_SQL.BIND_VARIABLE(cur_handler, ':p_excess_supply_by_dc', l_excess_supply_by_dc);
9779 DBMS_SQL.BIND_VARIABLE(cur_handler, ':def_num', '-1');
9780 END IF;
9781 /* forecast at PF changes end*/
9782
9783 msc_util.msc_log('after binding the variables');
9784
9785 -- Execute the cursor
9786 rows_processed := DBMS_SQL.EXECUTE(cur_handler);
9787 msc_util.msc_log('After executing the cursor');
9788 msc_util.msc_log('after inserting item data into MSC_TEMP_ALLOC_DEMANDS table');
9789
9790 commit;
9791
9792 msc_util.msc_log('before creating indexes on temp demand table');
9793 l_sql_stmt_1 := 'CREATE INDEX ' || l_temp_table || '_N1 ON ' || l_temp_table || '
9794 --NOLOGGING
9795 (plan_id, inventory_item_id, organization_id, sr_instance_id, demand_class, demand_date)
9796 STORAGE(INITIAL 40K NEXT 2M PCTINCREASE 0) tablespace ' || l_ind_tbspace;
9797
9798 msc_util.msc_log('Before index : ' || l_temp_table || '.' || l_temp_table || '_N1');
9799
9800 ad_ddl.do_ddl(APPLSYS_SCHEMA => l_applsys_schema,
9801 APPLICATION_SHORT_NAME => 'MSC',
9802 STATEMENT_TYPE => ad_ddl.create_index,
9803 STATEMENT => l_sql_stmt_1,
9804 OBJECT_NAME => l_temp_table);
9805
9806 msc_util.msc_log('After index : ' || l_temp_table || '.' || l_temp_table || '_N1');
9807
9808 l_sql_stmt_1 := 'CREATE INDEX ' || l_temp_table || '_N2 ON ' || l_temp_table || '
9809 -- NOLOGGING
9810 --Bug 3629191
9811 (plan_id,
9812 sales_order_line_id)
9813 STORAGE(INITIAL 40K NEXT 2M PCTINCREASE 0) tablespace ' || l_ind_tbspace;
9814
9815 msc_util.msc_log('Before index : ' || l_temp_table || '.' || l_temp_table || '_N2');
9816
9817 ad_ddl.do_ddl(APPLSYS_SCHEMA => l_applsys_schema,
9818 APPLICATION_SHORT_NAME => 'MSC',
9819 STATEMENT_TYPE => ad_ddl.create_index,
9820 STATEMENT => l_sql_stmt_1,
9821 OBJECT_NAME => l_temp_table);
9822
9823 msc_util.msc_log('After index : ' || l_temp_table || '.' || l_temp_table || '_N2');
9824
9825 l_sql_stmt_1 := 'CREATE INDEX ' || l_temp_table || '_N3 ON ' || l_temp_table || '
9826 -- NOLOGGING
9827 --Bug 3629191
9828 (plan_id,
9829 parent_demand_id)
9830 STORAGE(INITIAL 40K NEXT 2M PCTINCREASE 0) tablespace ' || l_ind_tbspace;
9831
9832 msc_util.msc_log('Before index : ' || l_temp_table || '.' || l_temp_table || '_N3');
9833
9834 ad_ddl.do_ddl(APPLSYS_SCHEMA => l_applsys_schema,
9835 APPLICATION_SHORT_NAME => 'MSC',
9836 STATEMENT_TYPE => ad_ddl.create_index,
9837 STATEMENT => l_sql_stmt_1,
9838 OBJECT_NAME => l_temp_table);
9839
9840 msc_util.msc_log('After index : ' || l_temp_table || '.' || l_temp_table || '_N3');
9841 msc_util.msc_log('Done creating indexes on temp demand table');
9842
9843 l_temp_table := 'MSC_TEMP_ALLOC_SUP_' || to_char(l_plan_id);
9844
9845 SELECT t.tablespace_name, NVL(i.def_tablespace_name, t.tablespace_name)
9846 INTO l_tbspace, l_ind_tbspace
9847 FROM all_tab_partitions t,
9848 all_part_indexes i
9849 WHERE t.table_owner = l_msc_schema
9850 AND t.table_name = 'MSC_ALLOC_SUPPLIES'
9851 AND t.partition_name = 'ALLOC_SUPPLIES_' || to_char(l_plan_id)
9852 AND i.owner (+) = t.table_owner
9853 AND i.table_name (+) = t.table_name
9854 AND rownum = 1;
9855
9856 msc_util.msc_log('tb space : ' || l_tbspace);
9857 msc_util.msc_log('ind tbspace : ' || l_ind_tbspace);
9858
9859 --bug 6113544
9860 l_insert_stmt := 'CREATE TABLE ' || l_temp_table
9861 || ' TABLESPACE ' || l_tbspace
9862 || ' PCTFREE 0 STORAGE(INITIAL 40K NEXT 5M PCTINCREASE 0)'
9863 || ' as select * from msc_alloc_supplies where 1=2 ';
9864
9865 /*
9866 l_insert_stmt := 'CREATE TABLE ' || l_temp_table || '(
9867 PLAN_ID NUMBER NOT NULL,
9868 INVENTORY_ITEM_ID NUMBER NOT NULL,
9869 ORGANIZATION_ID NUMBER NOT NULL,
9870 SR_INSTANCE_ID NUMBER NOT NULL,
9871 DEMAND_CLASS VARCHAR2(30) , --bug3272444
9872 SUPPLY_DATE DATE NOT NULL,
9873 PARENT_TRANSACTION_ID NUMBER NOT NULL,
9874 ALLOCATED_QUANTITY NUMBER NOT NULL,
9875 ORDER_TYPE NUMBER NOT NULL,
9876 ORDER_NUMBER VARCHAR2(240),
9877 SCHEDULE_DESIGNATOR_ID NUMBER,
9878 SALES_ORDER_LINE_ID NUMBER,
9879 OLD_SUPPLY_DATE DATE,
9880 OLD_ALLOCATED_QUANTITY NUMBER,
9881 STEALING_FLAG NUMBER,
9882 CREATED_BY NUMBER NOT NULL,
9883 CREATION_DATE DATE NOT NULL,
9884 LAST_UPDATED_BY NUMBER NOT NULL,
9885 LAST_UPDATE_DATE DATE NOT NULL,
9886 FROM_DEMAND_CLASS VARCHAR2(80),
9887 SUPPLY_QUANTITY NUMBER,
9888 ORIGINAL_ORDER_TYPE NUMBER, --bug3272444
9889 ORIGINAL_ITEM_ID NUMBER, --bug3272444
9890 CUSTOMER_ID NUMBER,
9891 SHIP_TO_SITE_ID NUMBER,
9892 REFRESH_NUMBER NUMBER, --bug3272444
9893 OLD_REFRESH_NUMBER NUMBER, --bug3272444
9894 ATO_MODEL_LINE_ID NUMBER,
9895 --ATO_MODEL_LINE_ID NUMBER) --
9896 DEMAND_SOURCE_TYPE NUMBER) --cmro
9897 TABLESPACE ' || l_tbspace || '
9898 PCTFREE 0 STORAGE(INITIAL 40K NEXT 5M PCTINCREASE 0)';
9899 */
9900
9901 msc_util.msc_log('before creating table : ' || l_temp_table);
9902 BEGIN
9903 ad_ddl.do_ddl(APPLSYS_SCHEMA => l_applsys_schema,
9904 APPLICATION_SHORT_NAME => 'MSC',
9905 STATEMENT_TYPE => ad_ddl.create_table,
9906 STATEMENT => l_insert_stmt,
9907 OBJECT_NAME => l_temp_table);
9908 msc_util.msc_log('after creating table : ' || l_temp_table);
9909
9910 EXCEPTION
9911 WHEN others THEN
9912 msc_util.msc_log(sqlcode || ': ' || sqlerrm);
9913 msc_util.msc_log('Exception of create table : ' || l_temp_table);
9914
9915 ad_ddl.do_ddl(APPLSYS_SCHEMA => l_applsys_schema,
9916 APPLICATION_SHORT_NAME => 'MSC',
9917 STATEMENT_TYPE => ad_ddl.drop_table,
9918 STATEMENT => 'DROP TABLE ' || l_temp_table,
9919 OBJECT_NAME => l_temp_table);
9920
9921 msc_util.msc_log('After Drop table : ' ||l_temp_table);
9922 msc_util.msc_log('Before exception create table : ' ||l_temp_table);
9923
9924 ad_ddl.do_ddl(APPLSYS_SCHEMA => l_applsys_schema,
9925 APPLICATION_SHORT_NAME => 'MSC',
9926 STATEMENT_TYPE => ad_ddl.create_table,
9927 STATEMENT => l_insert_stmt,
9928 OBJECT_NAME => l_temp_table);
9929 msc_util.msc_log('After exception create table : ' ||l_temp_table);
9930 END;
9931
9932 /*--------------------------------------------------------------------------
9933 | <<<<<<<<<<<<<<<<<<<<<<< Begin Supplies SQL1 >>>>>>>>>>>>>>>>>>>>>>>>>>>
9934 +-------------------------------------------------------------------------*/
9935 msc_util.msc_log('Before generating Supplies SQL1');
9936
9937 /* forecast at PF changes begin*/
9938 Prepare_Supplies_Stmt(l_share_partition, p_demand_priority, l_excess_supply_by_dc,
9939 l_temp_table, l_alloc_temp_table, l_parallel_degree, l_sql_stmt_1, l_return_status);
9940
9941 IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
9942 IF PG_DEBUG in ('Y', 'C') THEN
9943 msc_util.msc_log('Pf_Post_Plan_Proc: ' || 'Error occured in procedure Prepare_Supplies_Stmt');
9944 END IF;
9945 RAISE FND_API.G_EXC_ERROR;
9946 END IF;
9947
9948 msc_util.msc_log(l_sql_stmt_1);
9949 msc_util.msc_log('After Generating Supplies SQL1');
9950
9951 -- Parse cursor handler for sql_stmt: Don't open as its already opened
9952
9953 DBMS_SQL.PARSE(cur_handler, l_sql_stmt_1, DBMS_SQL.NATIVE);
9954 msc_util.msc_log('After parsing Supplies SQL1');
9955
9956 DBMS_SQL.BIND_VARIABLE(cur_handler, ':l_user_id', l_user_id);
9957 DBMS_SQL.BIND_VARIABLE(cur_handler, ':l_sysdate', l_sysdate);
9958 DBMS_SQL.BIND_VARIABLE(cur_handler, ':p_plan_id', p_plan_id);
9959 DBMS_SQL.BIND_VARIABLE(cur_handler, ':l_yes', l_yes);
9960 IF p_demand_priority = 'Y' THEN
9961 DBMS_SQL.BIND_VARIABLE(cur_handler, ':l_excess_dc', l_excess_dc);
9962 DBMS_SQL.BIND_VARIABLE(cur_handler, ':p_excess_supply_by_dc', l_excess_supply_by_dc);
9963 DBMS_SQL.BIND_VARIABLE(cur_handler, ':def_num', '-1');
9964 END IF;
9965 /* forecast at PF changes end*/
9966
9967 msc_util.msc_log('after binding the variables');
9968
9969 -- Execute the cursor
9970 rows_processed := DBMS_SQL.EXECUTE(cur_handler);
9971 msc_util.msc_log('After executing first supplies cursor');
9972 msc_util.msc_log('after inserting item data into MSC_TEMP_ALLOC_SUPPLIES table');
9973
9974 commit;
9975
9976 msc_util.msc_log('before creating indexes on temp supply table');
9977 l_sql_stmt_1 := 'CREATE INDEX ' || l_temp_table || '_N1 ON ' || l_temp_table || '
9978 -- NOLOGGING
9979 (plan_id, inventory_item_id, organization_id, sr_instance_id, demand_class, supply_date)
9980 STORAGE(INITIAL 40K NEXT 2M PCTINCREASE 0) tablespace ' || l_ind_tbspace;
9981
9982 msc_util.msc_log('Before index : ' || l_temp_table || '.' || l_temp_table || '_N1');
9983
9984 ad_ddl.do_ddl(APPLSYS_SCHEMA => l_applsys_schema,
9985 APPLICATION_SHORT_NAME => 'MSC',
9986 STATEMENT_TYPE => ad_ddl.create_index,
9987 STATEMENT => l_sql_stmt_1,
9988 OBJECT_NAME => l_temp_table);
9989
9990 msc_util.msc_log('After index : ' || l_temp_table || '.' || l_temp_table || '_N1');
9991
9992 l_sql_stmt_1 := 'CREATE INDEX ' || l_temp_table || '_N2 ON ' || l_temp_table || '
9993 -- NOLOGGING
9994 --Bug 3629191
9995 (plan_id,
9996 parent_transaction_id)
9997 STORAGE(INITIAL 40K NEXT 2M PCTINCREASE 0) tablespace ' || l_ind_tbspace;
9998
9999 msc_util.msc_log('Before index : ' || l_temp_table || '.' || l_temp_table || '_N2');
10000
10001 ad_ddl.do_ddl(APPLSYS_SCHEMA => l_applsys_schema,
10002 APPLICATION_SHORT_NAME => 'MSC',
10003 STATEMENT_TYPE => ad_ddl.create_index,
10004 STATEMENT => l_sql_stmt_1,
10005 OBJECT_NAME => l_temp_table);
10006
10007 msc_util.msc_log('After index : ' || l_temp_table || '.' || l_temp_table || '_N2');
10008
10009 l_sql_stmt_1 := 'CREATE INDEX ' || l_temp_table || '_N3 ON ' || l_temp_table || '
10010 -- NOLOGGING
10011 --Bug 3629191
10012 (plan_id,
10013 sales_order_line_id)
10014 STORAGE(INITIAL 40K NEXT 2M PCTINCREASE 0) tablespace ' || l_ind_tbspace;
10015
10016 msc_util.msc_log('Before index : ' || l_temp_table || '.' || l_temp_table || '_N3');
10017
10018 ad_ddl.do_ddl(APPLSYS_SCHEMA => l_applsys_schema,
10019 APPLICATION_SHORT_NAME => 'MSC',
10020 STATEMENT_TYPE => ad_ddl.create_index,
10021 STATEMENT => l_sql_stmt_1,
10022 OBJECT_NAME => l_temp_table);
10023
10024 msc_util.msc_log('After index : ' || l_temp_table || '.' || l_temp_table || '_N3');
10025
10026 msc_util.msc_log('Gather Table Stats for Allocated S/D Tables');
10027
10028 fnd_stats.gather_table_stats(l_msc_schema, 'MSC_TEMP_ALLOC_DEM_' || to_char(l_plan_id), granularity => 'ALL');
10029 fnd_stats.gather_table_stats(l_msc_schema, 'MSC_TEMP_ALLOC_SUP_' || to_char(l_plan_id), granularity => 'ALL');
10030
10031 msc_util.msc_log('swap partition for demands');
10032 l_partition_name := 'ALLOC_DEMANDS_' || to_char(l_plan_id);
10033
10034 msc_util.msc_log('Partition name for msc_alloc_demands table : ' || l_partition_name);
10035
10036 -- swap partiton for supplies and demand part
10037
10038 l_sql_stmt := 'ALTER TABLE msc_alloc_demands EXCHANGE PARTITION ' || l_partition_name ||
10039 ' with table MSC_TEMP_ALLOC_DEM_'|| to_char(l_plan_id) ||
10040 ' including indexes without validation';
10041
10042 BEGIN
10043 msc_util.msc_log('Before alter table msc_alloc_demands');
10044 ad_ddl.do_ddl(APPLSYS_SCHEMA => l_applsys_schema,
10045 APPLICATION_SHORT_NAME => 'MSC',
10046 STATEMENT_TYPE => ad_ddl.alter_table,
10047 STATEMENT => l_sql_stmt,
10048 OBJECT_NAME => 'MSC_ALLOC_DEMANDS');
10049 END;
10050
10051 msc_util.msc_log('swap partition for supplies');
10052 l_partition_name := 'ALLOC_SUPPLIES_' || to_char(l_plan_id);
10053
10054 msc_util.msc_log('Partition name for msc_alloc_supplies table : ' || l_partition_name);
10055
10056 l_sql_stmt := 'ALTER TABLE msc_alloc_supplies EXCHANGE PARTITION ' || l_partition_name ||
10057 ' with table MSC_TEMP_ALLOC_SUP_'|| to_char(l_plan_id) ||
10058 ' including indexes without validation';
10059
10060 BEGIN
10061 msc_util.msc_log('Before alter table msc_alloc_supplies');
10062 ad_ddl.do_ddl(APPLSYS_SCHEMA => l_applsys_schema,
10063 APPLICATION_SHORT_NAME => 'MSC',
10064 STATEMENT_TYPE => ad_ddl.alter_table,
10065 STATEMENT => l_sql_stmt,
10066 OBJECT_NAME => 'MSC_ALLOC_SUPPLIES');
10067 END;
10068
10069 END IF; -- IF l_share_partition = 'Y'
10070
10071 /* forecast at PF changes begin*/
10072 -- clean temp tables after exchanging partitions
10073 msc_util.msc_log('Call procedure clean_temp_tables');
10074
10075 MSC_POST_PRO.clean_temp_tables(l_applsys_schema, l_plan_id, p_plan_id, p_demand_priority);
10076
10077 msc_util.msc_log('After procedure clean_temp_tables');
10078 /* forecast at PF changes end*/
10079
10080 /* Call Update_Pf_Display_Flags to update Pf_Display_Flag in msc_alloc_demands*/
10081 Update_Pf_Display_Flag(p_plan_id, l_return_status);
10082
10083 IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
10084 IF PG_DEBUG in ('Y', 'C') THEN
10085 msc_util.msc_log('Pf_Post_Plan_Proc: ' || 'Error occured in procedure Update_Pf_Display_Flag');
10086 END IF;
10087 RAISE FND_API.G_EXC_ERROR;
10088 END IF;
10089
10090 BEGIN
10091 update msc_plans
10092 set summary_flag = 3
10093 where plan_id = p_plan_id;
10094 END;
10095
10096 RETCODE := G_SUCCESS;
10097 commit;
10098
10099 msc_util.msc_log('End procedure Pf_Post_Plan_Proc');
10100
10101 EXCEPTION
10102 WHEN OTHERS THEN
10103 msc_util.msc_log('Inside main exception of Pf_Post_Plan_Proc');
10104 msc_util.msc_log(sqlerrm);
10105 ERRBUF := sqlerrm;
10106
10107 BEGIN
10108 update msc_plans
10109 set summary_flag = 1
10110 where plan_id = p_plan_id;
10111 commit;
10112 END;
10113
10114 RETCODE := G_ERROR;
10115 IF (l_share_partition = 'Y') THEN
10116 ROLLBACK;
10117 ELSE
10118 msc_util.msc_log('Call procedure clean_temp_tables in exception');
10119
10120 /* forecast at PF changes*/
10121 MSC_POST_PRO.clean_temp_tables(l_applsys_schema, l_plan_id, p_plan_id, p_demand_priority);
10122
10123 msc_util.msc_log('After procedure clean_temp_tables in exception');
10124 END IF;
10125 END Pf_Post_Plan_Proc;
10126
10127 -- New private procedure added for forecast at PF
10128 /*--Prepare_Demands_Stmt----------------------------------------------------
10129 | o Called from Pf_Post_Plan_Proc procedure to:
10130 | - Prepare demands stmt for preallocation + bucketting (Demand
10131 | priority AATP)
10132 | : Excess supply by demand class = No
10133 | : Excess supply by demand class = Yes (for project atp)
10134 | - Prepare demands stmt for bucketting. (All PDS ATP scenarios except
10135 | demand priority AATP)
10136 | o Prepares demand stmt for both share plan partition "yes" and "no".
10137 +-------------------------------------------------------------------------*/
10138 PROCEDURE Prepare_Demands_Stmt(
10139 p_share_partition IN VARCHAR2,
10140 p_demand_priority IN VARCHAR2,
10141 p_excess_supply_by_dc IN VARCHAR2,
10142 p_temp_table IN VARCHAR2,
10143 p_alloc_temp_table IN VARCHAR2,
10144 p_parallel_degree IN NUMBER,
10145 x_sql_stmt OUT NOCOPY VARCHAR2,
10146 x_return_status OUT NOCOPY VARCHAR2
10147 )
10148 IS
10149
10150 BEGIN
10151
10152 IF PG_DEBUG in ('Y', 'C') THEN
10153 msc_util.msc_log('Prepare_Demands_Stmt: ' || 'p_share_partition : ' || p_share_partition);
10154 msc_util.msc_log('Prepare_Demands_Stmt: ' || 'p_demand_priority : ' || p_demand_priority);
10155 msc_util.msc_log('Prepare_Demands_Stmt: ' || 'p_excess_supply_by_dc : ' || p_excess_supply_by_dc);
10156 msc_util.msc_log('Prepare_Demands_Stmt: ' || 'p_temp_table : ' || p_temp_table);
10157 msc_util.msc_log('Prepare_Demands_Stmt: ' || 'p_alloc_temp_table : ' || p_alloc_temp_table);
10158 msc_util.msc_log('Prepare_Demands_Stmt: ' || 'p_parallel_degree : ' || p_parallel_degree);
10159 msc_util.msc_log('Prepare_Demands_Stmt: ' || 'MSC_ATP_PVT.G_HP_DEMAND_BUCKETING_PREF : ' || MSC_ATP_PVT.G_HP_DEMAND_BUCKETING_PREF);
10160 END IF;
10161
10162 -- Initializing API return code
10163 x_return_status := FND_API.G_RET_STS_SUCCESS;
10164
10165 IF p_share_partition = 'Y' THEN
10166 x_sql_stmt := '
10167 INSERT INTO MSC_ALLOC_DEMANDS(';
10168 ELSE
10169 x_sql_stmt := '
10170 INSERT INTO ' || p_temp_table || '(';
10171 END IF;
10172
10173 IF p_demand_priority = 'Y' THEN
10174 x_sql_stmt := x_sql_stmt ||'
10175 plan_id,
10176 inventory_item_id,
10177 original_item_id,
10178 organization_id,
10179 sr_instance_id,
10180 demand_class,
10181 demand_date,
10182 original_demand_date,
10183 demand_quantity,
10184 allocated_quantity,
10185 parent_demand_id,
10186 origination_type,
10187 original_origination_type,
10188 pf_display_flag,
10189 order_number,
10190 sales_order_line_id,
10191 demand_source_type,--cmro
10192 source_organization_id,
10193 using_assembly_item_id,
10194 customer_id,
10195 ship_to_site_id,
10196 created_by,
10197 creation_date,
10198 last_updated_by,
10199 last_update_date,
10200 request_date)--bug3263368
10201 (
10202 SELECT /*+ use_hash(pegging_v mv) parallel(mv,' || to_char(p_parallel_degree) || ') */
10203 pegging_v.plan_id plan_id,
10204 pegging_v.inventory_item_id,
10205 pegging_v.original_item_id,
10206 pegging_v.organization_id,
10207 pegging_v.sr_instance_id,
10208 NVL(mv.demand_class, :def_num) demand_class,
10209 pegging_v.demand_date,
10210 pegging_v.original_demand_date,
10211 MIN(pegging_v.demand_quantity),
10212 SUM(pegging_v.allocated_quantity),
10213 pegging_v.demand_id,
10214 pegging_v.origination_type,
10215 pegging_v.original_origination_type,
10216 pegging_v.pf_display_flag,
10217 pegging_v.order_number,
10218 pegging_v.sales_order_line_id,
10219 pegging_v.demand_source_type,--cmro
10220 pegging_v.source_organization_id,
10221 pegging_v.using_assembly_item_id,
10222 pegging_v.customer_id,
10223 pegging_v.ship_to_site_id,
10224 :l_user_id,
10225 :l_sysdate,
10226 :l_user_id,
10227 :l_sysdate,
10228 pegging_v.request_date --bug3263368
10229 FROM
10230 (SELECT peg.plan_id plan_id,
10231 decode(msi.aggregate_time_fence_date,
10232 NULL, msi.inventory_item_id,
10233 decode(sign(trunc(s.new_schedule_date) - msi.aggregate_time_fence_date), -- Bug 3450234 use trunc on s.new_schedule_date
10234 1, msi.product_family_id, -- to avoid wrong bucketed demands creation
10235 msi.inventory_item_id)) inventory_item_id,
10236 msi.inventory_item_id original_item_id,
10237 peg.organization_id,
10238 peg.sr_instance_id,
10239 decode(mat.demand_class, :l_excess_dc, decode(:p_excess_supply_by_dc, :l_yes, nvl(s.demand_class, :def_num),
10240 :def_num),
10241 NULL, :def_num,
10242 mat.demand_class) demand_class,
10243 decode(msi.aggregate_time_fence_date,
10244 -- Bug 3574164. DMD_SATISFIED_TIME changed to PLANNED_SHIP_DATE.
10245 NULL, trunc(DECODE('||MSC_ATP_PVT.G_HP_DEMAND_BUCKETING_PREF||',
10246 2, NVL(D.PLANNED_SHIP_DATE,D.USING_ASSEMBLY_DEMAND_DATE),
10247 NVL(D.SCHEDULE_SHIP_DATE,D.USING_ASSEMBLY_DEMAND_DATE))),
10248 decode(sign(trunc(s.new_schedule_date) - msi.aggregate_time_fence_date),
10249 1, decode(sign(trunc(DECODE('||MSC_ATP_PVT.G_HP_DEMAND_BUCKETING_PREF||',
10250 2, NVL(D.PLANNED_SHIP_DATE,D.USING_ASSEMBLY_DEMAND_DATE),
10251 NVL(D.SCHEDULE_SHIP_DATE,
10252 D.USING_ASSEMBLY_DEMAND_DATE)))
10253 - msi.aggregate_time_fence_date),
10254 1, trunc(DECODE('||MSC_ATP_PVT.G_HP_DEMAND_BUCKETING_PREF||',
10255 2, NVL(D.PLANNED_SHIP_DATE,D.USING_ASSEMBLY_DEMAND_DATE),
10256 NVL(D.SCHEDULE_SHIP_DATE,
10257 D.USING_ASSEMBLY_DEMAND_DATE))),
10258 msi.aggregate_time_fence_date+1),
10259 decode(sign(trunc(DECODE('||MSC_ATP_PVT.G_HP_DEMAND_BUCKETING_PREF||',
10260 2, NVL(D.PLANNED_SHIP_DATE,D.USING_ASSEMBLY_DEMAND_DATE),
10261 NVL(D.SCHEDULE_SHIP_DATE,
10262 D.USING_ASSEMBLY_DEMAND_DATE)))
10263 - msi.aggregate_time_fence_date),
10264 1, msi.aggregate_time_fence_date,
10265 trunc(DECODE('||MSC_ATP_PVT.G_HP_DEMAND_BUCKETING_PREF||',
10266 2, NVL(D.PLANNED_SHIP_DATE,D.USING_ASSEMBLY_DEMAND_DATE),
10267 NVL(D.SCHEDULE_SHIP_DATE,
10268 D.USING_ASSEMBLY_DEMAND_DATE)))))) demand_date,
10269 trunc(DECODE('||MSC_ATP_PVT.G_HP_DEMAND_BUCKETING_PREF||',
10270 2, NVL(D.PLANNED_SHIP_DATE,D.USING_ASSEMBLY_DEMAND_DATE),
10271 NVL(D.SCHEDULE_SHIP_DATE,
10272 D.USING_ASSEMBLY_DEMAND_DATE))) original_demand_date,
10273 decode(d.origination_type, 4, d.daily_demand_rate,
10274 d.using_requirement_quantity) demand_quantity,
10275 decode(msi.aggregate_time_fence_date,
10276 NULL, peg.allocated_quantity,
10277 decode(msi.bom_item_type,
10278 5, 0,
10279 peg.allocated_quantity))* mat.allocation_percent allocated_quantity,
10280 d.demand_id,
10281 decode(msi.aggregate_time_fence_date,
10282 NULL, d.origination_type, 51) origination_type,
10283 d.origination_type original_origination_type,
10284 decode(msi.aggregate_time_fence_date,
10285 NULL, NULL,
10286 decode(sign(trunc(s.new_schedule_date) - msi.aggregate_time_fence_date),
10287 1, decode(sign(trunc(DECODE('||MSC_ATP_PVT.G_HP_DEMAND_BUCKETING_PREF||',
10288 2, NVL(D.PLANNED_SHIP_DATE,D.USING_ASSEMBLY_DEMAND_DATE),
10289 NVL(D.SCHEDULE_SHIP_DATE,
10290 D.USING_ASSEMBLY_DEMAND_DATE)))
10291 - msi.aggregate_time_fence_date),
10292 1, 1,
10293 NULL),
10294 decode(sign(trunc(DECODE('||MSC_ATP_PVT.G_HP_DEMAND_BUCKETING_PREF||',
10295 2, NVL(D.PLANNED_SHIP_DATE,D.USING_ASSEMBLY_DEMAND_DATE),
10296 NVL(D.SCHEDULE_SHIP_DATE,
10297 D.USING_ASSEMBLY_DEMAND_DATE)))
10298 - msi.aggregate_time_fence_date),
10299 1, NULL, -- Moved paranthesis from here to end of decode. Identified as part of 3450234 testing.
10300 1))) pf_display_flag,
10301 decode(d.origination_type, 1, to_char(d.disposition_id), d.order_number) order_number,
10302 d.sales_order_line_id,
10303 d.demand_source_type,--cmro
10304 d.source_organization_id,
10305 d.using_assembly_item_id,
10306 d.customer_id,
10307 d.ship_to_site_id,
10308 /* New Allocation logic for time phased ATP */
10309 decode(msi.aggregate_time_fence_date,
10310 NULL, msi.inventory_item_id,
10311 msi.product_family_id) product_family_id ,
10312 decode(d.order_date_type_code,2,d.request_date,
10313 d.request_ship_date)request_date --bug3263368
10314 FROM msc_system_items msi,
10315 msc_demands d,
10316 msc_full_pegging peg,
10317 ' || p_alloc_temp_table || ' mat,
10318 msc_supplies s
10319 WHERE msi.plan_id = :p_plan_id
10320 AND msi.atp_flag = :l_yes
10321 AND msi.plan_id = d.plan_id --bug3453289
10322 AND d.inventory_item_id = msi.inventory_item_id
10323 AND d.sr_instance_id = msi.sr_instance_id
10324 AND d.organization_id = msi.organization_id
10325 AND d.origination_type NOT IN (5,7,8,9,11,15,22,28,29,31,70)
10326 AND peg.plan_id = d.plan_id
10327 AND peg.demand_id = d.demand_id
10328 AND peg.sr_instance_id = d.sr_instance_id --bug3453289 MSC_FULL_PEGGING_N2
10329 AND peg.organization_id= d.organization_id --bug3453289 MSC_FULL_PEGGING_N2
10330 AND mat.pegging_id = peg.end_pegging_id
10331 AND s.sr_instance_id = peg.sr_instance_id
10332 AND s.plan_id = peg.plan_id
10333 AND s.transaction_id = peg.transaction_id) pegging_v,
10334 msc_item_hierarchy_mv mv
10335 WHERE pegging_v.product_family_id = mv.inventory_item_id(+)
10336 AND pegging_v.organization_id = mv.organization_id (+)
10337 AND pegging_v.sr_instance_id = mv.sr_instance_id (+)
10338 AND pegging_v.demand_date >= mv.effective_date (+)
10339 AND pegging_v.demand_date <= mv.disable_date (+)
10340 AND pegging_v.demand_class = mv.demand_class (+)
10341 AND mv.level_id (+) = -1
10342 AND pegging_v.allocated_quantity <> 0
10343 GROUP BY
10344 pegging_v.plan_id,
10345 pegging_v.inventory_item_id,
10346 pegging_v.original_item_id,
10347 pegging_v.organization_id,
10348 pegging_v.sr_instance_id,
10349 NVL(mv.demand_class, :def_num),
10350 pegging_v.demand_date,
10351 pegging_v.original_demand_date,
10352 pegging_v.demand_id,
10353 pegging_v.origination_type,
10354 pegging_v.original_origination_type,
10355 pegging_v.pf_display_flag,
10356 pegging_v.order_number,
10357 pegging_v.sales_order_line_id,
10358 pegging_v.demand_source_type,--cmro
10359 pegging_v.source_organization_id,
10360 pegging_v.using_assembly_item_id,
10361 pegging_v.customer_id,
10362 pegging_v.ship_to_site_id,
10363 :l_user_id,
10364 :l_sysdate,
10365 :l_user_id,
10366 :l_sysdate,
10367 pegging_v.request_date)';
10368 ELSE -- this is same as else of old private procedure prepare_demands_stmt1 as there
10369 -- is no changes for non demand priority AATP scenarios
10370 -- Prepare demands stmt for creation of bucketed demands/rollup supplies
10371 x_sql_stmt := x_sql_stmt ||'
10372 plan_id,
10373 inventory_item_id,
10374 original_item_id,
10375 organization_id,
10376 sr_instance_id,
10377 demand_class,
10378 demand_date,
10379 original_demand_date,
10380 demand_quantity,
10381 allocated_quantity,
10382 parent_demand_id,
10383 origination_type,
10384 original_origination_type,
10385 pf_display_flag,
10386 order_number,
10387 sales_order_line_id,
10388 demand_source_type,--cmro
10389 source_organization_id,
10390 using_assembly_item_id,
10391 customer_id,
10392 ship_to_site_id,
10393 created_by,
10394 creation_date,
10395 last_updated_by,
10396 last_update_date,
10397 request_date)--bug3263368
10398 (SELECT
10399 peg1.plan_id plan_id,
10400 decode(sign(trunc(s.new_schedule_date) - msi.aggregate_time_fence_date), -- Bug 3450234 use trunc on s.new_schedule_date
10401 -- to avoid wrong bucketed demands creation
10402 1, msi.product_family_id,
10403 msi.inventory_item_id) inventory_item_id,
10404 msi.inventory_item_id original_item_id,
10405 peg1.organization_id,
10406 peg1.sr_instance_id,
10407 d.demand_class demand_class,
10408 decode(sign(trunc(s.new_schedule_date) - msi.aggregate_time_fence_date),
10409 1, decode(sign(trunc(DECODE('||MSC_ATP_PVT.G_HP_DEMAND_BUCKETING_PREF||',
10410 -- Bug 3574164. DMD_SATISFIED_TIME changed to PLANNED_SHIP_DATE.
10411 2, NVL(D.PLANNED_SHIP_DATE,D.USING_ASSEMBLY_DEMAND_DATE),
10412 NVL(D.SCHEDULE_SHIP_DATE,
10413 D.USING_ASSEMBLY_DEMAND_DATE)))
10414 - msi.aggregate_time_fence_date),
10415 1, trunc(DECODE('||MSC_ATP_PVT.G_HP_DEMAND_BUCKETING_PREF||',
10416 2, NVL(D.PLANNED_SHIP_DATE,D.USING_ASSEMBLY_DEMAND_DATE),
10417 NVL(D.SCHEDULE_SHIP_DATE,
10418 D.USING_ASSEMBLY_DEMAND_DATE))),
10419 msi.aggregate_time_fence_date+1),
10420 decode(sign(trunc(DECODE('||MSC_ATP_PVT.G_HP_DEMAND_BUCKETING_PREF||',
10421 2, NVL(D.PLANNED_SHIP_DATE,D.USING_ASSEMBLY_DEMAND_DATE),
10422 NVL(D.SCHEDULE_SHIP_DATE,
10423 D.USING_ASSEMBLY_DEMAND_DATE)))
10424 - msi.aggregate_time_fence_date),
10425 1, msi.aggregate_time_fence_date,
10426 trunc(DECODE('||MSC_ATP_PVT.G_HP_DEMAND_BUCKETING_PREF||',
10427 2, NVL(D.PLANNED_SHIP_DATE,D.USING_ASSEMBLY_DEMAND_DATE),
10428 NVL(D.SCHEDULE_SHIP_DATE,
10429 D.USING_ASSEMBLY_DEMAND_DATE))))) demand_date,
10430 trunc(DECODE('||MSC_ATP_PVT.G_HP_DEMAND_BUCKETING_PREF||',
10431 2, NVL(D.PLANNED_SHIP_DATE,D.USING_ASSEMBLY_DEMAND_DATE),
10432 NVL(D.SCHEDULE_SHIP_DATE,
10433 D.USING_ASSEMBLY_DEMAND_DATE))) original_demand_date,
10434 MIN(decode(d.origination_type, 4, d.daily_demand_rate,
10435 d.using_requirement_quantity)) demand_quantity,
10436 SUM(peg1.allocated_quantity),
10437 d.demand_id,
10438 51 origination_type, -- ATP Bucketed Demand
10439 d.origination_type original_origination_type,
10440 decode(sign(trunc(s.new_schedule_date) - msi.aggregate_time_fence_date),
10441 1, decode(sign(trunc(DECODE('||MSC_ATP_PVT.G_HP_DEMAND_BUCKETING_PREF||',
10442 -- Bug 3574164. DMD_SATISFIED_TIME changed to PLANNED_SHIP_DATE.
10443 2, NVL(D.PLANNED_SHIP_DATE,D.USING_ASSEMBLY_DEMAND_DATE),
10444 NVL(D.SCHEDULE_SHIP_DATE,
10445 D.USING_ASSEMBLY_DEMAND_DATE)))
10446 - msi.aggregate_time_fence_date),
10447 1, 1,
10448 NULL),
10449 decode(sign(trunc(DECODE('||MSC_ATP_PVT.G_HP_DEMAND_BUCKETING_PREF||',
10450 2, NVL(D.PLANNED_SHIP_DATE,D.USING_ASSEMBLY_DEMAND_DATE),
10451 NVL(D.SCHEDULE_SHIP_DATE,
10452 D.USING_ASSEMBLY_DEMAND_DATE)))
10453 - msi.aggregate_time_fence_date),
10454 1, NULL, -- Moved paranthesis from here to end of decode. Identified as part of 3450234 testing.
10455 1)) pf_display_flag,
10456 decode(d.origination_type, 1, to_char(d.disposition_id), d.order_number) order_number,
10457 d.sales_order_line_id,
10458 d.demand_source_type,--cmro
10459 d.source_organization_id,
10460 d.using_assembly_item_id,
10461 d.customer_id,
10462 d.ship_to_site_id,
10463 :l_user_id,
10464 :l_sysdate,
10465 :l_user_id,
10466 :l_sysdate,
10467 decode(d.order_date_type_code,2,d.request_date,
10468 d.request_ship_date)request_date --bug3263368
10469 FROM msc_full_pegging peg1,
10470 msc_demands d,
10471 msc_supplies s,
10472 msc_system_items msi
10473 WHERE d.demand_id = peg1.demand_id
10474 AND d.plan_id = peg1.plan_id
10475 AND d.sr_instance_id = peg1.sr_instance_id
10476 AND d.organization_id= peg1.organization_id --bug3453289
10477 AND d.origination_type NOT IN (5,7,8,9,11,15,22,28,29,31,70)
10478 AND s.transaction_id = peg1.transaction_id
10479 AND s.plan_id = peg1.plan_id
10480 AND s.sr_instance_id = peg1.sr_instance_id --bug3453289
10481 AND msi.plan_id = d.plan_id
10482 AND msi.inventory_item_id = d.inventory_item_id
10483 AND msi.sr_instance_id = d.sr_instance_id
10484 AND msi.organization_id = d.organization_id
10485 AND msi.aggregate_time_fence_date is not null
10486 AND msi.bom_item_type <> 5
10487 AND msi.plan_id = :p_plan_id
10488 AND msi.atp_flag = :l_yes
10489 GROUP BY
10490 peg1.plan_id,
10491 decode(sign(trunc(s.new_schedule_date) - msi.aggregate_time_fence_date), -- Bug 3450234 use trunc on s.new_schedule_date
10492 -- to avoid wrong bucketed demands creation
10493 1, msi.product_family_id,
10494 msi.inventory_item_id),
10495 msi.inventory_item_id,
10496 peg1.organization_id,
10497 peg1.sr_instance_id,
10498 d.demand_class,
10499 decode(sign(trunc(s.new_schedule_date) - msi.aggregate_time_fence_date),
10500 1, decode(sign(trunc(DECODE('||MSC_ATP_PVT.G_HP_DEMAND_BUCKETING_PREF||',
10501 -- Bug 3574164. DMD_SATISFIED_TIME changed to PLANNED_SHIP_DATE.
10502 2, NVL(D.PLANNED_SHIP_DATE,D.USING_ASSEMBLY_DEMAND_DATE),
10503 NVL(D.SCHEDULE_SHIP_DATE,
10504 D.USING_ASSEMBLY_DEMAND_DATE)))
10505 - msi.aggregate_time_fence_date),
10506 1, trunc(DECODE('||MSC_ATP_PVT.G_HP_DEMAND_BUCKETING_PREF||',
10507 2, NVL(D.PLANNED_SHIP_DATE,D.USING_ASSEMBLY_DEMAND_DATE),
10508 NVL(D.SCHEDULE_SHIP_DATE,
10509 D.USING_ASSEMBLY_DEMAND_DATE))),
10510 msi.aggregate_time_fence_date+1),
10511 decode(sign(trunc(DECODE('||MSC_ATP_PVT.G_HP_DEMAND_BUCKETING_PREF||',
10512 2, NVL(D.PLANNED_SHIP_DATE,D.USING_ASSEMBLY_DEMAND_DATE),
10513 NVL(D.SCHEDULE_SHIP_DATE,
10514 D.USING_ASSEMBLY_DEMAND_DATE))) - msi.aggregate_time_fence_date),
10515 1, msi.aggregate_time_fence_date,
10516 trunc(DECODE('||MSC_ATP_PVT.G_HP_DEMAND_BUCKETING_PREF||',
10517 2, NVL(D.PLANNED_SHIP_DATE,D.USING_ASSEMBLY_DEMAND_DATE),
10518 NVL(D.SCHEDULE_SHIP_DATE,
10519 D.USING_ASSEMBLY_DEMAND_DATE))))),
10520 trunc(DECODE('||MSC_ATP_PVT.G_HP_DEMAND_BUCKETING_PREF||',
10521 2, NVL(D.PLANNED_SHIP_DATE,D.USING_ASSEMBLY_DEMAND_DATE),
10522 NVL(D.SCHEDULE_SHIP_DATE,
10523 D.USING_ASSEMBLY_DEMAND_DATE))),
10524 d.demand_id,
10525 51,
10526 d.origination_type,
10527 decode(sign(trunc(s.new_schedule_date) - msi.aggregate_time_fence_date),
10528 1, decode(sign(trunc(DECODE('||MSC_ATP_PVT.G_HP_DEMAND_BUCKETING_PREF||',
10529 2, NVL(D.PLANNED_SHIP_DATE,D.USING_ASSEMBLY_DEMAND_DATE),
10530 NVL(D.SCHEDULE_SHIP_DATE,
10531 D.USING_ASSEMBLY_DEMAND_DATE)))
10532 - msi.aggregate_time_fence_date),
10533 1, 1,
10534 NULL),
10535 decode(sign(trunc(DECODE('||MSC_ATP_PVT.G_HP_DEMAND_BUCKETING_PREF||',
10536 2, NVL(D.PLANNED_SHIP_DATE,D.USING_ASSEMBLY_DEMAND_DATE),
10537 NVL(D.SCHEDULE_SHIP_DATE,
10538 D.USING_ASSEMBLY_DEMAND_DATE)))
10539 - msi.aggregate_time_fence_date),
10540 1, NULL, -- Moved paranthesis from here to end of decode. Identified as part of 3450234 testing.
10541 1)),
10542 decode(d.origination_type, 1, to_char(d.disposition_id), d.order_number),
10543 d.sales_order_line_id,
10544 d.demand_source_type,--cmro
10545 d.source_organization_id,
10546 d.using_assembly_item_id,
10547 d.customer_id,
10548 d.ship_to_site_id,
10549 :l_user_id,
10550 :l_sysdate,
10551 :l_user_id,
10552 :l_sysdate,
10553 decode(d.order_date_type_code,2,d.request_date,
10554 d.request_ship_date))'; --bug3263368
10555 END IF;
10556
10557 EXCEPTION
10558 WHEN OTHERS THEN
10559 IF PG_DEBUG in ('Y', 'C') THEN
10560 msc_util.msc_log('Prepare_Demands_Stmt: ' || 'Error occurred: ' || to_char(sqlcode) || ':' || SQLERRM);
10561 END IF;
10562 x_return_status := FND_API.G_RET_STS_ERROR;
10563
10564 END Prepare_Demands_Stmt;
10565
10566 -- New private procedure added for forecast at PF
10567 /*--Prepare_Supplies_Stmt---------------------------------------------------
10568 | o Called from Pf_Post_Plan_Proc procedure to:
10569 | - Prepare supplies stmt for preallocation + rollup (Demand
10570 | priority AATP)
10571 | : Excess supply by demand class = No
10572 | : Excess supply by demand class = Yes (for project atp)
10573 | - Prepare supplies stmt for rollup. (All PDS ATP scenarios except
10574 | demand priority AATP)
10575 | o Prepares supplies stmt for both share plan partition "yes" and "no".
10576 +-------------------------------------------------------------------------*/
10577 PROCEDURE Prepare_Supplies_Stmt(
10578 p_share_partition IN VARCHAR2,
10579 p_demand_priority IN VARCHAR2,
10580 p_excess_supply_by_dc IN VARCHAR2,
10581 p_temp_table IN VARCHAR2,
10582 p_alloc_temp_table IN VARCHAR2,
10583 p_parallel_degree IN NUMBER,
10584 x_sql_stmt OUT NOCOPY VARCHAR2,
10585 x_return_status OUT NOCOPY VARCHAR2
10586 )
10587 IS
10588
10589 BEGIN
10590
10591 IF PG_DEBUG in ('Y', 'C') THEN
10592 msc_util.msc_log('Prepare_Supplies_Stmt: ' || 'p_share_partition : ' || p_share_partition);
10593 msc_util.msc_log('Prepare_Supplies_Stmt: ' || 'p_demand_priority : ' || p_demand_priority);
10594 msc_util.msc_log('Prepare_Supplies_Stmt: ' || 'p_excess_supply_by_dc : ' || p_excess_supply_by_dc);
10595 msc_util.msc_log('Prepare_Supplies_Stmt: ' || 'p_temp_table : ' || p_temp_table);
10596 msc_util.msc_log('Prepare_Supplies_Stmt: ' || 'p_alloc_temp_table : ' || p_alloc_temp_table);
10597 msc_util.msc_log('Prepare_Supplies_Stmt: ' || 'p_parallel_degree : ' || p_parallel_degree);
10598 END IF;
10599
10600 -- Initializing API return code
10601 x_return_status := FND_API.G_RET_STS_SUCCESS;
10602
10603 IF p_share_partition = 'Y' THEN
10604 x_sql_stmt := '
10605 INSERT INTO MSC_ALLOC_SUPPLIES(';
10606 ELSE
10607 x_sql_stmt := '
10608 INSERT INTO ' || p_temp_table || '(';
10609 END IF;
10610
10611 IF p_demand_priority = 'Y' THEN
10612 x_sql_stmt := x_sql_stmt ||'
10613 plan_id,
10614 inventory_item_id,
10615 original_item_id,
10616 organization_id,
10617 sr_instance_id,
10618 demand_class,
10619 supply_date,
10620 parent_transaction_id,
10621 allocated_quantity,
10622 supply_quantity,
10623 order_type,
10624 original_order_type,
10625 order_number,
10626 schedule_designator_id,
10627 customer_id, -- not really required only used in rule based
10628 ship_to_site_id, -- not really required only used in rule based
10629 created_by,
10630 creation_date,
10631 last_updated_by,
10632 last_update_date)
10633 (
10634 SELECT /*+ use_hash(pegging_v mv) parallel(mv,' || to_char(p_parallel_degree) || ') */
10635 pegging_v.plan_id plan_id,
10636 pegging_v.inventory_item_id,
10637 pegging_v.original_item_id,
10638 pegging_v.organization_id,
10639 pegging_v.sr_instance_id,
10640 NVL(mv.demand_class, :def_num) demand_class,
10641 pegging_v.supply_date,
10642 pegging_v.transaction_id,
10643 SUM(pegging_v.allocated_quantity),
10644 MIN(pegging_v.supply_quantity),
10645 pegging_v.order_type,
10646 pegging_v.original_order_type,
10647 pegging_v.order_number,
10648 pegging_v.schedule_designator_id,
10649 pegging_v.customer_id,
10650 pegging_v.ship_to_site_id,
10651 :l_user_id,
10652 :l_sysdate,
10653 :l_user_id,
10654 :l_sysdate
10655 FROM
10656 (SELECT peg.plan_id plan_id,
10657 decode(msi.aggregate_time_fence_date,
10658 NULL, msi.inventory_item_id,
10659 decode(sign(TRUNC(s.new_schedule_date) - msi.aggregate_time_fence_date),
10660 1, msi.product_family_id,
10661 msi.inventory_item_id)) inventory_item_id,
10662 msi.inventory_item_id original_item_id,
10663 peg.organization_id,
10664 peg.sr_instance_id,
10665 decode(mat.demand_class, :l_excess_dc, decode(:p_excess_supply_by_dc, :l_yes, nvl(s.demand_class, :def_num),
10666 :def_num),
10667 NULL, :def_num,
10668 mat.demand_class) demand_class,
10669 TRUNC(s.new_schedule_date) supply_date,
10670 decode(msi.aggregate_time_fence_date,
10671 NULL, peg.allocated_quantity,
10672 decode(msi.bom_item_type,
10673 5, 0,
10674 peg.allocated_quantity))* mat.allocation_percent allocated_quantity,
10675 s.new_order_quantity supply_quantity,
10676 peg.transaction_id,
10677 decode(msi.aggregate_time_fence_date,
10678 NULL, s.order_type, 50) order_type,
10679 s.order_type original_order_type,
10680 s.order_number,
10681 s.schedule_designator_id,
10682 s.customer_id,
10683 s.ship_to_site_id,
10684 decode(msi.aggregate_time_fence_date,
10685 NULL, msi.inventory_item_id,
10686 msi.product_family_id) product_family_id
10687 FROM msc_system_items msi,
10688 msc_supplies s,
10689 msc_full_pegging peg,
10690 ' || p_alloc_temp_table || ' mat
10691 WHERE msi.plan_id = :p_plan_id
10692 AND msi.atp_flag = :l_yes
10693 AND s.plan_id = msi.plan_id --bug3453289
10694 AND s.inventory_item_id = msi.inventory_item_id
10695 AND s.sr_instance_id = msi.sr_instance_id
10696 AND s.organization_id = msi.organization_id
10697 AND peg.plan_id = s.plan_id
10698 AND peg.transaction_id = s.transaction_id
10699 AND peg.sr_instance_id = s.sr_instance_id
10700 AND mat.pegging_id = peg.end_pegging_id) pegging_v,
10701 msc_item_hierarchy_mv mv
10702 WHERE pegging_v.product_family_id = mv.inventory_item_id(+)
10703 AND pegging_v.organization_id = mv.organization_id (+)
10704 AND pegging_v.sr_instance_id = mv.sr_instance_id (+)
10705 AND pegging_v.supply_date >= mv.effective_date (+)
10706 AND pegging_v.supply_date <= mv.disable_date (+)
10707 AND pegging_v.demand_class = mv.demand_class (+)
10708 AND mv.level_id (+) = -1
10709 AND pegging_v.allocated_quantity <> 0
10710 GROUP BY
10711 pegging_v.plan_id,
10712 pegging_v.inventory_item_id,
10713 pegging_v.original_item_id,
10714 pegging_v.organization_id,
10715 pegging_v.sr_instance_id,
10716 NVL(mv.demand_class, :def_num),
10717 pegging_v.supply_date,
10718 pegging_v.transaction_id,
10719 pegging_v.order_type,
10720 pegging_v.original_order_type,
10721 pegging_v.order_number,
10722 pegging_v.schedule_designator_id,
10723 pegging_v.customer_id,
10724 pegging_v.ship_to_site_id,
10725 :l_user_id,
10726 :l_sysdate,
10727 :l_user_id,
10728 :l_sysdate)';
10729 ELSE -- this is same as else of old private procedure prepare_supplies_stmt1 as there
10730 -- is no changes for non demand priority AATP scenarios
10731 -- Prepare supplies stmt for creation of rollup supplies
10732 x_sql_stmt := x_sql_stmt ||'
10733 plan_id,
10734 inventory_item_id,
10735 original_item_id,
10736 organization_id,
10737 sr_instance_id,
10738 demand_class,
10739 supply_date,
10740 parent_transaction_id,
10741 allocated_quantity,
10742 supply_quantity,
10743 order_type,
10744 original_order_type,
10745 order_number,
10746 schedule_designator_id,
10747 customer_id,
10748 ship_to_site_id,
10749 created_by,
10750 creation_date,
10751 last_updated_by,
10752 last_update_date)
10753 (
10754 select :p_plan_id,
10755 decode(sign(TRUNC(s.new_schedule_date) - i.aggregate_time_fence_date),
10756 1, i.product_family_id, s.inventory_item_id),
10757 s.inventory_item_id,
10758 s.organization_id,
10759 s.sr_instance_id,
10760 s.demand_class,
10761 TRUNC(s.new_schedule_date),
10762 s.transaction_id,
10763 s.new_order_quantity,
10764 s.new_order_quantity,
10765 50,
10766 s.order_type,
10767 s.order_number,
10768 s.schedule_designator_id,
10769 s.customer_id,
10770 s.ship_to_site_id,
10771 :l_user_id,
10772 :l_sysdate,
10773 :l_user_id,
10774 :l_sysdate
10775 from msc_supplies s,
10776 msc_system_items i
10777 where i.aggregate_time_fence_date is not null
10778 and i.bom_item_type <> 5
10779 and i.plan_id = :p_plan_id
10780 and i.atp_flag = :l_yes
10781 and s.plan_id = i.plan_id --bug3453289
10782 and s.inventory_item_id = i.inventory_item_id
10783 and s.organization_id = i.organization_id
10784 and s.sr_instance_id = i.sr_instance_id
10785 and s.plan_id = i.plan_id
10786 )';
10787 END IF;
10788
10789 EXCEPTION
10790 WHEN OTHERS THEN
10791 IF PG_DEBUG in ('Y', 'C') THEN
10792 msc_util.msc_log('Prepare_Supplies_Stmt: ' || 'Error occurred: ' || to_char(sqlcode) || ':' || SQLERRM);
10793 END IF;
10794 x_return_status := FND_API.G_RET_STS_ERROR;
10795
10796 END Prepare_Supplies_Stmt;
10797
10798 /*Private procedures removed for forecast at PF **Will be deleted after code review
10799 /*--Prepare_Demands_Stmt1---------------------------------------------------
10800 | o Called from Pf_Post_Plan_Proc procedure to:
10801 | - Prepare demands stmt for preallocation + bucketting for demands
10802 | pegged to excess/safety stock. (Demand priority AATP)
10803 | : Excess supply by demand class = No
10804 | : Excess supply by demand class = Yes (for project atp)
10805 | - Prepare demands stmt for bucketting. (All PDS ATP scenarios except
10806 | demand priority AATP)
10807 | o Prepares demand stmt for both share plan partition "yes" and "no".
10808 +-------------------------------------------------------------------------*/
10809 /*PROCEDURE Prepare_Demands_Stmt1(
10810 p_share_partition IN VARCHAR2,
10811 p_demand_priority IN VARCHAR2,
10812 p_excess_supply_by_dc IN VARCHAR2,
10813 p_temp_table IN VARCHAR2,
10814 p_parallel_degree IN NUMBER,
10815 x_sql_stmt OUT NOCOPY VARCHAR2,
10816 x_return_status OUT NOCOPY VARCHAR2
10817 )
10818 IS
10819
10820 BEGIN
10821
10822 IF PG_DEBUG in ('Y', 'C') THEN
10823 msc_util.msc_log('Prepare_Demands_Stmt1: ' || 'p_share_partition : ' || p_share_partition);
10824 msc_util.msc_log('Prepare_Demands_Stmt1: ' || 'p_demand_priority : ' || p_demand_priority);
10825 msc_util.msc_log('Prepare_Demands_Stmt1: ' || 'p_excess_supply_by_dc : ' || p_excess_supply_by_dc);
10826 msc_util.msc_log('Prepare_Demands_Stmt1: ' || 'p_temp_table : ' || p_temp_table);
10827 msc_util.msc_log('Prepare_Demands_Stmt1: ' || 'p_parallel_degree : ' || p_parallel_degree);
10828 END IF;
10829
10830 -- Initializing API return code
10831 x_return_status := FND_API.G_RET_STS_SUCCESS;
10832
10833 IF p_share_partition = 'Y' THEN
10834 x_sql_stmt := '
10835 INSERT INTO MSC_ALLOC_DEMANDS(';
10836 ELSE
10837 x_sql_stmt := '
10838 INSERT INTO ' || p_temp_table || '(';
10839 END IF;
10840
10841 IF p_demand_priority = 'Y' THEN
10842 /* Prepare demands stmt for preallocation + creation of bucketed demands/rollup supplies
10843 * project atp changes
10844 * If the profile is set to 'Yes' then:
10845 * o If the supply pegged to the demand has a demand class existing on allocation rule then
10846 * allocate the demand to that demand class.
10847 * o If the supply pegged to the demand has a demand class not present on allocation rule then
10848 * allocate the demand to 'OTHER'.
10849 * o If the supply pegged to the demand does not have a demand class present, allocate the demand
10850 * to 'OTHER'.
10851 * Else: Allocate the supply to 'OTHER'*/
10852 /* IF p_excess_supply_by_dc = 'Y' THEN
10853 x_sql_stmt := x_sql_stmt ||'
10854 plan_id,
10855 inventory_item_id,
10856 original_item_id,
10857 organization_id,
10858 sr_instance_id,
10859 demand_class,
10860 demand_date,
10861 original_demand_date,
10862 demand_quantity,
10863 allocated_quantity,
10864 parent_demand_id,
10865 origination_type,
10866 original_origination_type,
10867 pf_display_flag,
10868 order_number,
10869 sales_order_line_id,
10870 source_organization_id,
10871 using_assembly_item_id,
10872 customer_id,
10873 ship_to_site_id,
10874 created_by,
10875 creation_date,
10876 last_updated_by,
10877 last_update_date)
10878 (
10879 SELECT /*+ use_hash(pegging_v mv) parallel(mv,' || to_char(p_parallel_degree) || ') */
10880 /* pegging_v.plan_id plan_id,
10881 pegging_v.inventory_item_id,
10882 pegging_v.original_item_id,
10883 pegging_v.organization_id,
10884 pegging_v.sr_instance_id,
10885 NVL(mv.demand_class, :def_num) demand_class,
10886 pegging_v.demand_date,
10887 pegging_v.original_demand_date,
10888 MIN(pegging_v.demand_quantity),
10889 SUM(pegging_v.allocated_quantity),
10890 pegging_v.demand_id,
10891 pegging_v.origination_type,
10892 pegging_v.original_origination_type,
10893 pegging_v.pf_display_flag,
10894 pegging_v.order_number,
10895 pegging_v.sales_order_line_id,
10896 pegging_v.source_organization_id,
10897 pegging_v.using_assembly_item_id,
10898 pegging_v.customer_id,
10899 pegging_v.ship_to_site_id,
10900 :l_user_id,
10901 :l_sysdate,
10902 :l_user_id,
10903 :l_sysdate
10904 FROM
10905 (SELECT /*+ ordered use_hash(peg2 peg1 d s msi)
10906 parallel(peg2,' || to_char(p_parallel_degree) || ')
10907 parallel(peg1,' || to_char(p_parallel_degree) || ')
10908 parallel(d,' || to_char(p_parallel_degree) || ')
10909 parallel(s,' || to_char(p_parallel_degree) || ')
10910 parallel(msi,' || to_char(p_parallel_degree) || ')
10911 full(peg2) full(peg1) full(d) full(s) full(msi) */
10912 /* peg1.plan_id plan_id,
10913 decode(msi.aggregate_time_fence_date,
10914 NULL, msi.inventory_item_id,
10915 decode(sign(s.new_schedule_date - msi.aggregate_time_fence_date),
10916 1, msi.product_family_id,
10917 msi.inventory_item_id)) inventory_item_id,
10918 msi.inventory_item_id original_item_id,
10919 peg1.organization_id,
10920 peg1.sr_instance_id,
10921 NVL(s.demand_class, :def_num) demand_class,
10922 decode(msi.aggregate_time_fence_date,
10923 NULL, trunc(DECODE('||MSC_ATP_PVT.G_HP_DEMAND_BUCKETING_PREF||',
10924 2, NVL(D.PLANNED_SHIP_DATE,D.USING_ASSEMBLY_DEMAND_DATE),
10925 NVL(D.SCHEDULE_SHIP_DATE,D.USING_ASSEMBLY_DEMAND_DATE))),
10926 decode(sign(trunc(s.new_schedule_date) - msi.aggregate_time_fence_date),
10927 1, decode(sign(trunc(DECODE('||MSC_ATP_PVT.G_HP_DEMAND_BUCKETING_PREF||',
10928 2, NVL(D.PLANNED_SHIP_DATE,D.USING_ASSEMBLY_DEMAND_DATE),
10929 NVL(D.SCHEDULE_SHIP_DATE,
10930 D.USING_ASSEMBLY_DEMAND_DATE)))
10931 - msi.aggregate_time_fence_date),
10932 1, trunc(DECODE('||MSC_ATP_PVT.G_HP_DEMAND_BUCKETING_PREF||',
10933 2, NVL(D.PLANNED_SHIP_DATE,D.USING_ASSEMBLY_DEMAND_DATE),
10934 NVL(D.SCHEDULE_SHIP_DATE,
10935 D.USING_ASSEMBLY_DEMAND_DATE))),
10936 msi.aggregate_time_fence_date+1),
10937 decode(sign(trunc(DECODE('||MSC_ATP_PVT.G_HP_DEMAND_BUCKETING_PREF||',
10938 2, NVL(D.PLANNED_SHIP_DATE,D.USING_ASSEMBLY_DEMAND_DATE),
10939 NVL(D.SCHEDULE_SHIP_DATE,
10940 D.USING_ASSEMBLY_DEMAND_DATE)))
10941 - msi.aggregate_time_fence_date),
10942 1, msi.aggregate_time_fence_date,
10943 trunc(DECODE('||MSC_ATP_PVT.G_HP_DEMAND_BUCKETING_PREF||',
10944 2, NVL(D.PLANNED_SHIP_DATE,D.USING_ASSEMBLY_DEMAND_DATE),
10945 NVL(D.SCHEDULE_SHIP_DATE,
10946 D.USING_ASSEMBLY_DEMAND_DATE)))))) demand_date,
10947 trunc(DECODE('||MSC_ATP_PVT.G_HP_DEMAND_BUCKETING_PREF||',
10948 2, NVL(D.PLANNED_SHIP_DATE,D.USING_ASSEMBLY_DEMAND_DATE),
10949 NVL(D.SCHEDULE_SHIP_DATE,
10950 D.USING_ASSEMBLY_DEMAND_DATE))) original_demand_date,
10951 decode(d.origination_type, 4, d.daily_demand_rate,
10952 d.using_requirement_quantity) demand_quantity,
10953 decode(msi.aggregate_time_fence_date,
10954 NULL, peg1.allocated_quantity,
10955 decode(msi.bom_item_type,
10956 5, 0,
10957 peg1.allocated_quantity)) allocated_quantity,
10958 d.demand_id,
10959 decode(msi.aggregate_time_fence_date,
10960 NULL, d.origination_type, 51) origination_type,
10961 d.origination_type original_origination_type,
10962 decode(msi.aggregate_time_fence_date,
10963 NULL, NULL,
10964 decode(sign(trunc(s.new_schedule_date) - msi.aggregate_time_fence_date),
10965 1, decode(sign(trunc(DECODE('||MSC_ATP_PVT.G_HP_DEMAND_BUCKETING_PREF||',
10966 2, NVL(D.PLANNED_SHIP_DATE,D.USING_ASSEMBLY_DEMAND_DATE),
10967 NVL(D.SCHEDULE_SHIP_DATE,
10968 D.USING_ASSEMBLY_DEMAND_DATE)))
10969 - msi.aggregate_time_fence_date),
10970 1, 1,
10971 NULL),
10972 decode(sign(trunc(DECODE('||MSC_ATP_PVT.G_HP_DEMAND_BUCKETING_PREF||',
10973 2, NVL(D.PLANNED_SHIP_DATE,D.USING_ASSEMBLY_DEMAND_DATE),
10974 NVL(D.SCHEDULE_SHIP_DATE,
10975 D.USING_ASSEMBLY_DEMAND_DATE)))
10976 - msi.aggregate_time_fence_date),
10977 1, NULL),
10978 1)) pf_display_flag,
10979 decode(d.origination_type, 1, to_char(d.disposition_id), d.order_number) order_number,
10980 d.sales_order_line_id,
10981 d.source_organization_id,
10982 d.using_assembly_item_id,
10983 d.customer_id,
10984 d.ship_to_site_id,
10985 /* New Allocation logic for time phased ATP */
10986 /* decode(msi.aggregate_time_fence_date,
10987 NULL, msi.inventory_item_id,
10988 msi.product_family_id) product_family_id
10989 FROM msc_full_pegging peg2,
10990 msc_full_pegging peg1,
10991 msc_demands d,
10992 msc_supplies s,
10993 msc_system_items msi
10994 WHERE peg1.plan_id = :p_plan_id
10995 AND peg2.plan_id = peg1.plan_id
10996 AND peg2.pegging_id = peg1.end_pegging_id
10997 AND peg2.demand_id IN (-1, -2)
10998 AND d.demand_id = peg1.demand_id
10999 AND peg1.plan_id = d.plan_id
11000 AND d.sr_instance_id = peg1.sr_instance_id
11001 AND peg1.sr_instance_id=s.sr_instance_id
11002 AND peg1.plan_id = s.plan_id
11003 AND peg1.transaction_id = s.transaction_id
11004 AND d.origination_type NOT IN (5,7,8,9,11,15,22,28,29,31)
11005 AND msi.plan_id = s.plan_id
11006 AND msi.inventory_item_id = s.inventory_item_id
11007 AND msi.sr_instance_id = s.sr_instance_id
11008 AND msi.organization_id = s.organization_id) pegging_v,
11009 msc_item_hierarchy_mv mv
11010 WHERE pegging_v.product_family_id = mv.inventory_item_id(+)
11011 AND pegging_v.organization_id = mv.organization_id (+)
11012 AND pegging_v.sr_instance_id = mv.sr_instance_id (+)
11013 AND pegging_v.demand_date >= mv.effective_date (+)
11014 AND pegging_v.demand_date <= mv.disable_date (+)
11015 AND pegging_v.demand_class = mv.demand_class (+)
11016 AND mv.level_id (+) = -1
11017 AND pegging_v.allocated_quantity <> 0
11018 GROUP BY
11019 pegging_v.plan_id plan_id,
11020 pegging_v.inventory_item_id,
11021 pegging_v.original_item_id,
11022 pegging_v.organization_id,
11023 pegging_v.sr_instance_id,
11024 NVL(mv.demand_class, :def_num),
11025 pegging_v.demand_date,
11026 pegging_v.original_demand_date,
11027 pegging_v.demand_id,
11028 pegging_v.origination_type,
11029 pegging_v.original_origination_type,
11030 pegging_v.pf_display_flag,
11031 pegging_v.order_number,
11032 pegging_v.sales_order_line_id,
11033 pegging_v.demand_source_type,--cmro
11034 pegging_v.source_organization_id,
11035 pegging_v.using_assembly_item_id,
11036 pegging_v.customer_id,
11037 pegging_v.ship_to_site_id,
11038 :l_user_id,
11039 :l_sysdate,
11040 :l_user_id,
11041 :l_sysdate)';
11042 ELSE
11043 x_sql_stmt := x_sql_stmt ||'
11044 plan_id,
11045 inventory_item_id,
11046 original_item_id,
11047 organization_id,
11048 sr_instance_id,
11049 demand_class,
11050 demand_date,
11051 original_demand_date,
11052 demand_quantity,
11053 allocated_quantity,
11054 parent_demand_id,
11055 origination_type,
11056 original_origination_type,
11057 pf_display_flag,
11058 order_number,
11059 sales_order_line_id,
11060 demand_source_type,--cmro
11061 source_organization_id,
11062 using_assembly_item_id,
11063 customer_id,
11064 ship_to_site_id,
11065 created_by,
11066 creation_date,
11067 last_updated_by,
11068 last_update_date)
11069 (
11070 SELECT /*+ ordered use_hash(peg2 peg1 d s msi)
11071 parallel(peg2,' || to_char(p_parallel_degree) || ')
11072 parallel(peg1,' || to_char(p_parallel_degree) || ')
11073 parallel(d,' || to_char(p_parallel_degree) || ')
11074 parallel(s,' || to_char(p_parallel_degree) || ')
11075 parallel(msi,' || to_char(p_parallel_degree) || ')
11076 full(peg2) full(peg1) full(d) full(s) full(msi) */
11077 /* peg1.plan_id plan_id,
11078 decode(msi.aggregate_time_fence_date,
11079 NULL, msi.inventory_item_id,
11080 decode(sign(s.new_schedule_date - msi.aggregate_time_fence_date),
11081 1, msi.product_family_id,
11082 msi.inventory_item_id)) inventory_item_id,
11083 msi.inventory_item_id original_item_id,
11084 peg1.organization_id,
11085 peg1.sr_instance_id,
11086 :def_num demand_class,
11087 decode(msi.aggregate_time_fence_date,
11088 NULL,trunc(DECODE('||MSC_ATP_PVT.G_HP_DEMAND_BUCKETING_PREF||',
11089 2, NVL(D.PLANNED_SHIP_DATE,D.USING_ASSEMBLY_DEMAND_DATE),
11090 NVL(D.SCHEDULE_SHIP_DATE,
11091 D.USING_ASSEMBLY_DEMAND_DATE))),
11092 decode(sign(trunc(s.new_schedule_date) - msi.aggregate_time_fence_date),
11093 1, decode(sign(trunc(DECODE('||MSC_ATP_PVT.G_HP_DEMAND_BUCKETING_PREF||',
11094 2, NVL(D.PLANNED_SHIP_DATE,D.USING_ASSEMBLY_DEMAND_DATE),
11095 NVL(D.SCHEDULE_SHIP_DATE,
11096 D.USING_ASSEMBLY_DEMAND_DATE)))
11097 - msi.aggregate_time_fence_date),
11098 1,trunc(DECODE('||MSC_ATP_PVT.G_HP_DEMAND_BUCKETING_PREF||',
11099 2, NVL(D.PLANNED_SHIP_DATE,D.USING_ASSEMBLY_DEMAND_DATE),
11100 NVL(D.SCHEDULE_SHIP_DATE,
11101 D.USING_ASSEMBLY_DEMAND_DATE))),
11102 msi.aggregate_time_fence_date+1),
11103 decode(sign(trunc(DECODE('||MSC_ATP_PVT.G_HP_DEMAND_BUCKETING_PREF||',
11104 2, NVL(D.PLANNED_SHIP_DATE,D.USING_ASSEMBLY_DEMAND_DATE),
11105 NVL(D.SCHEDULE_SHIP_DATE,
11106 D.USING_ASSEMBLY_DEMAND_DATE)))
11107 - msi.aggregate_time_fence_date),
11108 1, msi.aggregate_time_fence_date,
11109 trunc(DECODE('||MSC_ATP_PVT.G_HP_DEMAND_BUCKETING_PREF||',
11110 2, NVL(D.PLANNED_SHIP_DATE,D.USING_ASSEMBLY_DEMAND_DATE),
11111 NVL(D.SCHEDULE_SHIP_DATE,
11112 D.USING_ASSEMBLY_DEMAND_DATE)))))) demand_date,
11113 trunc(DECODE('||MSC_ATP_PVT.G_HP_DEMAND_BUCKETING_PREF||',
11114 2, NVL(D.PLANNED_SHIP_DATE,D.USING_ASSEMBLY_DEMAND_DATE),
11115 NVL(D.SCHEDULE_SHIP_DATE,
11116 D.USING_ASSEMBLY_DEMAND_DATE))) original_demand_date,
11117 MIN(decode(d.origination_type, 4, d.daily_demand_rate,
11118 d.using_requirement_quantity)) demand_quantity,
11119 SUM(decode(msi.aggregate_time_fence_date,
11120 NULL, peg1.allocated_quantity,
11121 decode(msi.bom_item_type,
11122 5, 0,
11123 peg1.allocated_quantity))) allocated_quantity,
11124 d.demand_id,
11125 decode(msi.aggregate_time_fence_date,
11126 NULL, d.origination_type, 51) origination_type,
11127 d.origination_type original_origination_type,
11128 decode(msi.aggregate_time_fence_date,
11129 NULL, NULL,
11130 decode(sign(trunc(s.new_schedule_date) - msi.aggregate_time_fence_date),
11131 1, decode(sign(trunc(DECODE('||MSC_ATP_PVT.G_HP_DEMAND_BUCKETING_PREF||',
11132 2, NVL(D.PLANNED_SHIP_DATE,D.USING_ASSEMBLY_DEMAND_DATE),
11133 NVL(D.SCHEDULE_SHIP_DATE,
11134 D.USING_ASSEMBLY_DEMAND_DATE)))
11135 - msi.aggregate_time_fence_date),
11136 1, 1,
11137 NULL),
11138 decode(sign(trunc(DECODE('||MSC_ATP_PVT.G_HP_DEMAND_BUCKETING_PREF||',
11139 2, NVL(D.PLANNED_SHIP_DATE,D.USING_ASSEMBLY_DEMAND_DATE),
11140 NVL(D.SCHEDULE_SHIP_DATE,
11141 D.USING_ASSEMBLY_DEMAND_DATE)))
11142 - msi.aggregate_time_fence_date),
11143 1, NULL),
11144 1)) pf_display_flag,
11145 decode(d.origination_type, 1, to_char(d.disposition_id), d.order_number) order_number,
11146 d.sales_order_line_id,
11147 d.demand_source_type,--cmro
11148 d.source_organization_id,
11149 d.using_assembly_item_id,
11150 d.customer_id,
11151 d.ship_to_site_id,
11152 :l_user_id,
11153 :l_sysdate,
11154 :l_user_id,
11155 :l_sysdate
11156 FROM msc_full_pegging peg2,
11157 msc_full_pegging peg1,
11158 msc_demands d,
11159 msc_supplies s,
11160 msc_system_items msi
11161 WHERE peg1.plan_id = :p_plan_id
11162 AND peg2.plan_id = peg1.plan_id
11163 AND peg2.pegging_id = peg1.end_pegging_id
11164 AND peg2.demand_id IN (-1, -2)
11165 AND d.demand_id = peg1.demand_id
11166 AND peg1.plan_id = d.plan_id
11167 AND d.sr_instance_id = peg1.sr_instance_id
11168 AND peg1.sr_instance_id=s.sr_instance_id
11169 AND peg1.plan_id = s.plan_id
11170 AND peg1.transaction_id = s.transaction_id
11171 AND d.origination_type NOT IN (5,7,8,9,11,15,22,28,29,31,70)
11172 AND msi.plan_id = s.plan_id
11173 AND msi.inventory_item_id = s.inventory_item_id
11174 AND msi.sr_instance_id = s.sr_instance_id
11175 AND msi.organization_id = s.organization_id
11176 GROUP BY
11177 peg1.plan_id,
11178 decode(msi.aggregate_time_fence_date,
11179 NULL, msi.inventory_item_id,
11180 decode(sign(s.new_schedule_date - msi.aggregate_time_fence_date),
11181 1, msi.product_family_id,
11182 msi.inventory_item_id)),
11183 msi.inventory_item_id,
11184 peg1.organization_id,
11185 peg1.sr_instance_id,
11186 :def_num,
11187 decode(msi.aggregate_time_fence_date,
11188 NULL, trunc(DECODE('||MSC_ATP_PVT.G_HP_DEMAND_BUCKETING_PREF||',
11189 2, NVL(D.PLANNED_SHIP_DATE,D.USING_ASSEMBLY_DEMAND_DATE),
11190 NVL(D.SCHEDULE_SHIP_DATE,
11191 D.USING_ASSEMBLY_DEMAND_DATE))),
11192 decode(sign(trunc(s.new_schedule_date) - msi.aggregate_time_fence_date),
11193 1, decode(sign(trunc(DECODE('||MSC_ATP_PVT.G_HP_DEMAND_BUCKETING_PREF||',
11194 2, NVL(D.PLANNED_SHIP_DATE,D.USING_ASSEMBLY_DEMAND_DATE),
11195 NVL(D.SCHEDULE_SHIP_DATE,
11196 D.USING_ASSEMBLY_DEMAND_DATE)))
11197 - msi.aggregate_time_fence_date),
11198 1, trunc(DECODE('||MSC_ATP_PVT.G_HP_DEMAND_BUCKETING_PREF||',
11199 2, NVL(D.PLANNED_SHIP_DATE,D.USING_ASSEMBLY_DEMAND_DATE),
11200 NVL(D.SCHEDULE_SHIP_DATE,
11201 D.USING_ASSEMBLY_DEMAND_DATE))),
11202 msi.aggregate_time_fence_date+1),
11203 decode(sign(trunc(DECODE('||MSC_ATP_PVT.G_HP_DEMAND_BUCKETING_PREF||',
11204 2, NVL(D.PLANNED_SHIP_DATE,D.USING_ASSEMBLY_DEMAND_DATE),
11205 NVL(D.SCHEDULE_SHIP_DATE,
11206 D.USING_ASSEMBLY_DEMAND_DATE)))
11207 - msi.aggregate_time_fence_date),
11208 1, msi.aggregate_time_fence_date,
11209 trunc(DECODE('||MSC_ATP_PVT.G_HP_DEMAND_BUCKETING_PREF||',
11210 2, NVL(D.PLANNED_SHIP_DATE,D.USING_ASSEMBLY_DEMAND_DATE),
11211 NVL(D.SCHEDULE_SHIP_DATE,
11212 D.USING_ASSEMBLY_DEMAND_DATE)))))),
11213 trunc(DECODE('||MSC_ATP_PVT.G_HP_DEMAND_BUCKETING_PREF||',
11214 2, NVL(D.PLANNED_SHIP_DATE,D.USING_ASSEMBLY_DEMAND_DATE),
11215 NVL(D.SCHEDULE_SHIP_DATE,
11216 D.USING_ASSEMBLY_DEMAND_DATE))),
11217 d.demand_id,
11218 decode(msi.aggregate_time_fence_date,
11219 NULL, d.origination_type, 51),
11220 d.origination_type,
11221 decode(msi.aggregate_time_fence_date,
11222 NULL, NULL,
11223 decode(sign(trunc(s.new_schedule_date) - msi.aggregate_time_fence_date),
11224 1, decode(sign(trunc(DECODE('||MSC_ATP_PVT.G_HP_DEMAND_BUCKETING_PREF||',
11225 2, NVL(D.PLANNED_SHIP_DATE,D.USING_ASSEMBLY_DEMAND_DATE),
11226 NVL(D.SCHEDULE_SHIP_DATE,
11227 D.USING_ASSEMBLY_DEMAND_DATE)))
11228 - msi.aggregate_time_fence_date),
11229 1, 1,
11230 NULL),
11231 decode(sign(trunc(DECODE('||MSC_ATP_PVT.G_HP_DEMAND_BUCKETING_PREF||',
11232 2, NVL(D.PLANNED_SHIP_DATE,D.USING_ASSEMBLY_DEMAND_DATE),
11233 NVL(D.SCHEDULE_SHIP_DATE,
11234 D.USING_ASSEMBLY_DEMAND_DATE)))
11235 - msi.aggregate_time_fence_date),
11236 1, NULL),
11237 1)),
11238 decode(d.origination_type, 1, to_char(d.disposition_id), d.order_number),
11239 d.sales_order_line_id,
11240 d.demand_source_type,--cmro
11241 d.source_organization_id,
11242 d.using_assembly_item_id,
11243 d.customer_id,
11244 d.ship_to_site_id,
11245 :l_user_id,
11246 :l_sysdate,
11247 :l_user_id,
11248 :l_sysdate)';
11249 END IF;
11250 ELSE
11251 -- Prepare demands stmt for creation of bucketed demands/rollup supplies
11252 x_sql_stmt := x_sql_stmt ||'
11253 plan_id,
11254 inventory_item_id,
11255 original_item_id,
11256 organization_id,
11257 sr_instance_id,
11258 demand_class,
11259 demand_date,
11260 original_demand_date,
11261 demand_quantity,
11262 allocated_quantity,
11263 parent_demand_id,
11264 origination_type,
11265 original_origination_type,
11266 pf_display_flag,
11267 order_number,
11268 sales_order_line_id,
11269 demand_source_type,--cmro
11270 source_organization_id,
11271 using_assembly_item_id,
11272 customer_id,
11273 ship_to_site_id,
11274 created_by,
11275 creation_date,
11276 last_updated_by,
11277 last_update_date)
11278 (SELECT
11279 peg1.plan_id plan_id,
11280 decode(sign(s.new_schedule_date - msi.aggregate_time_fence_date),
11281 1, msi.product_family_id,
11282 msi.inventory_item_id) inventory_item_id,
11283 msi.inventory_item_id original_item_id,
11284 peg1.organization_id,
11285 peg1.sr_instance_id,
11286 d.demand_class demand_class,
11287 decode(sign(trunc(s.new_schedule_date) - msi.aggregate_time_fence_date),
11288 1, decode(sign(trunc(DECODE('||MSC_ATP_PVT.G_HP_DEMAND_BUCKETING_PREF||',
11289 2, NVL(D.PLANNED_SHIP_DATE,D.USING_ASSEMBLY_DEMAND_DATE),
11290 NVL(D.SCHEDULE_SHIP_DATE,
11291 D.USING_ASSEMBLY_DEMAND_DATE)))
11292 - msi.aggregate_time_fence_date),
11293 1, trunc(DECODE('||MSC_ATP_PVT.G_HP_DEMAND_BUCKETING_PREF||',
11294 2, NVL(D.PLANNED_SHIP_DATE,D.USING_ASSEMBLY_DEMAND_DATE),
11295 NVL(D.SCHEDULE_SHIP_DATE,
11296 D.USING_ASSEMBLY_DEMAND_DATE))),
11297 msi.aggregate_time_fence_date+1),
11298 decode(sign(trunc(DECODE('||MSC_ATP_PVT.G_HP_DEMAND_BUCKETING_PREF||',
11299 2, NVL(D.PLANNED_SHIP_DATE,D.USING_ASSEMBLY_DEMAND_DATE),
11300 NVL(D.SCHEDULE_SHIP_DATE,
11301 D.USING_ASSEMBLY_DEMAND_DATE)))
11302 - msi.aggregate_time_fence_date),
11303 1, msi.aggregate_time_fence_date,
11304 trunc(DECODE('||MSC_ATP_PVT.G_HP_DEMAND_BUCKETING_PREF||',
11305 2, NVL(D.PLANNED_SHIP_DATE,D.USING_ASSEMBLY_DEMAND_DATE),
11306 NVL(D.SCHEDULE_SHIP_DATE,
11307 D.USING_ASSEMBLY_DEMAND_DATE))))) demand_date,
11308 trunc(DECODE('||MSC_ATP_PVT.G_HP_DEMAND_BUCKETING_PREF||',
11309 2, NVL(D.PLANNED_SHIP_DATE,D.USING_ASSEMBLY_DEMAND_DATE),
11310 NVL(D.SCHEDULE_SHIP_DATE,
11311 D.USING_ASSEMBLY_DEMAND_DATE))) original_demand_date,
11312 MIN(decode(d.origination_type, 4, d.daily_demand_rate,
11313 d.using_requirement_quantity)) demand_quantity,
11314 SUM(peg1.allocated_quantity),
11315 d.demand_id,
11316 51 origination_type, -- ATP Bucketed Demand
11317 d.origination_type original_origination_type,
11318 decode(sign(trunc(s.new_schedule_date) - msi.aggregate_time_fence_date),
11319 1, decode(sign(trunc(DECODE('||MSC_ATP_PVT.G_HP_DEMAND_BUCKETING_PREF||',
11320 2, NVL(D.PLANNED_SHIP_DATE,D.USING_ASSEMBLY_DEMAND_DATE),
11321 NVL(D.SCHEDULE_SHIP_DATE,
11322 D.USING_ASSEMBLY_DEMAND_DATE)))
11323 - msi.aggregate_time_fence_date),
11324 1, 1,
11325 NULL),
11326 decode(sign(trunc(DECODE('||MSC_ATP_PVT.G_HP_DEMAND_BUCKETING_PREF||',
11327 2, NVL(D.PLANNED_SHIP_DATE,D.USING_ASSEMBLY_DEMAND_DATE),
11328 NVL(D.SCHEDULE_SHIP_DATE,
11329 D.USING_ASSEMBLY_DEMAND_DATE)))
11330 - msi.aggregate_time_fence_date),
11331 1, NULL),
11332 1) pf_display_flag,
11333 decode(d.origination_type, 1, to_char(d.disposition_id), d.order_number) order_number,
11334 d.sales_order_line_id,
11335 d.demand_source_type,--cmro
11336 d.source_organization_id,
11337 d.using_assembly_item_id,
11338 d.customer_id,
11339 d.ship_to_site_id,
11340 :l_user_id,
11341 :l_sysdate,
11342 :l_user_id,
11343 :l_sysdate
11344 FROM msc_full_pegging peg1,
11345 msc_demands d,
11346 msc_supplies s,
11347 msc_system_items msi
11348 WHERE d.demand_id = peg1.demand_id
11349 AND d.plan_id = peg1.plan_id
11350 AND d.sr_instance_id = peg1.sr_instance_id
11351 AND d.origination_type NOT IN (5,7,8,9,11,15,22,28,29,31,70)
11352 AND s.transaction_id = peg1.transaction_id
11353 AND s.plan_id = peg1.plan_id
11354 AND msi.plan_id = d.plan_id
11355 AND msi.inventory_item_id = d.inventory_item_id
11356 AND msi.sr_instance_id = d.sr_instance_id
11357 AND msi.organization_id = d.organization_id
11358 --AND nvl(msi.product_family_id, msi.inventory_item_id)<>msi.inventory_item_id
11359 AND msi.aggregate_time_fence_date is not null
11360 AND msi.bom_item_type <> 5
11361 AND msi.plan_id = :p_plan_id
11362 GROUP BY
11363 peg1.plan_id,
11364 decode(sign(s.new_schedule_date - msi.aggregate_time_fence_date),
11365 1, msi.product_family_id,
11366 msi.inventory_item_id),
11367 msi.inventory_item_id,
11368 peg1.organization_id,
11369 peg1.sr_instance_id,
11370 d.demand_class,
11371 decode(sign(trunc(s.new_schedule_date) - msi.aggregate_time_fence_date),
11372 1, decode(sign(trunc(DECODE('||MSC_ATP_PVT.G_HP_DEMAND_BUCKETING_PREF||',
11373 2, NVL(D.PLANNED_SHIP_DATE,D.USING_ASSEMBLY_DEMAND_DATE),
11374 NVL(D.SCHEDULE_SHIP_DATE,
11375 D.USING_ASSEMBLY_DEMAND_DATE)))
11376 - msi.aggregate_time_fence_date),
11377 1, trunc(DECODE('||MSC_ATP_PVT.G_HP_DEMAND_BUCKETING_PREF||',
11378 2, NVL(D.PLANNED_SHIP_DATE,D.USING_ASSEMBLY_DEMAND_DATE),
11379 NVL(D.SCHEDULE_SHIP_DATE,
11380 D.USING_ASSEMBLY_DEMAND_DATE))),
11381 msi.aggregate_time_fence_date+1),
11382 decode(sign(trunc(DECODE('||MSC_ATP_PVT.G_HP_DEMAND_BUCKETING_PREF||',
11383 2, NVL(D.PLANNED_SHIP_DATE,D.USING_ASSEMBLY_DEMAND_DATE),
11384 NVL(D.SCHEDULE_SHIP_DATE,
11385 D.USING_ASSEMBLY_DEMAND_DATE))) - msi.aggregate_time_fence_date),
11386 1, msi.aggregate_time_fence_date,
11387 trunc(DECODE('||MSC_ATP_PVT.G_HP_DEMAND_BUCKETING_PREF||',
11388 2, NVL(D.PLANNED_SHIP_DATE,D.USING_ASSEMBLY_DEMAND_DATE),
11389 NVL(D.SCHEDULE_SHIP_DATE,
11390 D.USING_ASSEMBLY_DEMAND_DATE))))),
11391 trunc(DECODE('||MSC_ATP_PVT.G_HP_DEMAND_BUCKETING_PREF||',
11392 2, NVL(D.PLANNED_SHIP_DATE,D.USING_ASSEMBLY_DEMAND_DATE),
11393 NVL(D.SCHEDULE_SHIP_DATE,
11394 D.USING_ASSEMBLY_DEMAND_DATE))),
11395 d.demand_id,
11396 51,
11397 d.origination_type,
11398 decode(sign(trunc(s.new_schedule_date) - msi.aggregate_time_fence_date),
11399 1, decode(sign(trunc(DECODE('||MSC_ATP_PVT.G_HP_DEMAND_BUCKETING_PREF||',
11400 2, NVL(D.PLANNED_SHIP_DATE,D.USING_ASSEMBLY_DEMAND_DATE),
11401 NVL(D.SCHEDULE_SHIP_DATE,
11402 D.USING_ASSEMBLY_DEMAND_DATE)))
11403 - msi.aggregate_time_fence_date),
11404 1, 1,
11405 NULL),
11406 decode(sign(trunc(DECODE('||MSC_ATP_PVT.G_HP_DEMAND_BUCKETING_PREF||',
11407 2, NVL(D.PLANNED_SHIP_DATE,D.USING_ASSEMBLY_DEMAND_DATE),
11408 NVL(D.SCHEDULE_SHIP_DATE,
11409 D.USING_ASSEMBLY_DEMAND_DATE)))
11410 - msi.aggregate_time_fence_date),
11411 1, NULL),
11412 1),
11413 decode(d.origination_type, 1, to_char(d.disposition_id), d.order_number),
11414 d.sales_order_line_id,
11415 d.demand_source_type,--cmro
11416 d.source_organization_id,
11417 d.using_assembly_item_id,
11418 d.customer_id,
11419 d.ship_to_site_id,
11420 :l_user_id,
11421 :l_sysdate,
11422 :l_user_id,
11423 :l_sysdate
11424 )';
11425 END IF;
11426
11427 EXCEPTION
11428 WHEN OTHERS THEN
11429 IF PG_DEBUG in ('Y', 'C') THEN
11430 msc_util.msc_log('Prepare_Demands_Stmt1: ' || 'Error occurred: ' || to_char(sqlcode) || ':' || SQLERRM);
11431 END IF;
11432 x_return_status := FND_API.G_RET_STS_ERROR;
11433
11434 END Prepare_Demands_Stmt1;
11435
11436 /*--Prepare_Demands_Stmt2---------------------------------------------------
11437 | o Called from Pf_Post_Plan_Proc procedure to:
11438 | - Prepare demands stmt for preallocation + bucketting for demands
11439 | NOT pegged to excess/safety stock. (Demand priority AATP)
11440 | o Prepares demand stmt for both share plan partition "yes" and "no".
11441 +-------------------------------------------------------------------------*/
11442 /*PROCEDURE Prepare_Demands_Stmt2(
11443 p_share_partition IN VARCHAR2,
11444 p_temp_table IN VARCHAR2,
11445 p_parallel_degree IN NUMBER,
11446 x_sql_stmt OUT NOCOPY VARCHAR2,
11447 x_return_status OUT NOCOPY VARCHAR2
11448 )
11449 IS
11450
11451 BEGIN
11452 -- Initializing API return code
11453 x_return_status := FND_API.G_RET_STS_SUCCESS;
11454
11455 IF p_share_partition = 'Y' THEN
11456 x_sql_stmt := '
11457 INSERT INTO MSC_ALLOC_DEMANDS(';
11458 ELSE
11459 x_sql_stmt := '
11460 INSERT INTO ' || p_temp_table || '(';
11461 END IF;
11462
11463 x_sql_stmt := x_sql_stmt ||'
11464 plan_id,
11465 inventory_item_id,
11466 original_item_id,
11467 organization_id,
11468 sr_instance_id,
11469 demand_class,
11470 demand_date,
11471 original_demand_date,
11472 demand_quantity,
11473 allocated_quantity,
11474 parent_demand_id,
11475 origination_type,
11476 original_origination_type,
11477 pf_display_flag,
11478 order_number,
11479 sales_order_line_id,
11480 demand_source_type,--cmro
11481 source_organization_id,
11482 using_assembly_item_id,
11483 customer_id,
11484 ship_to_site_id,
11485 created_by,
11486 creation_date,
11487 last_updated_by,
11488 last_update_date)
11489 (
11490 SELECT /*+ use_hash(mv) parallel(mv,' || to_char(p_parallel_degree) || ')
11491 full(peg1.d1) full(peg1.d2) full(peg1.peg1) full(peg1.peg2) full(mv) full(peg1.tp) */
11492 /* pegging_v.plan_id,
11493 pegging_v.inventory_item_id,
11494 pegging_v.original_item_id,
11495 pegging_v.organization_id,
11496 pegging_v.sr_instance_id,
11497 NVL(mv.demand_class, :def_num) demand_class,
11498 pegging_v.demand_date,
11499 pegging_v.original_demand_date,
11500 MIN(pegging_v.demand_quantity),
11501 SUM(pegging_v.allocated_quantity),
11502 pegging_v.parent_demand_id,
11503 pegging_v.origination_type,
11504 pegging_v.original_origination_type,
11505 pegging_v.pf_display_flag,
11506 pegging_v.order_number,
11507 pegging_v.sales_order_line_id,
11508 pegging_v.demand_source_type,--cmro
11509 pegging_v.source_organization_id,
11510 pegging_v.using_assembly_item_id,
11511 pegging_v.customer_id,
11512 pegging_v.ship_to_site_id,
11513 :l_user_id,
11514 :l_sysdate,
11515 :l_user_id,
11516 :l_sysdate
11517 FROM
11518 (SELECT /*+ ordered use_hash(d2 peg2 peg1 tp)
11519 parallel(d2,' || to_char(p_parallel_degree) || ')
11520 parallel(d1,' || to_char(p_parallel_degree) || ')
11521 parallel(peg2,' || to_char(p_parallel_degree) || ')
11522 parallel(peg1,' || to_char(p_parallel_degree) || ')
11523 parallel(tp,' || to_char(p_parallel_degree) || ') */
11524 /* peg2.plan_id plan_id,
11525 decode(sign(s.new_schedule_date - msi.aggregate_time_fence_date),
11526 1, msi.product_family_id,
11527 msi.inventory_item_id) inventory_item_id,
11528 msi.inventory_item_id original_item_id,
11529 peg2.organization_id,
11530 peg2.sr_instance_id,
11531 NVL(d1.demand_class, :def_num) demand_class,
11532 decode(msi.aggregate_time_fence_date,
11533 NULL, trunc(DECODE('||MSC_ATP_PVT.G_HP_DEMAND_BUCKETING_PREF||',
11534 2, NVL(d2.PLANNED_SHIP_DATE,d2.USING_ASSEMBLY_DEMAND_DATE),
11535 NVL(d2.SCHEDULE_SHIP_DATE,
11536 d2.USING_ASSEMBLY_DEMAND_DATE))),
11537 decode(sign(trunc(s.new_schedule_date) - msi.aggregate_time_fence_date),
11538 1, decode(sign(trunc(DECODE('||MSC_ATP_PVT.G_HP_DEMAND_BUCKETING_PREF||',
11539 2, NVL(d2.PLANNED_SHIP_DATE,d2.USING_ASSEMBLY_DEMAND_DATE),
11540 NVL(d2.SCHEDULE_SHIP_DATE,
11541 d2.USING_ASSEMBLY_DEMAND_DATE))) - msi.aggregate_time_fence_date),
11542 1, trunc(DECODE('||MSC_ATP_PVT.G_HP_DEMAND_BUCKETING_PREF||',
11543 2, NVL(d2.PLANNED_SHIP_DATE,d2.USING_ASSEMBLY_DEMAND_DATE),
11544 NVL(d2.SCHEDULE_SHIP_DATE,
11545 d2.USING_ASSEMBLY_DEMAND_DATE))),
11546 msi.aggregate_time_fence_date+1),
11547 decode(sign(trunc(DECODE('||MSC_ATP_PVT.G_HP_DEMAND_BUCKETING_PREF||',
11548 2, NVL(d2.PLANNED_SHIP_DATE,d2.USING_ASSEMBLY_DEMAND_DATE),
11549 NVL(d2.SCHEDULE_SHIP_DATE,
11550 d2.USING_ASSEMBLY_DEMAND_DATE)))
11551 - msi.aggregate_time_fence_date),
11552 1, msi.aggregate_time_fence_date,
11553 trunc(DECODE('||MSC_ATP_PVT.G_HP_DEMAND_BUCKETING_PREF||',
11554 2, NVL(d2.PLANNED_SHIP_DATE,d2.USING_ASSEMBLY_DEMAND_DATE),
11555 NVL(d2.SCHEDULE_SHIP_DATE,
11556 d2.USING_ASSEMBLY_DEMAND_DATE)))))) demand_date,
11557 trunc(DECODE('||MSC_ATP_PVT.G_HP_DEMAND_BUCKETING_PREF||',
11558 2, NVL(d2.PLANNED_SHIP_DATE,d2.USING_ASSEMBLY_DEMAND_DATE),
11559 NVL(d2.SCHEDULE_SHIP_DATE,
11560 d2.USING_ASSEMBLY_DEMAND_DATE))) original_demand_date,
11561 decode(d2.origination_type, 4, d2.daily_demand_rate,
11562 d2.using_requirement_quantity) demand_quantity,
11563 decode(msi.aggregate_time_fence_date,
11564 NULL, peg2.allocated_quantity,
11565 decode(msi.bom_item_type,
11566 5, 0,
11567 peg2.allocated_quantity)) allocated_quantity,
11568 d2.demand_id parent_demand_id,
11569 51 origination_type, -- ATP Bucketed Demand
11570 d2.origination_type original_origination_type,
11571 decode(sign(trunc(s.new_schedule_date) - msi.aggregate_time_fence_date),
11572 1, decode(sign(trunc(DECODE('||MSC_ATP_PVT.G_HP_DEMAND_BUCKETING_PREF||',
11573 2, NVL(d2.PLANNED_SHIP_DATE,d2.USING_ASSEMBLY_DEMAND_DATE),
11574 NVL(d2.SCHEDULE_SHIP_DATE,
11575 d2.USING_ASSEMBLY_DEMAND_DATE)))
11576 - msi.aggregate_time_fence_date),
11577 1, 1,
11578 NULL),
11579 decode(sign(trunc(DECODE('||MSC_ATP_PVT.G_HP_DEMAND_BUCKETING_PREF||',
11580 2, NVL(d2.PLANNED_SHIP_DATE,d2.USING_ASSEMBLY_DEMAND_DATE),
11581 NVL(d2.SCHEDULE_SHIP_DATE,
11582 d2.USING_ASSEMBLY_DEMAND_DATE)))
11583 - msi.aggregate_time_fence_date),
11584 1, NULL),
11585 1) pf_display_flag,
11586 decode(d2.origination_type, 1, to_char(d2.disposition_id), d2.order_number) order_number,
11587 d2.sales_order_line_id,
11588 d2.demand_source_type,--cmro
11589 d2.source_organization_id,
11590 d2.using_assembly_item_id,
11591 d2.customer_id,
11592 d2.ship_to_site_id,
11593 decode(msi.aggregate_time_fence_date,
11594 NULL, msi.inventory_item_id,
11595 msi.product_family_id) product_family_id
11596 FROM msc_demands d2,
11597 msc_full_pegging peg2,
11598 msc_full_pegging peg1 ,
11599 msc_demands d1,
11600 msc_supplies s,
11601 msc_system_items msi
11602 WHERE peg2.plan_id = :p_plan_id
11603 AND peg2.plan_id = peg1.plan_id
11604 AND peg2.end_pegging_id = peg1.pegging_id
11605 AND peg2.sr_instance_id = peg1.sr_instance_id
11606 AND d1.plan_id = peg1.plan_id
11607 AND d1.demand_id = peg1.demand_id
11608 AND d1.sr_instance_id = peg1.sr_instance_id
11609 AND d2.plan_id = peg2.plan_id
11610 AND d2.demand_id = peg2.demand_id
11611 AND d2.sr_instance_id = peg2.sr_instance_id
11612 AND d2.origination_type NOT IN (5,7,8,9,11,15,22,28,29,31,70)
11613 AND peg2.sr_instance_id=s.sr_instance_id
11614 AND peg2.plan_id = s.plan_id
11615 AND peg2.transaction_id = s.transaction_id
11616 AND msi.plan_id = s.plan_id
11617 AND msi.inventory_item_id = s.inventory_item_id
11618 AND msi.sr_instance_id = s.sr_instance_id
11619 AND msi.organization_id = s.organization_id
11620 ) pegging_v,
11621 msc_item_hierarchy_mv mv
11622 WHERE pegging_v.product_family_id = mv.inventory_item_id(+)
11623 AND pegging_v.organization_id = mv.organization_id (+)
11624 AND pegging_v.sr_instance_id = mv.sr_instance_id (+)
11625 AND pegging_v.demand_date >= mv.effective_date (+)
11626 AND pegging_v.demand_date <= mv.disable_date (+)
11627 AND pegging_v.demand_class = mv.demand_class (+)
11628 AND mv.level_id (+) = -1
11629 AND pegging_v.allocated_quantity <> 0
11630 GROUP BY
11631 pegging_v.plan_id,
11632 pegging_v.inventory_item_id,
11633 pegging_v.original_item_id,
11634 pegging_v.organization_id,
11635 pegging_v.sr_instance_id,
11636 NVL(mv.demand_class, :def_num),
11637 pegging_v.demand_date,
11638 pegging_v.original_demand_date,
11639 pegging_v.parent_demand_id,
11640 pegging_v.origination_type,
11641 pegging_v.original_origination_type,
11642 pegging_v.pf_display_flag,
11643 pegging_v.order_number,
11644 pegging_v.sales_order_line_id,
11645 pegging_v.demand_source_type,--cmro
11646 pegging_v.source_organization_id,
11647 pegging_v.using_assembly_item_id,
11648 pegging_v.customer_id,
11649 pegging_v.ship_to_site_id,
11650 :l_user_id,
11651 :l_sysdate,
11652 :l_user_id,
11653 :l_sysdate)';
11654
11655 EXCEPTION
11656 WHEN OTHERS THEN
11657 IF PG_DEBUG in ('Y', 'C') THEN
11658 msc_util.msc_log('Prepare_Demands_Stmt2: ' || 'Error occurred: ' || to_char(sqlcode) || ':' || SQLERRM);
11659 END IF;
11660 x_return_status := FND_API.G_RET_STS_ERROR;
11661
11662 END Prepare_Demands_Stmt2;
11663
11664 /*--Prepare_Supplies_Stmt1--------------------------------------------------
11665 | o Called from Pf_Post_Plan_Proc procedure to:
11666 | - Prepare supplies stmt for preallocation + rollup for supplies
11667 | pegged to excess/safety stock. (Demand priority AATP)
11668 | : Excess supply by demand class = No
11669 | : Excess supply by demand class = Yes (for project atp)
11670 | - Prepare supplies stmt for rollup. (All PDS ATP scenarios except
11671 | demand priority AATP)
11672 | o Prepares supplies stmt for both share plan partition "yes" and "no".
11673 +-------------------------------------------------------------------------*/
11674 /*PROCEDURE Prepare_Supplies_Stmt1(
11675 p_share_partition IN VARCHAR2,
11676 p_demand_priority IN VARCHAR2,
11677 p_excess_supply_by_dc IN VARCHAR2,
11678 p_temp_table IN VARCHAR2,
11679 p_parallel_degree IN NUMBER,
11680 x_sql_stmt OUT NOCOPY VARCHAR2,
11681 x_return_status OUT NOCOPY VARCHAR2
11682 )
11683 IS
11684
11685 BEGIN
11686 -- Initializing API return code
11687 x_return_status := FND_API.G_RET_STS_SUCCESS;
11688
11689 IF p_share_partition = 'Y' THEN
11690 x_sql_stmt := '
11691 INSERT INTO MSC_ALLOC_SUPPLIES(';
11692 ELSE
11693 x_sql_stmt := '
11694 INSERT INTO ' || p_temp_table || '(';
11695 END IF;
11696
11697 IF p_demand_priority = 'Y' THEN
11698 /* Prepare supplies stmt for preallocation + creation of rollup supplies
11699 * project atp changes
11700 * If the profile is set to 'Yes' then:
11701 * o If supply has a demand class existing on allocation rule then
11702 * allocate the supply to that demand class.
11703 * o If supply has a demand class not present on allocation rule then
11704 * allocate the supply to 'OTHER'.
11705 * o If supply does not have a demand class present, allocate the supply
11706 * to 'OTHER'.
11707 * Else: Allocate the supply to 'OTHER'*/
11708 /* IF p_excess_supply_by_dc = 'Y' THEN
11709 x_sql_stmt := x_sql_stmt ||'
11710 plan_id,
11711 inventory_item_id,
11712 original_item_id,
11713 organization_id,
11714 sr_instance_id,
11715 demand_class,
11716 supply_date,
11717 parent_transaction_id,
11718 allocated_quantity,
11719 supply_quantity,
11720 order_type,
11721 original_order_type,
11722 order_number,
11723 schedule_designator_id,
11724 customer_id, -- not really required only used in rule based
11725 ship_to_site_id, -- not really required only used in rule based
11726 created_by,
11727 creation_date,
11728 last_updated_by,
11729 last_update_date)
11730 (
11731 SELECT /*+ use_hash(pegging_v mv) parallel(mv,' || to_char(p_parallel_degree) || ') */
11732 /* pegging_v.plan_id plan_id,
11733 pegging_v.inventory_item_id,
11734 pegging_v.original_item_id,
11735 pegging_v.organization_id,
11736 pegging_v.sr_instance_id,
11737 NVL(mv.demand_class, :def_num) demand_class,
11738 pegging_v.supply_date,
11739 pegging_v.transaction_id,
11740 SUM(pegging_v.allocated_quantity),
11741 MIN(pegging_v.supply_quantity),
11742 pegging_v.order_type,
11743 pegging_v.original_order_type,
11744 pegging_v.order_number,
11745 pegging_v.schedule_designator_id,
11746 pegging_v.customer_id,
11747 pegging_v.ship_to_site_id,
11748 :l_user_id,
11749 :l_sysdate,
11750 :l_user_id,
11751 :l_sysdate
11752 FROM
11753 (SELECT /*+ ordered use_hash(peg2 peg1) use_hash(peg1 s msi)
11754 parallel(peg2,' || to_char(p_parallel_degree) || ')
11755 parallel(peg1,' || to_char(p_parallel_degree) || ')
11756 parallel(s,' || to_char(p_parallel_degree) || ')
11757 parallel(msi,' || to_char(p_parallel_degree) || ') */
11758 /* peg1.plan_id plan_id,
11759 decode(msi.aggregate_time_fence_date,
11760 NULL, msi.inventory_item_id,
11761 decode(sign(TRUNC(s.new_schedule_date) - msi.aggregate_time_fence_date),
11762 1, msi.product_family_id,
11763 msi.inventory_item_id)) inventory_item_id,
11764 msi.inventory_item_id original_item_id,
11765 peg1.organization_id,
11766 peg1.sr_instance_id,
11767 NVL(s.demand_class, :def_num) demand_class,
11768 TRUNC(s.new_schedule_date) supply_date,
11769 decode(msi.aggregate_time_fence_date,
11770 NULL, peg1.allocated_quantity,
11771 decode(msi.bom_item_type,
11772 5, 0,
11773 peg1.allocated_quantity)) allocated_quantity,
11774 s.new_order_quantity supply_quantity,
11775 peg1.transaction_id,
11776 decode(msi.aggregate_time_fence_date,
11777 NULL, s.order_type, 50) order_type
11778 s.order_type original_order_type,
11779 s.order_number,
11780 s.schedule_designator_id,
11781 s.customer_id,
11782 s.ship_to_site_id,
11783 decode(msi.aggregate_time_fence_date,
11784 NULL, msi.inventory_item_id,
11785 msi.product_family_id) product_family_id
11786 FROM msc_full_pegging peg2,
11787 msc_full_pegging peg1,
11788 msc_supplies s,
11789 msc_system_items msi
11790 WHERE peg1.plan_id = :p_plan_id
11791 AND peg2.plan_id = peg1.plan_id
11792 AND peg2.pegging_id = peg1.end_pegging_id
11793 AND peg2.demand_id IN (-1, -2)
11794 AND s.plan_id = peg1.plan_id
11795 AND s.transaction_id = peg1.transaction_id
11796 AND s.sr_instance_id = peg1.sr_instance_id
11797 AND msi.sr_instance_id = s.sr_instance_id
11798 AND msi.plan_id = s.plan_id
11799 AND msi.organization_id = s.organization_id
11800 AND msi.inventory_item_id = s.inventory_item_id) pegging_v,
11801 msc_item_hierarchy_mv mv
11802 WHERE pegging_v.product_family_id = mv.inventory_item_id(+)
11803 AND pegging_v.organization_id = mv.organization_id (+)
11804 AND pegging_v.sr_instance_id = mv.sr_instance_id (+)
11805 AND pegging_v.supply_date >= mv.effective_date (+)
11806 AND pegging_v.supply_date <= mv.disable_date (+)
11807 AND pegging_v.demand_class = mv.demand_class (+)
11808 AND mv.level_id (+) = -1
11809 AND pegging_v.allocated_quantity <> 0
11810 GROUP BY
11811 pegging_v.plan_id plan_id,
11812 pegging_v.inventory_item_id,
11813 pegging_v.original_item_id,
11814 pegging_v.organization_id,
11815 pegging_v.sr_instance_id,
11816 NVL(mv.demand_class, :def_num),
11817 pegging_v.supply_date,
11818 pegging_v.transaction_id,
11819 pegging_v.order_type,
11820 pegging_v.original_order_type,
11821 pegging_v.order_number,
11822 pegging_v.schedule_designator_id,
11823 pegging_v.customer_id,
11824 pegging_v.ship_to_site_id,
11825 :l_user_id,
11826 :l_sysdate,
11827 :l_user_id,
11828 :l_sysdate)';
11829 ELSE
11830 x_sql_stmt := x_sql_stmt ||'
11831 plan_id,
11832 inventory_item_id,
11833 original_item_id,
11834 organization_id,
11835 sr_instance_id,
11836 demand_class,
11837 supply_date,
11838 parent_transaction_id,
11839 allocated_quantity,
11840 supply_quantity,
11841 order_type,
11842 original_order_type,
11843 order_number,
11844 schedule_designator_id,
11845 customer_id, -- not really required only used in rule based
11846 ship_to_site_id, -- not really required only used in rule based
11847 created_by,
11848 creation_date,
11849 last_updated_by,
11850 last_update_date)
11851 (
11852 SELECT /*+ ordered use_hash(peg2 peg1) use_hash(peg1 s tp cal)
11853 parallel(peg2,' || to_char(p_parallel_degree) || ')
11854 parallel(peg1,' || to_char(p_parallel_degree) || ')
11855 parallel(s,' || to_char(p_parallel_degree) || ')
11856 parallel(tp,' || to_char(p_parallel_degree) || ') */
11857 /* peg1.plan_id plan_id,
11858 decode(msi.aggregate_time_fence_date,
11859 NULL, msi.inventory_item_id,
11860 decode(sign(TRUNC(s.new_schedule_date) - msi.aggregate_time_fence_date),
11861 1, msi.product_family_id,
11862 msi.inventory_item_id)) inventory_item_id,
11863 msi.inventory_item_id original_item_id,
11864 peg1.organization_id,
11865 peg1.sr_instance_id,
11866 :def_num demand_class,
11867 TRUNC(s.new_schedule_date) supply_date,
11868 SUM(decode(msi.aggregate_time_fence_date,
11869 NULL, peg1.allocated_quantity,
11870 decode(msi.bom_item_type,
11871 5, 0,
11872 peg1.allocated_quantity))) allocated_quantity,
11873 MIN(s.new_order_quantity) supply_quantity,
11874 peg1.transaction_id,
11875 decode(msi.aggregate_time_fence_date,
11876 NULL, s.order_type, 50) order_type,
11877 s.order_type original_order_type,
11878 s.order_number,
11879 s.schedule_designator_id,
11880 s.customer_id,
11881 s.ship_to_site_id,
11882 :l_user_id created_by,
11883 :l_sysdate creation_date,
11884 :l_user_id last_updated_by,
11885 :l_sysdate last_update_date
11886 FROM msc_full_pegging peg2,
11887 msc_full_pegging peg1,
11888 msc_supplies s,
11889 msc_system_items msi
11890 WHERE peg1.plan_id = :p_plan_id
11891 AND peg2.plan_id = peg1.plan_id
11892 AND peg2.pegging_id = peg1.end_pegging_id
11893 AND peg2.demand_id IN (-1, -2)
11894 AND s.plan_id = peg1.plan_id
11895 AND s.transaction_id = peg1.transaction_id
11896 AND s.sr_instance_id = peg1.sr_instance_id
11897 AND msi.sr_instance_id = s.sr_instance_id
11898 AND msi.plan_id = s.plan_id
11899 AND msi.organization_id = s.organization_id
11900 AND msi.inventory_item_id = s.inventory_item_id
11901 GROUP BY
11902 peg1.plan_id,
11903 decode(msi.aggregate_time_fence_date,
11904 NULL, msi.inventory_item_id,
11905 decode(sign(TRUNC(s.new_schedule_date) - msi.aggregate_time_fence_date),
11906 1, msi.product_family_id,
11907 msi.inventory_item_id)),
11908 msi.inventory_item_id,
11909 peg1.organization_id,
11910 peg1.sr_instance_id,
11911 :def_num,
11912 TRUNC(s.new_schedule_date),
11913 peg1.transaction_id,
11914 decode(msi.aggregate_time_fence_date,
11915 NULL, s.order_type, 50),
11916 s.order_type,
11917 s.order_number,
11918 s.schedule_designator_id,
11919 s.customer_id,
11920 s.ship_to_site_id,
11921 :l_user_id,
11922 :l_sysdate,
11923 :l_user_id,
11924 :l_sysdate)';
11925 END IF;
11926 ELSE
11927 -- Prepare supplies stmt for creation of rollup supplies
11928 x_sql_stmt := x_sql_stmt ||'
11929 plan_id,
11930 inventory_item_id,
11931 original_item_id,
11932 organization_id,
11933 sr_instance_id,
11934 demand_class,
11935 supply_date,
11936 parent_transaction_id,
11937 allocated_quantity,
11938 supply_quantity,
11939 order_type,
11940 original_order_type,
11941 order_number,
11942 schedule_designator_id,
11943 customer_id,
11944 ship_to_site_id,
11945 created_by,
11946 creation_date,
11947 last_updated_by,
11948 last_update_date)
11949 (
11950 select :p_plan_id,
11951 decode(sign(TRUNC(s.new_schedule_date) - i.aggregate_time_fence_date),
11952 1, i.product_family_id, s.inventory_item_id),
11953 s.inventory_item_id,
11954 s.organization_id,
11955 s.sr_instance_id,
11956 s.demand_class,
11957 TRUNC(s.new_schedule_date),
11958 s.transaction_id,
11959 s.new_order_quantity,
11960 s.new_order_quantity,
11961 50,
11962 s.order_type,
11963 s.order_number,
11964 s.schedule_designator_id,
11965 s.customer_id,
11966 s.ship_to_site_id,
11967 :l_user_id,
11968 :l_sysdate,
11969 :l_user_id,
11970 :l_sysdate
11971 from msc_supplies s,
11972 msc_system_items i
11973 where i.aggregate_time_fence_date is not null
11974 and i.bom_item_type <> 5
11975 and i.plan_id = :p_plan_id
11976 and s.inventory_item_id = i.inventory_item_id
11977 and s.organization_id = i.organization_id
11978 and s.sr_instance_id = i.sr_instance_id
11979 and s.plan_id = i.plan_id
11980 )';
11981 END IF;
11982
11983 EXCEPTION
11984 WHEN OTHERS THEN
11985 IF PG_DEBUG in ('Y', 'C') THEN
11986 msc_util.msc_log('Prepare_Supplies_Stmt1: ' || 'Error occurred: ' || to_char(sqlcode) || ':' || SQLERRM);
11987 END IF;
11988 x_return_status := FND_API.G_RET_STS_ERROR;
11989
11990 END Prepare_Supplies_Stmt1;
11991
11992 /*--Prepare_Supplies_Stmt2-----------------------------------------------------
11993 | o Called from Pf_Post_Plan_Proc procedure to:
11994 | - Prepare supplies stmt for preallocation + supplies rollup for
11995 | supplies NOT pegged to excess/safety stock.(Demand priority AATP)
11996 | o Prepares supplies stmt for both share plan partition "yes" and "no".
11997 +----------------------------------------------------------------------------*/
11998 /*PROCEDURE Prepare_Supplies_Stmt2(
11999 p_share_partition IN VARCHAR2,
12000 p_temp_table IN VARCHAR2,
12001 p_parallel_degree IN NUMBER,
12002 x_sql_stmt OUT NOCOPY VARCHAR2,
12003 x_return_status OUT NOCOPY VARCHAR2
12004 )
12005 IS
12006
12007 BEGIN
12008 -- Initializing API return code
12009 x_return_status := FND_API.G_RET_STS_SUCCESS;
12010
12011 IF p_share_partition = 'Y' THEN
12012 x_sql_stmt := '
12013 INSERT INTO MSC_ALLOC_SUPPLIES(';
12014 ELSE
12015 x_sql_stmt := '
12016 INSERT INTO ' || p_temp_table || '(';
12017 END IF;
12018
12019 x_sql_stmt := x_sql_stmt ||'
12020 plan_id,
12021 inventory_item_id,
12022 original_item_id,
12023 organization_id,
12024 sr_instance_id,
12025 demand_class,
12026 supply_date,
12027 parent_transaction_id,
12028 allocated_quantity,
12029 supply_quantity,
12030 order_type,
12031 original_order_type,
12032 order_number,
12033 schedule_designator_id,
12034 customer_id, -- not really required only used in rule based
12035 ship_to_site_id, -- not really required only used in rule based
12036 created_by,
12037 creation_date,
12038 last_updated_by,
12039 last_update_date)
12040 (
12041 SELECT /*+ use_hash(peg1 mv) parallel(mv,' || to_char(p_parallel_degree) || ') */
12042 /* pegging_v.plan_id,
12043 pegging_v.inventory_item_id,
12044 pegging_v.original_item_id,
12045 pegging_v.organization_id,
12046 pegging_v.sr_instance_id,
12047 NVL(mv.demand_class, :def_num) demand_class,
12048 pegging_v.supply_date,
12049 pegging_v.transaction_id,
12050 SUM(pegging_v.allocated_quantity),
12051 MIN(pegging_v.supply_quantity),
12052 pegging_v.order_type,
12053 pegging_v.original_order_type,
12054 pegging_v.order_number,
12055 pegging_v.schedule_designator_id,
12056 pegging_v.customer_id,
12057 pegging_v.ship_to_site_id,
12058 :l_user_id,
12059 :l_sysdate,
12060 :l_user_id,
12061 :l_sysdate
12062 FROM
12063 (SELECT /*+ ordered use_hash(s peg2 peg1 d tp cal)
12064 parallel(peg2,' || to_char(p_parallel_degree) || ')
12065 parallel(peg1,' || to_char(p_parallel_degree) || ')
12066 parallel(s,' || to_char(p_parallel_degree) || ')
12067 parallel(d,' || to_char(p_parallel_degree) || ')
12068 parallel(tp,' || to_char(p_parallel_degree) || ') */
12069 /* peg2.plan_id plan_id,
12070 decode(msi.aggregate_time_fence_date,
12071 NULL, msi.inventory_item_id,
12072 decode(sign(TRUNC(s.new_schedule_date) - msi.aggregate_time_fence_date),
12073 1, msi.product_family_id,
12074 msi.inventory_item_id)) inventory_item_id,
12075 msi.inventory_item_id original_item_id,
12076 peg2.organization_id,
12077 peg2.sr_instance_id,
12078 NVL(d.demand_class, :def_num) demand_class,
12079 TRUNC(s.new_schedule_date) supply_date,
12080 decode(msi.aggregate_time_fence_date,
12081 NULL, peg2.allocated_quantity,
12082 decode(msi.bom_item_type,
12083 5, 0,
12084 peg2.allocated_quantity)) allocated_quantity,
12085 s.new_order_quantity supply_quantity,
12086 peg2.transaction_id,
12087 decode(msi.aggregate_time_fence_date,
12088 NULL, s.order_type, 50) order_type,
12089 s.order_type original_order_type,
12090 s.order_number,
12091 s.schedule_designator_id,
12092 s.customer_id,
12093 s.ship_to_site_id,
12094 decode(msi.aggregate_time_fence_date,
12095 NULL, msi.inventory_item_id,
12096 msi.product_family_id) product_family_id
12097 FROM msc_supplies s,
12098 msc_full_pegging peg2,
12099 msc_full_pegging peg1,
12100 msc_demands d,
12101 msc_system_items msi
12102 WHERE peg2.plan_id = :p_plan_id
12103 AND peg2.plan_id = peg1.plan_id
12104 AND peg2.end_pegging_id = peg1.pegging_id
12105 AND d.plan_id = peg1.plan_id
12106 AND d.demand_id = peg1.demand_id
12107 AND d.sr_instance_id = peg1.sr_instance_id
12108 AND d.inventory_item_id = peg1.inventory_item_id
12109 AND s.plan_id = peg2.plan_id
12110 AND s.transaction_id = peg2.transaction_id
12111 AND s.sr_instance_id = peg2.sr_instance_id
12112 AND msi.sr_instance_id = s.sr_instance_id
12113 AND msi.plan_id = s.plan_id
12114 AND msi.organization_id = s.organization_id
12115 AND msi.inventory_item_id = s.inventory_item_id
12116 ) pegging_v,
12117 msc_item_hierarchy_mv mv
12118 WHERE pegging_v.product_family_id = mv.inventory_item_id(+)
12119 AND pegging_v.organization_id = mv.organization_id (+)
12120 AND pegging_v.sr_instance_id = mv.sr_instance_id (+)
12121 AND pegging_v.supply_date >= mv.effective_date (+)
12122 AND pegging_v.supply_date <= mv.disable_date (+)
12123 AND pegging_v.demand_class = mv.demand_class (+)
12124 AND mv.level_id (+) = -1
12125 AND pegging_v.allocated_quantity <> 0
12126 GROUP BY
12127 pegging_v.plan_id,
12128 pegging_v.inventory_item_id,
12129 pegging_v.original_item_id,
12130 pegging_v.organization_id,
12131 pegging_v.sr_instance_id,
12132 NVL(mv.demand_class, :def_num),
12133 pegging_v.supply_date,
12134 pegging_v.transaction_id,
12135 pegging_v.order_type,
12136 pegging_v.original_order_type,
12137 pegging_v.order_number,
12138 pegging_v.schedule_designator_id,
12139 pegging_v.customer_id,
12140 pegging_v.ship_to_site_id,
12141 :l_user_id,
12142 :l_sysdate,
12143 :l_user_id,
12144 :l_sysdate)';
12145
12146 EXCEPTION
12147 WHEN OTHERS THEN
12148 IF PG_DEBUG in ('Y', 'C') THEN
12149 msc_util.msc_log('Prepare_Supplies_Stmt2: ' || 'Error occurred: ' || to_char(sqlcode) || ':' || SQLERRM);
12150 END IF;
12151 x_return_status := FND_API.G_RET_STS_ERROR;
12152
12153 END Prepare_Supplies_Stmt2;
12154
12155 /*--Update_Pf_Display_Flag-----------------------------------------------------
12156 | o Called from Pf_Post_Plan_Proc procedure to update Pf_Display_Flag to
12157 | handle scenario when a demand on one side of ATF is satisfied fully
12158 | from supplies on the other side of ATF.
12159 +----------------------------------------------------------------------------*/
12160 PROCEDURE Update_Pf_Display_Flag(
12161 p_plan_id IN NUMBER,
12162 x_return_status OUT NOCOPY VARCHAR2
12163 )
12164 IS
12165 l_return_status VARCHAR2(1);
12166
12167 BEGIN
12168 IF PG_DEBUG in ('Y', 'C') THEN
12169 msc_util.msc_log('Update_Pf_Display_Flag: ' || 'p_plan_id: ' || p_plan_id);
12170 END IF;
12171
12172 -- Initializing API return code
12173 x_return_status := FND_API.G_RET_STS_SUCCESS;
12174
12175 -- Performance tuning pending
12176 /*
12177 UPDATE MSC_ALLOC_DEMANDS AD
12178 SET Pf_Display_Flag = 1
12179 WHERE AD.plan_id = p_plan_id
12180 --AND AD.allocated_quantity = Demand_Quantity
12181 AND AD.pf_display_flag is NULL
12182 AND (AD.parent_demand_id, AD.demand_class, 1) in
12183 (SELECT AD2.parent_demand_id, AD2.demand_class, count(*)
12184 FROM MSC_ALLOC_DEMANDS AD2
12185 WHERE AD2.plan_id = p_plan_id
12186 GROUP BY AD2.parent_demand_id, AD2.demand_class
12187 )
12188 AND EXISTS (SELECT 1
12189 FROM MSC_SYSTEM_ITEMS I
12190 WHERE I.inventory_item_id = AD.inventory_item_id
12191 AND I.organization_id = AD.organization_id
12192 AND I.sr_instance_id = AD.sr_instance_id
12193 AND I.plan_id = AD.plan_id
12194 AND I.aggregate_time_fence_date is not null);
12195 */
12196 --5631956 Modified SQL tuned for better performance.
12197 UPDATE MSC_ALLOC_DEMANDS AD
12198 SET Pf_Display_Flag = 1
12199 WHERE AD.plan_id = p_plan_id
12200 AND AD.pf_display_flag is NULL
12201 AND EXISTS (SELECT 1
12202 FROM MSC_ALLOC_DEMANDS AD2
12203 WHERE AD2.plan_id = p_plan_id
12204 AND AD.parent_demand_id = AD2.parent_demand_id
12205 AND AD.demand_class = AD2.demand_class
12206 GROUP BY AD2.parent_demand_id, AD2.demand_class
12207 HAVING count(*) = 1)
12208 AND EXISTS (SELECT 1
12209 FROM MSC_SYSTEM_ITEMS I
12210 WHERE I.inventory_item_id = AD.inventory_item_id
12211 AND I.organization_id = AD.organization_id
12212 AND I.sr_instance_id = AD.sr_instance_id
12213 AND I.plan_id = AD.plan_id
12214 AND I.aggregate_time_fence_date is not null);
12215 EXCEPTION
12216 WHEN OTHERS THEN
12217 IF PG_DEBUG in ('Y', 'C') THEN
12218 msc_util.msc_log('Update_Pf_Display_Flag: ' || 'Error occurred: ' || to_char(sqlcode) || ':' || SQLERRM);
12219 END IF;
12220 x_return_status := FND_API.G_RET_STS_ERROR;
12221
12222 END Update_Pf_Display_Flag;
12223
12224 -- CTO-PF start
12225 /*--Create_PF_DP_Alloc_Reliefs-----------------------------------------------------
12226 | o Called from Gen_Atp_Pegging procedure to insert bucketed demands and
12227 | rollup supplies in MSC_ATP_PEGGING in demand priority cases
12228 +----------------------------------------------------------------------------*/
12229
12230 PROCEDURE Create_PF_DP_Alloc_Reliefs (p_plan_id IN NUMBER,
12231 p_insert_table IN VARCHAR2,
12232 p_user_id IN NUMBER,
12233 p_sysdate IN DATE,
12234 x_return_status OUT NOCOPY VARCHAR2
12235 )
12236 IS
12237
12238 l_sql_stmt VARCHAR2(800);
12239 l_sql_stmt_1 VARCHAR2(7000);
12240 l_sql_stmt_2 VARCHAR2(7000);
12241 -- Default Demand Class
12242 l_def_dmd_class VARCHAR2(3) := '-1';
12243
12244
12245 BEGIN
12246
12247 IF PG_DEBUG in ('Y', 'C') THEN
12248 msc_sch_wb.atp_debug('***** Begin Create_PF_DP_Alloc_Reliefs Procedure *****');
12249 msc_sch_wb.atp_debug(' Plan Id : ' || p_plan_id );
12250 msc_sch_wb.atp_debug(' Insert Table parameter : ' || p_insert_table );
12251 msc_sch_wb.atp_debug(' User Id Paramenter : ' || p_user_id );
12252 msc_sch_wb.atp_debug(' Date Parameter : ' || p_sysdate );
12253 END IF;
12254
12255 x_return_status := FND_API.G_RET_STS_SUCCESS;
12256
12257 IF PG_DEBUG in ('Y', 'C') THEN
12258 msc_sch_wb.atp_debug(' Inserting Demands');
12259 END IF;
12260
12261 l_sql_stmt_1 := 'INSERT INTO ' || p_insert_table ||
12262 '(reference_item_id,
12263 inventory_item_id,
12264 original_item_id,
12265 original_date,
12266 plan_id,
12267 sr_instance_id,
12268 organization_id,
12269 sales_order_line_id,
12270 demand_source_type,
12271 end_demand_id,
12272 bom_item_type,
12273 sales_order_qty,
12274 transaction_date,
12275 demand_id,
12276 demand_quantity,
12277 disposition_id,
12278 demand_class,
12279 consumed_qty,
12280 overconsumption_qty,
12281 supply_id,
12282 supply_quantity,
12283 allocated_quantity,
12284 relief_type,
12285 relief_quantity,
12286 pegging_id,
12287 prev_pegging_id,
12288 end_pegging_id,
12289 created_by,
12290 creation_date,
12291 last_updated_by,
12292 last_update_date,
12293 customer_id,
12294 customer_site_id,
12295 offset_type)
12296 SELECT
12297 peg_v.reference_item_id,
12298 peg_v.inventory_item_id,
12299 peg_v.original_item_id,
12300 peg_v.original_date,
12301 peg_v.plan_id,
12302 peg_v.sr_instance_id,
12303 peg_v.organization_id,
12304 peg_v.sales_order_line_id,
12305 peg_v.demand_source_type,
12306 peg_v.end_demand_id,
12307 peg_v.bom_item_type,
12308 peg_v.sales_order_qty,
12309 peg_v.transaction_date,
12310 peg_v.demand_id ,
12311 peg_v.demand_quantity,
12312 peg_v.disposition_id,
12313 NVL(mv.demand_class, :l_def_dmd_class) demand_class ,
12314 peg_v.consumed_qty,
12315 peg_v.overconsumption_qty,
12316 peg_v.supply_id,
12317 peg_v.supply_quantity,
12318 peg_v.allocated_quantity,
12319 peg_v.relief_type,
12320 peg_v.relief_quantity,
12321 peg_v.pegging_id,
12322 peg_v.prev_pegging_id,
12323 peg_v.end_pegging_id,
12324 :p_user_id,
12325 :p_sysdate,
12326 :p_user_id,
12327 :p_sysdate,
12328 mv.partner_id,
12329 mv.partner_site_id,
12330 peg_v.offset_type
12331
12332 FROM
12333 (SELECT mapt.reference_item_id reference_item_id,
12334 decode(mapt.atf_date,
12335 NULL, mapt.inventory_item_id,
12336 decode(sign(trunc(s.new_schedule_date) - mapt.atf_date),
12337 1, mapt.product_family_id,
12338 mapt.inventory_item_id
12339 )
12340 ) inventory_item_id,
12341 mapt.inventory_item_id original_item_id,
12342 mapt.transaction_date original_date,
12343 mapt.plan_id plan_id,
12344 mapt.sr_instance_id sr_instance_id,
12345 mapt.organization_id organization_id,
12346 mapt.sales_order_line_id sales_order_line_id,
12347 mapt.demand_source_type demand_source_type,
12348 mapt.end_demand_id end_demand_id,
12349 mapt.bom_item_type bom_item_type,
12350 mapt.sales_order_qty sales_order_qty,
12351 decode(mapt.atf_date,
12352 NULL, trunc(mapt.transaction_date),
12353 decode(sign(trunc(s.new_schedule_date) - mapt.atf_date),
12354 1, decode(sign(trunc(mapt.transaction_date)- mapt.atf_date),
12355 1, trunc(mapt.transaction_date),
12356 mapt.atf_date+1
12357 ),
12358 decode(sign(trunc(mapt.transaction_date)- mapt.atf_date),
12359 1, mapt.atf_date,
12360 trunc(mapt.transaction_date)
12361 )
12362 )
12363 )transaction_date,
12364 mapt.demand_id demand_id,
12365 mapt.demand_quantity demand_quantity,
12366 mapt.disposition_id disposition_id,
12367 NVL(mapt.demand_class, :l_def_dmd_class) demand_class ,
12368 mapt.consumed_qty consumed_qty,
12369 mapt.overconsumption_qty overconsumption_qty,
12370 mapt.supply_id supply_id,
12371 mapt.supply_quantity supply_quantity,
12372 mapt.allocated_quantity allocated_quantity,
12373 decode(mapt.atf_date,
12374 NULL,5,7) relief_type,
12375 mapt.relief_quantity relief_quantity,
12376 mapt.pegging_id pegging_id,
12377 mapt.prev_pegging_id prev_pegging_id,
12378 mapt.end_pegging_id end_pegging_id,
12379 mapt.atf_date atf_date,
12380 mapt.product_family_id product_family_id,
12381 mapt.offset_type
12382 FROM msc_atp_peg_temp mapt,
12383 msc_supplies s
12384 WHERE mapt.plan_id = :p_plan_id
12385 AND mapt.relief_type = 3
12386
12387 AND s.sr_instance_id = mapt.sr_instance_id
12388 AND s.plan_id = mapt.plan_id
12389 AND s.transaction_id = mapt.supply_id) peg_v,
12390 msc_item_hierarchy_mv mv
12391 WHERE
12392 decode(peg_v.atf_date,
12393 NULL,peg_v.inventory_item_id,
12394 peg_v.product_family_id) = mv.inventory_item_id(+)
12395 AND peg_v.organization_id = mv.organization_id (+)
12396 AND peg_v.sr_instance_id = mv.sr_instance_id (+)
12397 AND peg_v.transaction_date >= mv.effective_date (+)
12398 AND peg_v.transaction_date <= mv.disable_date (+)
12399 AND peg_v.demand_class = mv.demand_class (+)
12400 AND mv.level_id (+) = -1';
12401
12402 IF PG_DEBUG in ('Y', 'C') THEN
12403 msc_sch_wb.atp_debug('SQL statement to be executed ' || length(l_sql_stmt_1) || ':' || l_sql_stmt_1);
12404 END IF;
12405 EXECUTE IMMEDIATE l_sql_stmt_1 USING
12406 l_def_dmd_class,
12407 p_user_id, p_sysdate, p_user_id, p_sysdate,
12408 l_def_dmd_class,p_plan_id;
12409
12410 IF PG_DEBUG in ('Y', 'C') THEN
12411 msc_sch_wb.atp_debug('Create_PF_DP_Alloc_Reliefs: Number of Demand rows inserted '||
12412 SQL%ROWCOUNT);
12413 END IF;
12414
12415 IF PG_DEBUG in ('Y', 'C') THEN
12416 msc_sch_wb.atp_debug(' Inserting Supplies');
12417 END IF;
12418
12419 l_sql_stmt_1 := 'INSERT INTO ' || p_insert_table ||
12420 '(reference_item_id,
12421 inventory_item_id,
12422 plan_id,
12423 sr_instance_id,
12424 organization_id,
12425 sales_order_line_id,
12426 demand_source_type,
12427 end_demand_id,
12428 bom_item_type,
12429 sales_order_qty,
12430 transaction_date,
12431 demand_id,
12432 demand_quantity,
12433 disposition_id,
12434 demand_class,
12435 consumed_qty,
12436 overconsumption_qty,
12437 supply_id,
12438 supply_quantity,
12439 allocated_quantity,
12440 relief_type,
12441 relief_quantity,
12442 pegging_id,
12443 prev_pegging_id,
12444 end_pegging_id,
12445 created_by,
12446 creation_date,
12447 last_updated_by,
12448 last_update_date,
12449 customer_id,
12450 customer_site_id,
12451 offset_type)
12452 SELECT mapt.reference_item_id,
12453 mapt.inventory_item_id,
12454 mapt.plan_id,
12455 mapt.sr_instance_id,
12456 mapt.organization_id,
12457 mapt.sales_order_line_id,
12458 mapt.demand_source_type,
12459 mapt.end_demand_id,
12460 mapt.bom_item_type,
12461 mapt.sales_order_qty,
12462 mapt.transaction_date,
12463 mapt.demand_id ,
12464 mapt.demand_quantity,
12465 mapt.disposition_id,
12466 NVL(mv.demand_class, :l_def_dmd_class) demand_class ,
12467 mapt.consumed_qty,
12468 mapt.overconsumption_qty,
12469 mapt.supply_id,
12470 mapt.supply_quantity,
12471 mapt.allocated_quantity ,
12472 6,
12473 mapt.relief_quantity ,
12474 mapt.pegging_id,
12475 mapt.prev_pegging_id,
12476 mapt.end_pegging_id,
12477 :p_user_id,
12478 :p_sysdate,
12479 :p_user_id,
12480 :p_sysdate,
12481 mv.partner_id,
12482 mv.partner_site_id customer_site_id,
12483 mapt.offset_type
12484 FROM msc_atp_peg_temp mapt, msc_item_hierarchy_mv mv
12485 WHERE mapt.plan_id = :p_plan_id
12486 AND mapt.relief_type = 2
12487 AND mapt.inventory_item_id = mv.inventory_item_id(+)
12488 AND mapt.organization_id = mv.organization_id (+)
12489 AND mapt.sr_instance_id = mv.sr_instance_id (+)
12490 AND mapt.transaction_date >= mv.effective_date (+)
12491 AND mapt.transaction_date <= mv.disable_date (+)
12492 AND mapt.demand_class = mv.demand_class (+)
12493 AND mv.level_id (+) = -1 '
12494 ;
12495
12496 EXECUTE IMMEDIATE l_sql_stmt_1 USING
12497 l_def_dmd_class,
12498 p_user_id, p_sysdate, p_user_id, p_sysdate, p_plan_id;
12499
12500 IF PG_DEBUG in ('Y', 'C') THEN
12501 msc_sch_wb.atp_debug('Create_PF_DP_Alloc_Reliefs: Number of Supply rows inserted '||
12502 SQL%ROWCOUNT);
12503 END IF;
12504
12505 EXCEPTION
12506 WHEN OTHERS THEN
12507 IF PG_DEBUG in ('Y', 'C') THEN
12508 msc_sch_wb.atp_debug('Inside main exception of Create_PF_DP_Alloc_Reliefs');
12509 msc_sch_wb.atp_debug ('Create_PF_DP_Alloc_Reliefs. Error : ' || sqlcode || ': '|| sqlerrm);
12510 END IF;
12511 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
12512
12513 END Create_PF_DP_Alloc_Reliefs;
12514
12515 /*--Create_PF_Allocation_Reliefs-----------------------------------------------------
12516 | o Called from Gen_Atp_Pegging procedure to insert bucketed demands and
12517 | rollup supplies in MSC_ATP_PEGGING in non demand priority cases
12518 +----------------------------------------------------------------------------*/
12519
12520 PROCEDURE Create_PF_Allocation_Reliefs (p_plan_id IN NUMBER,
12521 p_insert_table IN VARCHAR2,
12522 p_user_id IN NUMBER,
12523 p_sysdate IN DATE,
12524 x_return_status OUT NOCOPY VARCHAR2
12525 )
12526 IS
12527
12528 l_sql_stmt VARCHAR2(800);
12529 l_sql_stmt_1 VARCHAR2(5000);
12530 BEGIN
12531
12532 IF PG_DEBUG in ('Y', 'C') THEN
12533 msc_sch_wb.atp_debug('***** Begin Create_PF_Allocation_Reliefs Procedure *****');
12534 msc_sch_wb.atp_debug(' Plan Id : ' || p_plan_id );
12535 msc_sch_wb.atp_debug(' Insert Table parameter : ' || p_insert_table );
12536 msc_sch_wb.atp_debug(' User Id Paramenter : ' || p_user_id );
12537 msc_sch_wb.atp_debug(' Date Parameter : ' || p_sysdate );
12538 END IF;
12539
12540 x_return_status := FND_API.G_RET_STS_SUCCESS;
12541
12542 IF PG_DEBUG in ('Y', 'C') THEN
12543 msc_sch_wb.atp_debug(' Inserting Demands');
12544 END IF;
12545
12546
12547 l_sql_stmt_1 := 'INSERT INTO ' || p_insert_table || -- actually the insert table parameter.
12548 '(reference_item_id,
12549 inventory_item_id,
12550 original_item_id,
12551 original_date,
12552 plan_id,
12553 sr_instance_id,
12554 organization_id,
12555 sales_order_line_id,
12556 demand_source_type,
12557 end_demand_id,
12558 bom_item_type,
12559 sales_order_qty,
12560 transaction_date,
12561 demand_id,
12562 demand_quantity,
12563 disposition_id,
12564 consumed_qty,
12565 overconsumption_qty,
12566 supply_id,
12567 supply_quantity,
12568 allocated_quantity,
12569 relief_type,
12570 relief_quantity,
12571 pegging_id,
12572 prev_pegging_id,
12573 end_pegging_id,
12574 created_by,
12575 creation_date,
12576 last_updated_by,
12577 last_update_date,
12578 customer_id,
12579 customer_site_id)
12580 SELECT mapt.reference_item_id reference_item_id,
12581 decode(sign(trunc(s.new_schedule_date) - mapt.atf_date),
12582 1, mapt.product_family_id,
12583 mapt.inventory_item_id) inventory_item_id,
12584 mapt.inventory_item_id,
12585 mapt.transaction_date,
12586 mapt.plan_id plan_id,
12587 mapt.sr_instance_id sr_instance_id,
12588 mapt.organization_id organization_id,
12589 mapt.sales_order_line_id sales_order_line_id,
12590 mapt.demand_source_type demand_source_type,
12591 mapt.end_demand_id end_demand_id,
12592 mapt.bom_item_type bom_item_type,
12593 mapt.sales_order_qty sales_order_qty,
12594 decode(sign(trunc(s.new_schedule_date) - mapt.atf_date),
12595 1, decode(sign(trunc(mapt.transaction_date)- mapt.atf_date),
12596 1, trunc(mapt.transaction_date),
12597 mapt.atf_date+1),
12598 decode(sign(trunc(mapt.transaction_date)- mapt.atf_date),
12599 1, mapt.atf_date,
12600 trunc(mapt.transaction_date)
12601 )
12602 ) transaction_date,
12603 mapt.demand_id demand_id,
12604 mapt.demand_quantity demand_quantity,
12605 mapt.disposition_id disposition_id,
12606 mapt.consumed_qty consumed_qty,
12607 mapt.overconsumption_qty overconsumption_qty,
12608 mapt.supply_id supply_id,
12609 mapt.supply_quantity supply_quantity,
12610 mapt.allocated_quantity allocated_quantity,
12611 7 relief_type, --PF ATP
12612 mapt.relief_quantity relief_quantity,
12613 mapt.pegging_id pegging_id,
12614 mapt.prev_pegging_id prev_pegging_id,
12615 mapt.end_pegging_id end_pegging_id,
12616 :p_user_id,
12617 :p_sysdate,
12618 :p_user_id,
12619 :p_sysdate,
12620 mapt.customer_id,
12621 mapt.customer_site_id
12622 FROM msc_atp_peg_temp mapt,
12623 msc_supplies s
12624 WHERE mapt.plan_id = :p_plan_id
12625 AND mapt.relief_type = 3
12626
12627 AND s.sr_instance_id = mapt.sr_instance_id
12628 AND s.plan_id = mapt.plan_id
12629 AND s.transaction_id = mapt.supply_id';
12630
12631 IF PG_DEBUG in ('Y', 'C') THEN
12632 msc_sch_wb.atp_debug('SQL statement to be executed ' || length(l_sql_stmt_1) || ':' || l_sql_stmt_1);
12633 END IF;
12634 EXECUTE IMMEDIATE l_sql_stmt_1 USING
12635 p_user_id, p_sysdate, p_user_id, p_sysdate, p_plan_id;
12636
12637 IF PG_DEBUG in ('Y', 'C') THEN
12638 msc_sch_wb.atp_debug('Create_PF_Allocation_Reliefs: Number of Demand rows inserted '||
12639 SQL%ROWCOUNT);
12640 END IF;
12641
12642 EXCEPTION
12643 WHEN OTHERS THEN
12644 IF PG_DEBUG in ('Y', 'C') THEN
12645 msc_sch_wb.atp_debug('Inside main exception of Create_PF_Allocation_Reliefs');
12646 msc_sch_wb.atp_debug ('Create_PF_Allocation_Reliefs. Error : ' || sqlcode || ': '|| sqlerrm);
12647 END IF;
12648 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
12649
12650 END Create_PF_Allocation_Reliefs;
12651 -- CTO-PF end
12652 END MSC_ATP_PF;