[Home] [Help]
PACKAGE BODY: APPS.RLM_MANAGE_DEMAND_SV
Source
1 PACKAGE BODY RLM_MANAGE_DEMAND_SV as
2 /* $Header: RLMDPMDB.pls 120.12.12010000.2 2008/07/30 12:46:40 sunilku ship $*/
3 /*========================== rlm_manage_demand_sv ===========================*/
4
5 --
6 l_DEBUG NUMBER := NVL(fnd_profile.value('RLM_DEBUG_MODE'),-1);
7 g_count NUMBER :=0; --Bugfix 7007638
8 --
9
10 /*===========================================================================
11
12 PROCEDURE NAME: ManageDemand
13
14 ===========================================================================*/
15
16 PROCEDURE ManageDemand(x_InterfaceHeaderId IN NUMBER,
17 x_Sched_rec IN RLM_INTERFACE_HEADERS%ROWTYPE,
18 x_Group_rec IN OUT NOCOPY rlm_dp_sv.t_Group_rec,
19 x_ReturnStatus OUT NOCOPY NUMBER)
20 IS
21 --
22 v_Progress VARCHAR2(30) := '010';
23 v_SrcGroup_ref t_Cursor_ref;
24 v_SrcGroup_rec rlm_dp_sv.t_Group_rec;
25 v_SourcedDemand_Tab t_MD_Tab;
26 v_HeaderLockStatus NUMBER;
27 v_LineLockStatus NUMBER;
28 e_headerLocked EXCEPTION;
29 e_linesLocked EXCEPTION;
30 SrcRulesApplied BOOLEAN;
31 IsGroupProcessed BOOLEAN := FALSE;
32 IsGroupError BOOLEAN := FALSE;
33 x_HeaderStatus NUMBER;
34 IsLineProcessed BOOLEAN := FALSE;
35 v_ReGroup_ref t_Cursor_ref;
36 v_Source_Tab t_Source_Tab;
37 l_ReturnStatus NUMBER;
38 i NUMBER;
39 --
40 BEGIN
41 --
42 IF (l_debug <> -1) THEN
43 rlm_core_sv.dpush(C_SDEBUG,'ManageDemand');
44 rlm_core_sv.dlog(C_DEBUG,'InterfaceHeaderId',x_InterfaceHeaderId);
45 END IF;
46 --
47 rlm_message_sv.initialize_dependency('MANAGE_DEMAND');
48 --
49 x_ReturnStatus := rlm_core_sv.k_PROC_SUCCESS;
50 x_Group_rec.IsSourced := FALSE;
51 RLM_RD_SV.g_SourceTab.DELETE;
52 --
53 IF (l_debug <> -1) THEN
54 rlm_core_sv.dlog(C_DEBUG, 'x_Sched_rec.sched_horizon_start_date',
55 x_Sched_rec.sched_horizon_start_date);
56 rlm_core_sv.dlog(C_DEBUG, 'x_Sched_rec.sched_horizon_end_date',
57 x_Sched_rec.sched_horizon_end_date);
58 rlm_core_sv.dlog(C_DEBUG, 'x_Sched_rec.schedule_purpose',
59 x_Sched_rec.schedule_purpose);
60 rlm_core_sv.dlog(C_DEBUG, 'x_Sched_rec.schedule_type',x_Sched_rec.schedule_type);
61 rlm_core_sv.dlog(C_DEBUG, 'x_Sched_rec.header_id',x_Sched_rec.header_id);
62 END IF;
63 --
64 x_HeaderStatus := x_sched_rec.process_status;
65 --
66 -- Apply Sourcing Rules to x_Group_rec
67 --
68 PopulateMD(x_Sched_rec, x_Group_rec, 'Y');
69 --
70 IF g_ManageDemand_tab.COUNT > 0 THEN
71 --
72 v_SourcedDemand_Tab.Delete;
73 --
74 CallSetups(x_Sched_rec,x_Group_rec);
75 --
76 PopulateCUMRec(x_Sched_rec, x_Group_rec);
77 --
78 RLM_TPA_SV.CUMToDiscrete(x_Sched_rec, x_Group_rec);
79 --
80 RLM_TPA_SV.ApplySourceRules(x_Sched_rec,x_Group_rec,
81 v_SourcedDemand_Tab,v_Source_Tab);
82 --
83 ProcessTable(g_ManageDemand_Tab);
84 --
85 IF v_SourcedDemand_Tab.COUNT > 0 THEN
86 --
87 i := v_Source_Tab.FIRST;
88 WHILE i IS NOT NULL LOOP
89 RLM_RD_SV.g_SourceTab(RLM_RD_SV.g_SourceTab.COUNT+1) := v_Source_Tab(i);
90 i := v_Source_Tab.NEXT(i);
91 END LOOP;
92 --
93 ProcessTable(v_SourcedDemand_Tab);
94 /*
95 --
96 IF x_Group_rec.setup_terms_rec.cum_org_level_code IN
97 ('SHIP_TO_ALL_SHIP_FROMS', 'BILL_TO_ALL_SHIP_FROMS',
98 'DELIVER_TO_ALL_SHIP_FROMS') THEN
99 --
100 g_AllIntransitQty := RLM_TPA_SV.GetAllIntransitQty(x_Sched_rec,x_Group_rec);
101 --
102 END IF;
103 --
104 */
105 x_Group_rec.IsSourced := TRUE;
106 --
107 ELSE
108 --
109 x_Group_rec.IsSourced := FALSE;
110 --
111 END IF;
112 --
113 END IF;
114 --
115 -- Note: Regrouping again as the sourcing rules would have added new lines
116 -- which belong to a different group
117 --
118 IF x_Group_rec.IsSourced THEN
119 --
120 RLM_TPA_SV.InitializeMdGroup(x_Sched_rec, v_SrcGroup_ref, x_Group_rec);
121 --
122 WHILE FetchGroup(v_SrcGroup_ref, v_SrcGroup_rec) LOOP
123 --
124 IF NOT LockLines(x_Sched_rec.header_id,v_SrcGroup_rec) AND
125 (v_SrcGroup_rec.ship_from_org_id <> x_Group_rec.industry_attribute15) THEN
126 --
127 RAISE e_linesLocked;
128 --
129 ELSE
130 --
131 ManageGroupDemand(x_Sched_rec, v_SrcGroup_rec, x_ReturnStatus);
132 --
133 IF v_SrcGroup_rec.blanket_number IS NOT NULL THEN
134 --
135 RLM_TPA_SV.DeriveRSO(x_Sched_rec, v_SrcGroup_rec, l_ReturnStatus);
136 --
137 IF (l_debug <> -1) THEN
138 rlm_core_sv.dlog(C_DEBUG, 'DeriveRSO return status', l_ReturnStatus);
139 END IF;
140 --
141 IF l_ReturnStatus <> rlm_core_sv.k_PROC_SUCCESS THEN
142 --
143 x_ReturnStatus := rlm_core_sv.k_PROC_ERROR;
144 --
145 END IF;
146 --
147 END IF;
148 --
149 END IF;
150 --
151 END LOOP;
152 --
153 CLOSE v_SrcGroup_ref;
154 --
155 ELSE /* not sourced */
156 --
157 ManageGroupDemand(x_Sched_rec, x_Group_rec, x_ReturnStatus);
158 --
159 IF x_Group_rec.blanket_number IS NOT NULL THEN
160 --
161 RLM_TPA_SV.DeriveRSO(x_Sched_rec, x_Group_rec, l_ReturnStatus);
162 --
163 IF (l_debug <> -1) THEN
164 rlm_core_sv.dlog(C_DEBUG, 'DeriveRSO return status', l_ReturnStatus);
165 END IF;
166 --
167 IF l_ReturnStatus <> rlm_core_sv.k_PROC_SUCCESS THEN
168 --
169 x_ReturnStatus := rlm_core_sv.k_PROC_ERROR;
170 --
171 END IF;
172 --
173 END IF;
174 --
175 END IF;
176 --
177 --x_ReturnStatus := rlm_core_sv.k_PROC_SUCCESS;
178 --
179 IF (l_debug <> -1) THEN
180 rlm_core_sv.dpop(C_SDEBUG);
181 END IF;
182 --
183 EXCEPTION
184 --
185 WHEN e_GroupError THEN
186 --
187 x_ReturnStatus := rlm_core_sv.k_PROC_ERROR;
188 --
189 IF (l_debug <> -1) THEN
190 rlm_core_sv.dlog(C_DEBUG,'progress',v_Progress);
191 rlm_core_sv.dpop(C_SDEBUG, 'GROUP ERROR');
192 END IF;
193 --
194 WHEN e_linesLocked THEN
195 --
196 x_ReturnStatus := rlm_core_sv.k_PROC_ERROR;
197 rlm_message_sv.app_error(
198 x_ExceptionLevel => rlm_message_sv.k_error_level,
199 x_MessageName => 'RLM_LOCK_NOT_OBTAINED',
200 x_InterfaceHeaderId => x_sched_rec.header_id,
201 x_InterfaceLineId => NULL,
202 x_ScheduleHeaderId => x_sched_rec.schedule_header_id,
203 x_ScheduleLineId => NULL,
204 x_OrderHeaderId => x_group_rec.setup_terms_rec.header_id,
205 x_OrderLineId => NULL,
206 --x_ErrorText => 'Lock Not Obtained'
207 x_Token1 => 'SCHED_REF',
208 x_Value1 => x_sched_rec.schedule_reference_num);
209 --
210 IF (l_debug <> -1) THEN
211 rlm_core_sv.dpop(C_SDEBUG, 'RLM_LOCK_NOT_OBTAINED');
212 END IF;
213 --
214 WHEN NO_DATA_FOUND THEN
215 --
216 x_ReturnStatus := rlm_core_sv.k_PROC_ERROR;
217 --
218 IF (l_debug <> -1) THEN
219 rlm_core_sv.dlog(C_DEBUG,'No header found with the headerID',
220 x_InterfaceHeaderId);
221 rlm_core_sv.dpop(C_SDEBUG, 'NO_DATA_FOUND');
222 END IF;
223 --
224 WHEN OTHERS THEN
225 --
226 x_ReturnStatus := rlm_core_sv.k_PROC_ERROR;
227 rlm_message_sv.sql_error('rlm_manage_demand_sv.ManageDemand', v_Progress);
228 --
229 IF (l_debug <> -1) THEN
230 rlm_core_sv.dlog(C_DEBUG,'progress',v_Progress);
231 rlm_core_sv.dpop(C_SDEBUG,'EXCEPTION: '||SUBSTR(SQLERRM,1,200));
232 END IF;
233 --
234 raise;
235 --
236 END ManageDemand;
237
238 /*===========================================================================
239
240 PROCEDURE NAME: ManageGroupDemand
241
242 ===========================================================================*/
243
244 PROCEDURE ManageGroupDemand(x_Sched_rec IN RLM_INTERFACE_HEADERS%ROWTYPE,
245 x_Group_rec IN OUT NOCOPY rlm_dp_sv.t_Group_rec,
246 x_ReturnStatus OUT NOCOPY NUMBER)
247 IS
248 --
249 v_Progress VARCHAR2(30) := '010';
250 IsLineProcessed BOOLEAN := FALSE;
251 IsGroupError BOOLEAN := FALSE;
252 --
253 BEGIN
254 --
255 IF (l_debug <> -1) THEN
256 rlm_core_sv.dpush(C_SDEBUG,'ManageGroupDemand');
257 rlm_core_sv.dlog(C_DEBUG,'ship_from_org_id',x_Group_rec.ship_from_org_id);
258 rlm_core_sv.dlog('ship_to_address_id', x_Group_rec.ship_to_address_id);
259 rlm_core_sv.dlog('inventory_item_id', x_Group_rec.inventory_item_id);
260 rlm_core_sv.dlog('customer_item_id', x_Group_rec.customer_item_id);
261 rlm_core_sv.dlog(C_DEBUG, 'Order Header Id', x_Group_rec.order_header_id);
262 rlm_core_sv.dlog(C_DEBUG, 'Blanket Number', x_Group_rec.blanket_number);
263 END IF;
264 --
265 CallSetups(x_Sched_rec, x_Group_rec);
266 --
267 --PopulateLastReceiptRec(x_Sched_rec, x_Group_rec);
268 --
269 --PopulateCUMRec(x_Sched_rec, x_Group_rec);
270 --
271 PopulateMD(x_Sched_rec, x_Group_rec);
272 --
273 IF g_ManageDemand_tab.COUNT > 0 THEN
274 --
275 RLM_TPA_SV.UOMConversion(x_Group_rec);
276
277 IF(UPPER(x_Group_rec.setup_terms_rec.intransit_calc_basis)<>'CUSTOMER_CUM') THEN
278 --
279 RLM_TPA_SV.CUMDiscrepancyCheck(x_Sched_rec, x_Group_rec);
280 --
281 END IF;
282
283 --RLM_TPA_SV.CUMToDiscrete(x_Sched_rec, x_Group_rec);
284 --
285 RLM_TPA_SV.CalculateShipDate(x_Sched_rec,x_Group_rec);
286 --
287 IsLineProcessed := FALSE;
288 RLM_TPA_SV.ApplyFFFFences(x_Sched_rec, x_Group_rec, IsLineProcessed);
289 --
290 IF x_Sched_rec.Schedule_type <> k_SEQUENCED THEN
291 --
292 --performance changes
293 SortDemand;
294 AggregateDemand(x_Group_rec);
295 RLM_TPA_SV.RoundStandardPack(x_Sched_rec,x_Group_rec);
296 --
297 END IF;
298 --
299 ProcessTable(g_ManageDemand_Tab);
300 --
301 -- If fences are applied and some lines are set to fully processed.
302 --
303 IF IsLineProcessed THEN
304 --
305 IF x_Group_rec.blanket_number IS NOT NULL THEN
306 --
307 IF (l_debug <> -1) THEN
308 rlm_core_sv.dlog(C_DEBUG, 'Blanket Version of Update', x_Group_rec.blanket_number);
309 END IF;
310 --
311 UPDATE rlm_schedule_lines_all sl
312 SET process_status = rlm_core_sv.k_PS_Processed
313 WHERE header_id = x_Sched_rec.schedule_header_id
314 AND line_id IN (
315 SELECT schedule_line_id
316 FROM rlm_interface_lines il
317 WHERE il.header_id = x_sched_rec.header_id
318 AND il.ship_from_org_id = x_Group_rec.ship_from_org_id
319 AND il.ship_to_address_id = x_Group_rec.ship_to_address_id
320 AND il.customer_item_id = x_Group_rec.customer_item_id
321 AND il.blanket_number = x_Group_rec.blanket_number
322 AND il.process_status = rlm_core_sv.k_PS_Processed
323 );
324 --
325 ELSE
326 --
327 IF (l_debug <> -1) THEN
328 rlm_core_sv.dlog(C_DEBUG, 'Sales order version of Update', x_Group_rec.order_header_id);
329 END IF;
330 --
331 UPDATE rlm_schedule_lines_all sl
332 SET process_status = rlm_core_sv.k_PS_Processed
333 WHERE header_id = x_Sched_rec.schedule_header_id
334 AND line_id IN (
335 SELECT schedule_line_id
336 FROM rlm_interface_lines il
337 WHERE il.header_id = x_sched_rec.header_id
338 AND il.ship_from_org_id = x_Group_rec.ship_from_org_id
339 AND il.ship_to_address_id = x_Group_rec.ship_to_address_id
340 AND il.customer_item_id = x_Group_rec.customer_item_id
341 AND il.order_header_id = x_Group_rec.order_header_id
342 AND il.process_status = rlm_core_sv.k_PS_Processed
343 );
344 --
345 END IF;
346 --
347 IF (l_debug <> -1) THEN
348 rlm_core_sv.dlog(C_DEBUG,'# of schedule lines updated', SQL%ROWCOUNT);
349 END IF;
350 --
351 END IF;
352 --
353 END IF;
354 --
355 x_ReturnStatus := rlm_core_sv.k_PROC_SUCCESS;
356 --
357 IF (l_debug <> -1) THEN
358 rlm_core_sv.dpop(C_SDEBUG);
359 END IF;
360 --
361 EXCEPTION
362 --
363 WHEN e_GroupError THEN
364 --
365 x_ReturnStatus := rlm_core_sv.k_PROC_ERROR;
366 --
367 IF (l_debug <> -1) THEN
368 rlm_core_sv.dlog(C_DEBUG,'GroupError for',
369 x_Group_rec.ship_from_org_id);
370 rlm_core_sv.dlog(C_DEBUG,'progress',v_Progress);
371 rlm_core_sv.dpop(C_SDEBUG);
372 END IF;
373 --
374 raise e_GroupError;
375 --
376 WHEN OTHERS THEN
377 --
378 x_ReturnStatus := rlm_core_sv.k_PROC_ERROR;
379 rlm_message_sv.sql_error('rlm_manage_demand_sv.ManageDemand',
380 v_Progress);
381 --
382 IF (l_debug <> -1) THEN
383 rlm_core_sv.dlog(C_DEBUG,'progress',v_Progress);
384 rlm_core_sv.dpop(C_SDEBUG,'EXCEPTION: '||SUBSTR(SQLERRM,1,200));
385 END IF;
386 --
387 raise;
388 --
389 END ManageGroupDemand;
390
391 /*===========================================================================
392
393 PROCEDURE NAME: PopulateLastReceiptRec
394
395 ===========================================================================*/
396
397 PROCEDURE PopulateLastReceiptRec(x_Sched_rec IN RLM_INTERFACE_HEADERS%ROWTYPE,
398 x_Group_rec IN rlm_dp_sv.t_Group_rec)
399 IS
400 --
401 CURSOR c_LastReceipt IS
402 SELECT x_group_rec.customer_id,
403 customer_item_id,
404 inventory_item_id,
405 ship_from_org_id,
406 intrmd_ship_to_id intrmd_ship_to_address_id,
407 ship_to_address_id,
408 bill_to_address_id,
409 cust_po_number purchase_order_number,
410 primary_quantity,
411 item_detail_quantity,
412 start_date_time,
413 industry_attribute1 cust_record_year,
414 line_id,
415 k_TRUE
416 FROM rlm_interface_lines
417 WHERE header_id = x_Sched_rec.header_id
418 AND item_detail_type = k_SHIP_RECEIPT_INFO
419 AND item_detail_subtype IN (k_SHIPMENT, k_RECEIPT)
420 AND ship_to_address_id = x_Group_rec.ship_to_address_id
421 AND inventory_item_id = x_Group_rec.inventory_item_id
422 AND qty_type_code = k_ACTUAL
423 ORDER BY SCHEDULE_DATE desc;
424 --
425 v_Progress VARCHAR2(3) := '010';
426 --
427 BEGIN
428
429 IF (l_debug <> -1) THEN
430 rlm_core_sv.dpush(C_SDEBUG,'PopulateLastReceiptRec');
431 rlm_core_sv.dlog(C_DEBUG,'x_Sched_rec.Schedule_header_id',
432 x_Sched_rec.Schedule_header_id);
433 rlm_core_sv.dlog(C_DEBUG,'x_Group_rec.ship_to_address_id',
434 x_Group_rec.ship_to_address_id);
435 rlm_core_sv.dlog(C_DEBUG,'x_Group_rec.inventory_item_id',
436 x_Group_rec.inventory_item_id);
437 END IF;
438 --
439 OPEN c_LastReceipt;
440 --
441 FETCH c_LastReceipt INTO g_LastReceipt_rec;
442 --
443 IF c_LastReceipt%NOTFOUND THEN
444 --
445 g_LastReceipt_rec.found := k_FALSE;
446 --
447 END IF;
448 --
449 CLOSE c_LastReceipt;
450 --
451 IF (l_debug <> -1) THEN
452 rlm_core_sv.dlog(C_DEBUG,'g_LastReceipt_rec.primary_quantity',
453 g_LastReceipt_rec.primary_quantity);
454 rlm_core_sv.dlog(C_DEBUG,'g_LastReceipt_rec.cust_record_year',
455 g_LastReceipt_rec.cust_record_year);
456 rlm_core_sv.dlog(C_DEBUG,'g_LastReceipt_rec.start_date_time',
457 g_LastReceipt_rec.start_date_time);
458 rlm_core_sv.dlog(C_DEBUG,'g_LastReceipt_rec.found', g_LastReceipt_rec.found);
459 rlm_core_sv.dpop(C_SDEBUG);
460 END IF;
461 --
462 EXCEPTION
463 --
464 WHEN OTHERS THEN
465 rlm_message_sv.sql_error('rlm_manage_demand_sv.PopulateLastReceiptRec',
466 v_Progress);
467 --
468 IF (l_debug <> -1) THEN
469 rlm_core_sv.dpop(C_SDEBUG,'EXCEPTION: '||SUBSTR(SQLERRM,1,200));
470 END IF;
471 --
472 raise;
473
474 END PopulateLastReceiptRec;
475
476 /*===========================================================================
477
478 PROCEDURE NAME: PopulateCUMRec
479
480 ===========================================================================*/
481
482 PROCEDURE PopulateCUMRec(x_Sched_rec IN RLM_INTERFACE_HEADERS%ROWTYPE,
483 x_Group_rec IN rlm_dp_sv.t_Group_rec)
484 IS
485 --Created cursor for Bugfix 7007638
486 CURSOR c_CUMRec IS
487 SELECT x_group_rec.customer_id,
488 customer_item_id,
489 inventory_item_id,
490 ship_from_org_id,
491 intrmd_ship_to_id intrmd_ship_to_address_id,
492 ship_to_address_id,
493 bill_to_address_id,
494 cust_po_number purchase_order_number,
495 primary_quantity,
496 item_detail_quantity,
497 start_date_time,
498 industry_attribute1 cust_record_year,
499 line_id,
500 k_TRUE
501 FROM rlm_interface_lines
502 WHERE header_id = x_Sched_rec.header_id
503 AND item_detail_type = k_SHIP_RECEIPT_INFO
504 AND item_detail_subtype = k_CUM
505 AND ship_from_org_id = x_Group_rec.ship_from_org_id
506 AND ship_to_address_id = x_Group_rec.ship_to_address_id
507 AND inventory_item_id = x_Group_rec.inventory_item_id
508 AND customer_item_id = x_Group_rec.customer_item_id
509 ORDER BY start_date_time desc;
510 --
511
512 v_Progress VARCHAR2(3) := '010';
513 v_Count NUMBER := 1; --Bugfix 7007638
514
515 BEGIN
516 --
517 IF (l_debug <> -1) THEN
518 rlm_core_sv.dpush(C_SDEBUG,'PopulateCUMRec');
519 rlm_core_sv.dlog(C_DEBUG,'x_Sched_rec.Schedule_header_id',
520 x_Sched_rec.Schedule_header_id);
521 rlm_core_sv.dlog(C_DEBUG,'x_Group_rec.ship_to_address_id',
522 x_Group_rec.ship_to_address_id);
523 rlm_core_sv.dlog(C_DEBUG,'x_Group_rec.inventory_item_id',
524 x_Group_rec.inventory_item_id);
525 END IF;
526 --Bugfix 7007638 Start --Modified Select statment into cursor to fetch more than one Shp/Rcv record per group
527 --Record type is converted to PL/SQL table
528 g_CUM_tab.DELETE;
529 --
530 OPEN c_CUMRec;
531 --
532 LOOP
533 FETCH c_CUMRec INTO g_CUM_rec;
534 EXIT WHEN c_CUMRec%NOTFOUND;
535
536 g_CUM_tab(v_Count).customer_id := g_CUM_rec.customer_id;
537 g_CUM_tab(v_Count).customer_item_id := g_CUM_rec.customer_item_id;
538 g_CUM_tab(v_Count).inventory_item_id := g_CUM_rec.inventory_item_id;
539 g_CUM_tab(v_Count).ship_from_org_id := g_CUM_rec.ship_from_org_id;
540 g_CUM_tab(v_Count).intrmd_ship_to_address_id := g_CUM_rec.intrmd_ship_to_address_id;
541 g_CUM_tab(v_Count).ship_to_address_id := g_CUM_rec.ship_to_address_id;
542 g_CUM_tab(v_Count).bill_to_address_id := g_CUM_rec.bill_to_address_id;
543 g_CUM_tab(v_Count).purchase_order_number := g_CUM_rec.purchase_order_number;
544 g_CUM_tab(v_Count).primary_quantity := g_CUM_rec.primary_quantity;
545 g_CUM_tab(v_Count).item_detail_quantity := g_CUM_rec.item_detail_quantity;
546 g_CUM_tab(v_Count).start_date_time := g_CUM_rec.start_date_time;
547 g_CUM_tab(v_Count).cust_record_year := g_CUM_rec.cust_record_year;
548 g_CUM_tab(v_Count).line_id := g_CUM_rec.line_id;
549 g_CUM_tab(v_Count).found := g_CUM_rec.found;
550
551 IF (l_debug <> -1) THEN
552 rlm_core_sv.dlog(C_DEBUG,'g_CUM_tab('||v_Count||').purchase_order_number', g_CUM_tab(v_Count).purchase_order_number);
553 rlm_core_sv.dlog(C_DEBUG,'g_CUM_tab('||v_Count||').primary_quantity', g_CUM_tab(v_Count).primary_quantity);
554 rlm_core_sv.dlog(C_DEBUG,'g_CUM_tab('||v_Count||').item_detail_quantity', g_CUM_tab(v_Count).item_detail_quantity);
555 rlm_core_sv.dlog(C_DEBUG,'g_CUM_tab('||v_Count||').start_date_time', g_CUM_tab(v_Count).start_date_time);
556 rlm_core_sv.dlog(C_DEBUG,'g_CUM_tab('||v_Count||').cust_record_year', g_CUM_tab(v_Count).cust_record_year);
557 rlm_core_sv.dlog(C_DEBUG,'g_CUM_tab('||v_Count||').found', g_CUM_tab(v_Count).found);
558 END IF;
559
560 v_Count := v_Count + 1;
561
562 END LOOP;
563 --
564 CLOSE c_CUMRec;
565 --Bugfix 7007638 End
566
567 IF (l_debug <> -1) THEN
568 rlm_core_sv.dlog(C_DEBUG,'g_CUM_tab.COUNT',g_CUM_tab.COUNT);
569 rlm_core_sv.dpop(C_SDEBUG);
570 END IF;
571 --
572 EXCEPTION
573
574 --Commented exceptions 'NO_DATA_FOUND' and 'TOO_MANY_ROWS' as part of Bugfix 7007638
575
576 /* WHEN NO_DATA_FOUND THEN
577 --
578 g_CUM_rec.found := k_FALSE;
579 --
580 IF (l_debug <> -1) THEN
581 rlm_core_sv.dlog(C_DEBUG,'g_CUM_rec.found', g_CUM_rec.found);
582 rlm_core_sv.dpop(C_SDEBUG);
583 END IF;
584 --
585 WHEN TOO_MANY_ROWS THEN
586 --
587 rlm_message_sv.app_error(
588 x_ExceptionLevel => rlm_message_sv.k_error_level,
589 x_MessageName => 'RLM_MULTIPLE_ITM_CUM_DTL_FOUND',
590 x_InterfaceHeaderId => x_sched_rec.header_id,
591 x_InterfaceLineId => NULL,
592 x_ScheduleHeaderId => x_sched_rec.schedule_header_id,
593 x_ScheduleLineId => NULL,
594 x_OrderHeaderId => x_group_rec.setup_terms_rec.header_id,
595 x_OrderLineId => NULL,
596 x_Token1 => 'SHIP_FROM',
597 x_Value1 => rlm_core_sv.get_ship_from(x_group_rec.ship_from_org_id),
598 x_Token2 => 'SHIP_TO',
599 x_Value2 => rlm_core_sv.get_ship_to(x_group_rec.ship_to_address_id),
600 x_Token3 => 'CITEM',
601 x_Value3 => rlm_core_sv.get_item_number(x_group_rec.customer_item_id));
602 --
603 IF (l_debug <> -1) THEN
604 rlm_core_sv.dlog(C_DEBUG,'Too many rows found for item
605 detail type 4 and subtype = cumulative');
606 rlm_core_sv.dlog(C_DEBUG,'EXCEPTION: RLM_MULTIPLE_ITM_CUM_DTL_FOUND');
607 rlm_core_sv.dpop(C_SDEBUG);
608 END IF;
609 --
610 RAISE e_GroupError;
611 --*/
612 WHEN OTHERS THEN
613 --
614 rlm_message_sv.sql_error('rlm_manage_demand.PopulateCUMRec',
615 v_Progress);
616 --
617 IF (l_debug <> -1) THEN
618 rlm_core_sv.dpop(C_SDEBUG,'EXCEPTION: '||SUBSTR(SQLERRM,1,200));
619 END IF;
620 --
621 raise;
622
623 END PopulateCUMRec;
624
625 /*===========================================================================
626
627 PROCEDURE NAME: PopulateMD
628
629 ===========================================================================*/
630
631 PROCEDURE PopulateMD(x_Sched_rec IN RLM_INTERFACE_HEADERS%ROWTYPE,
632 x_Group_rec IN rlm_dp_sv.t_Group_rec,
633 x_IncludeCUM IN VARCHAR2)
634 IS
635 --
636 CURSOR c_Demand IS
637 SELECT *
638 FROM rlm_interface_lines_all
639 WHERE header_id = x_Sched_rec.header_id
640 AND ship_from_org_id = x_Group_rec.ship_from_org_id
641 AND ship_to_address_id = x_Group_rec.ship_to_address_id
642 AND customer_item_id = x_Group_rec.customer_item_id
643 AND inventory_item_id = x_Group_rec.inventory_item_id
644 AND item_detail_type IN (k_PAST_DUE_FIRM, k_FIRM_DEMAND,
645 k_FORECAST_DEMAND, k_MRP_FORECAST,k_FIRM_DEMAND)
646 AND process_status = rlm_core_sv.k_PS_AVAILABLE
647 ORDER BY START_DATE_TIME;
648
649 CURSOR c_DemandCum IS
650 SELECT *
651 FROM rlm_interface_lines_all
652 WHERE header_id = x_Sched_rec.header_id
653 AND ship_from_org_id = x_Group_rec.ship_from_org_id
654 AND ship_to_address_id = x_Group_rec.ship_to_address_id
655 AND customer_item_id = x_Group_rec.customer_item_id
656 AND inventory_item_id = x_Group_rec.inventory_item_id
657 AND item_detail_type IN (k_PAST_DUE_FIRM, k_FIRM_DEMAND,
658 k_FORECAST_DEMAND, k_MRP_FORECAST,k_SHIP_RECEIPT_INFO)
659 AND process_status = rlm_core_sv.k_PS_AVAILABLE
660 ORDER BY START_DATE_TIME;
661
662 --
663 v_Demand_rec rlm_interface_lines%ROWTYPE;
664 v_Count NUMBER := 1;
665 v_Progress VARCHAR2(3) := '010';
666 --
667 BEGIN
668 --
669 IF (l_debug <> -1) THEN
670 rlm_core_sv.dpush(C_SDEBUG,'PopulateMD');
671 rlm_core_sv.dlog(C_DEBUG,'x_Group_rec.ship_from_org_id',
672 x_Group_rec.ship_from_org_id);
673 rlm_core_sv.dlog(C_DEBUG,'x_Group_rec.ship_to_address_id',
674 x_Group_rec.ship_to_address_id);
675 rlm_core_sv.dlog(C_DEBUG,'x_Group_rec.inventory_item_id',
676 x_Group_rec.inventory_item_id);
677 rlm_core_sv.dlog(C_DEBUG,'x_Group_rec.customer_item_id',
678 x_Group_rec.customer_item_id);
679 rlm_core_sv.dlog(C_DEBUG,'x_IncludeCUM', x_IncludeCUM);
680 END IF;
681 --
682 g_ManageDemand_tab.DELETE;
683
684 IF (x_IncludeCUM = 'Y') THEN
685
686 OPEN c_DemandCum;
687 --
688 LOOP
689 FETCH c_DemandCum INTO v_Demand_rec;
690 EXIT WHEN c_DemandCum%NOTFOUND;
691 g_ManageDemand_tab(v_Count) := v_Demand_rec;
692 g_ManageDemand_tab(v_Count).program_id := NULL;
693 g_ManageDemand_tab(v_Count).program_application_id := NULL;
694 v_Count := v_Count + 1;
695 END LOOP;
696 --
697 IF (l_debug <> -1) THEN
698 rlm_core_sv.dlog(C_DEBUG,'g_ManageDemand_tab.COUNT',g_ManageDemand_tab.COUNT);
699 END IF;
700 --
701 CLOSE c_DemandCum;
702 --
703 ELSE
704 --
705 OPEN c_Demand;
706 --
707 LOOP
708 FETCH c_Demand INTO v_Demand_rec;
709 EXIT WHEN c_Demand%NOTFOUND;
710 g_ManageDemand_tab(v_Count) := v_Demand_rec;
711 g_ManageDemand_tab(v_Count).program_id := NULL;
712 g_ManageDemand_tab(v_Count).program_application_id := NULL;
713 v_Count := v_Count + 1;
714 END LOOP;
715 --
716 IF (l_debug <> -1) THEN
717 rlm_core_sv.dlog(C_DEBUG,'g_ManageDemand_tab.COUNT',g_ManageDemand_tab.COUNT);
718 END IF;
719 --
720 CLOSE c_Demand;
721 --
722 END IF;
723 --
724 IF (l_debug <> -1) THEN
725 rlm_core_sv.dpop(C_SDEBUG);
726 END IF;
727 --
728 EXCEPTION
729 --
730 WHEN OTHERS THEN
731 --
732 rlm_message_sv.sql_error('rlm_manage_demand.PopulateMD',v_Progress);
733 --
734 IF (l_debug <> -1) THEN
735 rlm_core_sv.dpop(C_SDEBUG,'EXCEPTION: '||SUBSTR(SQLERRM,1,200));
736 END IF;
737 --
738 raise;
739 --
740 END PopulateMD;
741
742 /*===========================================================================
743
744 PROCEDURE NAME: UOMConversion
745
746 ===========================================================================*/
747
748 PROCEDURE UOMConversion(x_Group_rec IN rlm_dp_sv.t_Group_rec)
749 IS
750
751 v_Count NUMBER := 1;
752 v_CustomerUOMCode VARCHAR2(30) := NULL;
753 v_ReturnStatus VARCHAR2(30) := 'SUCCESS';
754 v_Progress VARCHAR2(3) :='010';
755
756 BEGIN
757
758 IF (l_debug <> -1) THEN
759 rlm_core_sv.dpush(C_SDEBUG,'UOMConversion');
760 -- note: need to find customer_uom_code?
761 rlm_core_sv.dpop(C_SDEBUG);
762 END IF;
763
764 EXCEPTION
765
766 WHEN OTHERS THEN
767 rlm_message_sv.sql_error('rlm_manage_demand_sv.UOMConversion', v_Progress);
768 --
769 IF (l_debug <> -1) THEN
770 rlm_core_sv.dpop(C_SDEBUG,'EXCEPTION: '||SUBSTR(SQLERRM,1,200));
771 END IF;
772 --
773 raise;
774
775 END UOMConversion;
776
777
778 /*===========================================================================
779
780 PROCEDURE NAME: CUMDiscrepancyCheck
781
782 ===========================================================================*/
783
784 PROCEDURE CUMDiscrepancyCheck( x_Sched_rec IN RLM_INTERFACE_HEADERS%ROWTYPE,
785 x_Group_rec IN rlm_dp_sv.t_Group_rec)
786 IS
787 --
788 v_ReturnStatus VARCHAR2(30) := 'SUCCESS';
789 v_Progress VARCHAR2(3) := '010';
790 v_cum_key_record rlm_cum_sv.cum_key_attrib_rec_type;
791 v_cum_record rlm_cum_sv.cum_rec_type;
792 cust_cum_start_date DATE;
793 cust_cum_qty NUMBER;
794 e_NoCUMAtItem EXCEPTION;
795 e_Nocumkey EXCEPTION;
796 e_CalCumkeyAPIFailed EXCEPTION;
797 e_CalSupCumAPIFailed EXCEPTION;
798 e_CUMDiscrepancy EXCEPTION;
799 e_CUMDiscrepancyAll EXCEPTION;
800 v_Intransit NUMBER := 0;
801 v_supQty NUMBER := 0;
802 --
803 v_InterfaceLineId NUMBER;
804 v_current_rec NUMBER; --Bugfix 7007638
805 v_control_text VARCHAR2(100); --Bugfix 7007638
806 v_control_value VARCHAR2(100); --Bugfix 7007638
807 --
808 BEGIN
809 --
810 IF (l_debug <> -1) THEN
811 rlm_core_sv.dpush(C_SDEBUG,'CUMDiscrepancyCheck');
812 rlm_core_sv.dlog(C_DEBUG,'cum_control_code',
813 x_Group_rec.setup_terms_rec.cum_control_code);
814 END IF;
815 --
816 v_Progress := '020';
817 --
818 FOR v_Count IN 1..g_CUM_tab.COUNT LOOP --Bugfix 7007638
819
820 BEGIN
821
822 IF (l_debug <> -1) THEN
823 rlm_core_sv.dlog(C_DEBUG,'g_CUM_tab('||v_Count||').found',g_CUM_tab(v_Count).found); --Bugfix 7007638
824 rlm_core_sv.dlog(C_DEBUG,'g_CUM_tab('||v_Count||').primary_quantity',g_CUM_tab(v_Count).primary_quantity); --Bugfix 7007638
825 END IF;
826 -- This assignment is done in order to get the current record during the error processing
827 v_current_rec := v_Count; --Bugfix 7007638
828 --
829 --Bugfix 7007638 --replaced all occurrences of record type g_CUM_rec with PL/SQL table g_CUM_tab(v_Count).
830 IF g_CUM_tab(v_Count).found = k_TRUE AND
831 x_Group_rec.setup_terms_rec.cum_control_code <> 'NO_CUM' AND
832 g_CUM_tab(v_Count).primary_quantity > 0 THEN
833
834 --Bugfix 7007638
835 IF x_Group_rec.setup_terms_rec.cum_control_code IN ('CUM_BY_DATE_PO','CUM_BY_PO_ONLY') THEN
836 rlm_message_sv.get_msg_text(
837 x_message_name => 'RLM_CUM_CONTROL_PO',
838 x_text => v_control_text);
839 v_control_value := g_CUM_tab(v_Count).purchase_order_number;
840 ELSIF x_Group_rec.setup_terms_rec.cum_control_code IN ('CUM_BY_DATE_RECORD_YEAR') THEN
841 rlm_message_sv.get_msg_text(
842 x_message_name => 'RLM_CUM_CONTROL_RY',
843 x_text => v_control_text);
844 v_control_value := g_CUM_tab(v_Count).cust_record_year;
845 ELSIF x_Group_rec.setup_terms_rec.cum_control_code IN ('CUM_BY_DATE_ONLY') THEN
846 rlm_message_sv.get_msg_text(
847 x_message_name => 'RLM_CUM_CONTROL_DATE',
848 x_text => v_control_text);
849 v_control_value := g_CUM_tab(v_Count).start_date_time;
850 END IF;
851 --Bugfix 7007638
852 --
853 IF (l_debug <> -1) THEN
854 rlm_core_sv.dlog(C_DEBUG,'x_Group_rec.setup_terms_rec.calc_cum_flag',
855 x_Group_rec.setup_terms_rec.calc_cum_flag);
856 END IF;
857 --
858 IF x_Group_rec.setup_terms_rec.calc_cum_flag = 'N' THEN
859 --
860 raise e_NoCUMAtItem;
861 --
862 END IF;
863 --
864 v_cum_key_record.customer_id :=
865 g_CUM_tab(v_Count).customer_id;
866 v_cum_key_record.customer_item_id :=
867 g_CUM_tab(v_Count).customer_item_id;
868 v_cum_key_record.inventory_item_id :=
869 g_CUM_tab(v_Count).inventory_item_id;
870 v_cum_key_record.ship_from_org_id :=
871 g_CUM_tab(v_Count).ship_from_org_id;
872 v_cum_key_record.intrmd_ship_to_address_id :=
873 g_CUM_tab(v_Count).intrmd_ship_to_address_id;
874 v_cum_key_record.ship_to_address_id :=
875 g_CUM_tab(v_Count).ship_to_address_id;
876 v_cum_key_record.bill_to_address_id :=
877 g_CUM_tab(v_Count).bill_to_address_id;
878 v_cum_key_record.purchase_order_number :=
879 g_CUM_tab(v_Count).purchase_order_number;
880 v_cum_key_record.cum_start_date :=
881 g_CUM_tab(v_Count).start_date_time;
882 v_cum_key_record.cust_record_year :=
883 g_CUM_tab(v_Count).cust_record_year;
884 v_cum_key_record.create_cum_key_flag := 'N';
885 --
886 -- currently po date is sent in as cust_po_date
887 -- Open issue : need to check with Kathleen about warning for po date
888 --v_cum_key_record.po_effectivity_start_date :=
889 -- g_ManageDemand_tab(i).cust_po_date;
890 --
891 v_Progress := '030';
892 --
893 IF (l_debug <> -1) THEN
894 rlm_core_sv.dlog(C_DEBUG,'v_cum_key_record.customer_id',
895 v_cum_key_record.customer_id);
896 rlm_core_sv.dlog(C_DEBUG,'v_cum_key_record.customer_item_id',
897 v_cum_key_record.customer_item_id);
898 rlm_core_sv.dlog(C_DEBUG,'v_cum_key_record.inventory_item_id',
899 v_cum_key_record.inventory_item_id);
900 rlm_core_sv.dlog(C_DEBUG,'v_cum_key_record.ship_from_org_id',
901 v_cum_key_record.ship_from_org_id);
902 rlm_core_sv.dlog(C_DEBUG,'v_cum_key_record.intrmd_ship_to_address_id'
903 ,v_cum_key_record.intrmd_ship_to_address_id);
904 rlm_core_sv.dlog(C_DEBUG,'v_cum_key_record.ship_to_address_id',
905 v_cum_key_record.ship_to_address_id);
906 rlm_core_sv.dlog(C_DEBUG,'v_cum_key_record.bill_to_address_id',
907 v_cum_key_record.bill_to_address_id);
908 rlm_core_sv.dlog(C_DEBUG,'v_cum_key_record.purchase_order_number',
909 v_cum_key_record.purchase_order_number);
910 rlm_core_sv.dlog(C_DEBUG,'v_cum_key_record.cust_record_year',
911 v_cum_key_record.cust_record_year);
912 rlm_core_sv.dlog(C_DEBUG,'v_cum_key_record.cum_start_date'
913 ,v_cum_key_record.cum_start_date);
914 rlm_core_sv.dlog(C_DEBUG,'v_cum_key_record.create_cum_key_flag',
915 v_cum_key_record.create_cum_key_flag);
916 rlm_core_sv.dlog(C_DEBUG,'call cum api for calculate cum key');
917 END IF;
918 --
919 RLM_TPA_SV.CalculateCumKey(v_cum_key_record,v_cum_record);
920 --
921 IF (l_debug <> -1) THEN
922 rlm_core_sv.dlog(C_DEBUG,'v_cum_record.record_return_status',
923 v_cum_record.record_return_status);
924 END IF;
925 --
926 IF v_cum_record.record_return_status THEN
927 --
928 IF (l_debug <> -1) THEN
929 rlm_core_sv.dlog(C_DEBUG,'v_cum_record.msg_data',
930 v_cum_record.msg_data);
931 rlm_core_sv.dlog(C_DEBUG,'v_cum_record.cum_key_id',
932 v_cum_record.cum_key_id);
933 rlm_core_sv.dlog(C_DEBUG,'v_cum_record.cum_start_date',
934 v_cum_record.cum_start_date);
935 rlm_core_sv.dlog(C_DEBUG,'v_cum_record.shipped_quantity',
936 v_cum_record.shipped_quantity);
937 rlm_core_sv.dlog(C_DEBUG,'v_cum_record.actual_shipment_date',
938 v_cum_record.actual_shipment_date);
939 rlm_core_sv.dlog(C_DEBUG,'v_cum_record.cum_key_created_flag',
940 v_cum_record.cum_key_created_flag);
941 rlm_core_sv.dlog(C_DEBUG,'v_cum_record.cum_qty',
942 v_cum_record.cum_qty);
943 rlm_core_sv.dlog(C_DEBUG,'v_cum_record.as_of_date_cum_qty',
944 v_cum_record.as_of_date_cum_qty);
945 rlm_core_sv.dlog(C_DEBUG,'v_cum_record.cum_qty_to_be_accumulated',
946 v_cum_record.cum_qty_to_be_accumulated);
947 rlm_core_sv.dlog(C_DEBUG,'v_cum_record.last_cum_qty_update_date',
948 v_cum_record.last_cum_qty_update_date);
949 rlm_core_sv.dlog(C_DEBUG,'v_cum_record.cust_uom_code',
950 v_cum_record.cust_uom_code);
951 rlm_core_sv.dlog(C_DEBUG,'v_cum_record.use_ship_incl_rule_flag',
952 v_cum_record.use_ship_incl_rule_flag);
953 rlm_core_sv.dlog(C_DEBUG,'v_cum_record.shipment_rule_code',
954 v_cum_record.shipment_rule_code);
955 rlm_core_sv.dlog(C_DEBUG,'v_cum_record.yesterday_time_cutoff'
956 ,v_cum_record.yesterday_time_cutoff);
957 rlm_core_sv.dlog(C_DEBUG,'v_cum_record.last_update_date',
958 v_cum_record.last_update_date);
959 rlm_core_sv.dlog(C_DEBUG,'v_cum_record.as_of_date_time',
960 v_cum_record.as_of_date_time);
961 END IF;
962 --
963 IF v_cum_record.cum_key_id IS NULL THEN
964 --
965 v_Progress := '060';
966 raise e_NoCumKey;
967 --
968 END IF;
969 --
970 ELSE
971 --
972 raise e_CalCumKeyAPIFAiled;
973 --
974 END IF;
975 --
976 IF (l_debug <> -1) THEN
977 rlm_core_sv.dlog(C_DEBUG,'v_Intransit', v_Intransit);
978 rlm_core_sv.dlog(C_DEBUG,'g_CUM_tab('||v_Count||').primary_quantity',
979 g_CUM_tab(v_Count).primary_quantity);
980 rlm_core_sv.dlog(C_DEBUG,'v_cum_record.cum_qty',
981 v_cum_record.cum_qty);
982 END IF;
983 --
984 IF x_Group_rec.setup_terms_rec.cum_org_level_code NOT IN (
985 'SHIP_TO_ALL_SHIP_FROMS',
986 'BILL_TO_ALL_SHIP_FROMS',
987 'DELIVER_TO_ALL_SHIP_FROMS') THEN
988 --
989 g_count := v_Count; --Bugfix 7007638
990 --
991 v_Intransit := RLM_TPA_SV.CalculateIntransitQty(x_Sched_rec,
992 x_Group_rec);
993 IF (l_debug <> -1) THEN
994 rlm_core_sv.dlog(C_DEBUG,'v_Intransit', v_Intransit);
995 END IF;
996 --
997 v_SupQty := v_cum_record.cum_qty +
998 v_cum_record.cum_qty_to_be_accumulated +
999 NVL(v_cum_record.cum_qty_after_cutoff,0) - v_Intransit;
1000 --
1001 IF (l_debug <> -1) THEN
1002 rlm_core_sv.dlog(C_DEBUG,'v_SupQty', v_SupQty);
1003 END IF;
1004 --
1005 IF g_CUM_tab(v_Count).primary_quantity <> v_SupQty THEN
1006 --
1007 IF (l_debug <> -1) THEN
1008 rlm_core_sv.dlog(C_DEBUG,'NOT ALL');
1009 END IF;
1010 --
1011 v_Progress := '120';
1012 raise e_CUMDiscrepancy;
1013 --
1014 END IF;
1015 --
1016 ELSE
1017 --
1018 g_count := v_Count; --Bugfix 7007638
1019 --
1020 g_AllIntransitQty := RLM_TPA_SV.GetIntransitAcrossOrgs(x_Sched_rec, x_Group_rec, v_cum_record.cum_key_id);
1021 --
1022 IF (l_debug <> -1) THEN
1023 rlm_core_sv.dlog(C_DEBUG, 'g_AllIntransitQty', g_AllIntransitQty);
1024 END IF;
1025 --
1026 v_SupQty := v_cum_record.cum_qty +
1027 v_cum_record.cum_qty_to_be_accumulated +
1028 NVL(v_cum_record.cum_qty_after_cutoff,0)
1029 - NVL(g_AllIntransitQty,0);
1030 --
1031 IF (l_debug <> -1) THEN
1032 rlm_core_sv.dlog(C_DEBUG,'v_SupQty', v_SupQty);
1033 END IF;
1034 --
1035 IF g_CUM_tab(v_Count).item_detail_quantity <> v_SupQty THEN
1036 --
1037 IF (l_debug <> -1) THEN
1038 rlm_core_sv.dlog(C_DEBUG,'g_CUM_tab('||v_Count||').item_detail_quantity',
1039 g_CUM_tab(v_Count).item_detail_quantity);
1040 END IF;
1041 --
1042 v_Progress := '120';
1043 RAISE e_CUMDiscrepancyAll;
1044 --
1045 END IF;
1046 --
1047 END IF;
1048 --
1049 END IF;
1050 --
1051
1052 EXCEPTION
1053 --
1054 WHEN e_CUMDiscrepancy THEN
1055 --
1056 -- Bug 2778186: Pick one line as a rep. for this group, so we
1057 -- can use this to determine SF/ST/CI information
1058 --
1059 BEGIN
1060 --
1061 SELECT line_id
1062 INTO v_InterfaceLineId
1063 FROM rlm_interface_lines
1064 WHERE header_id = x_Sched_rec.header_id
1065 AND ship_from_org_id = x_Group_rec.ship_from_org_id
1066 AND ship_to_address_id = x_Group_rec.ship_to_address_id
1067 AND customer_item_id = x_Group_rec.customer_item_id
1068 AND rownum = 1;
1069 --
1070 EXCEPTION
1071 --
1072 WHEN NO_DATA_FOUND THEN
1073 v_InterfaceLineId := NULL;
1074 --
1075 END;
1076 --
1077 rlm_message_sv.app_error(
1078 x_ExceptionLevel => rlm_message_sv.k_warn_level,
1079 x_MessageName => 'RLM_CUM_QTY_DISCREPANCY',
1080 x_InterfaceHeaderId => x_sched_rec.header_id,
1081 x_InterfaceLineId => v_InterfaceLineId,
1082 x_ScheduleHeaderId => x_sched_rec.schedule_header_id,
1083 x_ScheduleLineId => NULL,
1084 x_OrderHeaderId => x_group_rec.setup_terms_rec.header_id,
1085 x_OrderLineId => NULL,
1086 x_GroupInfo => TRUE,
1087 x_Token1 => 'CUSTCM',
1088 x_Value1 => g_CUM_tab(v_current_rec).primary_quantity, --Bugfix 7007638
1089 x_Token2 => 'GROUP', --Bugfix 7007638
1090 x_value2 => '-'||v_control_text||' '|| --Bugfix 7007638
1091 rlm_core_sv.get_ship_from(x_group_rec.ship_from_org_id)||'-'||
1092 rlm_core_sv.get_ship_to(x_group_rec.ship_to_address_id)||'-'||
1093 rlm_core_sv.get_item_number(x_group_rec.customer_item_id)||'-'||
1094 v_control_value,
1095 x_Token3 => 'SUPCUM',
1096 x_Value3 => v_SupQty);
1097 --
1098 IF (l_debug <> -1) THEN
1099 rlm_core_sv.dlog(C_DEBUG,'WARNING : CUM Discrepancy found between customer cum and supplier cum');
1100 rlm_core_sv.dlog(C_DEBUG, 'v_InterfaceLineId', v_InterfaceLineId);
1101 END IF;
1102 --
1103 WHEN e_CUMDiscrepancyAll THEN
1104 --
1105 -- Bug 2778186: Pick one line as a rep. for this group, so we
1106 -- can use this to determine SF/ST/CI information
1107 --
1108 BEGIN
1109 --
1110 SELECT line_id
1111 INTO v_InterfaceLineId
1112 FROM rlm_interface_lines
1113 WHERE header_id = x_Sched_rec.header_id
1114 AND ship_from_org_id = x_Group_rec.ship_from_org_id
1115 AND ship_to_address_id = x_Group_rec.ship_to_address_id
1116 AND customer_item_id = x_Group_rec.customer_item_id
1117 AND rownum = 1;
1118 --
1119 EXCEPTION
1120 --
1121 WHEN NO_DATA_FOUND THEN
1122 v_InterfaceLineId := NULL;
1123 --
1124 END;
1125 --
1126 rlm_message_sv.app_error(
1127 x_ExceptionLevel => rlm_message_sv.k_warn_level,
1128 x_MessageName => 'RLM_CUM_QTY_DISCREPANCY',
1129 x_InterfaceHeaderId => x_sched_rec.header_id,
1130 x_InterfaceLineId => v_InterfaceLineId,
1131 x_ScheduleHeaderId => x_sched_rec.schedule_header_id,
1132 x_ScheduleLineId => NULL,
1133 x_OrderHeaderId => x_group_rec.setup_terms_rec.header_id,
1134 x_OrderLineId => NULL,
1135 x_GroupInfo => TRUE,
1136 x_Token1 => 'CUSTCM',
1137 x_Value1 => g_CUM_tab(v_current_rec).item_detail_quantity, --Bugfix 7007638
1138 x_Token2 => 'GROUP', --Bugfix 7007638
1139 x_value2 => '-'||v_control_text||' '|| --Bugfix 7007638
1140 rlm_core_sv.get_ship_from(x_group_rec.ship_from_org_id)||'-'||
1141 rlm_core_sv.get_ship_to(x_group_rec.ship_to_address_id)||'-'||
1142 rlm_core_sv.get_item_number(x_group_rec.customer_item_id)||'-'||
1143 v_control_value,
1144 x_Token3 => 'SUPCUM',
1145 x_Value3 => v_SupQty);
1146 --
1147 IF (l_debug <> -1) THEN
1148 rlm_core_sv.dlog(C_DEBUG,'WARNING : CUM Discrepancy found between customer cum and supplier cum');
1149 rlm_core_sv.dlog(C_DEBUG, 'v_InterfaceLineId', v_InterfaceLineId);
1150 END IF;
1151 --
1152 WHEN e_NoCumKey THEN
1153 --
1154 -- Bug 2778186: Pick one line as a rep. for this group, so we
1155 -- can use this to determine SF/ST/CI information
1156 --
1157 BEGIN
1158 --
1159 SELECT line_id
1160 INTO v_InterfaceLineId
1161 FROM rlm_interface_lines
1162 WHERE header_id = x_Sched_rec.header_id
1163 AND ship_from_org_id = x_Group_rec.ship_from_org_id
1164 AND ship_to_address_id = x_Group_rec.ship_to_address_id
1165 AND customer_item_id = x_Group_rec.customer_item_id
1166 AND rownum = 1;
1167 --
1168 EXCEPTION
1169 --
1170 WHEN NO_DATA_FOUND THEN
1171 v_InterfaceLineId := NULL;
1172 --
1173 END;
1174 --
1175 rlm_message_sv.app_error(
1176 x_ExceptionLevel => rlm_message_sv.k_warn_level,
1177 x_MessageName => 'RLM_CUM_KEY_MISSING',
1178 x_InterfaceHeaderId => x_sched_rec.header_id,
1179 x_InterfaceLineId => v_InterfaceLineId,
1180 x_ScheduleHeaderId => x_sched_rec.schedule_header_id,
1181 x_ScheduleLineId => NULL,
1182 x_OrderHeaderId => x_group_rec.setup_terms_rec.header_id,
1183 x_OrderLineId => NULL,
1184 x_GroupInfo => TRUE,
1185 x_Token1 => 'GROUP', --Bugfix 7007638
1186 x_value1 => '-'||v_control_text||' '|| --Bugfix 7007638
1187 rlm_core_sv.get_ship_from(x_group_rec.ship_from_org_id)||'-'||
1188 rlm_core_sv.get_ship_to(x_group_rec.ship_to_address_id)||'-'||
1189 rlm_core_sv.get_item_number(x_group_rec.customer_item_id)||'-'||
1190 v_control_value);
1191 --
1192 IF (l_debug <> -1) THEN
1193 rlm_core_sv.dlog('No CUM Key Found need not calculate the supplier cum');
1194 rlm_core_sv.dlog(C_DEBUG, 'v_InterfaceLineId', v_InterfaceLineId);
1195 END IF;
1196 --
1197 WHEN e_NoCUMAtItem THEN
1198 --
1199 -- Bug 2778186: Pick one line as a rep. for this group, so we
1200 -- can use this to determine SF/ST/CI information
1201 --
1202 BEGIN
1203 --
1204 SELECT line_id
1205 INTO v_InterfaceLineId
1206 FROM rlm_interface_lines
1207 WHERE header_id = x_Sched_rec.header_id
1208 AND ship_from_org_id = x_Group_rec.ship_from_org_id
1209 AND ship_to_address_id = x_Group_rec.ship_to_address_id
1210 AND customer_item_id = x_Group_rec.customer_item_id
1211 AND rownum = 1;
1212 --
1213 EXCEPTION
1214 --
1215 WHEN NO_DATA_FOUND THEN
1216 v_InterfaceLineId := NULL;
1217 --
1218 END;
1219 --
1220 rlm_message_sv.app_error(
1221 x_ExceptionLevel => rlm_message_sv.k_warn_level,
1222 x_MessageName => 'RLM_CUM_FOR_ITEM_NOT_ENABLED',
1223 x_InterfaceHeaderId => x_sched_rec.header_id,
1224 x_InterfaceLineId => v_InterfaceLineId,
1225 x_ScheduleHeaderId => x_sched_rec.schedule_header_id,
1226 x_ScheduleLineId => NULL,
1227 x_OrderHeaderId => x_group_rec.setup_terms_rec.header_id,
1228 x_OrderLineId => NULL,
1229 x_GroupInfo => TRUE,
1230 -- x_Token1 => 'CITEM',
1231 -- x_Value1 => rlm_core_sv.get_item_number(x_group_rec.customer_item_id));
1232 x_Token1 => 'GROUP', --Bugfix 7007638
1233 x_value1 => '-'||v_control_text||' '|| --Bugfix 7007638
1234 rlm_core_sv.get_ship_from(x_group_rec.ship_from_org_id)||'-'||
1235 rlm_core_sv.get_ship_to(x_group_rec.ship_to_address_id)||'-'||
1236 rlm_core_sv.get_item_number(x_group_rec.customer_item_id)||'-'||
1237 v_control_value);
1238 --
1239 IF (l_debug <> -1) THEN
1240 rlm_core_sv.dlog(C_DEBUG,'progress',v_Progress);
1241 rlm_core_sv.dlog(C_DEBUG, 'v_InterfaceLineId', v_InterfaceLineId);
1242 rlm_core_sv.dlog(C_DEBUG,'CUM overwritten at item level no cum required');
1243 END IF;
1244 --
1245 END;
1246 END LOOP; --Bugfix 7007638
1247 --
1248 IF (l_debug <> -1) THEN
1249 rlm_core_sv.dpop(C_SDEBUG);
1250 END IF;
1251 --
1252 EXCEPTION
1253 --
1254 WHEN e_CalCumKeyAPIFailed THEN
1255 --
1256 -- Bug 2778186: Pick one line as a rep. for this group, so we
1257 -- can use this to determine SF/ST/CI information
1258 --
1259 BEGIN
1260 --
1261 SELECT line_id
1262 INTO v_InterfaceLineId
1263 FROM rlm_interface_lines
1264 WHERE header_id = x_Sched_rec.header_id
1265 AND ship_from_org_id = x_Group_rec.ship_from_org_id
1266 AND ship_to_address_id = x_Group_rec.ship_to_address_id
1267 AND customer_item_id = x_Group_rec.customer_item_id
1268 AND rownum = 1;
1269 --
1270 EXCEPTION
1271 --
1272 WHEN NO_DATA_FOUND THEN
1273 v_InterfaceLineId := NULL;
1274 --
1275 END;
1276 --
1277 rlm_message_sv.sql_error('rlm_manage_demand_sv.CUMDiscrepancyCheck',v_Progress);
1278 --
1279 rlm_message_sv.app_error(
1280 x_ExceptionLevel => rlm_message_sv.k_error_level,
1281 x_MessageName => 'RLM_CALC_CUM_KEY_FAILED',
1282 x_ChildMessageName => v_cum_record.msg_name,
1283 x_InterfaceHeaderId => x_sched_rec.header_id,
1284 x_InterfaceLineId => v_InterfaceLineId,
1285 x_ScheduleHeaderId => x_sched_rec.schedule_header_id,
1286 x_ScheduleLineId => NULL,
1287 x_OrderHeaderId => x_group_rec.setup_terms_rec.header_id,
1288 x_OrderLineId => NULL,
1289 x_GroupInfo => TRUE,
1290 x_Token1 => 'GROUP', --Bugfix 7007638
1291 x_value1 => '-'||v_control_text||' '|| --Bugfix 7007638
1292 rlm_core_sv.get_ship_from(x_group_rec.ship_from_org_id)||'-'||
1293 rlm_core_sv.get_ship_to(x_group_rec.ship_to_address_id)||'-'||
1294 rlm_core_sv.get_item_number(x_group_rec.customer_item_id)||'-'||
1295 v_control_value,
1296 x_Token2 => 'ERRORMSG',
1297 x_Value2 => v_cum_record.msg_data);
1298 --
1299 IF (l_debug <> -1) THEN
1300 rlm_core_sv.dlog(C_DEBUG,'CalculateCUMkey API Failed',v_cum_record.msg_data);
1301 rlm_core_sv.dlog(C_DEBUG, 'v_InterfaceLineId', v_InterfaceLineId);
1302 rlm_core_sv.dpop(C_SDEBUG);
1303 END IF;
1304 --
1305 raise e_GroupError;
1306 --
1307 WHEN e_CalSupCumAPIFailed THEN /* This is never raised */
1308 --
1309 rlm_message_sv.sql_error('rlm_manage_demand_sv.CUMDiscrepancyCheck', v_Progress);
1310 --
1311 rlm_message_sv.app_error(
1312 x_ExceptionLevel => rlm_message_sv.k_error_level,
1313 x_MessageName => 'RLM_CALC_SUPCUM_KEY_FAILED',
1314 x_ChildMessageName => v_cum_record.msg_name,
1315 x_InterfaceHeaderId => x_sched_rec.header_id,
1316 x_InterfaceLineId => NULL,
1317 x_ScheduleHeaderId => x_sched_rec.schedule_header_id,
1318 x_ScheduleLineId => NULL,
1319 x_OrderHeaderId => x_group_rec.setup_terms_rec.header_id,
1320 x_OrderLineId => NULL,
1321 x_Token1 => 'ERROR',
1322 x_Value1 => v_cum_record.msg_data);
1323 --
1324 IF (l_debug <> -1) THEN
1325 rlm_core_sv.dlog(C_DEBUG,'CalculateSupplierCUM API Failed',
1326 v_cum_record.msg_data);
1327 rlm_core_sv.dpop(C_SDEBUG);
1328 END IF;
1329 --
1330 raise e_GroupError;
1331 --
1332 WHEN OTHERS THEN
1333 --
1334 rlm_message_sv.sql_error('rlm_manage_demand_sv.CUMDiscrepancyCheck',
1335 v_Progress);
1336 --
1337 IF (l_debug <> -1) THEN
1338 rlm_core_sv.dlog(C_DEBUG,'progress',v_Progress);
1339 rlm_core_sv.dpop(C_SDEBUG,'EXCEPTION: '||SUBSTR(SQLERRM,1,200));
1340 END IF;
1341 --
1342 raise;
1343
1344 END CUMDiscrepancyCheck;
1345
1346
1347 /*===========================================================================
1348
1349 PROCEDURE NAME: SetOperation
1350
1351 ===========================================================================*/
1352
1353 PROCEDURE SetOperation(x_ManageDemand_rec IN OUT NOCOPY rlm_interface_lines%ROWTYPE,
1354 x_Operation IN NUMBER)
1355 IS
1356 --
1357 v_Progress VARCHAR2(3) :='010';
1358 --
1359 BEGIN
1360 --
1361 IF (l_debug <> -1) THEN
1362 rlm_core_sv.dpush(C_SDEBUG,'SetOperation');
1363 rlm_core_sv.dlog(C_DEBUG,'x_Operation',x_Operation);
1364 rlm_core_sv.dlog(C_DEBUG,'program_id',x_ManageDemand_rec.program_id);
1365 END IF;
1366 --
1367 IF x_Operation = k_DELETE THEN
1368 --
1369 x_ManageDemand_rec.program_id := x_Operation;
1370 --
1371 /* Commented out for bug 3320743
1372 IF nvl(x_ManageDemand_rec.program_id,k_NULL) = k_INSERT THEN
1373 x_ManageDemand_rec.program_id := NULL;
1374 ELSE
1375 x_ManageDemand_rec.program_id := x_Operation;
1376 END IF; */
1377 --
1378 ELSIF x_Operation = k_UPDATE THEN
1379 --
1380 IF (l_debug <> -1) THEN
1381 rlm_core_sv.dlog(C_DEBUG,'x_Operation',x_Operation);
1382 END IF;
1383 --
1384 IF nvl(x_ManageDemand_rec.program_id,k_NULL) NOT IN (k_INSERT, k_DELETE)
1385 THEN
1386 x_ManageDemand_rec.program_id := x_Operation;
1387 END IF;
1388 ELSIF x_Operation = k_INSERT THEN
1389 SELECT rlm_interface_lines_s.nextval
1390 INTO x_ManageDemand_rec.line_id
1391 FROM DUAL;
1392 x_ManageDemand_rec.program_id := x_Operation;
1393 END IF;
1394 --
1395 IF (l_debug <> -1) THEN
1396 rlm_core_sv.dlog(C_DEBUG,'program_id',x_ManageDemand_rec.program_id);
1397 rlm_core_sv.dpop(C_SDEBUG);
1398 END IF;
1399 --
1400 EXCEPTION
1401 --
1402 WHEN OTHERS THEN
1403 --
1404 rlm_message_sv.sql_error('rlm_manage_demand_sv.SetOperation', v_Progress);
1405 --
1406 IF (l_debug <> -1) THEN
1407 rlm_core_sv.dlog(C_DEBUG,'progress',v_Progress);
1408 rlm_core_sv.dpop(C_SDEBUG,'EXCEPTION: '||SUBSTR(SQLERRM,1,200));
1409 END IF;
1410 --
1411 raise;
1412 --
1413 END SetOperation;
1414
1415 /*===========================================================================
1416
1417 PROCEDURE NAME: CUMToDiscrete
1418
1419 ===========================================================================*/
1420
1421 PROCEDURE CUMToDiscrete(x_Sched_rec IN RLM_INTERFACE_HEADERS%ROWTYPE,
1422 x_Group_rec IN rlm_dp_sv.t_Group_rec)
1423 IS
1424 --
1425 v_current_rec NUMBER;
1426 v_EarlierDiscreteQty NUMBER := 0;
1427 v_Progress VARCHAR2(3) := '010';
1428 v_cum_key_record RLM_CUM_SV.cum_key_attrib_rec_type;
1429 v_cum_record RLM_CUM_SV.cum_rec_type;
1430 v_supplier_total_qty NUMBER DEFAULT 0;
1431 e_noSupplierCum EXCEPTION;
1432 e_UomMismatch EXCEPTION; -- Bug 4468377
1433 v_control_text VARCHAR2(100); --Bugfix 7007638
1434 v_control_value VARCHAR2(100); --Bugfix 7007638
1435 --
1436 BEGIN
1437 --
1438 IF (l_debug <> -1) THEN
1439 rlm_core_sv.dpush(C_SDEBUG,'CUMToDiscrete');
1440 rlm_core_sv.dlog(C_DEBUG,'v_EarlierDiscreteQty',v_EarlierDiscreteQty);
1441 rlm_core_sv.dlog(C_DEBUG,'g_CUM_tab.COUNT',g_CUM_tab.COUNT); --Bugfix 7007638
1442 END IF;
1443
1444 --Bugfix 7007638 --Replaced all occurrences of record type g_CUM_rec with PL/SQL table g_CUM_tab.
1445
1446 IF g_CUM_tab.COUNT > 0 THEN --Bugfix 7007638
1447
1448 FOR v_Count1 IN 1..g_CUM_tab.COUNT LOOP --Bugfix 7007638
1449 --
1450 v_cum_record.cum_key_id := NULL;
1451 v_EarlierDiscreteQty := 0; --Bugfix 7007638
1452 --
1453 IF (l_debug <> -1) THEN
1454 rlm_core_sv.dlog(C_DEBUG,'v_EarlierDiscreteQty',v_EarlierDiscreteQty);
1455 rlm_core_sv.dlog(C_DEBUG,'x_Group_rec.setup_terms_rec.cum_control_code',x_Group_rec.setup_terms_rec.cum_control_code);
1456 rlm_core_sv.dlog(C_DEBUG,'g_CUM_tab('||v_Count1||').purchase_order_number',g_CUM_tab(v_Count1).purchase_order_number);
1457 rlm_core_sv.dlog(C_DEBUG,'g_CUM_tab('||v_Count1||').cust_record_year',g_CUM_tab(v_Count1).cust_record_year);
1458 END IF;
1459 --
1460 FOR v_Count IN 1..g_ManageDemand_tab.COUNT LOOP
1461 --Displaying values as part of Bugfix 7007638
1462 IF (l_debug <> -1) THEN
1463 rlm_core_sv.dlog(C_DEBUG,'g_ManageDemand_tab('||v_Count||').qty_type_code', g_ManageDemand_tab(v_Count).qty_type_code);
1464 rlm_core_sv.dlog(C_DEBUG,'g_ManageDemand_tab('||v_Count||').cust_po_number',g_ManageDemand_tab(v_Count).cust_po_number);
1465 rlm_core_sv.dlog(C_DEBUG,'g_ManageDemand_tab('||v_Count||').industry_attribute1',g_ManageDemand_tab(v_Count).industry_attribute1);
1466 END IF;
1467
1468 --Bugfix 7007638 --Added IF Condition
1469 IF (x_Group_rec.setup_terms_rec.cum_control_code IN ('CUM_BY_DATE_PO','CUM_BY_PO_ONLY') AND
1470 g_ManageDemand_tab(v_Count).cust_po_number = g_CUM_tab(v_Count1).purchase_order_number) OR
1471 (x_Group_rec.setup_terms_rec.cum_control_code IN ('CUM_BY_DATE_RECORD_YEAR') AND
1472 g_ManageDemand_tab(v_Count).industry_attribute1 = g_CUM_tab(v_Count1).cust_record_year) OR
1473 (x_Group_rec.setup_terms_rec.cum_control_code IN ('CUM_BY_DATE_ONLY')) THEN
1474
1475 -- This assignment is done in order to get the current record during the error processing
1476 --
1477 v_current_rec := v_Count;
1478 --
1479 IF g_ManageDemand_tab(v_Count).qty_type_code = k_CUMULATIVE
1480 AND g_ManageDemand_tab(v_count).item_detail_type IN (k_PAST_DUE_FIRM,k_FIRM_DEMAND,k_FORECAST_DEMAND,k_MRP_FORECAST)
1481 THEN
1482 --
1483 --Bugfix 7007638 --Replaced all occurrences of record type g_CUM_rec with PL/SQL table g_CUM_tab.
1484 --Calculate supplier CUM only once
1485 --
1486 IF v_cum_record.cum_key_id IS NULL THEN
1487 --
1488 IF g_CUM_tab(v_Count1).found = k_TRUE THEN
1489 --
1490 v_cum_record.record_return_status := TRUE;
1491 --
1492 v_cum_key_record.customer_item_id:= g_CUM_tab(v_Count1).customer_item_id;
1493 --
1494 v_cum_key_record.inventory_item_id:= g_CUM_tab(v_Count1).inventory_item_id;
1495 --
1496 v_cum_key_record.ship_from_org_id:= g_CUM_tab(v_Count1).ship_from_org_id;
1497 --
1498 v_cum_key_record.purchase_order_number:= g_CUM_tab(v_Count1).purchase_order_number;
1499 --
1500 v_cum_key_record.cust_record_year:= g_CUM_tab(v_Count1).cust_record_year;
1501 --
1502 v_cum_key_record.ship_to_address_id:= g_CUM_tab(v_Count1).ship_to_address_id;
1503 --
1504 v_cum_key_record.intrmd_ship_to_address_id:= g_CUM_tab(v_Count1).intrmd_ship_to_address_id;
1505 --
1506 v_cum_key_record.bill_to_address_id:= g_CUM_tab(v_Count1).bill_to_address_id;
1507 --
1508 v_cum_key_record.customer_id:= g_CUM_tab(v_Count1).customer_id;
1509 --
1510 v_cum_key_record.cum_start_date:= g_CUM_tab(v_Count1).start_date_time;
1511 --
1512 v_cum_key_record.create_cum_key_flag := 'N';
1513 --
1514 ELSE -- if g_CUM_tab
1515 --
1516 v_cum_record.record_return_status := TRUE;
1517 --
1518 v_cum_key_record.cum_start_date:= rlm_manage_demand_sv.K_DNULL;
1519 --
1520 v_cum_key_record.customer_item_id:= g_ManageDemand_tab(v_count).customer_item_id;
1521 --
1522 v_cum_key_record.inventory_item_id:= g_ManageDemand_tab(v_count).inventory_item_id;
1523 --
1524 v_cum_key_record.ship_from_org_id:= g_ManageDemand_tab(v_count).ship_from_org_id;
1525 --
1526 v_cum_key_record.purchase_order_number:= g_ManageDemand_tab(v_count).cust_po_number;
1527 --
1528 v_cum_key_record.cust_record_year:= g_ManageDemand_tab(v_count).industry_attribute1;
1529 --
1530 v_cum_key_record.ship_to_address_id:= g_ManageDemand_tab(v_count).ship_to_address_id;
1531 --
1532 v_cum_key_record.intrmd_ship_to_address_id:= g_ManageDemand_tab(v_count).intrmd_ship_to_id;
1533 --
1534 v_cum_key_record.bill_to_address_id:= g_ManageDemand_tab(v_count).bill_to_address_id;
1535 --
1536 v_cum_key_record.customer_id:= x_Sched_rec.customer_id;
1537 --
1538 v_cum_key_record.create_cum_key_flag := 'N';
1539 --
1540 END IF; --if g_CUM_tab
1541 --
1542 rlm_tpa_sv.CalculateCumKey(v_cum_key_record, v_cum_record);
1543 --
1544 --Bugfix 7007638
1545 IF x_Group_rec.setup_terms_rec.cum_control_code IN ('CUM_BY_DATE_PO','CUM_BY_PO_ONLY') THEN
1546 rlm_message_sv.get_msg_text(
1547 x_message_name => 'RLM_CUM_CONTROL_PO',
1548 x_text => v_control_text);
1549 v_control_value := g_CUM_tab(v_Count1).purchase_order_number;
1550 ELSIF x_Group_rec.setup_terms_rec.cum_control_code IN ('CUM_BY_DATE_RECORD_YEAR') THEN
1551 rlm_message_sv.get_msg_text(
1552 x_message_name => 'RLM_CUM_CONTROL_RY',
1553 x_text => v_control_text);
1554 v_control_value := g_CUM_tab(v_Count1).cust_record_year;
1555 ELSIF x_Group_rec.setup_terms_rec.cum_control_code IN ('CUM_BY_DATE_ONLY') THEN
1556 rlm_message_sv.get_msg_text(
1557 x_message_name => 'RLM_CUM_CONTROL_DATE',
1558 x_text => v_control_text);
1559 v_control_value := g_CUM_tab(v_Count1).start_date_time;
1560 END IF;
1561 --Bugfix 7007638
1562
1563 IF v_cum_record.cum_key_id IS NULL THEN
1564 --
1565 raise e_noSupplierCum;
1566 --
1567 END IF;
1568 --
1569 v_supplier_total_qty := NVL(v_cum_record.cum_qty,0) +
1570 NVL(v_cum_record.cum_qty_after_cutoff,0) +
1571 NVL(v_cum_record.cum_qty_to_be_accumulated,0);
1572 --
1573 IF (l_debug <> -1) THEN
1574 rlm_core_sv.dlog(C_DEBUG,'cum_qty',v_cum_record.cum_qty);
1575 rlm_core_sv.dlog(C_DEBUG,'cum_qty_after_cutoff',
1576 v_cum_record.cum_qty_after_cutoff);
1577 rlm_core_sv.dlog(C_DEBUG,'cum_qty_to_be_accumulated',
1578 v_cum_record.cum_qty_to_be_accumulated);
1579 rlm_core_sv.dlog(C_DEBUG,'v_supplier_total_qty',v_supplier_total_qty);
1580 END IF;
1581 --
1582 END IF; --first time in the loop
1583 --
1584 IF (l_debug <> -1) THEN
1585 rlm_core_sv.dlog(C_DEBUG,'earlier primary_quantity',
1586 g_ManageDemand_tab(v_Count).primary_quantity);
1587 rlm_core_sv.dlog(C_DEBUG,'g_CUM_tab('||v_Count1||').primary_quantity',
1588 g_CUM_tab(v_Count1).primary_quantity);
1589
1590 END IF;
1591 -- Bug 4468377
1592 IF (g_ManageDemand_tab(v_Count).uom_code <> v_cum_record.cust_uom_code) THEN
1593 --
1594 raise e_UomMismatch;
1595 --
1596 END IF;
1597 --
1598 g_ManageDemand_tab(v_Count).primary_quantity :=
1599 g_ManageDemand_tab(v_Count).primary_quantity
1600 - v_supplier_total_qty
1601 - v_EarlierDiscreteQty;
1602 --
1603 IF (l_debug <> -1) THEN
1604 rlm_core_sv.dlog(C_DEBUG,'primary_quantity',
1605 g_ManageDemand_tab(v_Count).primary_quantity);
1606 END IF;
1607 --
1608 g_ManageDemand_tab(v_Count).qty_type_code := 'ACTUAL';
1609 --
1610 IF g_ManageDemand_tab(v_Count).primary_quantity < 0 THEN
1611 --
1612 --bsadri: just give a warning bug 1966050
1613 --
1614 rlm_message_sv.app_error(
1615 x_ExceptionLevel => rlm_message_sv.k_warn_level,
1616 x_MessageName => 'RLM_DISCRETE_QTY_NEGATIVE',
1617 x_InterfaceHeaderId => x_sched_rec.header_id,
1618 x_InterfaceLineId => g_ManageDemand_tab(v_Count).line_id,
1619 x_ScheduleHeaderId => x_sched_rec.schedule_header_id,
1620 x_ScheduleLineId => NULL,
1621 x_OrderHeaderId => x_group_rec.setup_terms_rec.header_id,
1622 x_OrderLineId => NULL,
1623 --x_ErrorText => 'Discrete Quantity is negative',
1624 --x_Token1 => 'SCHEDLINE', --Bugfix 7007638
1625 --x_value1 => g_ManageDemand_tab(v_Count).line_number); --Bugfix 7007638
1626 x_Token1 => 'GROUP', --Bugfix 7007638
1627 x_value1 => '-'||v_control_text||' '|| --Bugfix 7007638
1628 rlm_core_sv.get_ship_from(x_group_rec.ship_from_org_id)||'-'||
1629 rlm_core_sv.get_ship_to(x_group_rec.ship_to_address_id)||'-'||
1630 rlm_core_sv.get_item_number(x_group_rec.customer_item_id)||'-'||
1631 v_control_value);
1632 --
1633 g_ManageDemand_tab(v_Count).primary_quantity := 0;
1634 --
1635 END IF;
1636 --
1637 SetOperation(g_ManageDemand_tab(v_Count), k_UPDATE);
1638 --
1639 IF (l_debug <> -1) THEN
1640 rlm_core_sv.dlog(C_DEBUG,'v_Count',v_Count);
1641 rlm_core_sv.dlog(C_DEBUG,'final g_ManageDemand_tab.primary_quantity',
1642 g_ManageDemand_tab(v_Count).primary_quantity);
1643 rlm_core_sv.dlog(C_DEBUG,'final g_ManageDemand_tab.qty_type_code',
1644 g_ManageDemand_tab(v_Count).qty_type_code);
1645 END IF;
1646 --
1647 v_EarlierDiscreteQty := v_EarlierDiscreteQty +
1648 g_ManageDemand_tab(v_Count).primary_quantity;
1649 --
1650 IF (l_debug <> -1) THEN
1651 rlm_core_sv.dlog(C_DEBUG,'v_EarlierDiscreteQty',v_EarlierDiscreteQty);
1652 END IF;
1653 --
1654 END IF;
1655 --
1656 END IF; --Cum Control Check
1657 --
1658 END LOOP; --g_ManageDemand_tab
1659 --
1660 END LOOP; --g_CUM_tab
1661 --
1662 ELSE -- IF g_CUM_tab.COUNT --Bugfix 7007638
1663
1664 v_cum_record.cum_key_id := NULL;
1665
1666 FOR v_Count IN 1..g_ManageDemand_tab.COUNT LOOP
1667 --
1668 IF (l_debug <> -1) THEN
1669 rlm_core_sv.dlog(C_DEBUG,'g_ManageDemand_tab(' || v_Count || ').qty_type_code', g_ManageDemand_tab(v_Count).qty_type_code);
1670 rlm_core_sv.dlog(C_DEBUG,'x_Group_rec.setup_terms_rec.cum_control_code',x_Group_rec.setup_terms_rec.cum_control_code);
1671 END IF;
1672 --
1673 -- This assignment is done in order to get the current record during
1674 -- the error processing
1675 --
1676 v_current_rec := v_Count;
1677 --
1678 IF g_ManageDemand_tab(v_Count).qty_type_code = k_CUMULATIVE
1679 AND g_ManageDemand_tab(v_count).item_detail_type IN (k_PAST_DUE_FIRM,k_FIRM_DEMAND,k_FORECAST_DEMAND,k_MRP_FORECAST) THEN
1680 --
1681 --
1682 --Calculate supplier CUM only once
1683 --
1684 IF v_cum_record.cum_key_id IS NULL THEN
1685 --Removed IF check for g_CUM_tab.found as no records exists in g_CUM_tab
1686 v_cum_record.record_return_status := TRUE;
1687 --
1688 v_cum_key_record.cum_start_date := rlm_manage_demand_sv.K_DNULL;
1689 --
1690 v_cum_key_record.customer_item_id:= g_ManageDemand_tab(v_count).customer_item_id;
1691 --
1692 v_cum_key_record.inventory_item_id:= g_ManageDemand_tab(v_count).inventory_item_id;
1693 --
1694 v_cum_key_record.ship_from_org_id:= g_ManageDemand_tab(v_count).ship_from_org_id;
1695 --
1696 v_cum_key_record.purchase_order_number := g_ManageDemand_tab(v_count).cust_po_number;
1697 --
1698 v_cum_key_record.cust_record_year:= g_ManageDemand_tab(v_count).industry_attribute1;
1699 --
1700 v_cum_key_record.ship_to_address_id:= g_ManageDemand_tab(v_count).ship_to_address_id;
1701 --
1702 v_cum_key_record.intrmd_ship_to_address_id:= g_ManageDemand_tab(v_count).intrmd_ship_to_id;
1703 --
1704 v_cum_key_record.bill_to_address_id:= g_ManageDemand_tab(v_count).bill_to_address_id;
1705 --
1706 v_cum_key_record.customer_id:= x_Sched_rec.customer_id;
1707 --
1708 v_cum_key_record.create_cum_key_flag := 'N';
1709 --
1710 rlm_tpa_sv.CalculateCumKey(v_cum_key_record, v_cum_record);
1711 --
1712 --Bugfix 7007638
1713 IF x_Group_rec.setup_terms_rec.cum_control_code IN ('CUM_BY_DATE_PO','CUM_BY_PO_ONLY') THEN
1714 rlm_message_sv.get_msg_text(
1715 x_message_name => 'RLM_CUM_CONTROL_PO',
1716 x_text => v_control_text);
1717 v_control_value := v_cum_key_record.purchase_order_number;
1718 ELSIF x_Group_rec.setup_terms_rec.cum_control_code IN ('CUM_BY_DATE_RECORD_YEAR') THEN
1719 rlm_message_sv.get_msg_text(
1720 x_message_name => 'RLM_CUM_CONTROL_RY',
1721 x_text => v_control_text);
1722 v_control_value := v_cum_key_record.cust_record_year;
1723 ELSIF x_Group_rec.setup_terms_rec.cum_control_code IN ('CUM_BY_DATE_ONLY') THEN
1724 rlm_message_sv.get_msg_text(
1725 x_message_name => 'RLM_CUM_CONTROL_DATE',
1726 x_text => v_control_text);
1727 v_control_value := v_cum_record.cum_start_date;
1728 END IF;
1729 --Bugfix 7007638
1730
1731 IF v_cum_record.cum_key_id IS NULL THEN
1732 --
1733 raise e_noSupplierCum;
1734 --
1735 END IF;
1736 --
1737 v_supplier_total_qty := NVL(v_cum_record.cum_qty,0) +
1738 NVL(v_cum_record.cum_qty_after_cutoff,0) +
1739 NVL(v_cum_record.cum_qty_to_be_accumulated,0);
1740 --
1741 IF (l_debug <> -1) THEN
1742 rlm_core_sv.dlog(C_DEBUG,'cum_qty',v_cum_record.cum_qty);
1743 rlm_core_sv.dlog(C_DEBUG,'cum_qty_after_cutoff',
1744 v_cum_record.cum_qty_after_cutoff);
1745 rlm_core_sv.dlog(C_DEBUG,'cum_qty_to_be_accumulated',
1746 v_cum_record.cum_qty_to_be_accumulated);
1747 rlm_core_sv.dlog(C_DEBUG,'v_supplier_total_qty',v_supplier_total_qty);
1748 END IF;
1749 --
1750 END IF; --first time in the loop
1751 --
1752 IF (l_debug <> -1) THEN
1753 rlm_core_sv.dlog(C_DEBUG,'earlier primary_quantity',g_ManageDemand_tab(v_Count).primary_quantity);
1754 END IF;
1755 -- Bug 4436335
1756 IF (g_ManageDemand_tab(v_Count).uom_code <> v_cum_record.cust_uom_code) THEN
1757 --
1758 raise e_UomMismatch;
1759 --
1760 END IF;
1761 --
1762 g_ManageDemand_tab(v_Count).primary_quantity :=
1763 g_ManageDemand_tab(v_Count).primary_quantity
1764 - v_supplier_total_qty
1765 - v_EarlierDiscreteQty;
1766 --
1767 IF (l_debug <> -1) THEN
1768 rlm_core_sv.dlog(C_DEBUG,'primary_quantity',
1769 g_ManageDemand_tab(v_Count).primary_quantity);
1770 END IF;
1771 --
1772 g_ManageDemand_tab(v_Count).qty_type_code := 'ACTUAL';
1773 --
1774 IF g_ManageDemand_tab(v_Count).primary_quantity < 0 THEN
1775 --
1776 --bsadri: just give a warning bug 1966050
1777 --
1778 rlm_message_sv.app_error(
1779 x_ExceptionLevel => rlm_message_sv.k_warn_level,
1780 x_MessageName => 'RLM_DISCRETE_QTY_NEGATIVE',
1781 x_InterfaceHeaderId => x_sched_rec.header_id,
1782 x_InterfaceLineId => g_ManageDemand_tab(v_Count).line_id,
1783 x_ScheduleHeaderId => x_sched_rec.schedule_header_id,
1784 x_ScheduleLineId => NULL,
1785 x_OrderHeaderId => x_group_rec.setup_terms_rec.header_id,
1786 x_OrderLineId => NULL,
1787 --x_ErrorText => 'Discrete Quantity is negative',
1788 --x_Token1 => 'SCHEDLINE', --Bugfix 7007638
1789 --x_value1 => g_ManageDemand_tab(v_Count).line_number); --Bugfix 7007638
1790 x_Token1 => 'GROUP', --Bugfix 7007638
1791 x_value1 => '-'||v_control_text||' '|| --Bugfix 7007638
1792 rlm_core_sv.get_ship_from(x_group_rec.ship_from_org_id)||'-'||
1793 rlm_core_sv.get_ship_to(x_group_rec.ship_to_address_id)||'-'||
1794 rlm_core_sv.get_item_number(x_group_rec.customer_item_id)||'-'||
1795 v_control_value);
1796 --
1797 g_ManageDemand_tab(v_Count).primary_quantity := 0;
1798 --
1799 END IF;
1800 --
1801 SetOperation(g_ManageDemand_tab(v_Count), k_UPDATE);
1802 --
1803 IF (l_debug <> -1) THEN
1804 rlm_core_sv.dlog(C_DEBUG,'v_Count',v_Count);
1805 rlm_core_sv.dlog(C_DEBUG,'final g_ManageDemand_tab.primary_quantity',
1806 g_ManageDemand_tab(v_Count).primary_quantity);
1807 rlm_core_sv.dlog(C_DEBUG,'final g_ManageDemand_tab.qty_type_code',
1808 g_ManageDemand_tab(v_Count).qty_type_code);
1809 END IF;
1810 --
1811 v_EarlierDiscreteQty := v_EarlierDiscreteQty +
1812 g_ManageDemand_tab(v_Count).primary_quantity;
1813 --
1814 IF (l_debug <> -1) THEN
1815 rlm_core_sv.dlog(C_DEBUG,'v_EarlierDiscreteQty',v_EarlierDiscreteQty);
1816 END IF;
1817 --
1818 END IF;
1819 --
1820 END LOOP; --g_ManageDemand_tab
1821 --
1822 END IF; --g_CUM_tab.COUNT
1823 --
1824 IF (l_debug <> -1) THEN
1825 rlm_core_sv.dpop(C_SDEBUG);
1826 END IF;
1827 --
1828 EXCEPTION
1829 --
1830 WHEN e_noSupplierCum THEN
1831 --
1832 rlm_message_sv.app_error(
1833 x_ExceptionLevel => rlm_message_sv.k_error_level,
1834 x_MessageName => 'RLM_CUM_KEY_NOTFOUND',
1835 x_InterfaceHeaderId => x_sched_rec.header_id,
1836 x_InterfaceLineId => g_ManageDemand_tab(v_current_rec).line_id,
1837 x_ScheduleHeaderId => x_sched_rec.schedule_header_id,
1838 x_ScheduleLineId => NULL,
1839 x_OrderHeaderId => x_group_rec.setup_terms_rec.header_id,
1840 x_OrderLineId => NULL,
1841 x_Token1 => 'GROUP', --Bugfix 7007638
1842 x_value1 => '-'||v_control_text||' '|| --Bugfix 7007638
1843 rlm_core_sv.get_ship_from(x_group_rec.ship_from_org_id)||'-'||
1844 rlm_core_sv.get_ship_to(x_group_rec.ship_to_address_id)||'-'||
1845 rlm_core_sv.get_item_number(x_group_rec.customer_item_id)||'-'||
1846 v_control_value);
1847 --
1848 IF (l_debug <> -1) THEN
1849 rlm_core_sv.dlog('No CUM Key Found Cannot calculate the supplier cum');
1850 rlm_core_sv.dpop(C_SDEBUG);
1851 END IF;
1852 --
1853 raise e_GroupError;
1854 --
1855 --
1856 -- Bug 4468377
1857 --
1858 WHEN e_UomMismatch THEN
1859 --
1860 IF (x_sched_rec.schedule_type = 'SEQUENCED') THEN
1861 --
1862 rlm_message_sv.app_error(
1863 x_ExceptionLevel => rlm_message_sv.k_error_level,
1864 x_MessageName => 'RLM_CUM_UOM_MISMATCH_SEQ',
1865 x_InterfaceHeaderId => x_sched_rec.header_id,
1866 x_InterfaceLineId => g_ManageDemand_tab(v_current_rec).line_id,
1867 x_ScheduleHeaderId => x_sched_rec.schedule_header_id,
1868 x_ScheduleLineId => NULL,
1869 x_Token1 => 'LINE_UOM',
1870 x_value1 => g_ManageDemand_tab(v_current_rec).uom_code,
1871 x_Token2 => 'GROUP',
1872 x_value2 => rlm_core_sv.get_ship_from(x_Group_rec.ship_from_org_id) || '-' ||
1873 rlm_core_sv.get_ship_to(x_Group_rec.ship_to_address_id) || '-' ||
1874 rlm_core_sv.get_item_number(x_Group_rec.customer_item_id),
1875 x_Token3 => 'REQ_DATE',
1876 x_value3 => g_ManageDemand_tab(v_current_rec).start_date_time,
1877 x_Token4 => 'CUM_UOM',
1878 x_value4 => v_cum_record.cust_uom_code,
1879 x_Token5 => 'SEQ_INFO',
1880 x_value5 => nvl(g_ManageDemand_tab(v_current_rec).cust_production_seq_num,'NULL') || '-' ||
1881 nvl(g_ManageDemand_tab(v_current_rec).cust_model_serial_number,'NULL') || '-' ||
1882 nvl(g_ManageDemand_tab(v_current_rec).customer_job,'NULL'));
1883 --
1884 IF (l_debug <> -1) THEN
1885 rlm_core_sv.dlog(C_DEBUG,'Incoming Uom does not match with CUM key Uom');
1886 rlm_core_sv.dlog(C_DEBUG,'RLM_CUM_UOM_MISMATCH_SEQ',g_ManageDemand_tab(v_current_rec).line_id);
1887 rlm_core_sv.dpop(C_SDEBUG);
1888 END IF;
1889 --
1890 ELSE
1891 --
1892 rlm_message_sv.app_error(
1893 x_ExceptionLevel => rlm_message_sv.k_error_level,
1894 x_MessageName => 'RLM_CUM_UOM_MISMATCH',
1895 x_InterfaceHeaderId => x_sched_rec.header_id,
1896 x_InterfaceLineId => g_ManageDemand_tab(v_current_rec).line_id,
1897 x_ScheduleHeaderId => x_sched_rec.schedule_header_id,
1898 x_ScheduleLineId => g_ManageDemand_tab(v_current_rec).schedule_line_id,
1899 x_Token1 => 'LINE_UOM',
1900 x_value1 => g_ManageDemand_tab(v_current_rec).uom_code,
1901 x_Token2 => 'GROUP',
1902 x_value2 => rlm_core_sv.get_ship_from(x_Group_rec.ship_from_org_id) || '-' ||
1903 rlm_core_sv.get_ship_to(x_Group_rec.ship_to_address_id) || '-' ||
1904 rlm_core_sv.get_item_number(x_Group_rec.customer_item_id),
1905 x_Token3 => 'REQ_DATE',
1906 x_value3 => g_ManageDemand_tab(v_current_rec).start_date_time,
1907 x_Token4 => 'CUM_UOM',
1908 x_value4 => v_cum_record.cust_uom_code,
1909 x_Token5 => 'SCHEDULE_LINE',
1910 x_value5 => rlm_core_sv.get_schedule_line_number(g_ManageDemand_tab(v_current_rec).schedule_line_id));
1911 --
1912 IF (l_debug <> -1) THEN
1913 rlm_core_sv.dlog(C_DEBUG,'Incoming Uom does not match with CUM key Uom');
1914 rlm_core_sv.dlog(C_DEBUG,'RLM_CUM_UOM_MISMATCH',g_ManageDemand_tab(v_current_rec).line_id);
1915 rlm_core_sv.dpop(C_SDEBUG);
1916 END IF;
1917 --
1918 END IF;
1919 --
1920 raise e_GroupError;
1921 --
1922
1923 WHEN OTHERS THEN
1924 --
1925 rlm_message_sv.sql_error('rlm_manage_demand_sv.CUMToDiscrete', v_Progress);
1926 --
1927 IF (l_debug <> -1) THEN
1928 rlm_core_sv.dlog(C_DEBUG,'progress',v_Progress);
1929 rlm_core_sv.dpop(C_SDEBUG,'EXCEPTION: '||SUBSTR(SQLERRM,1,200));
1930 END IF;
1931 --
1932 raise;
1933 --
1934 END CUMToDiscrete;
1935
1936 /*===========================================================================
1937
1938 PROCEDURE NAME: ApplySourceRules
1939
1940 ===========================================================================*/
1941 PROCEDURE ApplySourceRules(x_Sched_rec IN rlm_interface_headers%ROWTYPE,
1942 x_Group_rec IN rlm_dp_sv.t_Group_rec,
1943 x_SourcedDemand_tab OUT NOCOPY rlm_manage_demand_sv.t_MD_Tab,
1944 x_Source_Tab OUT NOCOPY rlm_manage_demand_sv.t_Source_Tab)
1945 IS
1946 --
1947 v_progress VARCHAR2(3) := '010';
1948 k_PLANNING_ACTIVE NUMBER := 1;
1949 sr_item_id NUMBER DEFAULT NULL;
1950 v_Source_Tab rlm_manage_demand_sv.t_Source_Tab; --Bugfix 6051397
1951 --
1952 -- Source type is used in the decode because the if the source type = 2 =
1953 -- Make At then the source_organization_id is null as the make at Item
1954 -- is the same item
1955 --
1956 -- Following four new cursors added for Bug 3425360 jckwok
1957 --
1958
1959 CURSOR c_MSC_site_profile (x_inv_item_id NUMBER,
1960 x_org_id NUMBER,
1961 x_assign_id NUMBER,
1962 x_srcng_lvl NUMBER,
1963 x_rank NUMBER,
1964 x_ship_to_site_id NUMBER) IS
1965 SELECT DECODE(mislv.source_type,2,mislv.source_organization_id,
1966 mislv.source_organization_id) org_id, mislv.allocation_percent ,mislv.effective_date, --Bugfix 6051397
1967 NVL(mislv.disable_date, TO_DATE('31/12/4712','dd/mm/yyyy')) --Bugfix 6051397
1968 FROM msc_scatp_item_sr_levels_v mislv
1969 WHERE mislv.assignment_set_id = x_assign_id
1970 AND mislv.sourcing_level = x_srcng_lvl
1971 AND mislv.inventory_item_id = x_inv_item_id
1972 AND mislv.source_type IN (1,2)
1973 AND (SYSDATE BETWEEN mislv.effective_date AND
1974 NVL(mislv.disable_date, TO_DATE('31/12/4712','dd/mm/yyyy')) OR SYSDATE < mislv.effective_date) --Bugfix 6051397
1975 AND mislv.rank = x_rank
1976 AND mislv.ship_to_site_id = x_ship_to_site_id
1977 AND exists (SELECT null
1978 FROM msc_sourcing_rules
1979 WHERE sourcing_rule_id = mislv.sourcing_rule_id
1980 AND planning_active = k_PLANNING_ACTIVE)
1981 ORDER BY mislv.allocation_percent;
1982 --
1983 CURSOR c_MRP_site_profile (x_inv_item_id NUMBER,
1984 x_org_id NUMBER,
1985 x_assign_id NUMBER,
1986 x_srcng_lvl NUMBER,
1987 x_rank NUMBER,
1988 x_ship_to_site_id NUMBER) IS
1989 SELECT DECODE(mislv.source_type,2,mislv.source_organization_id,
1990 mislv.source_organization_id) org_id, mislv.allocation_percent ,mislv.effective_date, --Bugfix 6051397
1991 NVL(mislv.disable_date, TO_DATE('31/12/4712','dd/mm/yyyy')) --Bugfix 6051397
1992 FROM mrp_scatp_item_sr_levels_v mislv
1993 WHERE mislv.assignment_set_id = x_assign_id
1994 AND mislv.sourcing_level = x_srcng_lvl
1995 AND mislv.inventory_item_id = x_inv_item_id
1996 AND mislv.source_type IN (1,2)
1997 AND (SYSDATE BETWEEN mislv.effective_date AND
1998 NVL(mislv.disable_date, TO_DATE('31/12/4712','dd/mm/yyyy')) OR SYSDATE < mislv.effective_date) --Bugfix 6051397
1999 AND mislv.rank = x_rank
2000 AND mislv.ship_to_site_id = x_ship_to_site_id
2001 AND exists (SELECT null
2002 FROM mrp_sourcing_rules
2003 WHERE sourcing_rule_id = mislv.sourcing_rule_id
2004 AND planning_active = k_PLANNING_ACTIVE)
2005 ORDER BY mislv.allocation_percent;
2006 --
2007 CURSOR c_MSC_site IS
2008 select DISTINCT assignment_set_id
2009 FROM msc_scatp_item_sr_levels_v mislv
2010 WHERE mislv.inventory_item_id = sr_item_id
2011 AND mislv.source_type IN (1,2)
2012 AND (SYSDATE BETWEEN mislv.effective_date
2013 AND NVL(mislv.disable_date, TO_DATE('31/12/4712','dd/mm/yyyy')) OR SYSDATE < mislv.effective_date) --Bugfix 6051397
2014 AND mislv.ship_to_site_id = x_Group_rec.ship_to_site_use_id
2015 AND exists (SELECT null
2016 FROM msc_sourcing_rules
2017 WHERE sourcing_rule_id = mislv.sourcing_rule_id
2018 AND planning_active = k_PLANNING_ACTIVE);
2019 --
2020 CURSOR c_MRP_site IS
2021 SELECT DISTINCT assignment_set_id
2022 FROM mrp_scatp_item_sr_levels_v mislv
2023 WHERE mislv.inventory_item_id = x_Group_rec.inventory_item_id
2024 AND mislv.source_type IN (1,2)
2025 AND (SYSDATE BETWEEN mislv.effective_date
2026 AND NVL(mislv.disable_date, TO_DATE('31/12/4712','dd/mm/yyyy')) OR SYSDATE < mislv.effective_date) --Bugfix 6051397
2027 AND mislv.ship_to_site_id = x_Group_rec.ship_to_site_use_id
2028 AND exists (SELECT null
2029 FROM mrp_sourcing_rules
2030 WHERE sourcing_rule_id = mislv.sourcing_rule_id
2031 AND planning_active = k_PLANNING_ACTIVE);
2032 --
2033 -- below are original cursors but names of cursors are changed for clarity
2034 --
2035 --perf changes
2036 --
2037 CURSOR c_MSC_item_profile (x_inv_item_id NUMBER,
2038 x_org_id NUMBER,
2039 x_assign_id NUMBER,
2040 x_srcng_lvl NUMBER,
2041 x_rank NUMBER) IS
2042 SELECT DECODE(mislv.source_type,2,mislv.organization_id,
2043 mislv.source_organization_id) org_id, mislv.allocation_percent, mislv.effective_date, --Bugfix 6051397
2044 NVL(mislv.disable_date, TO_DATE('31/12/4712','dd/mm/yyyy')) --Bugfix 6051397
2045 FROM msc_item_sourcing_levels_v mislv
2046 WHERE mislv.assignment_set_id = x_assign_id
2047 AND mislv.sourcing_level = x_srcng_lvl
2048 AND mislv.inventory_item_id = x_inv_item_id
2049 AND mislv.organization_id = x_org_id
2050 AND mislv.source_type IN (1,2)
2051 AND (SYSDATE BETWEEN mislv.effective_date AND
2052 NVL(mislv.disable_date, TO_DATE('31/12/4712','dd/mm/yyyy')) OR SYSDATE < mislv.effective_date) --Bugfix 6051397
2053 AND mislv.rank = x_rank
2054 AND exists (SELECT null
2055 FROM msc_sourcing_rules
2056 WHERE sourcing_rule_id = mislv.sourcing_rule_id
2057 AND planning_active = k_PLANNING_ACTIVE)
2058 ORDER BY mislv.allocation_percent;
2059 --
2060 -- perf changes
2061 CURSOR c_MRP_item_profile (x_inv_item_id NUMBER,
2062 x_org_id NUMBER,
2063 x_assign_id NUMBER,
2064 x_srcng_lvl NUMBER,
2065 x_rank NUMBER) IS
2066 SELECT DECODE(mislv.source_type,2,mislv.organization_id,
2067 mislv.source_organization_id) org_id, mislv.allocation_percent, mislv.effective_date, --Bugfix 6051397
2068 NVL(mislv.disable_date, TO_DATE('31/12/4712','dd/mm/yyyy')) --Bugfix 6051397
2069 FROM mrp_item_sourcing_levels_v mislv
2070 WHERE mislv.assignment_set_id = x_assign_id
2071 AND mislv.sourcing_level = x_srcng_lvl
2072 AND mislv.inventory_item_id = x_inv_item_id
2073 AND mislv.organization_id = x_org_id
2074 AND mislv.source_type IN (1,2)
2075 AND (SYSDATE BETWEEN mislv.effective_date AND
2076 NVL(mislv.disable_date, TO_DATE('31/12/4712','dd/mm/yyyy')) OR SYSDATE < mislv.effective_date) --Bugfix 6051397
2077 AND mislv.rank = x_rank
2078 AND exists (SELECT null
2079 FROM mrp_sourcing_rules
2080 WHERE sourcing_rule_id = mislv.sourcing_rule_id
2081 AND planning_active = k_PLANNING_ACTIVE)
2082 ORDER BY mislv.allocation_percent;
2083 --
2084 --perf changes
2085 CURSOR c_MSC_item IS
2086 select DISTINCT assignment_set_id
2087 FROM msc_item_sourcing_levels_v mislv
2088 WHERE mislv.inventory_item_id = sr_item_id
2089 AND mislv.organization_id = x_Group_rec.ship_from_org_id
2090 AND mislv.source_type IN (1,2)
2091 AND (SYSDATE BETWEEN mislv.effective_date
2092 AND NVL(mislv.disable_date, TO_DATE('31/12/4712','dd/mm/yyyy')) OR SYSDATE < mislv.effective_date) --Bugfix 6051397
2093 AND exists (SELECT null
2094 FROM msc_sourcing_rules
2095 WHERE sourcing_rule_id = mislv.sourcing_rule_id
2096 AND planning_active = k_PLANNING_ACTIVE);
2097 --
2098 --perf changes
2099 CURSOR c_MRP_item IS
2100 SELECT DISTINCT assignment_set_id
2101 FROM mrp_item_sourcing_levels_v mislv
2102 WHERE mislv.inventory_item_id = x_Group_rec.inventory_item_id
2103 AND mislv.organization_id = x_Group_rec.ship_from_org_id
2104 AND mislv.source_type IN (1,2)
2105 AND (SYSDATE BETWEEN mislv.effective_date
2106 AND NVL(mislv.disable_date, TO_DATE('31/12/4712','dd/mm/yyyy')) OR SYSDATE < mislv.effective_date) --Bugfix 6051397
2107 AND exists (SELECT null
2108 FROM mrp_sourcing_rules
2109 WHERE sourcing_rule_id = mislv.sourcing_rule_id
2110 AND planning_active = k_PLANNING_ACTIVE);
2111 --
2112
2113
2114 v_Index NUMBER DEFAULT 0;
2115 v_OrigQty NUMBER DEFAULT 0;
2116 v_SumQty NUMBER DEFAULT 0;
2117 e_NoSrcRulesSetup EXCEPTION;
2118 e_NoSrItemId EXCEPTION;
2119 v_org_found BOOLEAN DEFAULT FALSE;
2120 v_current_rec NUMBER;
2121 v_tmpGroup_rec rlm_dp_sv.t_Group_Rec;
2122 v_count_msc NUMBER DEFAULT 0;
2123 v_count_mrp NUMBER DEFAULT 0;
2124 v_normal_source VARCHAR2(3) DEFAULT 'MSC';
2125 v_source_level VARCHAR2(4) DEFAULT 'SITE'; -- possible values 'SITE', 'ITEM', 'PRFL'
2126
2127 v_assign_set VARCHAR2(15);
2128 v_assign_set_id NUMBER DEFAULT NULL;
2129 v_msc_assign_set_id NUMBER DEFAULT NULL;
2130 v_mrp_assign_set_id NUMBER DEFAULT NULL;
2131 ByPassATP EXCEPTION;
2132 --
2133 v_srcng_lvl NUMBER;
2134 v_rank NUMBER;
2135 v_Ind_Source NUMBER DEFAULT 0; --Bugfix 6051397
2136 --
2137 BEGIN
2138 --
2139 IF (l_debug <> -1) THEN
2140 rlm_core_sv.dpush(C_SDEBUG,'ApplySourceRules');
2141 END IF;
2142 --
2143 --global_atp
2144 IF IsATPItem(x_group_rec.ship_from_org_id,
2145 x_group_rec.inventory_item_id) THEN
2146 --
2147 RAISE ByPassATP;
2148 --
2149 END IF;
2150 --
2151 -- Get the profile option value
2152 --
2153 fnd_profile.get('RLM_MSC_MRP_ASSIGN_SET', v_assign_set);
2154 --
2155 IF (l_debug <> -1) THEN
2156 rlm_core_sv.dlog(C_DEBUG, 'v_assign_set', v_assign_set);
2157 END IF;
2158 --
2159 IF NVL(v_assign_set, 'N') = 'N' THEN
2160 --
2161 RAISE e_NoSrcRulesSetup;
2162 --
2163 END IF;
2164 --
2165 -- Get the sr_item_id first
2166 --
2167 BEGIN
2168 --
2169 SELECT inventory_item_id
2170 INTO sr_item_id
2171 FROM msc_system_items
2172 WHERE sr_inventory_item_id = x_Group_rec.inventory_item_id
2173 AND plan_id = -1
2174 AND organization_id = x_Group_rec.ship_from_org_id
2175 AND sr_instance_id IN (SELECT instance_id FROM mrp_ap_apps_instances);
2176 --
2177 IF (l_debug <> -1) THEN
2178 rlm_core_sv.dlog(C_DEBUG, 'sr_item_id', sr_item_id);
2179 END IF;
2180 --
2181 OPEN c_MSC_site;
2182 --
2183 LOOP
2184 --
2185 FETCH c_MSC_site into v_msc_assign_set_id;
2186 EXIT WHEN ( c_MSC_site%NOTFOUND OR (c_MSC_site%ROWCOUNT > 1));
2187 --
2188 END LOOP;
2189 --
2190 v_count_msc := c_MSC_site%ROWCOUNT;
2191
2192 CLOSE c_MSC_site; --bug 4570658
2193 --
2194 EXCEPTION
2195 --
2196 WHEN NO_DATA_FOUND THEN
2197 --
2198 v_count_msc := 0;
2199 IF (l_debug <> -1) THEN
2200 rlm_core_sv.dlog(C_DEBUG, 'No data found for inventory item',
2201 x_Group_rec.inventory_item_id );
2202 END IF;
2203 --
2204 WHEN OTHERS THEN
2205 --
2206 v_count_msc := 0;
2207 IF (l_debug <> -1) THEN
2208 rlm_core_sv.dlog(C_DEBUG, 'In when others' || SUBSTR(SQLERRM,1,200));
2209 END IF;
2210 --
2211 END;
2212 --
2213 v_source_level := 'SITE';
2214 --
2215 IF (l_debug <> -1) THEN
2216 rlm_core_sv.dlog(C_DEBUG, 'x_Group_rec.inventory_item_id', x_Group_rec.inventory_item_id);
2217 rlm_core_sv.dlog(C_DEBUG, 'x_Group_rec.ship_from_org_id', x_Group_rec.ship_from_org_id);
2218 rlm_core_sv.dlog(C_DEBUG, 'x_Group_rec.ship_to_site_use_id', x_Group_rec.ship_to_site_use_id);
2219 END IF;
2220 --
2221 IF (l_debug <> -1) THEN
2222 rlm_core_sv.dlog(C_DEBUG, 'c_MSC_site: v_count_msc', v_count_msc);
2223 END IF;
2224 --
2225 IF v_count_msc = 1 THEN -- first level of hierarchy: MSC SITE --{
2226 --
2227 v_normal_source := 'MSC';
2228 v_assign_set_id:= v_msc_assign_set_id;
2229 --
2230 ELSIF v_count_msc > 1 THEN
2231 --
2232 v_normal_source := SUBSTR(v_assign_set,1,3);
2233 v_assign_set_id := TO_NUMBER(SUBSTR(v_assign_set,4));
2234 -- Bug 3534969 jckwok
2235 v_source_level := 'PRFL';
2236 --
2237 ELSIF v_count_msc = 0 THEN /* No msc sourcing rules setup at the site level */
2238 --
2239 OPEN c_MSC_item; -- second level of hierarchy: MSC ITEM
2240 --
2241 LOOP
2242 --
2243 FETCH c_MSC_item into v_msc_assign_set_id;
2244 EXIT WHEN ( c_MSC_item%NOTFOUND OR (c_MSC_item%ROWCOUNT > 1));
2245 --
2246 END LOOP;
2247 --
2248 v_count_msc := c_MSC_item%ROWCOUNT;
2249 CLOSE c_MSC_item; --bug 4570658
2250 v_source_level := 'ITEM';
2251 --
2252 IF (l_debug <> -1) THEN
2253 rlm_core_sv.dlog(C_DEBUG, 'c_MSC_item: v_count_msc', v_count_msc);
2254 END IF;
2255 --
2256 IF v_count_msc = 1 THEN -- exactly one sourcing rule in ITEM --{
2257 --
2258 v_normal_source := 'MSC';
2259 v_assign_set_id:= v_msc_assign_set_id;
2260 --
2261 ELSIF(v_count_msc > 1) THEN
2262 --
2263 v_normal_source := SUBSTR(v_assign_set,1,3);
2264 v_assign_set_id := TO_NUMBER(SUBSTR(v_assign_set,4));
2265 -- Bug 3534969 jckwok
2266 v_source_level := 'PRFL';
2267 --
2268 ELSE -- third level of hierarchy: MRP SITE
2269 --
2270 OPEN c_MRP_site;
2271 --
2272 LOOP --{
2273 --
2274 FETCH c_MRP_site into v_mrp_assign_set_id;
2275 EXIT WHEN ( c_MRP_site%NOTFOUND OR (c_MRP_site%ROWCOUNT > 1));
2276 --
2277 END LOOP; --}
2278 --
2279 v_count_mrp := c_MRP_site%ROWCOUNT;
2280 v_source_level := 'SITE';
2281 --
2282 IF (l_debug <> -1) THEN
2283 rlm_core_sv.dlog(C_DEBUG, 'c_MRP_site: v_count_mrp', v_count_mrp);
2284 END IF;
2285 --
2286 IF v_count_mrp = 1 THEN --{
2287 --
2288 v_normal_source := 'MRP';
2289 v_assign_set_id:= v_mrp_assign_set_id;
2290 --
2291 ELSIF v_count_mrp > 1 THEN
2292 --
2293 v_normal_source := SUBSTR(v_assign_set,1,3);
2294 v_assign_set_id := TO_NUMBER(SUBSTR(v_assign_set,4));
2295 -- Bug 3534969 jckwok
2296 v_source_level := 'PRFL';
2297 --
2298 ELSE -- v_count_mrp = 0
2299 --
2300 OPEN c_MRP_item; -- fourth level of hierarchy: MRP ITEM
2301 --
2302 LOOP
2303 --
2304 FETCH c_MRP_item into v_mrp_assign_set_id;
2305 EXIT WHEN ( c_MRP_item%NOTFOUND OR (c_MRP_item%ROWCOUNT > 1));
2306 --
2307 END LOOP;
2308 --
2309 v_count_mrp := c_MRP_item%ROWCOUNT;
2310 CLOSE c_MRP_item; --bug 4570658
2311 v_source_level := 'ITEM';
2312 --
2313 IF (l_debug <> -1) THEN
2314 rlm_core_sv.dlog(C_DEBUG, 'c_MRP_item: v_count_mrp', v_count_mrp);
2315 END IF;
2316 --
2317 IF v_count_mrp = 1 THEN --{
2318 --
2319 v_normal_source := 'MRP';
2320 v_assign_set_id:= v_mrp_assign_set_id;
2321 --
2322 ELSIF v_count_mrp > 1 THEN
2323 --
2324 v_normal_source := SUBSTR(v_assign_set,1,3);
2325 v_assign_set_id := TO_NUMBER(SUBSTR(v_assign_set,4));
2326 -- Bug 3534969 jckwok
2327 v_source_level := 'PRFL';
2328 --
2329 ELSE
2330 --
2331 -- No rule found after going down all 4 levels of hierarchy.
2332 --
2333 raise e_NOSrcRulesSetup;
2334 --
2335 END IF; --}
2336 --
2337 END IF; --}
2338 --
2339 END IF; --}
2340 --
2341 END IF; --}
2342 --
2343 IF (l_debug <> -1) THEN
2344 rlm_core_sv.dlog(C_DEBUG, 'v_normal_source', v_normal_source);
2345 rlm_core_sv.dlog(C_DEBUG, 'v_assign_set_id', v_assign_set_id);
2346 rlm_core_sv.dlog(C_DEBUG, 'x_Group_rec.inventory_item_id', x_Group_rec.inventory_item_id);
2347 rlm_core_sv.dlog(C_DEBUG, 'x_Group_rec.ship_from_org_id', x_Group_rec.ship_from_org_id);
2348 rlm_core_sv.dlog(C_DEBUG, 'x_Group_rec.ship_to_site_use_id', x_Group_rec.ship_to_site_use_id);
2349 rlm_core_sv.dlog(C_DEBUG, 'v_source_level', v_source_level);
2350 END IF;
2351 --
2352 --open cursors based on source (MSC or MRP) and source level (SITE, ITEM, or PRFL).
2353 --
2354 IF v_normal_source = 'MSC' THEN --{
2355 --
2356 -- Bug 3534969 jckwok
2357 -- If v_source_level is PRFL (profile) meaning we must
2358 -- open site level cursors first and
2359 -- if there is nothing found there (i.e. v_index = 0),
2360 -- then we will open the item level cursors.
2361 --
2362 IF (v_source_level = 'PRFL') OR (v_source_level = 'SITE') THEN --{
2363 --
2364 SELECT MIN(sourcing_level)
2365 INTO v_srcng_lvl
2366 FROM msc_scatp_item_sr_levels_v
2367 WHERE inventory_item_id = sr_item_id
2368 AND assignment_set_id = v_assign_set_id
2369 AND ship_to_site_id = x_Group_rec.ship_to_site_use_id;
2370 --
2371 SELECT MIN(rank)
2372 INTO v_rank
2373 FROM msc_scatp_item_sr_levels_v
2374 WHERE inventory_item_id = sr_item_id
2375 AND ship_to_site_id = x_Group_rec.ship_to_site_use_id
2376 AND (SYSDATE BETWEEN effective_date AND
2377 NVL(disable_date, TO_DATE('31/12/4712', 'DD/MM/YYYY')) OR SYSDATE < effective_date); --Bugfix 6051397
2378 --
2379 IF (l_debug <> -1) THEN
2380 rlm_core_sv.dlog(C_DEBUG, 'MSC Site: Minimum sourcing level', v_srcng_lvl);
2381 rlm_core_sv.dlog(C_DEBUG, 'MSC Site: Minimum Rank', v_rank);
2382 END IF;
2383 --
2384 FOR c_rec IN c_MSC_site_profile(sr_item_id,
2385 x_Group_rec.ship_from_org_id,
2386 v_assign_set_id,
2387 v_srcng_lvl,
2388 v_rank,
2389 x_Group_rec.ship_to_site_use_id) LOOP
2390 --
2391 v_progress := '020';
2392 v_Index := v_Index + 1;
2393 v_Source_Tab(v_Index) := c_rec; --Bugfix 6051397
2394 --
2395 END LOOP;
2396 END IF; --}
2397 IF (v_source_level = 'ITEM') OR (v_source_level = 'PRFL' AND v_Index = 0) THEN --{
2398 --
2399 SELECT MIN(sourcing_level)
2400 INTO v_srcng_lvl
2401 FROM msc_item_sourcing_levels_v
2402 WHERE organization_id = x_Group_rec.ship_from_org_id
2403 AND inventory_item_id = sr_item_id
2404 AND assignment_set_id = v_assign_set_id;
2405 --
2406 SELECT MIN(rank)
2407 INTO v_rank
2408 FROM msc_item_sourcing_levels_v
2409 WHERE organization_id = x_Group_rec.ship_from_org_Id
2410 AND inventory_item_id = sr_item_id
2411 AND (SYSDATE BETWEEN effective_date AND
2412 NVL(disable_date, TO_DATE('31/12/4712', 'DD/MM/YYYY')) OR SYSDATE < effective_date); --Bugfix 6051397
2413 --
2414 IF (l_debug <> -1) THEN
2415 rlm_core_sv.dlog(C_DEBUG, 'MSC Item: Minimum sourcing level', v_srcng_lvl);
2416 rlm_core_sv.dlog(C_DEBUG, 'MSC Item: Minimum Rank', v_rank);
2417 END IF;
2418 --
2419 FOR c_rec IN c_MSC_item_profile(sr_item_id,
2420 x_Group_rec.ship_from_org_id,
2421 v_assign_set_id,
2422 v_srcng_lvl, v_rank) LOOP
2423 --
2424 v_progress := '020';
2425 v_Index := v_Index + 1;
2426 v_Source_Tab(v_Index) := c_rec; --Bugfix 6051397
2427 --
2428 END LOOP;
2429 END IF; --}
2430 ELSE -- not MSC, so it must be MRP
2431 IF (v_source_level = 'PRFL') OR (v_source_level = 'SITE') THEN --{
2432 -- Determine the minimum sourcing level and rank
2433 --
2434 SELECT MIN(sourcing_level)
2435 INTO v_srcng_lvl
2436 FROM mrp_scatp_item_sr_levels_v
2437 WHERE inventory_item_id = x_Group_rec.inventory_item_id
2438 AND assignment_set_id = v_assign_set_id
2439 AND ship_to_site_id = x_Group_rec.ship_to_site_use_id;
2440 --
2441 SELECT MIN(rank)
2442 INTO v_rank
2443 FROM mrp_scatp_item_sr_levels_v
2444 WHERE inventory_item_id = x_Group_rec.inventory_item_id
2445 AND ship_to_site_id = x_Group_rec.ship_to_site_use_id
2446 AND (SYSDATE BETWEEN effective_date AND
2447 NVL(disable_date, TO_DATE('31/12/4712', 'DD/MM/YYYY')) OR SYSDATE < effective_date); --Bugfix 6051397
2448 --
2449 IF (l_debug <> -1) THEN
2450 rlm_core_sv.dlog(C_DEBUG, 'MRP Site: Minimum sourcing level', v_srcng_lvl);
2451 rlm_core_sv.dlog(C_DEBUG, 'MRP Site: Minimum Rank', v_rank);
2452 END IF;
2453 --
2454 FOR c_rec IN c_MRP_site_profile(x_Group_rec.inventory_item_id,
2455 x_Group_rec.ship_from_org_id,
2456 v_assign_set_id,
2457 v_srcng_lvl,
2458 v_rank,
2459 x_Group_rec.ship_to_site_use_id) LOOP
2460 --
2461 v_progress := '020';
2462 v_Index := v_Index + 1;
2463 v_Source_Tab(v_Index) := c_rec; --Bugfix 6051397
2464 --
2465 END LOOP;
2466 END IF; --}
2467 --
2468 IF (v_source_level = 'ITEM') OR (v_source_level = 'PRFL' AND v_Index = 0) THEN --{
2469 --
2470 SELECT MIN(sourcing_level)
2471 INTO v_srcng_lvl
2472 FROM mrp_item_sourcing_levels_v
2473 WHERE organization_id = x_Group_rec.ship_from_org_id
2474 AND inventory_item_id = x_Group_rec.inventory_item_id
2475 AND assignment_set_id = v_assign_set_id;
2476 --
2477 SELECT MIN(rank)
2478 INTO v_rank
2479 FROM mrp_item_sourcing_levels_v
2480 WHERE organization_id = x_Group_rec.ship_from_org_Id
2481 AND inventory_item_id = x_Group_rec.inventory_item_id
2482 AND (SYSDATE BETWEEN effective_date AND
2483 NVL(disable_date, TO_DATE('31/12/4712', 'DD/MM/YYYY')) OR SYSDATE < effective_date); --Bugfix 6051397
2484 --
2485 IF (l_debug <> -1) THEN
2486 rlm_core_sv.dlog(C_DEBUG, 'MRP Item: Minimum sourcing level', v_srcng_lvl);
2487 rlm_core_sv.dlog(C_DEBUG, 'MRP Item: Minimum Rank', v_rank);
2488 END IF;
2489 --
2490 FOR c_rec IN c_MRP_item_profile(x_Group_rec.inventory_item_id,
2491 x_Group_rec.ship_from_org_id,
2492 v_assign_set_id,
2493 v_srcng_lvl,
2494 v_rank) LOOP
2495 --
2496 v_progress := '020';
2497 v_Index := v_Index + 1;
2498 v_Source_Tab(v_Index) := c_rec; --Bugfix 6051397
2499 --
2500 END LOOP;
2501 END IF; --}
2502 --jckwok: End of Bug 3534969
2503 END IF; --}
2504 --
2505 IF v_Index = 0 THEN --{
2506 --
2507 RAISE e_NOSrcRulesSetup;
2508 --
2509 END IF; --}
2510 --
2511 IF (l_debug <> -1) THEN
2512 rlm_core_sv.dlog(C_DEBUG, 'g_ManageDemand_tab.COUNT',
2513 g_ManageDemand_tab.COUNT);
2514 END IF;
2515 --
2516 FOR i IN 1..g_ManageDemand_tab.COUNT LOOP
2517 --
2518 IF (l_debug <> -1) THEN
2519 rlm_core_sv.dlog(C_DEBUG, 'g_ManageDemand_tab(' || i || ').qty_type_code',
2520 g_ManageDemand_tab(i).qty_type_code);
2521 rlm_core_sv.dlog(C_DEBUG, 'x_Group_rec.setup_terms_rec.cum_control_code',
2522 x_Group_rec.setup_terms_rec.cum_control_code);
2523 rlm_core_sv.dlog(C_DEBUG, 'x_Group_rec.setup_terms_rec.cum_org_level_code',
2524 x_Group_rec.setup_terms_rec.cum_org_level_code);
2525 END IF;
2526 --
2527
2528 v_Ind_Source := 0; --Bugfix 6051397
2529
2530 --Bugfix 6051397 Start
2531 FOR k IN 1..v_Source_Tab.COUNT LOOP
2532 IF g_ManageDemand_tab(i).start_date_time >= v_Source_Tab(k).effective_date
2533 AND g_ManageDemand_tab(i).start_date_time <= v_Source_Tab(k).disable_date THEN
2534 v_Ind_Source := v_Ind_Source +1;
2535 x_Source_Tab(v_Ind_Source).allocation_percent := v_Source_Tab(k).allocation_percent ;
2536 x_Source_Tab(v_Ind_Source).organization_id:= v_Source_Tab(k).organization_id ;
2537 END IF;
2538 END LOOP;
2539
2540
2541 IF v_Ind_Source = 0 THEN
2542 v_Ind_Source := v_Ind_Source + 1;
2543 x_Source_Tab(v_Ind_Source).allocation_percent := 100;
2544 x_Source_Tab(v_Ind_Source).organization_id := x_Group_rec.ship_from_org_id;
2545 rlm_core_sv.dlog(C_DEBUG, 'No Sourcing Rule found for this line ');
2546 END IF;
2547 --Bugfix 6051397 End
2548
2549
2550 IF nvl(g_ManageDemand_tab(i).line_source,'NEW') <> 'SOURCED' THEN --{
2551 --
2552 IF (g_ManageDemand_tab(i).qty_type_code = k_CUMULATIVE) THEN
2553 IF x_Group_rec.setup_terms_rec.cum_org_level_code NOT IN (
2554 'SHIP_TO_ALL_SHIP_FROMS',
2555 'BILL_TO_ALL_SHIP_FROMS',
2556 'DELIVER_TO_ALL_SHIP_FROMS') THEN
2557 --
2558 IF (l_debug <> -1) THEN
2559 rlm_core_sv.dlog(C_DEBUG, 'RLM_CUMORGLEVEL_INVALID');
2560 --
2561 --bug 1497386 fix: schedule line id is passed instead of null
2562 --
2563 rlm_core_sv.dlog(C_DEBUG, 'Schedule_Line_ID',
2564 g_ManageDemand_tab(i).schedule_line_id );
2565 END IF;
2566 --
2567 rlm_message_sv.app_error(
2568 x_ExceptionLevel => rlm_message_sv.k_warn_level,
2569 x_MessageName => 'RLM_CUMORGLEVEL_INVALID',
2570 x_InterfaceHeaderId => x_sched_rec.header_id,
2571 x_InterfaceLineId => g_ManageDemand_tab(i).line_id,
2572 x_ScheduleHeaderId => x_sched_rec.schedule_header_id,
2573 x_ScheduleLineId => g_ManageDemand_tab(i).schedule_line_id,
2574 x_OrderHeaderId => x_group_rec.setup_terms_rec.header_id,
2575 x_OrderLineId => NULL,
2576 --x_ErrorText => 'Sourcing Rules with CUM Organization Level
2577 --will result in cum discrepancies',
2578 x_Token1 => 'CUMORGLEVEL',
2579 x_value1 => rlm_core_sv.get_lookup_meaning(
2580 'RLM_CUM_ORG_LEVEL',
2581 x_Group_rec.setup_terms_rec.cum_org_level_code));
2582
2583 --
2584 END IF;
2585 --
2586 END IF; --}
2587 --
2588 /* We need to add the remaining quantity to the original count
2589 so we save the index of the first line that we encounter
2590 in saveIndex */
2591 --
2592 v_OrigQty := g_ManageDemand_tab(i).primary_quantity;
2593 v_progress := '050';
2594 v_SumQty := 0;
2595 v_org_found := FALSE;
2596 --
2597 IF (l_debug <> -1) THEN
2598 rlm_core_sv.dlog(C_DEBUG, 'x_Source_tab.COUNT', x_Source_tab.COUNT);
2599 END IF;
2600 --
2601 FOR j IN 1..x_Source_tab.COUNT LOOP
2602 --
2603 IF (l_debug <> -1) THEN
2604 rlm_core_sv.dlog(C_DEBUG, 'g_ManageDemand_Tab(' || i || ').ship_from_org_id', g_ManageDemand_Tab(i).ship_from_org_id);
2605 rlm_core_sv.dlog(C_DEBUG, 'x_Source_tab(' || j || ').organization_id', x_Source_tab(j).organization_id);
2606 END IF;
2607 --
2608 IF g_ManageDemand_Tab(i).ship_from_org_id =
2609 x_Source_tab(j).organization_id THEN
2610 --
2611 IF (l_debug <> -1) THEN
2612 rlm_core_sv.dlog(C_DEBUG, 'Org Found in Source Rules');
2613 END IF;
2614 --
2615 v_org_found := TRUE;
2616 --
2617 IF (l_debug <> -1) THEN
2618 rlm_core_sv.dlog(C_DEBUG, 'x_Source_tab(' || j || ').allocation_percent',
2619 x_Source_tab(j).allocation_percent);
2620 END IF;
2621 --
2622 IF x_Source_tab(j).allocation_percent = 0 THEN
2623 --
2624 v_progress := '060';
2625 SetOperation(g_ManageDemand_tab(i), k_DELETE);
2626 --
2627 ELSE
2628 --
2629 g_ManageDemand_tab(i).primary_quantity :=
2630 TRUNC(v_OrigQty * x_Source_tab(j).allocation_percent/100);
2631 --
2632 --
2633 -- Source line_source
2634 --
2635 g_ManageDemand_tab(i).line_source := 'SOURCED';
2636 --
2637 IF (l_debug <> -1) THEN
2638 rlm_core_sv.dlog(C_DEBUG, 'g_ManageDemand_tab(' || i || ').primary_quantity',
2639 g_ManageDemand_tab(i).primary_quantity);
2640 rlm_core_sv.dlog(C_DEBUG, 'g_ManageDemand_tab(' || i || ').line_source',
2641 g_ManageDemand_tab(i).line_source);
2642 END IF;
2643 --
2644 v_SumQty := v_SumQty +
2645 TRUNC(v_OrigQty * x_Source_tab(j).allocation_percent/100);
2646 --
2647 IF (l_debug <> -1) THEN
2648 rlm_core_sv.dlog(C_DEBUG, 'v_SumQty', v_SumQty);
2649 END IF;
2650 --
2651 SetOperation(g_ManageDemand_tab(i), k_UPDATE);
2652 --
2653 END IF;
2654 --
2655 ELSIF x_Source_tab(j).allocation_percent <> 0 THEN
2656 -- Add a new line at the end
2657 IF (l_debug <> -1) THEN
2658 rlm_core_sv.dlog(C_DEBUG, 'x_Source_tab('|| j || ').organization_id',
2659 x_Source_tab(j).organization_id);
2660 END IF;
2661 --
2662 x_SourcedDemand_Tab(x_SourcedDemand_Tab.COUNT + 1) :=
2663 g_ManageDemand_tab(i);
2664 --
2665 x_SourcedDemand_Tab(x_SourcedDemand_Tab.COUNT).primary_quantity :=
2666 TRUNC(v_OrigQty * x_Source_tab(j).allocation_percent/100);
2667 x_SourcedDemand_Tab(x_SourcedDemand_Tab.COUNT).ship_from_org_id :=
2668 x_Source_tab(j).organization_id;
2669 x_SourcedDemand_Tab(x_SourcedDemand_Tab.COUNT).schedule_item_num :=
2670 x_SourcedDemand_Tab(x_SourcedDemand_Tab.COUNT).schedule_item_num + (j * 0.1);
2671 --
2672 -- Source line_source
2673 --
2674 x_SourcedDemand_Tab(x_SourcedDemand_Tab.COUNT).line_source := 'SOURCED';
2675 --
2676 IF (l_debug <> -1) THEN
2677 rlm_core_sv.dlog(C_DEBUG, 'x_SourcedDemand_Tab.primary_quantity',
2678 x_SourcedDemand_Tab(x_SourcedDemand_Tab.COUNT).primary_quantity);
2679 rlm_core_sv.dlog(C_DEBUG, 'x_SourcedDemand_Tab.ship_from_org_id',
2680 x_SourcedDemand_Tab(x_SourcedDemand_Tab.COUNT).ship_from_org_id);
2681 rlm_core_sv.dlog(C_DEBUG, 'x_SourcedDemand_Tab.line_source',
2682 x_SourcedDemand_Tab(x_SourcedDemand_Tab.COUNT).line_source);
2683 rlm_core_sv.dlog(C_DEBUG, 'x_SourcedDemand_Tab.schedule_item_num',
2684 x_SourcedDemand_Tab(x_SourcedDemand_Tab.COUNT).schedule_item_num);
2685 END IF;
2686 --
2687 v_SumQty := v_SumQty +
2688 TRUNC(v_OrigQty * x_Source_tab(j).allocation_percent/100);
2689 --
2690 IF (l_debug <> -1) THEN
2691 rlm_core_sv.dlog(C_DEBUG, 'v_SumQty', v_SumQty);
2692 END IF;
2693 --
2694 SetOperation(x_SourcedDemand_Tab(x_SourcedDemand_Tab.COUNT),k_INSERT);
2695 --
2696 END IF;
2697 --
2698 END LOOP;
2699 --
2700 -- Now add the remaining quantity the truncated quantity to the
2701 -- saveIndex record
2702 --
2703 IF (l_debug <> -1) THEN
2704 rlm_core_sv.dlog(C_DEBUG, 'v_OrigQty', v_OrigQty);
2705 rlm_core_sv.dlog(C_DEBUG, 'v_SumQty', v_SumQty);
2706 END IF;
2707 --
2708 IF NOT v_org_found THEN
2709 --
2710 SetOperation(g_ManageDemand_tab(i),k_DELETE);
2711 --
2712 x_SourcedDemand_Tab(x_SourcedDemand_Tab.COUNT).primary_quantity :=
2713 x_SourcedDemand_Tab(x_SourcedDemand_Tab.COUNT).primary_quantity +
2714 v_OrigQty - v_SumQty;
2715 --
2716 IF (l_debug <> -1) THEN
2717 rlm_core_sv.dlog(C_DEBUG, 'x_SourcedDemand_Tab(COUNT).primary_quantity'
2718 ,x_SourcedDemand_Tab(x_SourcedDemand_Tab.COUNT).primary_quantity);
2719 END IF;
2720 --
2721 ELSE
2722 --
2723 g_ManageDemand_tab(i).primary_quantity :=
2724 g_ManageDemand_tab(i).primary_quantity + v_OrigQty - v_SumQty;
2725 --
2726 IF (l_debug <> -1) THEN
2727 rlm_core_sv.dlog(C_DEBUG, 'g_ManageDemand_tab(' || i || ').primary_quantity',
2728 g_ManageDemand_tab(i).primary_quantity);
2729 END IF;
2730 --
2731 END IF;
2732 --
2733 IF (l_debug <> -1) THEN
2734 rlm_core_sv.dlog(C_DEBUG, 'g_ManageDemand_tab(' || i || ').primary_quantity',
2735 g_ManageDemand_tab(i).primary_quantity);
2736 END IF;
2737 --
2738 ELSE
2739 --
2740 IF (l_debug <> -1) THEN
2741 rlm_core_sv.dlog(C_DEBUG, 'Line already sourced need not apply source rules ');
2742 END IF;
2743 --
2744 END IF;
2745 --
2746 END LOOP;
2747 --
2748 IF (l_debug <> -1) THEN
2749 rlm_core_sv.dlog(C_DEBUG, 'x_SourcedDemand_Tab.Count',
2750 x_SourcedDemand_Tab.Count);
2751 END IF;
2752 --
2753 IF x_SourcedDemand_Tab.COUNT > 0 THEN
2754 --
2755 FOR k IN 1..x_SourcedDemand_Tab.COUNT LOOP
2756 --
2757 v_tmpGroup_rec.ship_from_org_id :=
2758 x_SourcedDemand_Tab(k).ship_from_org_id;
2759 --
2760 v_tmpGroup_rec.customer_id := x_Sched_rec.customer_id;
2761 --
2762 v_tmpGroup_rec.customer_item_id :=
2763 x_SourcedDemand_Tab(k).customer_item_id;
2764 --
2765 v_tmpGroup_rec.ship_to_address_id :=
2766 x_SourcedDemand_Tab(k).ship_to_address_id;
2767 --
2768 IF (l_debug <> -1) THEN
2769 rlm_core_sv.dlog(C_DEBUG, 'x_SourcedDemand_Tab(' || k || ').ship_from_org_id',
2770 x_SourcedDemand_Tab(k).ship_from_org_id);
2771 rlm_core_sv.dlog(C_DEBUG, 'x_SourcedDemand_Tab(' || k || ').customer_item_id',
2772 x_SourcedDemand_Tab(k).customer_item_id);
2773 rlm_core_sv.dlog(C_DEBUG, 'x_SourcedDemand_Tab(' || k || ').ship_to_address_id',
2774 x_SourcedDemand_Tab(k).ship_to_address_id);
2775 rlm_core_sv.dlog(C_DEBUG, 'x_SourcedDemand_Tab(' || k || ').line_id',
2776 x_SourcedDemand_Tab(k).line_id);
2777 rlm_core_sv.dlog(C_DEBUG, 'x_SourcedDemand_Tab(' || k || ').schedule_line_id',
2778 x_SourcedDemand_Tab(k).schedule_line_id);
2779 END IF;
2780 --
2781 -- This is done so that the inventory item id is re calculated in orgDependentIds.
2782 x_SourcedDemand_tab(k).inventory_item_id := NULL;
2783 --
2784 CallSetups(x_Sched_rec, v_tmpGroup_rec);
2785 --
2786 rlm_validatedemand_sv.DeriveOrgDependentIDs(
2787 v_tmpGroup_rec.setup_terms_rec,
2788 x_Sched_rec,
2789 x_SourcedDemand_tab(k));
2790
2791 --deriveinventoryitemid not a part of DeriveOrgDependentIDs
2792 RLM_TPA_SV.DeriveInventoryItemId(x_Sched_rec,
2793 x_SourcedDemand_tab(k));
2794
2795 RLM_TPA_SV.ValidateLineDetails(
2796 v_tmpGroup_rec.setup_terms_rec,
2797 x_Sched_rec,
2798 x_SourcedDemand_tab(k),
2799 rlm_validatedemand_sv.k_MRP_SOURCED);
2800 --
2801 --
2802 IF (l_debug <> -1) THEN
2803 rlm_core_sv.dlog(C_DEBUG, 'x_SourcedDemand_Tab(' || k || ').process_status',
2804 x_SourcedDemand_Tab(k).process_status);
2805 rlm_core_sv.dlog(C_DEBUG, 'x_SourcedDemand_Tab(' || k || ').ship_from_org_id',
2806 x_SourcedDemand_Tab(k).ship_from_org_id);
2807 rlm_core_sv.dlog(C_DEBUG, 'x_SourcedDemand_Tab(' || k || ').order_header_id',
2808 x_SourcedDemand_Tab(k).order_header_id);
2809 rlm_core_sv.dlog(C_DEBUG, 'x_SourcedDemand_Tab(' || k || ').blanket_number',
2810 x_SourcedDemand_Tab(k).blanket_number);
2811 END IF;
2812 --
2813 IF x_SourcedDemand_tab(k).process_status = rlm_core_sv.k_PS_ERROR THEN
2814 --
2815 IF (l_debug <> -1) THEN
2816 rlm_core_sv.dpop(C_SDEBUG);
2817 END IF;
2818 --
2819 RAISE e_GroupError;
2820 --
2821 END IF;
2822 --
2823 END LOOP;
2824 --
2825 END IF;
2826 --
2827 IF (l_debug <> -1) THEN
2828 rlm_core_sv.dpop(C_SDEBUG);
2829 END IF;
2830 --
2831 EXCEPTION
2832 --
2833 --global_atp
2834 WHEN ByPassATP THEN
2835 --
2836 IF (l_debug <> -1) THEN
2837 rlm_core_sv.dlog(C_DEBUG,'No need to apply sourcing rule to ATP item');
2838 rlm_core_sv.dpop(C_SDEBUG);
2839 END IF;
2840
2841 WHEN e_GroupError THEN
2842 --
2843 IF (l_debug <> -1) THEN
2844 rlm_core_sv.dpop(C_SDEBUG);
2845 END IF;
2846 --
2847 RAISE;
2848
2849
2850 WHEN e_NoSrcRulesSetup THEN
2851 --
2852 IF (l_debug <> -1) THEN
2853 rlm_core_sv.dlog(C_DEBUG,'No Source rules setup for Inv Item ',
2854 x_group_rec.inventory_item_id);
2855 rlm_core_sv.dpop(C_SDEBUG);
2856 END IF;
2857 --
2858 WHEN OTHERS THEN
2859 --
2860 rlm_message_sv.sql_error('rlm_managedemand_sv.ApplySourceRules',
2861 v_Progress);
2862 IF (l_debug <> -1) THEN
2863 rlm_core_sv.dlog(C_DEBUG,'progress',v_Progress);
2864 rlm_core_sv.dpop(C_SDEBUG,'EXCEPTION: '||SUBSTR(SQLERRM,1,200));
2865 END IF;
2866 --
2867 RAISE;
2868
2869 END ApplySourceRules;
2870
2871 /*===========================================================================
2872
2873 PROCEDURE NAME: CalculateShipDate
2874
2875 ===========================================================================*/
2876
2877 PROCEDURE CalculateShipDate(x_sched_rec IN RLM_INTERFACE_HEADERS%ROWTYPE,
2878 x_Group_rec IN rlm_dp_sv.t_Group_rec)
2879 IS
2880
2881 i NUMBER;
2882 j NUMBER;
2883 v_Input_rec rlm_ship_delivery_pattern_sv.t_InputRec;
2884 v_Output_tab rlm_ship_delivery_pattern_sv.t_OutputTable;
2885 v_message_tab rlm_ship_delivery_pattern_sv.t_errormsgtable;
2886 v_ReturnStatus NUMBER;
2887 v_Progress VARCHAR2(3) := '010';
2888 e_SDPFailed EXCEPTION;
2889 v_ATP BOOLEAN;
2890
2891 BEGIN
2892 --
2893 IF (l_debug <> -1) THEN
2894 rlm_core_sv.dpush(C_SDEBUG,'CalculateShipDate');
2895 END IF;
2896 --
2897 FOR i IN 1..g_ManageDemand_tab.COUNT LOOP
2898 --
2899 IF i=1 THEN
2900 --
2901 v_ATP := IsATPItem(g_ManageDemand_tab(i).ship_from_org_id,
2902 g_ManageDemand_tab(i).inventory_item_id);
2903 --
2904 END IF;
2905 --
2906 IF g_ManageDemand_tab(i).request_date IS NOT NULL THEN
2907 --
2908 IF (l_debug <> -1) THEN
2909 rlm_core_sv.dlog(C_DEBUG,'g_ManageDemand_tab(' || i || ').request_date ',
2910 g_ManageDemand_tab(i).request_date);
2911 rlm_core_sv.dlog(C_DEBUG,'g_ManageDemand_tab(' || i || ').schedule_date before',
2912 g_ManageDemand_tab(i).schedule_date);
2913 rlm_core_sv.dlog(C_DEBUG,'No Need to calculate the ship date as it is already calculated. Just make sure it is not past-due');
2914 END IF;
2915 --
2916 IF v_ATP = TRUE THEN
2917 --
2918 g_ManageDemand_tab(i).SCHEDULE_DATE := NULL;
2919 SetOperation(g_ManageDemand_tab(i), k_UPDATE);
2920 --
2921 END IF;
2922 --
2923 IF (l_debug <> -1) THEN
2924 rlm_core_sv.dlog(C_DEBUG,'v_ATP', v_ATP);
2925 rlm_core_sv.dlog(C_DEBUG,'g_ManageDemand_tab(' || i || ').schedule_date after',
2926 g_ManageDemand_tab(i).schedule_date);
2927 END IF;
2928 --
2929 ELSE
2930 v_Input_rec.ShipDeliveryRuleName:= g_ManageDemand_tab(i).ship_del_rule_name;
2931 v_Input_rec.ItemDetailSubtype := g_ManageDemand_tab(i).item_detail_subtype;
2932 v_Input_rec.DateTypeCode := g_ManageDemand_tab(i).date_type_code;
2933 v_Input_rec.StartDateTime := g_ManageDemand_tab(i).start_date_time;
2934 v_Input_rec.ShipFromOrgId := x_Group_rec.ship_from_org_id;
2935 v_Input_rec.CustomerId := x_Group_rec.customer_id;
2936 v_Input_rec.ShipToCustomerId := x_Group_rec.ship_to_customer_id;
2937 v_Input_rec.ShipToAddressId := x_Group_rec.ship_to_address_id;
2938 v_Input_rec.ShipToSiteUseId := g_ManageDemand_tab(i).ship_to_site_use_id;
2939 v_Input_rec.CustomerItemId := g_ManageDemand_tab(i).customer_item_id;
2940
2941 --global_atp
2942 v_Input_rec.ATPItemFlag := v_ATP;
2943
2944 v_Input_rec.PrimaryQuantity := g_ManageDemand_tab(i).primary_quantity;
2945 v_Input_rec.EndDateTime := g_ManageDemand_tab(i).end_date_time;
2946 v_Input_rec.DefaultSDP := x_Group_rec.setup_terms_rec.ship_delivery_rule_name;
2947 v_Input_rec.ship_method := x_Group_rec.setup_terms_rec.ship_method;
2948 v_Input_rec.intransit_time := x_Group_rec.setup_terms_rec.intransit_time;
2949 v_Input_rec.time_uom_code := x_Group_rec.setup_terms_rec.time_uom_code;
2950 v_Input_rec.use_edi_sdp_code_flag :=
2951 x_Group_rec.setup_terms_rec.use_edi_sdp_code_flag;
2952 v_Input_rec.customer_rcv_calendar_cd :=
2953 x_Group_rec.setup_terms_rec.customer_rcv_calendar_cd;
2954 v_Input_rec.supplier_shp_calendar_cd :=
2955 x_Group_rec.setup_terms_rec.supplier_shp_calendar_cd;
2956 v_Input_rec.sched_horizon_start_date :=
2957 x_Sched_rec.sched_horizon_start_date;
2958 /*add exclude non-workdays code*/
2959 v_Input_rec.exclude_non_workdays_flag := x_Group_rec.setup_terms_rec.exclude_non_workdays_flag;
2960
2961 --
2962 IF (l_debug <> -1) THEN
2963 rlm_core_sv.dlog(C_DEBUG,'ShipDeliveryRuleName ',
2964 v_Input_rec.ShipDeliveryRuleName);
2965 rlm_core_sv.dlog(C_DEBUG,'CustomerId ', v_Input_rec.CustomerId);
2966 rlm_core_sv.dlog(C_DEBUG,'DateTypeCode ', v_Input_rec.DateTypeCode);
2967 rlm_core_sv.dlog(C_DEBUG,'StartDateTime ', v_Input_rec.StartDateTime);
2968 rlm_core_sv.dlog(C_DEBUG,'ShipToAddressId ', v_Input_rec.ShipToAddressId);
2969 rlm_core_sv.dlog(C_DEBUG,'ShipFromOrgId ', v_Input_rec.ShipFromOrgId);
2970 rlm_core_sv.dlog(C_DEBUG,'CustomerItemId ', v_Input_rec.CustomerItemId);
2971 rlm_core_sv.dlog(C_DEBUG,'ATPITemFlag ', v_Input_rec.ATPItemFlag);
2972 rlm_core_sv.dlog(C_DEBUG,'PrimaryQuantity ', v_Input_rec.PrimaryQuantity);
2973 rlm_core_sv.dlog(C_DEBUG,'EndDateTime ', v_Input_rec.EndDateTime);
2974 rlm_core_sv.dlog(C_DEBUG,'DefaultSDP ', v_Input_rec.DefaultSDP);
2975 rlm_core_sv.dlog(C_DEBUG,'ship_method ', v_Input_rec.ship_method);
2976 rlm_core_sv.dlog(C_DEBUG,'intransit_time ', v_Input_rec.intransit_time);
2977 rlm_core_sv.dlog(C_DEBUG,'time_uom_code ', v_Input_rec.time_uom_code);
2978 rlm_core_sv.dlog(C_DEBUG,'customer_rcv_calendar_cd ',
2979 v_Input_rec.customer_rcv_calendar_cd);
2980 rlm_core_sv.dlog(C_DEBUG,'supplier_shp_calendar_cd ',
2981 v_Input_rec.supplier_shp_calendar_cd);
2982 rlm_core_sv.dlog(C_DEBUG,'sched_horizon_start_date ',
2983 v_Input_rec.sched_horizon_start_date);
2984 rlm_core_sv.dlog(C_DEBUG,'use_edi_sdp_code_flag ',
2985 v_Input_rec.use_edi_sdp_code_flag);
2986 END IF;
2987 --
2988 rlm_tpa_sv.calc_scheduled_ship_date(v_Input_rec,
2989 v_Output_tab,
2990 v_message_tab,
2991 v_ReturnStatus);
2992 --
2993 IF (l_debug <> -1) THEN
2994 rlm_core_sv.dlog(C_DEBUG,'v_ReturnStatus ', v_ReturnStatus);
2995 rlm_core_sv.dlog(C_DEBUG,'v_message_tab.COUNT ', v_message_tab.COUNT);
2996 END IF;
2997 --
2998 FOR j in 1..v_message_tab.COUNT LOOP
2999 --
3000 IF v_message_tab(j).ErrType = -1 THEN
3001 --
3002 rlm_message_sv.app_error(
3003 x_ExceptionLevel => rlm_message_sv.k_error_level,
3004 x_MessageName => 'RLM_SHIPDELAPI_FAILED',
3005 x_ChildMessageName => v_message_tab(j).ErrMessageName,
3006 x_InterfaceHeaderId => x_sched_rec.header_id,
3007 x_InterfaceLineId => g_ManageDemand_tab(i).line_id,
3008 x_ScheduleHeaderId => x_sched_rec.schedule_header_id,
3009 x_ScheduleLineId => g_ManageDemand_tab(i).schedule_line_id,
3010 x_OrderHeaderId => x_group_rec.setup_terms_rec.header_id,
3011 x_OrderLineId => NULL,
3012 x_Token1 => 'ERROR',
3013 x_value1 => v_message_tab(j).ErrMessage);
3014 --
3015 IF (l_debug <> -1) THEN
3016 rlm_core_sv.dlog(C_DEBUG,v_message_tab(j).ErrMessage);
3017 END IF;
3018 --
3019 ELSIF v_message_tab(j).ErrType = 0 THEN
3020 --
3021 rlm_message_sv.app_error(
3022 x_ExceptionLevel => rlm_message_sv.k_warn_level,
3023 x_MessageName => 'RLM_SHIPDELAPI_WARN',
3024 x_ChildMessageName => v_message_tab(j).ErrMessageName,
3025 x_InterfaceHeaderId => x_sched_rec.header_id,
3026 x_InterfaceLineId => g_ManageDemand_tab(i).line_id,
3027 x_ScheduleHeaderId => x_sched_rec.schedule_header_id,
3028 x_ScheduleLineId => g_ManageDemand_tab(i).schedule_line_id,
3029 x_OrderHeaderId => x_group_rec.setup_terms_rec.header_id,
3030 x_OrderLineId => NULL,
3031 x_Token1 => 'ERROR',
3032 x_value1 => v_message_tab(j).ErrMessage);
3033 --
3034 IF (l_debug <> -1) THEN
3035 rlm_core_sv.dlog(C_DEBUG,v_message_tab(j).ErrMessage);
3036 END IF;
3037 --
3038 END IF;
3039 --
3040 END LOOP;
3041 --
3042 IF ((v_ReturnStatus = 2) or
3043 (v_ReturnStatus = RLM_SHIP_DELIVERY_PATTERN_SV.g_RaiseErr)) THEN
3044 --
3045 IF (l_debug <> -1) THEN
3046 rlm_core_sv.dlog(C_DEBUG,'v_ReturnStatus',v_ReturnStatus);
3047 rlm_core_sv.dlog(C_DEBUG,'RLM_CALCULATE_SHIP_DATE_FAILED');
3048 END IF;
3049 --
3050 raise e_SDPFailed;
3051 --
3052 ELSE -- the return status not error
3053 --
3054 IF (l_debug <> -1) THEN
3055 rlm_core_sv.dlog(C_DEBUG,'v_Output_tab.COUNT',v_Output_tab.COUNT);
3056 END IF;
3057 --
3058 FOR j IN 1..v_Output_tab.COUNT LOOP
3059 -- The first line should be updated the rest inserted
3060 --
3061 IF j = 1 THEN
3062 --
3063 IF (l_debug <> -1) THEN
3064 rlm_core_sv.dlog(C_DEBUG,'updating the first line');
3065 END IF;
3066 --
3067 g_ManageDemand_tab(i).request_date :=
3068 v_Output_tab(j).PlannedShipmentDate;
3069 IF (l_debug <> -1) THEN
3070 rlm_core_sv.dlog(C_DEBUG,'g_ManageDemand_tab.request_date',
3071 g_ManageDemand_tab(i).request_date);
3072 END IF;
3073 --
3074 IF v_input_rec.ATPItemFlag = TRUE THEN
3075 --
3076 g_ManageDemand_tab(i).SCHEDULE_DATE := NULL;
3077 --
3078 ELSE
3079 --
3080 g_ManageDemand_tab(i).SCHEDULE_DATE :=
3081 v_Output_tab(j).PlannedShipmentDate;
3082 --
3083 END IF;
3084 --
3085 IF (l_debug <> -1) THEN
3086 rlm_core_sv.dlog(C_DEBUG,'g_ManageDemand_tab.SCHEDULE_DATE',
3087 g_ManageDemand_tab(i).SCHEDULE_DATE);
3088 END IF;
3089 --
3090 g_ManageDemand_tab(i).primary_quantity :=
3091 v_Output_tab(j).PrimaryQuantity;
3092 --
3093 IF (l_debug <> -1) THEN
3094 rlm_core_sv.dlog(C_DEBUG,'g_ManageDemand_tab.primary_quantity',
3095 g_ManageDemand_tab(i).primary_quantity);
3096 END IF;
3097 --
3098 g_ManageDemand_tab(i).item_detail_subtype :=
3099 v_Output_tab(j).ItemDetailSubtype;
3100 --
3101 IF (l_debug <> -1) THEN
3102 rlm_core_sv.dlog(C_DEBUG,'item_detail_subtype',
3103 g_ManageDemand_tab(i).item_detail_subtype);
3104 END IF;
3105 --
3106 SetOperation(g_ManageDemand_tab(i), k_UPDATE);
3107 --
3108 IF (l_debug <> -1) THEN
3109 rlm_core_sv.dlog(C_DEBUG,'Set operation to update');
3110 END IF;
3111 --
3112 ELSE -- J<> 1 i.e. there are multiple lines in output tab
3113 --
3114 g_ManageDemand_tab(g_ManageDemand_tab.COUNT+1):=g_ManageDemand_tab(i);
3115 --
3116 IF (l_debug <> -1) THEN
3117 rlm_core_sv.dlog(C_DEBUG,'g_ManageDemand.Count',
3118 g_ManageDemand_tab.COUNT);
3119 END IF;
3120 --
3121 g_ManageDemand_tab(g_ManageDemand_tab.COUNT).REQUEST_DATE :=
3122 v_Output_tab(j).PlannedShipmentDate;
3123 --
3124 IF (l_debug <> -1) THEN
3125 rlm_core_sv.dlog(C_DEBUG,'g_ManageDemand_tab.REQUEST_DATE',
3126 g_ManageDemand_tab(g_ManageDemand_tab.COUNT).REQUEST_DATE);
3127 END IF;
3128 --
3129 g_ManageDemand_tab(g_ManageDemand_tab.COUNT).SCHEDULE_DATE :=
3130 v_Output_tab(j).PlannedShipmentDate;
3131 --
3132 IF (l_debug <> -1) THEN
3133 rlm_core_sv.dlog(C_DEBUG,'g_ManageDemand_tab.SCHEDULE_DATE',
3134 g_ManageDemand_tab(g_ManageDemand_tab.COUNT).SCHEDULE_DATE);
3135 END IF;
3136 --
3137 g_ManageDemand_tab(g_ManageDemand_tab.COUNT).primary_quantity :=
3138 v_Output_tab(j).PrimaryQuantity;
3139 --
3140 IF (l_debug <> -1) THEN
3141 rlm_core_sv.dlog(C_DEBUG,'g_ManageDemand_tab.primary_quantity',
3142 g_ManageDemand_tab(g_ManageDemand_tab.COUNT).primary_quantity);
3143 END IF;
3144 --
3145 g_ManageDemand_tab(g_ManageDemand_tab.COUNT).item_detail_subtype :=
3146 v_Output_tab(j).ItemDetailSubtype;
3147 --
3148 IF (l_debug <> -1) THEN
3149 rlm_core_sv.dlog(C_DEBUG,'item_detail_subtype',
3150 g_ManageDemand_tab(g_ManageDemand_tab.COUNT).item_detail_subtype);
3151 END IF;
3152 --
3153 SetOperation(g_ManageDemand_tab(g_ManageDemand_tab.COUNT), k_INSERT);
3154 --
3155 IF (l_debug <> -1) THEN
3156 rlm_core_sv.dlog(C_DEBUG,'Set operation to insert');
3157 END IF;
3158 --
3159 IF v_Output_tab(j).ReturnMessage IS NOT NULL THEN
3160 --
3161 IF (l_debug <> -1) THEN
3162 rlm_core_sv.dlog(C_DEBUG,'Return message from SDP APIs: ',
3163 v_Output_tab(j).ReturnMessage);
3164 END IF;
3165 --
3166 END IF;
3167 --
3168 END IF;
3169 --
3170 END LOOP;
3171 --
3172 END IF;
3173 --
3174 END IF;
3175 --
3176 END LOOP;
3177 --
3178 IF (l_debug <> -1) THEN
3179 rlm_core_sv.dpop(C_SDEBUG);
3180 END IF;
3181 --
3182 EXCEPTION
3183 --
3184 WHEN e_SDPFailed THEN
3185 --
3186 IF (l_debug <> -1) THEN
3187 rlm_core_sv.dpop(C_SDEBUG);
3188 END IF;
3189 --
3190 raise e_GroupError;
3191 --
3192 WHEN NO_DATA_FOUND THEN
3193 --
3194 IF (l_debug <> -1) THEN
3195 rlm_core_sv.dlog(C_DEBUG,'NO_DATA_FOUND');
3196 rlm_core_sv.dpop(C_SDEBUG);
3197 END IF;
3198 --
3199 WHEN OTHERS THEN
3200 --
3201 IF (l_debug <> -1) THEN
3202 rlm_core_sv.dlog(C_DEBUG,'EXCEPTION: '||SUBSTR(SQLERRM,1,200));
3203 rlm_core_sv.dpop(C_SDEBUG);
3204 END IF;
3205 --
3206 raise;
3207 END CalculateShipDate;
3208
3209
3210 /*===========================================================================
3211
3212 PROCEDURE NAME: ApplyFFFFences
3213
3214 ===========================================================================*/
3215
3216 PROCEDURE ApplyFFFFences(x_Sched_rec IN RLM_INTERFACE_HEADERS%ROWTYPE,
3217 x_Group_rec IN rlm_dp_sv.t_Group_rec,
3218 IsLineProcessed IN OUT NOCOPY BOOLEAN)
3219 IS
3220
3221 i NUMBER;
3222 v_FirmFenceDayFrom NUMBER;
3223 v_FirmFenceDayTo NUMBER;
3224 v_ForecastFenceDayFrom NUMBER;
3225 v_ForecastFenceDayTo NUMBER;
3226 v_FrozenFenceDayFrom NUMBER;
3227 v_FrozenFenceDayTo NUMBER;
3228 v_MRPFenceDayFrom NUMBER;
3229 v_MRPFenceDayTo NUMBER;
3230 v_FirmFenceDays NUMBER := NULL;
3231 v_ForecastFenceDays NUMBER := NULL;
3232 v_FrozenFenceDays NUMBER := NULL;
3233 v_MRPFenceDays NUMBER := NULL;
3234 v_Progress VARCHAR2(3) := '010';
3235 -- Bug 4297984
3236 v_MatchAttrTxt VARCHAR2(2000);
3237 v_match_rec RLM_RD_SV.t_generic_rec;
3238 v_Group_rec rlm_dp_sv.t_Group_rec;
3239
3240 BEGIN
3241 --
3242 IF (l_debug <> -1) THEN
3243 rlm_core_sv.dpush(C_SDEBUG,'ApplyFFFFences');
3244 rlm_core_sv.dlog(C_DEBUG,' x_Sched_rec.Schedule_type',
3245 x_Sched_rec.Schedule_type);
3246 rlm_core_sv.dlog(C_DEBUG,'TRUNC(SYSDATE)',
3247 TRUNC(SYSDATE));
3248 rlm_core_sv.dlog(C_DEBUG,' x_Sched_rec.sched_horizon_start_date',
3249 x_Sched_rec.sched_horizon_start_date);
3250 rlm_core_sv.dlog(C_DEBUG,' x_Sched_rec.sched_horizon_end_date',
3251 x_Sched_rec.sched_horizon_end_date);
3252 END IF;
3253 --
3254 IF x_Sched_rec.Schedule_type = k_PLANNING THEN
3255
3256 IF (l_debug <> -1) THEN
3257 rlm_core_sv.dlog(C_DEBUG,'PLANNING');
3258 END IF;
3259 --
3260 v_FrozenFenceDayFrom := x_Group_rec.setup_terms_rec.pln_frozen_day_from;
3261 v_FrozenFenceDayTo := x_Group_rec.setup_terms_rec.pln_frozen_day_to;
3262 v_FirmFenceDayFrom := x_Group_rec.setup_terms_rec.pln_firm_day_from;
3263 v_FirmFenceDayTo := x_Group_rec.setup_terms_rec.pln_firm_day_to;
3264 v_ForecastFenceDayFrom := x_Group_rec.setup_terms_rec.pln_forecast_day_from;
3265 v_ForecastFenceDayTo := x_Group_rec.setup_terms_rec.pln_forecast_day_to;
3266 v_ForecastFenceDayFrom := x_Group_rec.setup_terms_rec.pln_forecast_day_from;
3267 v_ForecastFenceDayTo := x_Group_rec.setup_terms_rec.pln_forecast_day_to;
3268 v_MRPFenceDayFrom := x_Group_rec.setup_terms_rec.pln_mrp_forecast_day_from;
3269 v_MRPFenceDayTo := x_Group_rec.setup_terms_rec.pln_mrp_forecast_day_to;
3270
3271 ELSIF x_Sched_rec.Schedule_type = k_SHIPPING THEN
3272 --
3273 IF (l_debug <> -1) THEN
3274 rlm_core_sv.dlog(C_DEBUG,'SHIPPING');
3275 END IF;
3276 --
3277 v_FrozenFenceDayFrom := x_Group_rec.setup_terms_rec.shp_frozen_day_from;
3278 v_FrozenFenceDayTo := x_Group_rec.setup_terms_rec.shp_frozen_day_to;
3279 v_FirmFenceDayFrom := x_Group_rec.setup_terms_rec.shp_firm_day_from;
3280 v_FirmFenceDayTo := x_Group_rec.setup_terms_rec.shp_firm_day_to;
3281 v_ForecastFenceDayFrom := x_Group_rec.setup_terms_rec.shp_forecast_day_from;
3282 v_ForecastFenceDayTo := x_Group_rec.setup_terms_rec.shp_forecast_day_to;
3283 v_MRPFenceDayFrom := x_Group_rec.setup_terms_rec.shp_mrp_forecast_day_from;
3284 v_MRPFenceDayTo := x_Group_rec.setup_terms_rec.shp_mrp_forecast_day_to;
3285
3286 ELSIF x_Sched_rec.Schedule_type = k_SEQUENCED THEN
3287 --
3288 IF (l_debug <> -1) THEN
3289 rlm_core_sv.dlog(C_DEBUG,'SEQUENCED');
3290 END IF;
3291 --
3292 v_FrozenFenceDayFrom := x_Group_rec.setup_terms_rec.seq_frozen_day_from;
3293 v_FrozenFenceDayTo := x_Group_rec.setup_terms_rec.seq_frozen_day_to;
3294 v_FirmFenceDayFrom := x_Group_rec.setup_terms_rec.seq_firm_day_from;
3295 v_FirmFenceDayTo := x_Group_rec.setup_terms_rec.seq_firm_day_to;
3296 v_ForecastFenceDayFrom := x_Group_rec.setup_terms_rec.seq_forecast_day_from;
3297 v_ForecastFenceDayTo := x_Group_rec.setup_terms_rec.seq_forecast_day_to;
3298 v_MRPFenceDayFrom := x_Group_rec.setup_terms_rec.seq_mrp_forecast_day_from;
3299 v_MRPFenceDayTo := x_Group_rec.setup_terms_rec.seq_mrp_forecast_day_to;
3300
3301 END IF;
3302
3303 IF (l_debug <> -1) THEN
3304 rlm_core_sv.dlog(C_DEBUG,'v_FrozenFenceDayFrom',v_FrozenFenceDayFrom);
3305 rlm_core_sv.dlog(C_DEBUG,'v_FrozenFenceDayTo',v_FrozenFenceDayTo);
3306 rlm_core_sv.dlog(C_DEBUG,'v_FirmFenceDayFrom',v_FirmFenceDayFrom);
3307 rlm_core_sv.dlog(C_DEBUG,'v_FirmFenceDayTo',v_FirmFenceDayTo);
3308 rlm_core_sv.dlog(C_DEBUG,'v_ForecastFenceDayFrom',v_ForecastFenceDayFrom);
3309 rlm_core_sv.dlog(C_DEBUG,'v_ForecastFenceDayTo',v_ForecastFenceDayTo);
3310 rlm_core_sv.dlog(C_DEBUG,'v_MRPFenceDayFrom',v_MRPFenceDayFrom);
3311 rlm_core_sv.dlog(C_DEBUG,'v_MRPFenceDayTo',v_MRPFenceDayTo);
3312 END IF;
3313
3314 IF v_FrozenFenceDayFrom IS NOT NULL THEN
3315 v_FrozenFenceDays := v_FrozenFenceDayTo - v_FrozenFenceDayFrom + 1;
3316 ELSE
3317 v_FrozenFenceDays := NULL;
3318 END IF;
3319
3320 IF v_FirmFenceDayFrom IS NOT NULL THEN
3321 IF v_FirmFenceDayFrom <> 0 THEN
3322 --
3323 IF (l_debug <> -1) THEN
3324 rlm_core_sv.dlog(C_DEBUG,'v_FirmFenceDayFrom',v_FirmFenceDayFrom);
3325 END IF;
3326 --
3327 v_FirmFenceDays := v_FirmFenceDayTo - v_FirmFenceDayFrom + 1;
3328 ELSE
3329 v_FirmFenceDays := 0;
3330 END IF;
3331 ELSE
3332 v_FirmFenceDays := NULL;
3333 END IF;
3334
3335 IF v_ForecastFenceDayFrom IS NOT NULL THEN
3336 IF v_ForecastFenceDayFrom <> 0 THEN
3337 --
3338 IF (l_debug <> -1) THEN
3339 rlm_core_sv.dlog(C_DEBUG,'v_ForecastFenceDayFrom',v_ForecastFenceDayFrom);
3340 END IF;
3341 --
3342 v_ForecastFenceDays := v_ForecastFenceDayTo - v_ForecastFenceDayFrom + 1;
3343 ELSE
3344 v_ForecastFenceDays := 0;
3345 END IF;
3346 ELSE
3347 v_ForecastFenceDays := NULL;
3348 END IF;
3349
3350 IF v_MRPFenceDayFrom IS NOT NULL THEN
3351 IF v_MRPFenceDayFrom <> 0 THEN
3352 --
3353 IF (l_debug <> -1) THEN
3354 rlm_core_sv.dlog(C_DEBUG,'v_MRPFenceDayFrom',v_MRPFenceDayFrom);
3355 END IF;
3356 --
3357 v_MRPFenceDays := v_MRPFenceDayTo - v_MRPFenceDayFrom + 1;
3358 ELSE
3359 v_MRPFenceDays := 0;
3360 END IF;
3361 ELSE
3362 v_MRPFenceDays := NULL;
3363 END IF;
3364 --
3365 IF (l_debug <> -1) THEN
3366 rlm_core_sv.dlog(C_DEBUG,'v_FrozenFenceDays',v_FrozenFenceDays);
3367 rlm_core_sv.dlog(C_DEBUG,'v_FirmFenceDays',v_FirmFenceDays);
3368 rlm_core_sv.dlog(C_DEBUG,'v_ForecastFenceDays',v_ForecastFenceDays);
3369 rlm_core_sv.dlog(C_DEBUG,'v_MRPFenceDays',v_MRPFenceDays);
3370 END IF;
3371 --
3372 /* checking for past due demand and giving a warning message */
3373 --
3374 FOR i IN 1..g_ManageDemand_tab.COUNT LOOP --{
3375 --
3376 IF (l_debug <> -1) THEN
3377 rlm_core_sv.dlog(C_DEBUG,'g_ManageDemand_tab(' || i || ').request_date',
3378 g_ManageDemand_tab(i).request_date);
3379 rlm_core_sv.dlog(C_DEBUG,'g_ManageDemand_tab(' || i || ').schedule_date',
3380 g_ManageDemand_tab(i).schedule_date);
3381 rlm_core_sv.dlog(C_DEBUG,'g_ManageDemand_tab(' || i || ').item_detail_type',
3382 g_ManageDemand_tab(i).item_detail_type);
3383 rlm_core_sv.dlog(C_DEBUG,'g_ManageDemand_tab(' || i || ').process_status',
3384 g_ManageDemand_tab(i).process_status);
3385 END IF;
3386 --
3387 IF (g_ManageDemand_tab(i).request_date <
3388 TRUNC(SYSDATE) ) THEN --{
3389 --
3390 --pdue
3391 IF x_sched_rec.schedule_source <> 'MANUAL' THEN --{
3392 --
3393 --g_ManageDemand_tab(i).item_detail_type := k_PAST_DUE_FIRM;
3394 IF v_FirmFenceDays IS NOT NULL THEN --{
3395 --
3396 g_ManageDemand_tab(i).item_detail_type := k_FIRM_DEMAND;
3397 --
3398 IF (l_debug <> -1) THEN
3399 rlm_core_sv.dlog(C_DEBUG,'g_ManageDemand_tab(' || i || ').item_detail_type',
3400 g_ManageDemand_tab(i).item_detail_type);
3401 rlm_core_sv.dlog(C_DEBUG,'k_FIRM_DEMAND', k_FIRM_DEMAND);
3402 END IF;
3403 --
3404 ELSE --}{
3405 --
3406 IF v_ForecastFenceDays IS NOT NULL THEN --{
3407 --
3408 IF v_ForecastFenceDayFrom = 1 THEN --{
3409 --
3410 g_ManageDemand_tab(i).item_detail_type := k_FORECAST_DEMAND;
3411 --
3412 END IF; --}
3413 --
3414 IF (l_debug <> -1) THEN
3415 rlm_core_sv.dlog(C_DEBUG,'g_ManageDemand_tab(' || i || ').item_detail_type',
3416 g_ManageDemand_tab(i).item_detail_type);
3417 rlm_core_sv.dlog(C_DEBUG,'k_FORECAST_DEMAND', k_FORECAST_DEMAND);
3418 END IF;
3419 --
3420 ELSE --}{
3421 --
3422 IF v_MRPFenceDays IS NOT NULL THEN --{
3423 --
3424 IF v_MRPFenceDayFrom = 1 THEN --{
3425 --
3426 g_ManageDemand_tab(i).item_detail_type := k_MRP_FORECAST;
3427 --
3428 END IF; --}
3429 --
3430 IF (l_debug <> -1) THEN
3431 rlm_core_sv.dlog(C_DEBUG,'g_ManageDemand_tab(' || i || ').item_detail_type',
3432 g_ManageDemand_tab(i).item_detail_type);
3433 rlm_core_sv.dlog(C_DEBUG,'k_MRP_FORECAST', k_MRP_FORECAST);
3434 END IF;
3435 --
3436 END IF; --}
3437 --
3438 END IF; --}
3439 --
3440 END IF; --}
3441 --
3442 END IF; --}
3443 --
3444 -- Bug 4297984
3445 RLM_RD_SV.AssignMatchAttribValues(g_ManageDemand_tab(i),v_match_rec);
3446 -- RLM_RD_SV.GetMatchAttributes defines the second argument:Group_rec as IN OUT
3447 -- where as in this function (ApplyFFFFences) x_Group_rec is an IN arguement.
3448 -- Hence x_Group_rec cannot be passed as such and the following assignment is done.
3449 v_Group_rec := x_Group_rec;
3450 RLM_RD_SV.GetMatchAttributes(x_Sched_rec, v_Group_rec, v_match_rec, v_MatchAttrTxt);
3451 --
3452 IF (x_sched_rec.schedule_type = 'SEQUENCED') THEN --{
3453 --
3454 rlm_message_sv.app_error(
3455 x_ExceptionLevel => rlm_message_sv.k_warn_level,
3456 x_MessageName => 'RLM_PAST_DUE_DEMAND_SEQ',
3457 x_InterfaceHeaderId => x_sched_rec.header_id,
3458 x_InterfaceLineId => g_ManageDemand_tab(i).line_id,
3459 x_ScheduleHeaderId => x_sched_rec.schedule_header_id,
3460 x_ScheduleLineId => g_ManageDemand_tab(i).schedule_line_id,
3461 x_OrderHeaderId => x_group_rec.setup_terms_rec.header_id,
3462 x_OrderLineId => NULL,
3463 x_token1 => 'QUANTITY',
3464 x_value1 => g_ManageDemand_tab(i).primary_quantity,
3465 x_Token2 => 'GROUP',
3466 x_value2 => rlm_core_sv.get_ship_from(x_group_rec.ship_from_org_id)||'-'||
3467 rlm_core_sv.get_ship_to(x_group_rec.ship_to_address_id)||'-'||
3468 rlm_core_sv.get_item_number(x_group_rec.customer_item_id),
3469 x_token3 => 'REQ_DATE',
3470 x_value3 => g_ManageDemand_tab(i).request_date,
3471 x_token4 => 'START_DATE_TIME',
3472 x_value4 => to_date(g_ManageDemand_tab(i).industry_attribute2,'YYYY/MM/DD HH24:MI:SS'),
3473 x_token5 => 'PROCDATE',
3474 x_value5 => sysdate,
3475 x_Token6 => 'SEQ_INFO',
3476 x_value6 => nvl(g_ManageDemand_tab(i).cust_production_seq_num,'NULL') || '-' ||
3477 nvl(g_ManageDemand_tab(i).cust_model_serial_number,'NULL')|| '-' ||
3478 nvl(g_ManageDemand_tab(i).customer_job,'NULL'),
3479 x_Token7 => 'MATCH_ATTR',
3480 x_value7 => v_MatchAttrTxt);
3481 --
3482 IF (l_debug <> -1) THEN
3483 rlm_core_sv.dlog(C_DEBUG,'RLM_PAST_DUE_DEMAND_SEQ');
3484 rlm_core_sv.dlog(C_DEBUG,'g_ManageDemand_tab(' || i || ').item_detail_type',
3485 g_ManageDemand_tab(i).item_detail_type);
3486 END IF;
3487 --
3488 ELSE --}{
3489 --
3490 rlm_message_sv.app_error(
3491 x_ExceptionLevel => rlm_message_sv.k_warn_level,
3492 x_MessageName => 'RLM_PAST_DUE_DEMAND',
3493 x_InterfaceHeaderId => x_sched_rec.header_id,
3494 x_InterfaceLineId => g_ManageDemand_tab(i).line_id,
3495 x_ScheduleHeaderId => x_sched_rec.schedule_header_id,
3496 x_ScheduleLineId => g_ManageDemand_tab(i).schedule_line_id,
3497 x_OrderHeaderId => x_group_rec.setup_terms_rec.header_id,
3498 x_OrderLineId => NULL,
3499 x_token1 => 'QUANTITY',
3500 x_value1 => g_ManageDemand_tab(i).primary_quantity,
3501 x_Token2 => 'GROUP',
3502 x_value2 => rlm_core_sv.get_ship_from(x_group_rec.ship_from_org_id)||'-'||
3503 rlm_core_sv.get_ship_to(x_group_rec.ship_to_address_id)||'-'||
3504 rlm_core_sv.get_item_number(x_group_rec.customer_item_id),
3505 x_token3 => 'REQ_DATE',
3506 x_value3 => g_ManageDemand_tab(i).request_date,
3507 x_token4 => 'START_DATE_TIME',
3508 x_value4 => to_date(g_ManageDemand_tab(i).industry_attribute2,'YYYY/MM/DD HH24:MI:SS'),
3509 x_token5 => 'PROCDATE',
3510 x_value5 => sysdate,
3511 x_Token6 => 'SCHEDULE_LINE',
3512 x_value6 => rlm_core_sv.get_schedule_line_number(g_ManageDemand_tab(i).schedule_line_id),
3513 x_Token7 => 'MATCH_ATTR',
3514 x_value7 => v_MatchAttrTxt);
3515 --
3516 IF (l_debug <> -1) THEN
3517 rlm_core_sv.dlog(C_DEBUG,'RLM_PAST_DUE_DEMAND');
3518 rlm_core_sv.dlog(C_DEBUG,'g_ManageDemand_tab(' || i || ').item_detail_type',
3519 g_ManageDemand_tab(i).item_detail_type);
3520 END IF;
3521 --
3522 END IF; --}
3523 --
3524 END IF; --}
3525 --
3526 END LOOP; --}
3527 --
3528 IF x_sched_rec.schedule_source <> 'MANUAL' THEN --{
3529 --
3530 IF v_FirmFenceDays IS NOT NULL OR v_ForecastFenceDays IS NOT NULL
3531 OR v_FrozenFenceDays IS NOT NULL OR v_MRPFenceDays IS NOT NULL THEN --{
3532 --
3533 IF (l_debug <> -1) THEN
3534 rlm_core_sv.dlog(C_DEBUG,'g_ManageDemand_tab.COUNT',
3535 g_ManageDemand_tab.COUNT);
3536 END IF;
3537 --
3538 FOR i IN 1..g_ManageDemand_tab.COUNT LOOP --{
3539 --
3540 IF (l_debug <> -1) THEN
3541 rlm_core_sv.dlog(C_DEBUG,'g_ManageDemand_tab(' || i || ').request_date',
3542 g_ManageDemand_tab(i).request_date);
3543 rlm_core_sv.dlog(C_DEBUG,'g_ManageDemand_tab(' || i || ').item_detail_type',
3544 g_ManageDemand_tab(i).item_detail_type);
3545 rlm_core_sv.dlog(C_DEBUG,'g_ManageDemand_tab(' || i || ').process_status',
3546 g_ManageDemand_tab(i).process_status);
3547 END IF;
3548 --
3549
3550 /* Bug 3339621
3551 * Bug fix for Dana *
3552 * If firm AND forecast fences are null AND MRP fences not null then *
3553 * If request date falls between MRP fences *
3554 * lines should be interfaced to MRP *
3555 * else *
3556 * drop demand and set line process status to 5 *
3557 * end if *
3558 * else *
3559 * continue regular DSP flow *
3560 * end if *
3561 */
3562 IF (v_FirmFenceDays = 0 AND
3563 v_ForecastFenceDays = 0 AND v_MRPFenceDays > 0) THEN --{
3564
3565 IF (l_debug <> -1) THEN
3566 rlm_core_sv.dlog(C_DEBUG, 'Firm and forecast fences are set to zero');
3567 rlm_core_sv.dlog(C_DEBUG, 'MRP forecast fences are set to not-null values');
3568 END IF;
3569 --
3570 IF (g_ManageDemand_tab(i).request_date BETWEEN
3571 (TRUNC(SYSDATE) + v_MRPFenceDayFrom - 1) AND
3572 (TRUNC(SYSDATE) + v_MRPFenceDayTo - 1)) THEN --{
3573 --
3574 IF (l_debug <> -1) THEN
3575 rlm_core_sv.dlog(C_DEBUG, 'request date is within MRP fences');
3576 END IF;
3577 --
3578 g_ManageDemand_tab(i).item_detail_type := k_MRP_FORECAST;
3579 SetOperation(g_ManageDemand_tab(i), k_UPDATE);
3580 --
3581 ELSE --}{
3582 --
3583 IF (l_debug <> -1) THEN
3584 rlm_core_sv.dlog(C_DEBUG, 'request date outside MRP fences');
3585 rlm_core_sv.dlog(C_DEBUG, 'Demand line will be dropped');
3586 END IF;
3587 --
3588 IsLineProcessed := TRUE;
3589 g_ManageDemand_tab(i).process_status := rlm_core_sv.k_PS_PROCESSED;
3590 --Bug 5208135
3591 IF (g_ManageDemand_tab(i).item_detail_type = k_MRP_FORECAST) THEN
3592 g_ManageDemand_tab(i).item_detail_type := k_MRP_DROP_DEMAND;
3593 END IF;
3594
3595 SetOperation(g_ManageDemand_tab(i), k_UPDATE);
3596 --
3597 END IF; --}
3598 ELSIF v_FirmFenceDays = 0 THEN --}{
3599 --
3600 g_ManageDemand_tab(i).process_status := rlm_core_sv.k_PS_PROCESSED;
3601 IsLineProcessed := TRUE;
3602 SetOperation(g_ManageDemand_tab(i), k_UPDATE);
3603 --
3604 ELSIF v_FirmFenceDays IS NOT NULL THEN --}{
3605 --
3606 IF (l_debug <> -1) THEN
3607 rlm_core_sv.dlog(C_DEBUG,'v_FirmFenceDayFROM',v_FirmFenceDayFrom);
3608 rlm_core_sv.dlog(C_DEBUG,'v_FirmFenceDayTo',v_FirmFenceDayTo);
3609 END IF;
3610 --
3611 -- Bug 4207235
3612 --
3613 IF ( v_FrozenFenceDays is NOT NULL AND
3614 g_ManageDemand_tab(i).request_date < (TRUNC(SYSDATE) + v_FirmFenceDayTo) )
3615 OR
3616 ( v_FrozenFenceDays is NULL AND
3617 g_ManageDemand_tab(i).request_date < (TRUNC(SYSDATE) + v_FirmFenceDayTo) AND
3618 g_ManageDemand_tab(i).request_date >=(TRUNC(SYSDATE) + v_FirmFenceDayFrom - 1) ) THEN --{
3619 --
3620 IF (l_debug <> -1) THEN
3621 rlm_core_sv.dlog(C_DEBUG,'request_date within firm fence');
3622 END IF;
3623 --
3624 g_ManageDemand_tab(i).item_detail_type := k_FIRM_DEMAND;
3625 SetOperation(g_ManageDemand_tab(i), k_UPDATE);
3626 --
3627 ELSIF (g_ManageDemand_tab(i).request_date >=
3628 (TRUNC(SYSDATE) + v_FirmFenceDayTo)) THEN --}{
3629 --
3630 IF (l_debug <> -1) THEN
3631 rlm_core_sv.dlog(C_DEBUG,'request_date outside firm fence');
3632 END IF;
3633 --
3634 IF v_ForecastFenceDays = 0 THEN --{
3635 --
3636 g_ManageDemand_tab(i).item_detail_type := k_FORECAST_DEMAND;
3637 g_ManageDemand_tab(i).process_status
3638 := rlm_core_sv.k_PS_PROCESSED;
3639 IsLineProcessed := TRUE;
3640 SetOperation(g_ManageDemand_tab(i), k_UPDATE);
3641 --
3642 ELSIF v_ForecastFenceDays is NOT NULL THEN --}{
3643 --
3644 IF (l_debug <> -1) THEN
3645 rlm_core_sv.dlog(C_DEBUG,'v_ForecastFenceDays',
3646 v_ForecastFenceDays);
3647 END IF;
3648 --
3649 IF(g_ManageDemand_tab(i).request_date <
3650 (TRUNC(SYSDATE) +
3651 v_ForecastFenceDayTo))THEN --{
3652 --
3653 IF (l_debug <> -1) THEN
3654 rlm_core_sv.dlog(C_DEBUG,'request_date inside oe forecast fence');
3655 END IF;
3656 --
3657 g_ManageDemand_tab(i).item_detail_type := k_FORECAST_DEMAND;
3658 SetOperation(g_ManageDemand_tab(i), k_UPDATE);
3659 --
3660 ELSIF(g_ManageDemand_tab(i).request_date >=
3661 (TRUNC(SYSDATE) + v_ForecastFenceDayTo))THEN --}{
3662 --
3663 IF (l_debug <> -1) THEN
3664 rlm_core_sv.dlog(C_DEBUG,'request_date outside oe forecast fence');
3665 END IF;
3666 --
3667 IF v_MRPFenceDays = 0 THEN --{
3668 --
3669 g_ManageDemand_tab(i).item_detail_type := k_MRP_FORECAST;
3670 g_ManageDemand_tab(i).process_status
3671 := rlm_core_sv.k_PS_PROCESSED;
3672 IsLineProcessed := TRUE;
3673 SetOperation(g_ManageDemand_tab(i), k_UPDATE);
3674 --
3675 ELSIF v_MRPFenceDays is NOT NULL THEN --}{
3676 --
3677 IF (g_ManageDemand_tab(i).request_date <
3678 (TRUNC(SYSDATE) + v_MRPFenceDayTo)) THEN --{
3679 --
3680 IF (l_debug <> -1) THEN
3681 rlm_core_sv.dlog(C_DEBUG,
3682 'request_date inside MRP forecast fence');
3683 END IF;
3684 --
3685 g_ManageDemand_tab(i).item_detail_type := k_MRP_FORECAST;
3686 SetOperation(g_ManageDemand_tab(i), k_UPDATE);
3687 --
3688 ELSIF (g_ManageDemand_tab(i).request_date >=
3689 (TRUNC(SYSDATE) + v_MRPFenceDayTo)) THEN --}{
3690 --
3691 IF (l_debug <> -1) THEN
3692 rlm_core_sv.dlog(C_DEBUG,
3693 'request_date outside MRP forecast fence');
3694 END IF;
3695 --
3696 g_ManageDemand_tab(i).process_status
3697 := rlm_core_sv.k_PS_PROCESSED;
3698 --Bug 5208135
3699 IF (g_ManageDemand_tab(i).item_detail_type = k_MRP_FORECAST) THEN
3700 g_ManageDemand_tab(i).item_detail_type := k_MRP_DROP_DEMAND;
3701 END IF;
3702 --
3703 IsLineProcessed := TRUE;
3704 SetOperation(g_ManageDemand_tab(i), k_UPDATE);
3705 --
3706 END IF; --}
3707 --
3708 END IF; /* MRP fence NULL */ --}
3709 --
3710 END IF; /* schedule date check */ --}
3711 --
3712 ELSE --}{
3713 --
3714 /* IF OE forecast fence is NULL */
3715 IF (l_debug <> -1) THEN
3716 rlm_core_sv.dlog(C_DEBUG,'OE Forecast fence NULL' );
3717 END IF;
3718 --
3719 IF v_MRPFenceDays = 0 THEN --{
3720 --
3721 IF (l_debug <> -1) THEN
3722 rlm_core_sv.dlog(C_DEBUG, ' item_detail_type',
3723 g_ManageDemand_tab(i).item_detail_type );
3724 END IF;
3725 --
3726 IF g_ManageDemand_tab(i).item_detail_type = k_MRP_FORECAST THEN --{
3727 --
3728 g_ManageDemand_tab(i).process_status
3729 := rlm_core_sv.k_PS_PROCESSED;
3730 IsLineProcessed := TRUE;
3731 SetOperation(g_ManageDemand_tab(i), k_UPDATE);
3732 --
3733 END IF; --}
3734 --
3735 ELSIF v_MRPFenceDays is NOT NULL THEN --}{
3736 --
3737 IF (l_debug <> -1) THEN
3738 rlm_core_sv.dlog(C_DEBUG,'MRP Forecast fence NOT NULL' );
3739 END IF;
3740 --
3741 IF (g_ManageDemand_tab(i).request_date BETWEEN
3742 (TRUNC(SYSDATE) + v_MRPFenceDayFrom - 1) AND
3743 (TRUNC(SYSDATE) + v_MRPFenceDayTo - 1)) THEN --{
3744 --
3745 IF (l_debug <> -1) THEN
3746 rlm_core_sv.dlog(C_DEBUG,
3747 'request_date inside MRP forecast fence');
3748 END IF;
3749 --
3750 g_ManageDemand_tab(i).item_detail_type := k_MRP_FORECAST;
3751 SetOperation(g_ManageDemand_tab(i), k_UPDATE);
3752 --
3753 ELSIF (g_ManageDemand_tab(i).request_date >=
3754 (TRUNC(SYSDATE) + v_MRPFenceDayTo)) THEN --}{
3755 --
3756 IF (l_debug <> -1) THEN
3757 rlm_core_sv.dlog(C_DEBUG,
3758 'request_date outside MRP forecast fence');
3759 END IF;
3760 --
3761 g_ManageDemand_tab(i).process_status
3762 := rlm_core_sv.k_PS_PROCESSED;
3763 --Bug 5208135
3764 IF (g_ManageDemand_tab(i).item_detail_type = k_MRP_FORECAST) THEN
3765 g_ManageDemand_tab(i).item_detail_type := k_MRP_DROP_DEMAND;
3766 END IF;
3767 --
3768 IsLineProcessed := TRUE;
3769 SetOperation(g_ManageDemand_tab(i), k_UPDATE);
3770 --
3771 END IF; --}
3772 --
3773 END IF; /* v_MRPFence is zero */ --}
3774 --
3775 END IF; /* OE fence NULL */ --}
3776 --
3777 END IF; /* schedule date check */ --}
3778 --
3779 ELSE --}{
3780 --
3781 /* if firmfence is null */
3782 IF (l_debug <> -1) THEN
3783 rlm_core_sv.dlog(C_DEBUG, 'firm fence is null');
3784 END IF;
3785 --
3786 IF v_ForecastFenceDays = 0 THEN --{
3787 --
3788 IF (l_debug <> -1) THEN
3789 rlm_core_sv.dlog(C_DEBUG, ' item_detail_type',
3790 g_ManageDemand_tab(i).item_detail_type );
3791 END IF;
3792 --
3793 IF g_ManageDemand_tab(i).item_detail_type = k_FORECAST_DEMAND OR
3794 g_ManageDemand_tab(i).item_detail_type = k_MRP_FORECAST THEN --{
3795 --
3796 g_ManageDemand_tab(i).process_status:= rlm_core_sv.k_PS_PROCESSED;
3797 IsLineProcessed := TRUE;
3798 SetOperation(g_ManageDemand_tab(i), k_UPDATE);
3799 --
3800 END IF; --}
3801 --
3802 ELSIF v_ForecastFenceDays IS NOT NULL THEN --}{
3803 --
3804 IF (l_debug <> -1) THEN
3805 rlm_core_sv.dlog(C_DEBUG, 'OE forecast fence not null');
3806 END IF;
3807 --
3808 IF (g_ManageDemand_tab(i).request_date <
3809 (TRUNC(SYSDATE) + v_ForecastFenceDayTo))
3810 AND
3811 (g_ManageDemand_tab(i).request_date >=
3812 (TRUNC(SYSDATE) +
3813 v_ForecastFenceDayFrom - 1)) THEN --{
3814 --
3815 IF (l_debug <> -1) THEN
3816 rlm_core_sv.dlog(C_DEBUG,'request_date inside oe forecast fence');
3817 END IF;
3818 --
3819 g_ManageDemand_tab(i).item_detail_type := k_FORECAST_DEMAND;
3820 SetOperation(g_ManageDemand_tab(i), k_UPDATE);
3821 --
3822 ELSIF(g_ManageDemand_tab(i).request_date >=
3823 (TRUNC(SYSDATE) +
3824 v_ForecastFenceDayTo))THEN --}{
3825 --
3826 IF (l_debug <> -1) THEN
3827 rlm_core_sv.dlog(C_DEBUG,'request_date outside oe forecast fence');
3828 END IF;
3829 --
3830 IF v_MRPFenceDays = 0 THEN --{
3831 --
3832 g_ManageDemand_tab(i).item_detail_type := k_MRP_FORECAST;
3833 g_ManageDemand_tab(i).process_status
3834 := rlm_core_sv.k_PS_PROCESSED;
3835 IsLineProcessed := TRUE;
3836 SetOperation(g_ManageDemand_tab(i), k_UPDATE);
3837 --
3838 ELSIF v_MRPFenceDays is NOT NULL THEN --}{
3839 --
3840 IF (g_ManageDemand_tab(i).request_date <
3841 (TRUNC(SYSDATE) + v_MRPFenceDayTo)) THEN --{
3842 --
3843 IF (l_debug <> -1) THEN
3844 rlm_core_sv.dlog(C_DEBUG,
3845 'request_date inside MRP forecast fence');
3846 END IF;
3847 --
3848 g_ManageDemand_tab(i).item_detail_type := k_MRP_FORECAST;
3849 SetOperation(g_ManageDemand_tab(i), k_UPDATE);
3850 --
3851 ELSIF (g_ManageDemand_tab(i).request_date >=
3852 (TRUNC(SYSDATE) + v_MRPFenceDayTo)) THEN --}{
3853 --
3854 IF (l_debug <> -1) THEN
3855 rlm_core_sv.dlog(C_DEBUG,
3856 'request_date outside MRP forecast fence');
3857 END IF;
3858 --
3859 g_ManageDemand_tab(i).process_status
3860 := rlm_core_sv.k_PS_PROCESSED;
3861 --Bug 5208135
3862 IF (g_ManageDemand_tab(i).item_detail_type = k_MRP_FORECAST) THEN
3863 g_ManageDemand_tab(i).item_detail_type := k_MRP_DROP_DEMAND;
3864 END IF;
3865 --
3866 IsLineProcessed := TRUE;
3867 SetOperation(g_ManageDemand_tab(i), k_UPDATE);
3868 --
3869 END IF; --}
3870 --
3871 END IF; /* v_MRPFence is 0 */ --}
3872 END IF; /* request date check */ --}
3873 ELSE --}{
3874 --
3875 /* IF OE forecast fence is NULL */
3876 IF (l_debug <> -1) THEN
3877 rlm_core_sv.dlog(C_DEBUG,'OE Forecast fence NULL' );
3878 END IF;
3879 --
3880 IF v_MRPFenceDays = 0 THEN --{
3881 --
3882 IF (l_debug <> -1) THEN
3883 rlm_core_sv.dlog(C_DEBUG, ' item_detail_type',
3884 g_ManageDemand_tab(i).item_detail_type );
3885 END IF;
3886 --
3887 IF g_ManageDemand_tab(i).item_detail_type = k_MRP_FORECAST THEN --{
3888 --
3889 g_ManageDemand_tab(i).process_status
3890 := rlm_core_sv.k_PS_PROCESSED;
3891 IsLineProcessed := TRUE;
3892 SetOperation(g_ManageDemand_tab(i), k_UPDATE);
3893 --
3894 END IF; --}
3895 --
3896 ELSIF v_MRPFenceDays is NOT NULL THEN --}{
3897 --
3898 IF (l_debug <> -1) THEN
3899 rlm_core_sv.dlog(C_DEBUG,'MRP Forecast fence NOT NULL' );
3900 END IF;
3901 --
3902 IF (g_ManageDemand_tab(i).request_date BETWEEN
3903 (TRUNC(SYSDATE) + v_MRPFenceDayFrom - 1) AND
3904 (TRUNC(SYSDATE) + v_MRPFenceDayTo - 1)) THEN --{
3905 --
3906 IF (l_debug <> -1) THEN
3907 rlm_core_sv.dlog(C_DEBUG,
3908 'request_date inside MRP forecast fence');
3909 END IF;
3910 --
3911 g_ManageDemand_tab(i).item_detail_type := k_MRP_FORECAST;
3912 SetOperation(g_ManageDemand_tab(i), k_UPDATE);
3913 --
3914 ELSIF (g_ManageDemand_tab(i).request_date >=
3915 (TRUNC(SYSDATE) + v_MRPFenceDayTo)) THEN --}{
3916 --
3917 IF (l_debug <> -1) THEN
3918 rlm_core_sv.dlog(C_DEBUG,
3919 'request_date outside MRP forecast fence');
3920 END IF;
3921 --
3922 g_ManageDemand_tab(i).process_status
3923 := rlm_core_sv.k_PS_PROCESSED;
3924 --Bug 5208135
3925 IF (g_ManageDemand_tab(i).item_detail_type = k_MRP_FORECAST) THEN
3926 g_ManageDemand_tab(i).item_detail_type := k_MRP_DROP_DEMAND;
3927 END IF;
3928 --
3929 IsLineProcessed := TRUE;
3930 SetOperation(g_ManageDemand_tab(i), k_UPDATE);
3931 --
3932 END IF; --}
3933 --
3934 END IF; /* v_MRPFence is zero */ --}
3935 --
3936 END IF; /* OE ForecastFence NULL */ --}
3937 --
3938 END IF; /* Firm Fence is NULL */ --}
3939 --
3940 IF v_FrozenFenceDays IS NOT NULL
3941 AND g_ManageDemand_tab(i).request_date < (TRUNC(SYSDATE) + v_FrozenFenceDays)
3942 AND g_ManageDemand_tab(i).item_detail_type <> k_FORECAST_DEMAND
3943 AND g_ManageDemand_tab(i).item_detail_type <> k_MRP_FORECAST
3944 AND nvl(v_FirmFenceDays,-99) <> 0 --bug 3562125
3945 THEN --{
3946 --
3947 g_ManageDemand_tab(i).process_status := rlm_core_sv.k_PS_FROZEN_FIRM;
3948 SetOperation(g_ManageDemand_tab(i), k_UPDATE);
3949 --
3950 END IF; --}
3951 --
3952 IF (l_debug <> -1) THEN
3953 rlm_core_sv.dlog(C_DEBUG,'g_ManageDemand_tab(' || i || ').item_detail_type',
3954 g_ManageDemand_tab(i).item_detail_type);
3955 rlm_core_sv.dlog(C_DEBUG,'g_ManageDemand_tab(' || i || ').process_status',
3956 g_ManageDemand_tab(i).process_status);
3957 END IF;
3958 --
3959 END LOOP; --}
3960 --
3961 END IF; --}
3962 --
3963 END IF; --}
3964 --
3965 IF IsLineProcessed THEN
3966 IF (l_debug <> -1) THEN
3967 rlm_core_sv.dlog('Some of the lines are in fully processed state');
3968 END IF;
3969 END IF;
3970 --
3971 IF (l_debug <> -1) THEN
3972 rlm_core_sv.dpop(C_SDEBUG);
3973 END IF;
3974 --
3975 EXCEPTION
3976 --
3977 WHEN NO_DATA_FOUND THEN
3978 --
3979 IF (l_debug <> -1) THEN
3980 rlm_core_sv.dlog(C_DEBUG,'EXCEPTION: NO_DATA_FOUND');
3981 rlm_core_sv.dlog('rlm_manage_demand_sv.ApplyFFFFences', v_Progress);
3982 rlm_core_sv.dpop(C_SDEBUG);
3983 END IF;
3984 --
3985 WHEN OTHERS THEN
3986 --
3987 rlm_message_sv.sql_error('rlm_manage_demand_sv.ApplyFFFFences', v_Progress);
3988 --
3989 IF (l_debug <> -1) THEN
3990 rlm_core_sv.dlog(C_DEBUG,'progress',v_Progress);
3991 rlm_core_sv.dpop(C_SDEBUG,'EXCEPTION: '||SUBSTR(SQLERRM,1,200));
3992 END IF;
3993 --
3994 raise;
3995
3996 END ApplyFFFFences;
3997
3998 /*===========================================================================
3999
4000 PROCEDURE NAME: ProcessTable
4001
4002 ===========================================================================*/
4003
4004 PROCEDURE ProcessTable(x_Demand_tab IN t_MD_Tab)
4005 IS
4006
4007 i NUMBER;
4008 v_Progress VARCHAR2(3) := '010';
4009
4010 BEGIN
4011 --
4012 IF (l_debug <> -1) THEN
4013 rlm_core_sv.dpush(C_SDEBUG,'ProcessTable');
4014 rlm_core_sv.dlog(C_DEBUG,'x_Demand_tab.COUNT',x_Demand_tab.COUNT);
4015 END IF;
4016 --
4017 FOR i IN 1..x_Demand_tab.COUNT LOOP
4018 --
4019 IF (l_debug <> -1) THEN
4020 rlm_core_sv.dlog(C_DEBUG, 'x_Demand_tab('||i||').line_id', x_Demand_tab(i).line_id);
4021 rlm_core_sv.dlog(C_DEBUG, 'x_Demand_tab('||i||').primary_quantity', x_Demand_tab(i).primary_quantity);
4022 rlm_core_sv.dlog(C_DEBUG, 'x_Demand_tab('||i||').customer_item_id', x_Demand_tab(i).customer_item_id);
4023 rlm_core_sv.dlog(C_DEBUG, 'x_Demand_tab('||i||').item_detail_type', x_Demand_tab(i).item_detail_type);
4024 rlm_core_sv.dlog(C_DEBUG, 'x_Demand_tab('||i||').industry_attribute15', x_Demand_tab(i).industry_attribute15);
4025 rlm_core_sv.dlog(C_DEBUG, 'x_Demand_tab('||i||').header_id', x_Demand_tab(i).header_id);
4026 rlm_core_sv.dlog(C_DEBUG, 'x_Demand_tab('||i||').request_date', x_Demand_tab(i).request_date);
4027 rlm_core_sv.dlog(C_DEBUG, 'x_Demand_tab('||i||').program_id', x_Demand_tab(i).program_id);
4028 rlm_core_sv.dlog(C_DEBUG, 'x_Demand_tab('||i||').process_status', x_Demand_tab(i).process_status);
4029 rlm_core_sv.dlog(C_DEBUG, 'x_Demand_tab('||i||').ship_from_org_id',
4030 x_Demand_tab(i).ship_from_org_id);
4031 rlm_core_sv.dlog(C_DEBUG, 'x_Demand_tab('||i||').ship_to_customer_id', x_Demand_tab(i).ship_to_customer_id);
4032 END IF;
4033 --
4034 IF x_Demand_tab(i).program_id = k_DELETE THEN
4035 DeleteReq(x_Demand_tab(i));
4036 ELSIF x_Demand_tab(i).program_id = k_UPDATE THEN
4037 UpdateReq(x_Demand_tab(i));
4038 ELSIF x_Demand_tab(i).program_id = k_INSERT THEN
4039 InsertReq(x_Demand_tab(i));
4040 END IF;
4041 END LOOP;
4042 --
4043 IF (l_debug <> -1) THEN
4044 rlm_core_sv.dpop(C_SDEBUG);
4045 END IF;
4046 --
4047 EXCEPTION
4048
4049 WHEN OTHERS THEN
4050 rlm_message_sv.sql_error('rlm_manage_demand_sv.ProcessTable',
4051 v_Progress);
4052 --
4053 IF (l_debug <> -1) THEN
4054 rlm_core_sv.dlog(C_DEBUG,'progress',v_Progress);
4055 rlm_core_sv.dpop(C_SDEBUG,'EXCEPTION: '||SUBSTR(SQLERRM,1,200));
4056 END IF;
4057 --
4058 raise;
4059
4060 END ProcessTable;
4061
4062
4063 /*===========================================================================
4064
4065 PROCEDURE NAME: DeleteReq
4066
4067 ===========================================================================*/
4068
4069 PROCEDURE DeleteReq(x_ManageDemand_rec IN rlm_interface_lines%ROWTYPE)
4070 IS
4071
4072 i NUMBER;
4073 v_Progress VARCHAR2(3) := '010';
4074
4075 BEGIN
4076 --
4077 IF (l_debug <> -1) THEN
4078 rlm_core_sv.dpush(C_SDEBUG,'DeleteReq');
4079 rlm_core_sv.dlog(C_DEBUG,'x_ManageDemand_rec.line_id',x_ManageDemand_rec.line_id);
4080 END IF;
4081 --
4082 DELETE rlm_interface_lines
4083 WHERE line_id = x_ManageDemand_rec.line_id;
4084 --
4085 -- JAUTOMO: The interface_line_id should be updated with the
4086 -- the line id of new lines created by SDP, Sourcing Rules,
4087 -- or Aggregate Demand.
4088 --
4089 --UPDATE rlm_schedule_lines
4090 --SET interface_line_id = NULL
4091 --WHERE line_id = x_ManageDemand_rec.schedule_line_id;
4092 --
4093 IF (l_debug <> -1) THEN
4094 rlm_core_sv.dpop(C_SDEBUG);
4095 END IF;
4096
4097 EXCEPTION
4098
4099 WHEN OTHERS THEN
4100 rlm_message_sv.sql_error('rlm_manage_demand_sv.DeleteReq',
4101 v_Progress);
4102 --
4103 IF (l_debug <> -1) THEN
4104 rlm_core_sv.dlog(C_DEBUG,'progress',v_Progress);
4105 rlm_core_sv.dpop(C_SDEBUG,'EXCEPTION: '||SUBSTR(SQLERRM,1,200));
4106 END IF;
4107 --
4108 raise;
4109
4110 END DeleteReq;
4111
4112
4113 /*===========================================================================
4114
4115 PROCEDURE NAME: InsertReq
4116
4117 ===========================================================================*/
4118
4119 PROCEDURE InsertReq(x_ManageDemand_rec IN rlm_interface_lines%ROWTYPE)
4120 IS
4121 --
4122 v_Progress VARCHAR2(3) := '010';
4123 e_NullOrgId EXCEPTION;
4124 --
4125 BEGIN
4126 --
4127 IF (l_debug <> -1) THEN
4128 rlm_core_sv.dpush(C_SDEBUG,'InsertReq');
4129 rlm_core_sv.dlog(C_DEBUG,'Changed lines to be inserted into table');
4130 rlm_core_sv.dlog(C_DEBUG,'x_ManageDemand_rec.primary_quantity',
4131 x_ManageDemand_rec.primary_quantity);
4132 rlm_core_sv.dlog(C_DEBUG,'x_ManageDemand_rec.ship_from_org_id',
4133 x_ManageDemand_rec.ship_from_org_id);
4134 rlm_core_sv.dlog(C_DEBUG,'x_ManageDemand_rec.item_detail_type',
4135 x_ManageDemand_rec.item_detail_type);
4136 rlm_core_sv.dlog(C_DEBUG,'x_ManageDemand_rec.item_detail_subtype',
4137 x_ManageDemand_rec.item_detail_subtype);
4138 rlm_core_sv.dlog(C_DEBUG,'x_ManageDemand_rec.line_source',
4139 x_ManageDemand_rec.line_source);
4140 rlm_core_sv.dlog(C_DEBUG,'x_ManageDemand_rec.qty_type_code',
4141 x_ManageDemand_rec.qty_type_code);
4142 rlm_core_sv.dlog(C_DEBUG,'x_ManageDemand_rec.org_id',
4143 x_ManageDemand_rec.org_id);
4144 END IF;
4145 --
4146 IF x_ManageDemand_rec.org_id IS NULL THEN
4147 RAISE e_NullOrgId;
4148 END IF;
4149 --
4150 INSERT INTO rlm_interface_lines_all(
4151 line_id,
4152 header_id,
4153 schedule_item_num,
4154 agreement_id,
4155 ato_data_type,
4156 bill_to_address_1_ext,
4157 bill_to_address_2_ext,
4158 bill_to_address_3_ext,
4159 bill_to_address_4_ext,
4160 bill_to_address_id,
4161 bill_to_city_ext,
4162 bill_to_country_ext,
4163 bill_to_county_ext,
4164 bill_to_name_ext,
4165 bill_to_postal_cd_ext,
4166 bill_to_province_ext,
4167 bill_to_site_use_id,
4168 invoice_to_org_id,
4169 bill_to_state_ext,
4170 carrier_id_code_ext,
4171 carrier_qualifier_ext,
4172 commodity_ext,
4173 country_of_origin_ext,
4174 cust_assembly_ext,
4175 cust_assigned_id_ext,
4176 cust_bill_to_ext,
4177 cust_contract_num_ext,
4178 customer_dock_code,
4179 cust_intrmd_ship_to_ext,
4180 cust_item_price_ext,
4181 cust_item_price_uom_ext,
4182 customer_item_revision,
4183 customer_job,
4184 cust_manufacturer_ext,
4185 cust_model_number_ext,
4186 cust_model_serial_number,
4187 cust_order_num_ext,
4188 cust_process_num_ext,
4189 cust_production_line,
4190 -- cust_record_year, -- Removed from table
4191 cust_set_num_ext,
4192 cust_ship_from_org_ext,
4193 cust_ship_to_ext,
4194 cust_uom_ext,
4195 customer_item_ext,
4196 customer_item_id,
4197 REQUEST_DATE,
4198 SCHEDULE_DATE,
4199 date_type_code,
4200 date_type_code_ext,
4201 delivery_lead_time,
4202 end_date_time,
4203 equipment_code_ext,
4204 equipment_number_ext,
4205 handling_code_ext,
4206 hazard_code_ext,
4207 hazard_code_qual_ext,
4208 hazard_description_ext,
4209 import_license_date_ext,
4210 import_license_ext,
4211 industry_attribute1,
4212 industry_attribute10,
4213 industry_attribute11,
4214 industry_attribute12,
4215 industry_attribute13,
4216 industry_attribute14,
4217 industry_attribute15,
4218 industry_attribute2,
4219 industry_attribute3,
4220 industry_attribute4,
4221 industry_attribute5,
4222 industry_attribute6,
4223 industry_attribute7,
4224 industry_attribute8,
4225 industry_attribute9,
4226 industry_context,
4227 intrmd_ship_to_id,
4228 intrmd_st_address_1_ext,
4229 intrmd_st_address_2_ext,
4230 intrmd_st_address_3_ext,
4231 intrmd_st_address_4_ext,
4232 intrmd_st_city_ext,
4233 intrmd_st_country_ext,
4234 intrmd_st_county_ext,
4235 intrmd_st_name_ext,
4236 intrmd_st_postal_cd_ext,
4237 intrmd_st_province_ext,
4238 intrmd_st_state_ext,
4239 intmed_ship_to_org_id,
4240 inventory_item_id,
4241 inventory_item_segment1,
4242 inventory_item_segment10,
4243 inventory_item_segment11,
4244 inventory_item_segment12,
4245 inventory_item_segment13,
4246 inventory_item_segment14,
4247 inventory_item_segment15,
4248 inventory_item_segment16,
4249 inventory_item_segment17,
4250 inventory_item_segment18,
4251 inventory_item_segment19,
4252 inventory_item_segment2,
4253 inventory_item_segment20,
4254 inventory_item_segment3,
4255 inventory_item_segment4,
4256 inventory_item_segment5,
4257 inventory_item_segment6,
4258 inventory_item_segment7,
4259 inventory_item_segment8,
4260 inventory_item_segment9,
4261 item_contact_code_1,
4262 item_contact_code_2,
4263 item_contact_value_1,
4264 item_contact_value_2,
4265 item_description_ext,
4266 item_detail_quantity,
4267 item_detail_ref_code_1,
4268 item_detail_ref_code_2,
4269 item_detail_ref_code_3,
4270 item_detail_ref_value_1,
4271 item_detail_ref_value_2,
4272 item_detail_ref_value_3,
4273 item_detail_subtype,
4274 item_detail_subtype_ext,
4275 item_detail_type,
4276 item_detail_type_ext,
4277 item_eng_cng_lvl_ext,
4278 item_measurements_ext,
4279 item_note_text,
4280 item_ref_code_1,
4281 item_ref_code_2,
4282 item_ref_code_3,
4283 item_ref_value_1,
4284 item_ref_value_2,
4285 item_ref_value_3,
4286 item_release_status_ext,
4287 lading_quantity_ext,
4288 letter_credit_expdt_ext,
4289 letter_credit_ext,
4290 line_reference,
4291 link_to_line_ref,
4292 order_header_id,
4293 other_name_code_1,
4294 other_name_code_2,
4295 other_name_value_1,
4296 other_name_value_2,
4297 pack_size_ext,
4298 pack_units_per_pack_ext,
4299 pack_uom_code_ext,
4300 packaging_code_ext,
4301 parent_link_line_ref,
4302 cust_production_seq_num,
4303 price_list_id,
4304 primary_quantity,
4305 primary_uom_code,
4306 prime_contrctr_part_ext,
4307 process_status,
4308 cust_po_release_num,
4309 cust_po_date,
4310 cust_po_line_num,
4311 cust_po_number,
4312 qty_type_code,
4313 qty_type_code_ext,
4314 return_container_ext,
4315 schedule_line_id,
4316 routing_desc_ext,
4317 routing_seq_code_ext,
4318 ship_del_pattern_ext,
4319 ship_del_time_code_ext,
4320 ship_del_rule_name,
4321 ship_from_address_1_ext,
4322 ship_from_address_2_ext,
4323 ship_from_address_3_ext,
4324 ship_from_address_4_ext,
4325 ship_from_city_ext,
4326 ship_from_country_ext,
4327 ship_from_county_ext,
4328 ship_from_name_ext,
4329 ship_from_org_id,
4330 ship_from_postal_cd_ext,
4331 ship_from_province_ext,
4332 ship_from_state_ext,
4333 ship_label_info_line_1,
4334 ship_label_info_line_10,
4335 ship_label_info_line_2,
4336 ship_label_info_line_3,
4337 ship_label_info_line_4,
4338 ship_label_info_line_5,
4339 ship_label_info_line_6,
4340 ship_label_info_line_7,
4341 ship_label_info_line_8,
4342 ship_label_info_line_9,
4343 ship_to_address_1_ext,
4344 ship_to_address_2_ext,
4345 ship_to_address_3_ext,
4346 ship_to_address_4_ext,
4347 ship_to_address_id,
4348 ship_to_city_ext,
4349 ship_to_country_ext,
4350 ship_to_county_ext,
4351 ship_to_name_ext,
4352 ship_to_postal_cd_ext,
4353 ship_to_province_ext,
4354 ship_to_site_use_id,
4355 deliver_to_org_id,
4356 ship_to_org_id,
4357 ship_to_state_ext,
4358 start_date_time,
4359 subline_assigned_id_ext,
4360 subline_config_code_ext,
4361 subline_cust_item_ext,
4362 subline_cust_item_id,
4363 subline_model_num_ext,
4364 subline_quantity,
4365 subline_uom_code,
4366 supplier_item_ext,
4367 transit_time_ext,
4368 transit_time_qual_ext,
4369 transport_loc_qual_ext,
4370 transport_location_ext,
4371 transport_method_ext,
4372 uom_code,
4373 weight_ext,
4374 weight_qualifier_ext,
4375 weight_uom_ext,
4376 last_update_date,
4377 last_updated_by,
4378 creation_date,
4379 created_by,
4380 attribute_category,
4381 attribute1,
4382 attribute2,
4383 attribute3,
4384 attribute4,
4385 attribute5,
4386 attribute6,
4387 attribute7,
4388 attribute8,
4389 attribute9,
4390 attribute10,
4391 attribute11,
4392 attribute12,
4393 attribute13,
4394 attribute14,
4395 attribute15,
4396 last_update_login,
4397 request_id,
4398 program_application_id,
4399 program_id,
4400 line_source,
4401 program_update_date,
4402 tp_attribute1, --bug 2056845
4403 tp_attribute2,
4404 tp_attribute3,
4405 tp_attribute4,
4406 tp_attribute5,
4407 tp_attribute6,
4408 tp_attribute7,
4409 tp_attribute8,
4410 tp_attribute9,
4411 tp_attribute10,
4412 tp_attribute11,
4413 tp_attribute12,
4414 tp_attribute13,
4415 tp_attribute14,
4416 tp_attribute15,
4417 tp_attribute_category,
4418 blanket_number,
4419 dsp_child_process_index,
4420 org_id,
4421 ship_to_customer_id
4422 )
4423 VALUES(
4424 x_ManageDemand_rec.line_id,
4425 x_ManageDemand_rec.header_id,
4426 x_ManageDemand_rec.schedule_item_num,
4427 x_ManageDemand_rec.agreement_id,
4428 x_ManageDemand_rec.ato_data_type,
4429 x_ManageDemand_rec.bill_to_address_1_ext,
4430 x_ManageDemand_rec.bill_to_address_2_ext,
4431 x_ManageDemand_rec.bill_to_address_3_ext,
4432 x_ManageDemand_rec.bill_to_address_4_ext,
4433 x_ManageDemand_rec.bill_to_address_id,
4434 x_ManageDemand_rec.bill_to_city_ext,
4435 x_ManageDemand_rec.bill_to_country_ext,
4436 x_ManageDemand_rec.bill_to_county_ext,
4437 x_ManageDemand_rec.bill_to_name_ext,
4438 x_ManageDemand_rec.bill_to_postal_cd_ext,
4439 x_ManageDemand_rec.bill_to_province_ext,
4440 x_ManageDemand_rec.bill_to_site_use_id,
4441 x_ManageDemand_rec.invoice_to_org_id,
4442 x_ManageDemand_rec.bill_to_state_ext,
4443 x_ManageDemand_rec.carrier_id_code_ext,
4444 x_ManageDemand_rec.carrier_qualifier_ext,
4445 x_ManageDemand_rec.commodity_ext,
4446 x_ManageDemand_rec.country_of_origin_ext,
4447 x_ManageDemand_rec.cust_assembly_ext,
4448 x_ManageDemand_rec.cust_assigned_id_ext,
4449 x_ManageDemand_rec.cust_bill_to_ext,
4450 x_ManageDemand_rec.cust_contract_num_ext,
4451 x_ManageDemand_rec.customer_dock_code,
4452 x_ManageDemand_rec.cust_intrmd_ship_to_ext,
4453 x_ManageDemand_rec.cust_item_price_ext,
4454 x_ManageDemand_rec.cust_item_price_uom_ext,
4455 x_ManageDemand_rec.customer_item_revision,
4456 x_ManageDemand_rec.customer_job,
4457 x_ManageDemand_rec.cust_manufacturer_ext,
4458 x_ManageDemand_rec.cust_model_number_ext,
4459 x_ManageDemand_rec.cust_model_serial_number,
4460 x_ManageDemand_rec.cust_order_num_ext,
4461 x_ManageDemand_rec.cust_process_num_ext,
4462 x_ManageDemand_rec.cust_production_line,
4463 x_ManageDemand_rec.cust_set_num_ext,
4464 x_ManageDemand_rec.cust_ship_from_org_ext,
4465 x_ManageDemand_rec.cust_ship_to_ext,
4466 x_ManageDemand_rec.cust_uom_ext,
4467 x_ManageDemand_rec.customer_item_ext,
4468 x_ManageDemand_rec.customer_item_id,
4469 x_ManageDemand_rec.REQUEST_DATE,
4470 x_ManageDemand_rec.SCHEDULE_DATE,
4471 x_ManageDemand_rec.date_type_code,
4472 x_ManageDemand_rec.date_type_code_ext,
4473 x_ManageDemand_rec.delivery_lead_time,
4474 x_ManageDemand_rec.end_date_time,
4475 x_ManageDemand_rec.equipment_code_ext,
4476 x_ManageDemand_rec.equipment_number_ext,
4477 x_ManageDemand_rec.handling_code_ext,
4478 x_ManageDemand_rec.hazard_code_ext,
4479 x_ManageDemand_rec.hazard_code_qual_ext,
4480 x_ManageDemand_rec.hazard_description_ext,
4481 x_ManageDemand_rec.import_license_date_ext,
4482 x_ManageDemand_rec.import_license_ext,
4483 x_ManageDemand_rec.industry_attribute1,
4484 x_ManageDemand_rec.industry_attribute10,
4485 x_ManageDemand_rec.industry_attribute11,
4486 x_ManageDemand_rec.industry_attribute12,
4487 x_ManageDemand_rec.industry_attribute13,
4488 x_ManageDemand_rec.industry_attribute14,
4489 x_ManageDemand_rec.industry_attribute15,
4490 x_ManageDemand_rec.industry_attribute2,
4491 x_ManageDemand_rec.industry_attribute3,
4492 x_ManageDemand_rec.industry_attribute4,
4493 x_ManageDemand_rec.industry_attribute5,
4494 x_ManageDemand_rec.industry_attribute6,
4495 x_ManageDemand_rec.industry_attribute7,
4496 x_ManageDemand_rec.industry_attribute8,
4497 x_ManageDemand_rec.industry_attribute9,
4498 x_ManageDemand_rec.industry_context,
4499 x_ManageDemand_rec.intrmd_ship_to_id,
4500 x_ManageDemand_rec.intrmd_st_address_1_ext,
4501 x_ManageDemand_rec.intrmd_st_address_2_ext,
4502 x_ManageDemand_rec.intrmd_st_address_3_ext,
4503 x_ManageDemand_rec.intrmd_st_address_4_ext,
4504 x_ManageDemand_rec.intrmd_st_city_ext,
4505 x_ManageDemand_rec.intrmd_st_country_ext,
4506 x_ManageDemand_rec.intrmd_st_county_ext,
4507 x_ManageDemand_rec.intrmd_st_name_ext,
4508 x_ManageDemand_rec.intrmd_st_postal_cd_ext,
4509 x_ManageDemand_rec.intrmd_st_province_ext,
4510 x_ManageDemand_rec.intrmd_st_state_ext,
4511 x_ManageDemand_rec.intmed_ship_to_org_id,
4512 x_ManageDemand_rec.inventory_item_id,
4513 x_ManageDemand_rec.inventory_item_segment1,
4514 x_ManageDemand_rec.inventory_item_segment10,
4515 x_ManageDemand_rec.inventory_item_segment11,
4516 x_ManageDemand_rec.inventory_item_segment12,
4517 x_ManageDemand_rec.inventory_item_segment13,
4518 x_ManageDemand_rec.inventory_item_segment14,
4519 x_ManageDemand_rec.inventory_item_segment15,
4520 x_ManageDemand_rec.inventory_item_segment16,
4521 x_ManageDemand_rec.inventory_item_segment17,
4522 x_ManageDemand_rec.inventory_item_segment18,
4523 x_ManageDemand_rec.inventory_item_segment19,
4524 x_ManageDemand_rec.inventory_item_segment2,
4525 x_ManageDemand_rec.inventory_item_segment20,
4526 x_ManageDemand_rec.inventory_item_segment3,
4527 x_ManageDemand_rec.inventory_item_segment4,
4528 x_ManageDemand_rec.inventory_item_segment5,
4529 x_ManageDemand_rec.inventory_item_segment6,
4530 x_ManageDemand_rec.inventory_item_segment7,
4531 x_ManageDemand_rec.inventory_item_segment8,
4532 x_ManageDemand_rec.inventory_item_segment9,
4533 x_ManageDemand_rec.item_contact_code_1,
4534 x_ManageDemand_rec.item_contact_code_2,
4535 x_ManageDemand_rec.item_contact_value_1,
4536 x_ManageDemand_rec.item_contact_value_2,
4537 x_ManageDemand_rec.item_description_ext,
4538 x_ManageDemand_rec.item_detail_quantity,
4539 x_ManageDemand_rec.item_detail_ref_code_1,
4540 x_ManageDemand_rec.item_detail_ref_code_2,
4541 x_ManageDemand_rec.item_detail_ref_code_3,
4542 x_ManageDemand_rec.item_detail_ref_value_1,
4543 x_ManageDemand_rec.item_detail_ref_value_2,
4544 x_ManageDemand_rec.item_detail_ref_value_3,
4545 x_ManageDemand_rec.item_detail_subtype,
4546 x_ManageDemand_rec.item_detail_subtype_ext,
4547 x_ManageDemand_rec.item_detail_type,
4548 x_ManageDemand_rec.item_detail_type_ext,
4549 x_ManageDemand_rec.item_eng_cng_lvl_ext,
4550 x_ManageDemand_rec.item_measurements_ext,
4551 x_ManageDemand_rec.item_note_text,
4552 x_ManageDemand_rec.item_ref_code_1,
4553 x_ManageDemand_rec.item_ref_code_2,
4554 x_ManageDemand_rec.item_ref_code_3,
4555 x_ManageDemand_rec.item_ref_value_1,
4556 x_ManageDemand_rec.item_ref_value_2,
4557 x_ManageDemand_rec.item_ref_value_3,
4558 x_ManageDemand_rec.item_release_status_ext,
4559 x_ManageDemand_rec.lading_quantity_ext,
4560 x_ManageDemand_rec.letter_credit_expdt_ext,
4561 x_ManageDemand_rec.letter_credit_ext,
4562 x_ManageDemand_rec.line_reference,
4563 x_ManageDemand_rec.link_to_line_ref,
4564 x_ManageDemand_rec.order_header_id,
4565 x_ManageDemand_rec.other_name_code_1,
4566 x_ManageDemand_rec.other_name_code_2,
4567 x_ManageDemand_rec.other_name_value_1,
4568 x_ManageDemand_rec.other_name_value_2,
4569 x_ManageDemand_rec.pack_size_ext,
4570 x_ManageDemand_rec.pack_units_per_pack_ext,
4571 x_ManageDemand_rec.pack_uom_code_ext,
4572 x_ManageDemand_rec.packaging_code_ext,
4573 x_ManageDemand_rec.parent_link_line_ref,
4574 x_ManageDemand_rec.cust_production_seq_num,
4575 x_ManageDemand_rec.price_list_id,
4576 x_ManageDemand_rec.primary_quantity,
4577 x_ManageDemand_rec.primary_uom_code,
4578 x_ManageDemand_rec.prime_contrctr_part_ext,
4579 x_ManageDemand_rec.process_status,
4580 x_ManageDemand_rec.cust_po_release_num,
4581 x_ManageDemand_rec.cust_po_date,
4582 x_ManageDemand_rec.cust_po_line_num,
4583 x_ManageDemand_rec.cust_po_number,
4584 x_ManageDemand_rec.qty_type_code,
4585 x_ManageDemand_rec.qty_type_code_ext,
4586 x_ManageDemand_rec.return_container_ext,
4587 x_ManageDemand_rec.schedule_line_id,
4588 x_ManageDemand_rec.routing_desc_ext,
4589 x_ManageDemand_rec.routing_seq_code_ext,
4590 x_ManageDemand_rec.ship_del_pattern_ext,
4591 x_ManageDemand_rec.ship_del_time_code_ext,
4592 x_ManageDemand_rec.ship_del_rule_name,
4593 x_ManageDemand_rec.ship_from_address_1_ext,
4594 x_ManageDemand_rec.ship_from_address_2_ext,
4595 x_ManageDemand_rec.ship_from_address_3_ext,
4596 x_ManageDemand_rec.ship_from_address_4_ext,
4597 x_ManageDemand_rec.ship_from_city_ext,
4598 x_ManageDemand_rec.ship_from_country_ext,
4599 x_ManageDemand_rec.ship_from_county_ext,
4600 x_ManageDemand_rec.ship_from_name_ext,
4601 x_ManageDemand_rec.ship_from_org_id,
4602 x_ManageDemand_rec.ship_from_postal_cd_ext,
4603 x_ManageDemand_rec.ship_from_province_ext,
4604 x_ManageDemand_rec.ship_from_state_ext,
4605 x_ManageDemand_rec.ship_label_info_line_1,
4606 x_ManageDemand_rec.ship_label_info_line_10,
4607 x_ManageDemand_rec.ship_label_info_line_2,
4608 x_ManageDemand_rec.ship_label_info_line_3,
4609 x_ManageDemand_rec.ship_label_info_line_4,
4610 x_ManageDemand_rec.ship_label_info_line_5,
4611 x_ManageDemand_rec.ship_label_info_line_6,
4612 x_ManageDemand_rec.ship_label_info_line_7,
4613 x_ManageDemand_rec.ship_label_info_line_8,
4614 x_ManageDemand_rec.ship_label_info_line_9,
4615 x_ManageDemand_rec.ship_to_address_1_ext,
4616 x_ManageDemand_rec.ship_to_address_2_ext,
4617 x_ManageDemand_rec.ship_to_address_3_ext,
4618 x_ManageDemand_rec.ship_to_address_4_ext,
4619 x_ManageDemand_rec.ship_to_address_id,
4620 x_ManageDemand_rec.ship_to_city_ext,
4621 x_ManageDemand_rec.ship_to_country_ext,
4622 x_ManageDemand_rec.ship_to_county_ext,
4623 x_ManageDemand_rec.ship_to_name_ext,
4624 x_ManageDemand_rec.ship_to_postal_cd_ext,
4625 x_ManageDemand_rec.ship_to_province_ext,
4626 x_ManageDemand_rec.ship_to_site_use_id,
4627 x_ManageDemand_rec.deliver_to_org_id,
4628 x_ManageDemand_rec.ship_to_org_id,
4629 x_ManageDemand_rec.ship_to_state_ext,
4630 x_ManageDemand_rec.start_date_time,
4631 x_ManageDemand_rec.subline_assigned_id_ext,
4632 x_ManageDemand_rec.subline_config_code_ext,
4633 x_ManageDemand_rec.subline_cust_item_ext,
4634 x_ManageDemand_rec.subline_cust_item_id,
4635 x_ManageDemand_rec.subline_model_num_ext,
4636 x_ManageDemand_rec.subline_quantity,
4637 x_ManageDemand_rec.subline_uom_code,
4638 x_ManageDemand_rec.supplier_item_ext,
4639 x_ManageDemand_rec.transit_time_ext,
4640 x_ManageDemand_rec.transit_time_qual_ext,
4641 x_ManageDemand_rec.transport_loc_qual_ext,
4642 x_ManageDemand_rec.transport_location_ext,
4643 x_ManageDemand_rec.transport_method_ext,
4644 x_ManageDemand_rec.uom_code,
4645 x_ManageDemand_rec.weight_ext,
4646 x_ManageDemand_rec.weight_qualifier_ext,
4647 x_ManageDemand_rec.weight_uom_ext,
4648 x_ManageDemand_rec.last_update_date,
4649 x_ManageDemand_rec.last_updated_by,
4650 sysdate, /* creation_date */
4651 x_ManageDemand_rec.created_by, /* created_by */
4652 x_ManageDemand_rec.attribute_category,
4653 x_ManageDemand_rec.attribute1,
4654 x_ManageDemand_rec.attribute2,
4655 x_ManageDemand_rec.attribute3,
4656 x_ManageDemand_rec.attribute4,
4657 x_ManageDemand_rec.attribute5,
4658 x_ManageDemand_rec.attribute6,
4659 x_ManageDemand_rec.attribute7,
4660 x_ManageDemand_rec.attribute8,
4661 x_ManageDemand_rec.attribute9,
4662 x_ManageDemand_rec.attribute10,
4663 x_ManageDemand_rec.attribute11,
4664 x_ManageDemand_rec.attribute12,
4665 x_ManageDemand_rec.attribute13,
4666 x_ManageDemand_rec.attribute14,
4667 x_ManageDemand_rec.attribute15,
4668 x_ManageDemand_rec.last_update_login,
4669 x_ManageDemand_rec.request_id,
4670 x_ManageDemand_rec.program_application_id,
4671 x_ManageDemand_rec.program_id,
4672 x_ManageDemand_rec.line_source,
4673 sysdate, /* program_update_date */
4674 x_ManageDemand_rec. tp_attribute1, --bug 2056845
4675 x_ManageDemand_rec.tp_attribute2,
4676 x_ManageDemand_rec.tp_attribute3,
4677 x_ManageDemand_rec.tp_attribute4,
4678 x_ManageDemand_rec.tp_attribute5,
4679 x_ManageDemand_rec.tp_attribute6,
4680 x_ManageDemand_rec.tp_attribute7,
4681 x_ManageDemand_rec.tp_attribute8,
4682 x_ManageDemand_rec.tp_attribute9,
4683 x_ManageDemand_rec.tp_attribute10,
4684 x_ManageDemand_rec.tp_attribute11,
4685 x_ManageDemand_rec.tp_attribute12,
4686 x_ManageDemand_rec.tp_attribute13,
4687 x_ManageDemand_rec.tp_attribute14,
4688 x_ManageDemand_rec.tp_attribute15,
4689 x_ManageDemand_rec.tp_attribute_category,
4690 x_ManageDemand_rec.blanket_number,
4691 x_ManageDemand_rec.dsp_child_process_index,
4692 x_ManageDemand_rec.org_id,
4693 x_ManageDemand_rec.ship_to_customer_id
4694 );
4695 --
4696 -- JAUTOMO: update schedule lines with the interface line id
4697 -- created when sourcing rule is applied
4698 --
4699 UPDATE rlm_schedule_lines_all
4700 SET interface_line_id = x_ManageDemand_rec.line_id
4701 WHERE line_id = x_ManageDemand_rec.schedule_line_id
4702 AND x_ManageDemand_rec.line_source = 'SOURCED';
4703 --
4704 IF (l_debug <> -1) THEN
4705 rlm_core_sv.dlog(C_DEBUG,'interface_line_id', x_ManageDemand_rec.line_id);
4706 rlm_core_sv.dlog(C_DEBUG,'schedule_line_id', x_ManageDemand_rec.schedule_line_id);
4707 rlm_core_sv.dlog(C_DEBUG,'# of schedule lines updated', SQL%ROWCOUNT);
4708 END IF;
4709 --
4710 IF (l_debug <> -1) THEN
4711 rlm_core_sv.dpop(C_SDEBUG);
4712 END IF;
4713 --
4714 EXCEPTION
4715 --
4716 WHEN e_NullOrgId THEN
4717 --
4718 rlm_message_sv.app_error(
4719 x_ExceptionLevel => rlm_message_sv.k_error_level,
4720 x_MessageName => 'RLM_OU_CONTEXT_NOT_SET',
4721 x_InterfaceHeaderId => x_ManageDemand_rec.header_id,
4722 x_InterfaceLineId => x_ManageDemand_rec.line_id);
4723 --
4724 IF (l_debug <> -1) THEN
4725 rlm_core_sv.dlog(C_DEBUG, 'Null Org ID detected during Insert');
4726 rlm_core_sv.dpop(C_SDEBUG);
4727 END IF;
4728 --
4729 RAISE;
4730 --
4731 WHEN OTHERS THEN
4732 rlm_message_sv.sql_error('rlm_manage_demand_sv.InsertReq',
4733 v_Progress);
4734 --
4735 IF (l_debug <> -1) THEN
4736 rlm_core_sv.dlog(C_DEBUG,'progress',v_Progress);
4737 rlm_core_sv.dpop(C_SDEBUG,'EXCEPTION: '||SUBSTR(SQLERRM,1,200));
4738 END IF;
4739 --
4740 raise;
4741
4742 END InsertReq;
4743
4744
4745 /*===========================================================================
4746
4747 PROCEDURE NAME: UpdateReq
4748
4749 ===========================================================================*/
4750
4751 PROCEDURE UpdateReq(x_ManageDemand_rec IN rlm_interface_lines%ROWTYPE)
4752 IS
4753
4754 v_Progress VARCHAR2(3) := '010';
4755
4756 BEGIN
4757 --
4758 IF (l_debug <> -1) THEN
4759 rlm_core_sv.dpush(C_SDEBUG,'UpdateReq');
4760 rlm_core_sv.dlog(C_DEBUG,'Changed lines to be updated to table');
4761 rlm_core_sv.dlog(C_DEBUG,'x_ManageDemand_rec.primary_quantity',
4762 x_ManageDemand_rec.primary_quantity);
4763 rlm_core_sv.dlog(C_DEBUG,'x_ManageDemand_rec.ship_from_org_id',
4764 x_ManageDemand_rec.ship_from_org_id);
4765 rlm_core_sv.dlog(C_DEBUG,'x_ManageDemand_rec.item_detail_type',
4766 x_ManageDemand_rec.item_detail_type);
4767 rlm_core_sv.dlog(C_DEBUG,'x_ManageDemand_rec.item_detail_subtype',
4768 x_ManageDemand_rec.item_detail_subtype);
4769 rlm_core_sv.dlog(C_DEBUG,'x_ManageDemand_rec.line_source',
4770 x_ManageDemand_rec.line_source);
4771 rlm_core_sv.dlog(C_DEBUG,'x_ManageDemand_rec.qty_type_code',
4772 x_ManageDemand_rec.qty_type_code);
4773 rlm_core_sv.dlog(C_DEBUG,'x_ManageDemand_rec.order_header_id',
4774 x_ManageDemand_rec.order_header_id);
4775 rlm_core_sv.dlog(C_DEBUG,'x_ManageDemand_rec.blanket_number',
4776 x_ManageDemand_rec.blanket_number);
4777 END IF;
4778 --
4779 UPDATE rlm_interface_lines_all
4780 SET primary_quantity = x_ManageDemand_rec.primary_quantity,
4781 ship_from_org_id = x_ManageDemand_rec.ship_from_org_id,
4782 item_detail_type = x_ManageDemand_rec.item_detail_type,
4783 item_detail_subtype = x_ManageDemand_rec.item_detail_subtype,
4784 line_source = x_ManageDemand_rec.line_source,
4785 qty_type_code = x_ManageDemand_rec.qty_type_code,
4786 request_date = x_ManageDemand_rec.request_date ,
4787 schedule_date = x_ManageDemand_rec.schedule_date ,
4788 process_status = x_ManageDemand_rec.process_status
4789 WHERE line_id = x_ManageDemand_rec.line_id;
4790 --
4791 IF (l_debug <> -1) THEN
4792 rlm_core_sv.dpop(C_SDEBUG);
4793 END IF;
4794 --
4795 EXCEPTION
4796
4797 WHEN OTHERS THEN
4798 rlm_message_sv.sql_error('rlm_manage_demand_sv.UpdateReq',
4799 v_Progress);
4800 --
4801 IF (l_debug <> -1) THEN
4802 rlm_core_sv.dlog(C_DEBUG,'progress',v_Progress);
4803 rlm_core_sv.dpop(C_SDEBUG,'EXCEPTION: '||SUBSTR(SQLERRM,1,200));
4804 END IF;
4805 --
4806 raise;
4807
4808 END UpdateReq;
4809
4810
4811 /*===========================================================================
4812
4813 PROCEDURE NAME: UpdateSchedule
4814
4815 ===========================================================================*/
4816
4817 PROCEDURE UpdateSchedule(x_ManageDemand_rec IN rlm_interface_lines%ROWTYPE,
4818 x_AggregateDemand_rec IN rlm_interface_lines%ROWTYPE)
4819 IS
4820
4821 v_Progress VARCHAR2(3) := '010';
4822
4823 BEGIN
4824 --
4825 IF (l_debug <> -1) THEN
4826 rlm_core_sv.dpush(C_SDEBUG,'UpdateSchedule');
4827 rlm_core_sv.dlog(C_DEBUG,'x_ManageDemand_rec.schedule_line_id',
4828 x_ManageDemand_rec.schedule_line_id);
4829 END IF;
4830 --
4831 IF x_ManageDemand_rec.program_id <> k_INSERT THEN
4832 --
4833 UPDATE rlm_schedule_lines_all
4834 SET interface_line_id = x_AggregateDemand_rec.line_id
4835 WHERE line_id = x_ManageDemand_rec.schedule_line_id;
4836 --
4837 IF (l_debug <> -1) THEN
4838 rlm_core_sv.dlog(C_DEBUG,'# of schedule lines updated',SQL%ROWCOUNT);
4839 END IF;
4840 --
4841 END IF;
4842 --
4843 IF (l_debug <> -1) THEN
4844 rlm_core_sv.dpop(C_SDEBUG);
4845 END IF;
4846 --
4847 EXCEPTION
4848
4849 WHEN OTHERS THEN
4850 rlm_message_sv.sql_error('rlm_manage_demand_sv.UpdateSchedule', v_Progress);
4851 --
4852 IF (l_debug <> -1) THEN
4853 rlm_core_sv.dlog(C_DEBUG,'progress',v_Progress);
4854 rlm_core_sv.dpop(C_SDEBUG,'EXCEPTION: '||SUBSTR(SQLERRM,1,200));
4855 END IF;
4856 --
4857 raise;
4858
4859 END UpdateSchedule;
4860
4861
4862 /*===========================================================================
4863
4864 PROCEDURE NAME: MatchDemand
4865
4866 ===========================================================================*/
4867
4868 PROCEDURE MatchDemand(x_Group_rec IN rlm_dp_sv.t_Group_rec,
4869 x_Index IN NUMBER,
4870 x_AggregateDemand_tab IN OUT NOCOPY t_MD_tab,
4871 x_Delete_tab IN OUT NOCOPY t_Number_tab,
4872 x_ExcpTab IN OUT NOCOPY t_Match_Tab)
4873 IS
4874 --
4875 i NUMBER;
4876 j NUMBER;
4877 q NUMBER :=1;
4878 k NUMBER;
4879 x NUMBER;
4880 b_Match BOOLEAN := FALSE;
4881 v_Progress VARCHAR2(3) := '010';
4882 --
4883 BEGIN
4884 --
4885 IF (l_debug <> -1) THEN
4886 rlm_core_sv.dpush(C_SDEBUG,'MatchDemand');
4887 rlm_core_sv.dlog(C_DEBUG, 'x_Index', x_Index);
4888 rlm_core_sv.dlog(C_DEBUG, 'Line_id to be matched',
4889 g_ManageDemand_tab(x_Index).line_id);
4890 END IF;
4891 --
4892 /* note: 866 attributes still need to be determined */
4893 --
4894 FOR j IN x_index+1..g_ManageDemand_tab.COUNT LOOP
4895 --
4896 -- Initialize the record
4897 --
4898 x_ExcpTab(x_ExcpTab.COUNT + 1).industry_attribute15 := 'N';
4899 x := x_ExcpTab.COUNT;
4900 --
4901 IF (l_debug <> -1) THEN
4902 rlm_core_sv.dlog(C_DEBUG, 'x_AggregateDemand_tab.COUNT',
4903 x_AggregateDemand_tab.COUNT);
4904 END IF;
4905 --
4906 b_match := TRUE;
4907 --
4908 IF b_Match THEN
4909 IF NVL(g_ManageDemand_tab(x_Index).request_date, k_DNULL) <>
4910 NVL(g_ManageDemand_tab(j).request_date, k_DNULL) THEN
4911 IF x_Group_rec.match_within_rec.request_date = 'Y' THEN
4912 b_Match := FALSE;
4913 ELSE
4914 x_ExcpTab(x).request_date := 'Y';
4915 END IF;
4916 END IF;
4917 END IF;
4918
4919 /*
4920 IF NVL(g_ManageDemand_tab(x_Index).bill_to_site_use_id,k_NULL) <>
4921 NVL(g_ManageDemand_tab(j).bill_to_site_use_id,k_NULL) THEN
4922 b_Match := FALSE;
4923 END IF;
4924
4925 */
4926 IF b_Match THEN
4927 IF NVL(g_ManageDemand_tab(x_Index).intrmd_ship_to_id,k_NULL) <>
4928 NVL(g_ManageDemand_tab(j).intrmd_ship_to_id,k_NULL) THEN
4929 b_Match := FALSE;
4930 END IF;
4931 END IF;
4932
4933 /*
4934 IF b_Match THEN
4935 IF NVL(g_ManageDemand_tab(x_Index).inventory_item_id,k_NULL) <>
4936 NVL(x_Demand_tab(j).inventory_item_id,k_NULL) THEN
4937 b_Match := FALSE;
4938 END IF;
4939 END IF;
4940
4941 */
4942 IF b_Match THEN
4943 IF NVL(g_ManageDemand_tab(x_Index).item_detail_type,'k_NULL') <>
4944 NVL(g_ManageDemand_tab(j).item_detail_type,'k_NULL') THEN
4945 b_Match := FALSE;
4946 END IF;
4947 END IF;
4948 IF b_Match THEN
4949 IF NVL(g_ManageDemand_tab(x_Index).item_detail_subtype,'k_NULL') <>
4950 NVL(g_ManageDemand_tab(j).item_detail_subtype,'k_NULL') THEN
4951 b_Match := FALSE;
4952 END IF;
4953 END IF;
4954
4955 --Bugfix 6640105 Start --Enforcing Request Date for MRP Lines
4956 IF b_Match THEN
4957 IF x_Group_rec.setup_terms_rec.ship_delivery_rule_name IS NOT NULL AND g_ManageDemand_tab(x_Index).item_detail_type = 6
4958 AND g_ManageDemand_tab(j).item_detail_type = 6 THEN
4959 IF NVL(g_ManageDemand_tab(x_Index).request_date, k_DNULL) <>
4960 NVL(g_ManageDemand_tab(j).request_date, k_DNULL) THEN
4961 b_Match := FALSE;
4962 IF (l_debug <> -1) THEN
4963 rlm_core_sv.dlog(C_DEBUG, 'Request Date as match attribute is enforced so the MRP lines splitted by SDP rule are not aggregated');
4964 END IF;
4965 ELSE
4966 x_ExcpTab(x).request_date := 'Y';
4967 END IF;
4968 END IF;
4969 END IF;
4970 --Bugfix 6640105 End
4971
4972 /*
4973 IF b_Match THEN
4974 IF NVL(g_ManageDemand_tab(x_Index).order_header_id,k_NULL) <>
4975 NVL(g_ManageDemand_tab(j).order_header_id,k_NULL) THEN
4976 b_Match := FALSE;
4977 END IF;
4978 END IF;
4979 */
4980
4981 /*
4982 IF b_Match THEN
4983 IF NVL(g_ManageDemand_tab(x_Index).customer_item_id,k_NULL) <>
4984 NVL(g_ManageDemand_tab(j).customer_item_id,k_NULL) THEN
4985 b_Match := FALSE;
4986 END IF;
4987 END IF;
4988
4989 */
4990
4991 /*
4992
4993 Took out the match_across comparison as per code review
4994
4995 */
4996
4997
4998 IF b_Match THEN
4999 IF NVL(g_ManageDemand_tab(x_Index).cust_po_number, k_VNULL) <>
5000 NVL(g_ManageDemand_tab(j).cust_po_number, k_VNULL) THEN
5001 IF x_Group_rec.match_within_rec.cust_po_number = 'Y' THEN
5002 b_Match := FALSE;
5003 ELSE
5004 x_ExcpTab(x).cust_po_number := 'Y';
5005 END IF;
5006 END IF;
5007 END IF;
5008 IF b_Match THEN
5009 IF NVL(g_ManageDemand_tab(x_Index).customer_item_revision, k_VNULL) <>
5010 NVL(g_ManageDemand_tab(j).customer_item_revision, k_VNULL) THEN
5011 IF x_Group_rec.match_within_rec.customer_item_revision = 'Y' THEN
5012 b_Match := FALSE;
5013 ELSE
5014 x_ExcpTab(x).customer_item_revision := 'Y';
5015 END IF;
5016 END IF;
5017 END IF;
5018 IF b_Match THEN
5019 IF NVL(g_ManageDemand_tab(x_Index).customer_dock_code, k_VNULL) <>
5020 NVL(g_ManageDemand_tab(j).customer_dock_code, k_VNULL) THEN
5021 IF x_Group_rec.match_within_rec.customer_dock_code = 'Y' THEN
5022 b_Match := FALSE;
5023 ELSE
5024 x_ExcpTab(x).customer_dock_code := 'Y';
5025 END IF;
5026 END IF;
5027 END IF;
5028 IF b_Match THEN
5029 IF NVL(g_ManageDemand_tab(x_Index).customer_job, k_VNULL) <>
5030 NVL(g_ManageDemand_tab(j).customer_job, k_VNULL) THEN
5031 IF x_Group_rec.match_within_rec.customer_job = 'Y' THEN
5032 b_Match := FALSE;
5033 ELSE
5034 x_ExcpTab(x).customer_job := 'Y';
5035 END IF;
5036 END IF;
5037 END IF;
5038 IF b_Match THEN
5039 IF NVL(g_ManageDemand_tab(x_Index).cust_production_line, k_VNULL) <>
5040 NVL(g_ManageDemand_tab(j).cust_production_line, k_VNULL) THEN
5041 IF x_Group_rec.match_within_rec.cust_production_line = 'Y' THEN
5042 b_Match := FALSE;
5043 ELSE
5044 x_ExcpTab(x).cust_production_line := 'Y';
5045 END IF;
5046 END IF;
5047 END IF;
5048 IF b_Match THEN
5049 IF NVL(g_ManageDemand_tab(x_Index).cust_model_serial_number, k_VNULL) <>
5050 NVL(g_ManageDemand_tab(j).cust_model_serial_number, k_VNULL) THEN
5051 IF x_Group_rec.match_within_rec.cust_model_serial_number = 'Y' THEN
5052 b_Match := FALSE;
5053 ELSE
5054 x_ExcpTab(x).cust_model_serial_number := 'Y';
5055 END IF;
5056 END IF;
5057 END IF;
5058 IF b_Match THEN
5059 IF NVL(g_ManageDemand_tab(x_Index).cust_production_seq_num, k_VNULL) <>
5060 NVL(g_ManageDemand_tab(j).cust_production_seq_num, k_VNULL) THEN
5061 IF x_Group_rec.match_within_rec.cust_production_seq_num = 'Y' THEN
5062 b_Match := FALSE;
5063 ELSE
5064 x_ExcpTab(x).cust_production_seq_num := 'Y';
5065 END IF;
5066 END IF;
5067 END IF;
5068 IF b_Match THEN
5069 IF NVL(g_ManageDemand_tab(x_Index).industry_attribute1, k_VNULL) <>
5070 NVL(g_ManageDemand_tab(j).industry_attribute1, k_VNULL) THEN
5071 IF x_Group_rec.match_within_rec.industry_attribute1 = 'Y' THEN
5072 b_Match := FALSE;
5073 ELSE
5074 x_ExcpTab(x).industry_attribute1 := 'Y';
5075 END IF;
5076 END IF;
5077 END IF;
5078 IF b_Match THEN
5079 IF NVL(g_ManageDemand_tab(x_Index).industry_attribute2, k_VNULL) <>
5080 NVL(g_ManageDemand_tab(j).industry_attribute2, k_VNULL) THEN
5081 IF x_Group_rec.match_within_rec.industry_attribute2 = 'Y' THEN
5082 b_Match := FALSE;
5083 ELSE
5084 x_ExcpTab(x).industry_attribute2 := 'Y';
5085 END IF;
5086 END IF;
5087 END IF;
5088 IF b_Match THEN
5089 IF NVL(g_ManageDemand_tab(x_Index).industry_attribute4, k_VNULL) <>
5090 NVL(g_ManageDemand_tab(j).industry_attribute4, k_VNULL) THEN
5091 IF x_Group_rec.match_within_rec.industry_attribute4 = 'Y' THEN
5092 b_Match := FALSE;
5093 ELSE
5094 x_ExcpTab(x).industry_attribute4 := 'Y';
5095 END IF;
5096 END IF;
5097 END IF;
5098 IF b_Match THEN
5099 IF NVL(g_ManageDemand_tab(x_Index).industry_attribute5, k_VNULL) <>
5100 NVL(g_ManageDemand_tab(j).industry_attribute5, k_VNULL) THEN
5101 IF x_Group_rec.match_within_rec.industry_attribute5 = 'Y' THEN
5102 b_Match := FALSE;
5103 ELSE
5104 x_ExcpTab(x).industry_attribute5 := 'Y';
5105 END IF;
5106 END IF;
5107 END IF;
5108 IF b_Match THEN
5109 IF NVL(g_ManageDemand_tab(x_Index).industry_attribute6, k_VNULL) <>
5110 NVL(g_ManageDemand_tab(j).industry_attribute6, k_VNULL) THEN
5111 IF x_Group_rec.match_within_rec.industry_attribute6 = 'Y' THEN
5112 b_Match := FALSE;
5113 ELSE
5114 x_ExcpTab(x).industry_attribute6 := 'Y';
5115 END IF;
5116 END IF;
5117 END IF;
5118 IF b_Match THEN
5119 IF NVL(g_ManageDemand_tab(x_Index).industry_attribute10, k_VNULL) <>
5120 NVL(g_ManageDemand_tab(j).industry_attribute10, k_VNULL) THEN
5121 IF x_Group_rec.match_within_rec.industry_attribute10 = 'Y' THEN
5122 b_Match := FALSE;
5123 ELSE
5124 x_ExcpTab(x).industry_attribute10 := 'Y';
5125 END IF;
5126 END IF;
5127 END IF;
5128 IF b_Match THEN
5129 IF NVL(g_ManageDemand_tab(x_Index).industry_attribute11, k_VNULL) <>
5130 NVL(g_ManageDemand_tab(j).industry_attribute11, k_VNULL) THEN
5131 IF x_Group_rec.match_within_rec.industry_attribute11 = 'Y' THEN
5132 b_Match := FALSE;
5133 ELSE
5134 x_ExcpTab(x).industry_attribute11 := 'Y';
5135 END IF;
5136 END IF;
5137 END IF;
5138 IF b_Match THEN
5139 IF NVL(g_ManageDemand_tab(x_Index).industry_attribute12, k_VNULL) <>
5140 NVL(g_ManageDemand_tab(j).industry_attribute12, k_VNULL) THEN
5141 IF x_Group_rec.match_within_rec.industry_attribute12 = 'Y' THEN
5142 b_Match := FALSE;
5143 ELSE
5144 x_ExcpTab(x).industry_attribute12 := 'Y';
5145 END IF;
5146 END IF;
5147 END IF;
5148 IF b_Match THEN
5149 IF NVL(g_ManageDemand_tab(x_Index).industry_attribute13, k_VNULL) <>
5150 NVL(g_ManageDemand_tab(j).industry_attribute13, k_VNULL) THEN
5151 IF x_Group_rec.match_within_rec.industry_attribute13 = 'Y' THEN
5152 b_Match := FALSE;
5153 ELSE
5154 x_ExcpTab(x).industry_attribute13 := 'Y';
5155 END IF;
5156 END IF;
5157 END IF;
5158 IF b_Match THEN
5159 IF NVL(g_ManageDemand_tab(x_Index).industry_attribute14, k_VNULL) <>
5160 NVL(g_ManageDemand_tab(j).industry_attribute14, k_VNULL) THEN
5161 IF x_Group_rec.match_within_rec.industry_attribute14 = 'Y' THEN
5162 b_Match := FALSE;
5163 ELSE
5164 x_ExcpTab(x).industry_attribute14 := 'Y';
5165 END IF;
5166 END IF;
5167 END IF;
5168
5169 /*
5170 IF b_Match THEN
5171 IF NVL(g_ManageDemand_tab(x_Index).industry_attribute15, k_VNULL) <>
5172 NVL(g_ManageDemand_tab(j).industry_attribute15, k_VNULL) THEN
5173 --match_within_rec.industry_attribute15 is always 'Y'
5174 b_Match := FALSE;
5175 END IF;
5176 END IF;
5177
5178 */
5179 IF b_Match THEN
5180 IF NVL(g_ManageDemand_tab(x_Index).attribute1, k_VNULL) <>
5181 NVL(g_ManageDemand_tab(j).attribute1, k_VNULL) THEN
5182 IF x_Group_rec.match_within_rec.attribute1 = 'Y' THEN
5183 b_Match := FALSE;
5184 ELSE
5185 x_ExcpTab(x).attribute1 := 'Y';
5186 END IF;
5187 END IF;
5188 END IF;
5189 IF b_Match THEN
5190 IF NVL(g_ManageDemand_tab(x_Index).attribute2, k_VNULL) <>
5191 NVL(g_ManageDemand_tab(j).attribute2, k_VNULL) THEN
5192 IF x_Group_rec.match_within_rec.attribute2 = 'Y' THEN
5193 b_Match := FALSE;
5194 ELSE
5195 x_ExcpTab(x).attribute2 := 'Y';
5196 END IF;
5197 END IF;
5198 END IF;
5199 IF b_Match THEN
5200 IF NVL(g_ManageDemand_tab(x_Index).attribute3, k_VNULL) <>
5201 NVL(g_ManageDemand_tab(j).attribute3, k_VNULL) THEN
5202 IF x_Group_rec.match_within_rec.attribute3 = 'Y' THEN
5203 b_Match := FALSE;
5204 ELSE
5205 x_ExcpTab(x).attribute3 := 'Y';
5206 END IF;
5207 END IF;
5208 END IF;
5209 IF b_Match THEN
5210 IF NVL(g_ManageDemand_tab(x_Index).attribute4, k_VNULL) <>
5211 NVL(g_ManageDemand_tab(j).attribute4, k_VNULL) THEN
5212 IF x_Group_rec.match_within_rec.attribute4 = 'Y' THEN
5213 b_Match := FALSE;
5214 ELSE
5215 x_ExcpTab(x).attribute4 := 'Y';
5216 END IF;
5217 END IF;
5218 END IF;
5219 IF b_Match THEN
5220 IF NVL(g_ManageDemand_tab(x_Index).attribute5, k_VNULL) <>
5221 NVL(g_ManageDemand_tab(j).attribute5, k_VNULL) THEN
5222 IF x_Group_rec.match_within_rec.attribute5 = 'Y' THEN
5223 b_Match := FALSE;
5224 ELSE
5225 x_ExcpTab(x).attribute5 := 'Y';
5226 END IF;
5227 END IF;
5228 END IF;
5229 IF b_Match THEN
5230 IF NVL(g_ManageDemand_tab(x_Index).attribute6, k_VNULL) <>
5231 NVL(g_ManageDemand_tab(j).attribute6, k_VNULL) THEN
5232 IF x_Group_rec.match_within_rec.attribute6 = 'Y' THEN
5233 b_Match := FALSE;
5234 ELSE
5235 x_ExcpTab(x).attribute6 := 'Y';
5236 END IF;
5237 END IF;
5238 END IF;
5239 IF b_Match THEN
5240 IF NVL(g_ManageDemand_tab(x_Index).attribute7, k_VNULL) <>
5241 NVL(g_ManageDemand_tab(j).attribute7, k_VNULL) THEN
5242 IF x_Group_rec.match_within_rec.attribute7 = 'Y' THEN
5243 b_Match := FALSE;
5244 ELSE
5245 x_ExcpTab(x).attribute7 := 'Y';
5246 END IF;
5247 END IF;
5248 END IF;
5249 IF b_Match THEN
5250 IF NVL(g_ManageDemand_tab(x_Index).attribute8, k_VNULL) <>
5251 NVL(g_ManageDemand_tab(j).attribute8, k_VNULL) THEN
5252 IF x_Group_rec.match_within_rec.attribute8 = 'Y' THEN
5253 b_Match := FALSE;
5254 ELSE
5255 x_ExcpTab(x).attribute8 := 'Y';
5256 END IF;
5257 END IF;
5258 END IF;
5259 IF b_Match THEN
5260 IF NVL(g_ManageDemand_tab(x_Index).attribute9, k_VNULL) <>
5261 NVL(g_ManageDemand_tab(j).attribute9, k_VNULL) THEN
5262 IF x_Group_rec.match_within_rec.attribute9 = 'Y' THEN
5263 b_Match := FALSE;
5264 ELSE
5265 x_ExcpTab(x).attribute9 := 'Y';
5266 END IF;
5267 END IF;
5268 END IF;
5269 IF b_Match THEN
5270 IF NVL(g_ManageDemand_tab(x_Index).attribute10, k_VNULL) <>
5271 NVL(g_ManageDemand_tab(j).attribute10, k_VNULL) THEN
5272 IF x_Group_rec.match_within_rec.attribute10 = 'Y' THEN
5273 b_Match := FALSE;
5274 ELSE
5275 x_ExcpTab(x).attribute10 := 'Y';
5276 END IF;
5277 END IF;
5278 END IF;
5279 IF b_Match THEN
5280 IF NVL(g_ManageDemand_tab(x_Index).attribute11, k_VNULL) <>
5281 NVL(g_ManageDemand_tab(j).attribute11, k_VNULL) THEN
5282 IF x_Group_rec.match_within_rec.attribute11 = 'Y' THEN
5283 b_Match := FALSE;
5284 ELSE
5285 x_ExcpTab(x).attribute11 := 'Y';
5286 END IF;
5287 END IF;
5288 END IF;
5289 IF b_Match THEN
5290 IF NVL(g_ManageDemand_tab(x_Index).attribute12, k_VNULL) <>
5291 NVL(g_ManageDemand_tab(j).attribute12, k_VNULL) THEN
5292 IF x_Group_rec.match_within_rec.attribute12 = 'Y' THEN
5293 b_Match := FALSE;
5294 ELSE
5295 x_ExcpTab(x).attribute12 := 'Y';
5296 END IF;
5297 END IF;
5298 END IF;
5299 IF b_Match THEN
5300 IF NVL(g_ManageDemand_tab(x_Index).attribute13, k_VNULL) <>
5301 NVL(g_ManageDemand_tab(j).attribute13, k_VNULL) THEN
5302 IF x_Group_rec.match_within_rec.attribute13 = 'Y' THEN
5303 b_Match := FALSE;
5304 ELSE
5305 x_ExcpTab(x).attribute13 := 'Y';
5306 END IF;
5307 END IF;
5308 END IF;
5309 IF b_Match THEN
5310 IF NVL(g_ManageDemand_tab(x_Index).attribute14, k_VNULL) <>
5311 NVL(g_ManageDemand_tab(j).attribute14, k_VNULL) THEN
5312 IF x_Group_rec.match_within_rec.attribute14 = 'Y' THEN
5313 b_Match := FALSE;
5314 ELSE
5315 x_ExcpTab(x).attribute14 := 'Y';
5316 END IF;
5317 END IF;
5318 END IF;
5319 IF b_Match THEN
5320 IF NVL(g_ManageDemand_tab(x_Index).attribute15, k_VNULL) <>
5321 NVL(g_ManageDemand_tab(j).attribute15, k_VNULL) THEN
5322 IF x_Group_rec.match_within_rec.attribute15 = 'Y' THEN
5323 b_Match := FALSE;
5324 ELSE
5325 x_ExcpTab(x).attribute15 := 'Y';
5326 END IF;
5327 END IF;
5328 END IF;
5329 --
5330
5331 IF q = 1 THEN
5332 k := x_AggregateDemand_tab.COUNT+1;
5333 x_AggregateDemand_tab(k) := g_ManageDemand_tab(x_Index);
5334 x_AggregateDemand_tab(k).program_application_id := x_Index;
5335 x_AggregateDemand_tab(k).program_id := NULL;
5336 END IF;
5337
5338 IF b_Match THEN
5339 --
5340 IF (l_debug <> -1) THEN
5341 rlm_core_sv.dlog(C_DEBUG,'match found');
5342 END IF;
5343 --
5344 IF x_AggregateDemand_tab(k).program_id IS NULL THEN
5345 --
5346 SetOperation(x_AggregateDemand_tab(k), k_INSERT);
5347 -- bug1230450
5348 -- x_AggregateDemand_tab(j).schedule_line_id := NULL;
5349 x_Delete_tab(x_Delete_tab.COUNT) :=
5350 x_AggregateDemand_tab(k).program_application_id;
5351 UpdateSchedule(
5352 g_ManageDemand_tab(x_AggregateDemand_tab(k).program_application_id),
5353 x_AggregateDemand_tab(k));
5354 --
5355 END IF;
5356 --
5357 x_AggregateDemand_tab(k).primary_quantity :=
5358 x_AggregateDemand_tab(k).primary_quantity +
5359 g_ManageDemand_tab(j).primary_quantity;
5360 --
5361 IF (l_debug <> -1) THEN
5362 rlm_core_sv.dlog(C_DEBUG,'Line to be deleted',
5363 g_ManageDemand_tab(j).line_id);
5364 END IF;
5365 --
5366 SetOperation(g_ManageDemand_tab(j), k_DELETE);
5367 UpdateSchedule(g_ManageDemand_tab(j), x_AggregateDemand_tab(k));
5368 --
5369 --EXIT;
5370 --
5371 ELSE
5372 x_ExcpTab.DELETE(x);
5373 END IF;
5374 --
5375 q := q + 1;
5376
5377 END LOOP;
5378
5379 --
5380 IF (l_debug <> -1) THEN
5381 rlm_core_sv.dpop(C_SDEBUG);
5382 END IF;
5383 --
5384 EXCEPTION
5385 --
5386 WHEN OTHERS THEN
5387 --
5388 rlm_message_sv.sql_error('rlm_manage_demand_sv.MatchDemand', v_Progress);
5389 --
5390 IF (l_debug <> -1) THEN
5391 rlm_core_sv.dpop(C_SDEBUG,'EXCEPTION: '||SUBSTR(SQLERRM,1,200));
5392 END IF;
5393 --
5394 raise;
5395
5396 END MatchDemand;
5397
5398
5399 /*===========================================================================
5400
5401 PROCEDURE NAME: AggregateDemand
5402
5403 ===========================================================================*/
5404
5405 PROCEDURE AggregateDemand(x_Group_rec IN rlm_dp_sv.t_Group_rec)
5406 IS
5407
5408 i NUMBER;
5409 v_Delete_tab t_Number_tab;
5410 v_AggregateDemand_tab t_MD_tab;
5411 v_Progress VARCHAR2(3) := '010';
5412 v_ExcpTab t_Match_tab;
5413
5414 BEGIN
5415 --
5416 IF (l_debug <> -1) THEN
5417 rlm_core_sv.dpush(C_SDEBUG,'AggregateDemand');
5418 END IF;
5419 --
5420 FOR i IN 1..g_ManageDemand_tab.COUNT LOOP
5421 --
5422 IF g_ManageDemand_tab(i).program_id <> k_DELETE OR
5423 g_ManageDemand_tab(i).program_id IS NULL
5424 THEN
5425 MatchDemand(x_Group_rec,i, v_AggregateDemand_tab, v_Delete_tab,v_ExcpTab);
5426 END IF;
5427 --
5428 END LOOP;
5429 --
5430 IF v_ExcpTab.COUNT > 0 THEN
5431 --
5432 ReportExc(v_ExcpTab);
5433 --
5434 v_ExcpTab.DELETE;
5435 --
5436 END IF;
5437 --
5438 FOR i IN 0..v_Delete_tab.COUNT-1 LOOP
5439 --
5440 IF (l_debug <> -1) THEN
5441 rlm_core_sv.dlog(C_DEBUG,'Line to be deleted',
5442 g_ManageDemand_tab(v_Delete_tab(i)).line_id);
5443 END IF;
5444 --
5445 SetOperation(g_ManageDemand_tab(v_Delete_tab(i)), k_DELETE);
5446 --
5447 END LOOP;
5448 --
5449 FOR i IN 1..v_AggregateDemand_tab.COUNT LOOP
5450 --
5451 IF v_AggregateDemand_tab(i).program_id IS NOT NULL THEN
5452 --
5453 g_ManageDemand_tab(g_ManageDemand_tab.COUNT + 1) :=
5454 v_AggregateDemand_tab(i);
5455 --
5456 IF (l_debug <> -1) THEN
5457 rlm_core_sv.dlog(C_DEBUG,'aggregated line qty ',
5458 g_ManageDemand_tab(g_ManageDemand_tab.COUNT).primary_quantity);
5459 rlm_core_sv.dlog(C_DEBUG,'Ship to org',
5460 g_ManageDemand_tab(g_ManageDemand_tab.COUNT).ship_to_org_id);
5461 rlm_core_sv.dlog(C_DEBUG,'Intermediate ship to org ',
5462 g_ManageDemand_tab(g_ManageDemand_tab.COUNT).intmed_ship_to_org_id);
5463 END IF;
5464 --
5465 END IF;
5466 --
5467 END LOOP;
5468 --
5469 IF (l_debug <> -1) THEN
5470 rlm_core_sv.dpop(C_SDEBUG);
5471 END IF;
5472 --
5473 EXCEPTION
5474
5475 WHEN OTHERS THEN
5476 rlm_message_sv.sql_error('rlm_manage_demand_sv.AggregateDemand', v_Progress);
5477 --
5478 IF (l_debug <> -1) THEN
5479 rlm_core_sv.dlog(C_DEBUG,'progress',v_Progress);
5480 rlm_core_sv.dpop(C_SDEBUG,'EXCEPTION: '||SUBSTR(SQLERRM,1,200));
5481 END IF;
5482 --
5483 raise;
5484
5485 END AggregateDemand;
5486
5487
5488 /*===========================================================================
5489
5490 PROCEDURE NAME: SortDemand
5491
5492 ===========================================================================*/
5493
5494 PROCEDURE SortDemand
5495 IS
5496
5497 i NUMBER;
5498 v_Progress VARCHAR2(3) := '010';
5499
5500 BEGIN
5501
5502 IF (l_debug <> -1) THEN
5503 rlm_core_sv.dpush(C_SDEBUG,'SortDemand');
5504 END IF;
5505
5506 i := g_ManageDemand_tab.FIRST;
5507 LOOP
5508 --
5509 IF (l_debug <> -1) THEN
5510 rlm_core_sv.dlog(C_DEBUG,'g_ManageDemand_tab('||i||').line_id',
5511 g_ManageDemand_tab(i).line_id);
5512 rlm_core_sv.dlog(C_DEBUG,'g_ManageDemand_tab('||i||').request_date',
5513 g_ManageDemand_tab(i).request_date);
5514 rlm_core_sv.dlog(C_DEBUG, 'g_ManageDemand_tab('||i||').operation',
5515 g_ManageDemand_tab(i).program_id);
5516 END IF;
5517 --
5518 EXIT WHEN i = g_ManageDemand_tab.LAST ;
5519 --
5520 i := g_ManageDemand_tab.NEXT(i);
5521 --
5522 END LOOP;
5523 --
5524 IF (l_debug <> -1) THEN
5525 rlm_core_sv.dlog(C_DEBUG, 'Call QuickSort');
5526 rlm_core_sv.dlog(C_DEBUG,'g_ManageDemand_tab.COUNT', g_ManageDemand_tab.COUNT);
5527 END IF;
5528 --
5529 QuickSort(1, g_ManageDemand_tab.COUNT);
5530 --
5531 IF (l_debug <> -1) THEN
5532 rlm_core_sv.dlog(C_DEBUG, 'Return QuickSort');
5533 END IF;
5534 --
5535 --InsertionSort(1,g_ManageDemand_tab.COUNT);
5536 i := g_ManageDemand_tab.FIRST;
5537 --
5538 LOOP
5539 --
5540 IF (l_debug <> -1) THEN
5541 rlm_core_sv.dlog(C_DEBUG,'g_ManageDemand_tab('||i||').line_id',
5542 g_ManageDemand_tab(i).line_id);
5543 rlm_core_sv.dlog(C_DEBUG,'g_ManageDemand_tab('||i||').request_date',
5544 g_ManageDemand_tab(i).request_date);
5545 rlm_core_sv.dlog(C_DEBUG, 'g_ManageDemand_tab('||i||').primary_quantity',
5546 g_ManageDemand_tab(i).primary_quantity);
5547 END IF;
5548 --
5549 EXIT WHEN i = g_ManageDemand_tab.LAST ;
5550 --
5551 i := g_ManageDemand_tab.NEXT(i);
5552 --
5553 END LOOP;
5554
5555 IF (l_debug <> -1) THEN
5556 rlm_core_sv.dpop(C_SDEBUG);
5557 END IF;
5558
5559 EXCEPTION
5560
5561 WHEN OTHERS THEN
5562 rlm_message_sv.sql_error('rlm_manage_demand_sv.SortDemand', v_Progress);
5563 --
5564 IF (l_debug <> -1) THEN
5565 rlm_core_sv.dlog(C_DEBUG,'progress',v_Progress);
5566 rlm_core_sv.dpop(C_SDEBUG,'EXCEPTION: '||SUBSTR(SQLERRM,1,200));
5567 END IF;
5568 --
5569 raise;
5570
5571 END SortDemand;
5572
5573
5574 /*===========================================================================
5575
5576 PROCEDURE NAME: QuickSort
5577
5578 ===========================================================================*/
5579
5580 PROCEDURE QuickSort(first IN NUMBER,
5581 last IN NUMBER)
5582 IS
5583
5584 Low NUMBER;
5585 High NUMBER;
5586 Pivot DATE;
5587 v_Progress VARCHAR2(3) := '010';
5588
5589 BEGIN
5590
5591 IF (l_debug <> -1) THEN
5592 rlm_core_sv.dpush(C_SDEBUG,'QuickSort');
5593 END IF;
5594
5595 low := First;
5596 high := Last;
5597
5598 /* Select an element from the middle. */
5599 pivot := g_ManageDemand_tab(TRUNC((First + Last) / 2)).request_date;
5600 LOOP
5601 /* Find lowest element that is >= Pivot */
5602 WHILE g_ManageDemand_tab(Low).request_date < Pivot LOOP
5603 Low := Low + 1;
5604 END LOOP;
5605 /* Find highest element that is <= Pivot */
5606 WHILE g_ManageDemand_tab(High).request_date > Pivot LOOP
5607 High := High - 1;
5608 END LOOP;
5609 /* swap the elements */
5610 IF Low <= High THEN
5611 Swap(High, Low);
5612 Low := Low + 1;
5613 High := High - 1;
5614 End IF;
5615 EXIT WHEN Low > High;
5616 END LOOP ;
5617 IF (First < High) THEN
5618 Quicksort(First, High);
5619 END IF;
5620 IF (Low < Last) THEN
5621 Quicksort(Low, Last);
5622 END IF;
5623
5624 IF (l_debug <> -1) THEN
5625 rlm_core_sv.dpop(C_SDEBUG);
5626 END IF;
5627
5628 EXCEPTION
5629
5630 WHEN OTHERS THEN
5631 rlm_message_sv.sql_error('rlm_manage_demand_sv.QuickSort', v_Progress);
5632 --
5633 IF (l_debug <> -1) THEN
5634 rlm_core_sv.dlog(C_DEBUG,'progress',v_Progress);
5635 rlm_core_sv.dpop(C_SDEBUG,'EXCEPTION: '||SUBSTR(SQLERRM,1,200));
5636 END IF;
5637 --
5638 raise;
5639 END QuickSort;
5640
5641 /*===========================================================================
5642
5643 PROCEDURE NAME: Swap
5644
5645 ===========================================================================*/
5646
5647 PROCEDURE Swap( i IN NUMBER,
5648 j IN NUMBER)
5649 IS
5650
5651 T rlm_interface_lines%ROWTYPE;
5652 v_Progress VARCHAR2(3) := '010';
5653
5654 BEGIN
5655
5656 -- rlm_core_sv.dpush(C_SDEBUG,'Swap');
5657
5658 T := g_ManageDemand_tab(i);
5659 g_ManageDemand_tab(i) := g_ManageDemand_tab(j);
5660 g_ManageDemand_tab(j) := T;
5661
5662 -- rlm_core_sv.dpop(C_SDEBUG);
5663
5664 EXCEPTION
5665
5666 WHEN OTHERS THEN
5667 rlm_message_sv.sql_error('rlm_manage_demand_sv.Swap', v_Progress);
5668 --
5669 IF (l_debug <> -1) THEN
5670 rlm_core_sv.dlog(C_DEBUG,'progress',v_Progress);
5671 rlm_core_sv.dpop(C_SDEBUG,'EXCEPTION: '||SUBSTR(SQLERRM,1,200));
5672 END IF;
5673 --
5674 raise;
5675
5676 END Swap;
5677
5678
5679 /*===========================================================================
5680
5681 PROCEDURE NAME: InsertionSort
5682
5683 ===========================================================================*/
5684
5685 PROCEDURE InsertionSort(lo IN NUMBER,
5686 hi IN NUMBER)
5687 IS
5688
5689 i NUMBER;
5690 j NUMBER;
5691 v rlm_interface_lines%ROWTYPE;
5692 v_Progress VARCHAR2(3) := '010';
5693
5694 BEGIN
5695 --
5696 IF (l_debug <> -1) THEN
5697 rlm_core_sv.dpush(C_SDEBUG,'InsertionSort');
5698 END IF;
5699 --
5700 FOR i IN lo+1..hi LOOP
5701 v := g_ManageDemand_tab(i);
5702 j := i;
5703 WHILE ((j>lo) AND (g_ManageDemand_tab(j-1).request_date > v.request_date)) LOOP
5704 g_ManageDemand_tab(j) := g_ManageDemand_tab(j-1);
5705 j := j - 1;
5706 END LOOP;
5707 g_ManageDemand_tab(j) := v;
5708 END LOOP;
5709 --
5710 IF (l_debug <> -1) THEN
5711 rlm_core_sv.dpop(C_SDEBUG);
5712 END IF;
5713 --
5714 EXCEPTION
5715
5716 WHEN OTHERS THEN
5717 rlm_message_sv.sql_error('rlm_manage_demand_sv.InsertionSort', v_Progress);
5718 --
5719 IF (l_debug <> -1) THEN
5720 rlm_core_sv.dlog(C_DEBUG,'progress',v_Progress);
5721 rlm_core_sv.dpop(C_SDEBUG,'EXCEPTION: '||SUBSTR(SQLERRM,1,200));
5722 END IF;
5723 --
5724 raise;
5725
5726 END InsertionSort;
5727
5728
5729 /*===========================================================================
5730
5731 PROCEDURE NAME: RoundStandardPack
5732
5733 ===========================================================================*/
5734
5735 PROCEDURE RoundStandardPack(x_Sched_rec IN RLM_INTERFACE_HEADERS%ROWTYPE,
5736 x_Group_rec IN rlm_dp_sv.t_Group_rec)
5737 IS
5738
5739 v_RoundPack VARCHAR(1);
5740 v_StdPackQty NUMBER;
5741 v_QtyToAdd NUMBER;
5742 v_ModQty NUMBER;
5743 i NUMBER := 1;
5744 j NUMBER := 1;
5745 v_Sum NUMBER := 0;
5746 v_qty_before_round NUMBER := 0 ;
5747 v_qty_after_round NUMBER := 0 ;
5748 v_Progress VARCHAR2(3) := '010';
5749
5750 BEGIN
5751 --
5752 IF (l_debug <> -1) THEN
5753 rlm_core_sv.dpush(C_SDEBUG,'RoundStandardPack');
5754 rlm_core_sv.dlog(C_DEBUG, 'round_to_std_pack_flag',
5755 x_Group_rec.setup_terms_rec.round_to_std_pack_flag);
5756 rlm_core_sv.dlog(C_DEBUG, 'standard pack qty ',
5757 x_Group_rec.setup_terms_rec.STD_PACK_QTY);
5758 END IF;
5759 --
5760 IF x_Group_rec.setup_terms_rec.round_to_std_pack_flag = 'Y' THEN
5761 --
5762 -- Perf fix
5763 SortDemand;
5764
5765 /* TO give the message for over shipment we need the total primary qty
5766 before we do the rounding and then we need to get the total after
5767 rounding give an warn if it is greater than the first */
5768 --
5769 FOR i IN 1..g_ManageDemand_Tab.COUNT LOOP
5770 --
5771 IF (l_debug <> -1) THEN
5772 rlm_core_sv.dlog(C_DEBUG,'program_id ',g_ManageDemand_tab(i).program_id);
5773 rlm_core_sv.dlog(C_DEBUG, 'index ',i);
5774 END IF;
5775 --
5776 IF g_ManageDemand_tab(i).program_id <> k_DELETE THEN
5777 --
5778 IF (l_debug <> -1) THEN
5779 rlm_core_sv.dlog(C_DEBUG, 'index ',i);
5780 rlm_core_sv.dlog(C_DEBUG,'primary_quantity',
5781 g_ManageDemand_Tab(i).primary_quantity);
5782 END IF;
5783 --
5784 v_qty_before_round := v_qty_before_round +
5785 g_ManageDemand_Tab(i).primary_quantity;
5786 --
5787 END IF;
5788 --
5789 END LOOP;
5790 --
5791 v_StdPackQty := x_Group_rec.setup_terms_rec.std_pack_qty;
5792 --
5793 IF (l_debug <> -1) THEN
5794 rlm_core_sv.dlog(C_DEBUG, 'Total primary qty before rounding',
5795 v_qty_before_round);
5796 rlm_core_sv.dlog(C_DEBUG, 'Table COUNT ',g_ManageDemand_tab.COUNT);
5797 END IF;
5798 --
5799 WHILE (i <= g_ManageDemand_tab.COUNT) LOOP
5800 --
5801 IF (l_debug <> -1) THEN
5802 rlm_core_sv.dlog(C_DEBUG, 'i ',i);
5803 rlm_core_sv.dlog(C_DEBUG, 'program_id',g_ManageDemand_tab(i).program_id);
5804 END IF;
5805 --
5806 -- Do not consider the lines which have been marked for deletion
5807 -- either by aggregration or other ways for Round to std pack calculation
5808 --
5809 IF(g_ManageDemand_tab(i).program_id <> k_DELETE) THEN
5810 --
5811 IF (l_debug <> -1) THEN
5812 rlm_core_sv.dlog(C_DEBUG, 'g_ManageDemand_tab(i).primary_quantity',
5813 g_ManageDemand_tab(i).primary_quantity);
5814 END IF;
5815 --
5816 v_ModQty := MOD(g_ManageDemand_tab(i).primary_quantity, v_StdPackQty);
5817 --
5818 IF (l_debug <> -1) THEN
5819 rlm_core_sv.dlog(C_DEBUG, 'ModQty',v_ModQty);
5820 END IF;
5821 --
5822 IF v_ModQty <> 0 THEN
5823 --
5824 v_QtyToAdd := v_StdPackQty - v_ModQty;
5825 --
5826 IF (l_debug <> -1) THEN
5827 rlm_core_sv.dlog(C_DEBUG, 'v_QtyToAdd',v_QtyToAdd);
5828 END IF;
5829 --
5830 g_ManageDemand_tab(i).primary_quantity :=
5831 g_ManageDemand_tab(i).primary_quantity
5832 + v_QtyToAdd;
5833 --
5834 SetOperation(g_ManageDemand_tab(i), k_UPDATE);
5835 --
5836 v_Sum := 0;
5837 j := i + 1;
5838 --
5839 IF (l_debug <> -1) THEN
5840 rlm_core_sv.dlog(C_DEBUG, 'v_Sum ',v_Sum);
5841 rlm_core_sv.dlog(C_DEBUG, 'g_ManageDemand_tab(i).primary_quantity',
5842 g_ManageDemand_tab(i).primary_quantity);
5843 END IF;
5844 --
5845 WHILE (v_Sum < v_QtyToAdd) AND (j <= g_ManageDemand_tab.COUNT) LOOP
5846 --
5847 IF (l_debug <> -1) THEN
5848 rlm_core_sv.dlog(C_DEBUG, 'j ',j);
5849 rlm_core_sv.dlog(C_DEBUG, 'program_id',
5850 g_ManageDemand_tab(j).program_id );
5851 END IF;
5852 --
5853 IF (g_ManageDemand_tab(j).program_id <> k_DELETE) THEN
5854 --
5855 -- Do not consider the lines which have been marked
5856 -- for deletion
5857 --
5858 IF (l_debug <> -1) THEN
5859 rlm_core_sv.dlog(C_DEBUG, 'j.primary_quantity',
5860 g_ManageDemand_tab(j).primary_quantity);
5861 rlm_core_sv.dlog(C_DEBUG, 'v_Sum ',v_Sum);
5862 rlm_core_sv.dlog(C_DEBUG, 'v_QtyToAdd ',v_QtyToAdd);
5863 END IF;
5864 --
5865 IF g_ManageDemand_tab(j).primary_quantity >
5866 (v_QtyToAdd - v_Sum) THEN
5867 --
5868 g_ManageDemand_tab(j).primary_quantity :=
5869 g_ManageDemand_tab(j).primary_quantity
5870 - (v_QtyToAdd - v_Sum);
5871 v_Sum := v_QtyToAdd;
5872 --
5873 IF (l_debug <> -1) THEN
5874 rlm_core_sv.dlog(C_DEBUG, 'j.primary_quantity',
5875 g_ManageDemand_tab(j).primary_quantity);
5876 rlm_core_sv.dlog(C_DEBUG, 'v_Sum ',v_Sum);
5877 END IF;
5878 --
5879 SetOperation(g_ManageDemand_tab(j), k_UPDATE);
5880 --
5881 ELSE
5882 --
5883 v_Sum := v_Sum + g_ManageDemand_tab(j).primary_quantity;
5884 --
5885 IF (l_debug <> -1) THEN
5886 rlm_core_sv.dlog(C_DEBUG, 'v_Sum ',v_Sum);
5887 rlm_core_sv.dlog(C_DEBUG,'j.primary_quantity',
5888 g_ManageDemand_tab(j).primary_quantity);
5889 rlm_core_sv.dlog(C_DEBUG,'Setting the primary qty to O');
5890 END IF;
5891 --
5892 g_ManageDemand_tab(j).primary_quantity := 0;
5893 SetOperation(g_ManageDemand_tab(j), k_UPDATE);
5894 j := j + 1;
5895 --
5896 END IF;
5897 --
5898 ELSE
5899 --
5900 j := j + 1;
5901 --
5902 END IF;
5903 --
5904 END LOOP;
5905 --
5906 i := j;
5907 --
5908 ELSE
5909 --
5910 i := i + 1;
5911 --
5912 END IF;
5913 --
5914 ELSE
5915 --
5916 i := i + 1;
5917 --
5918 END IF;
5919 --
5920 END LOOP;
5921 --
5922 -- after rounding
5923 --
5924 FOR i IN 1..g_ManageDemand_Tab.COUNT LOOP
5925 --
5926 IF g_ManageDemand_tab(i).program_id <> k_DELETE THEN
5927 --
5928 v_qty_after_round := v_qty_after_round +
5929 g_ManageDemand_Tab(i).primary_quantity;
5930 --
5931 END IF;
5932 --
5933 END LOOP;
5934 --
5935 IF (l_debug <> -1) THEN
5936 rlm_core_sv.dlog(C_DEBUG, 'Total primary qty after rounding',
5937 v_qty_after_round);
5938 END IF;
5939 --
5940 IF v_qty_after_round > v_qty_before_round THEN
5941 --
5942 IF (l_debug <> -1) THEN
5943 rlm_core_sv.dlog(C_DEBUG,'WARNING overshipment has occured by qty = '
5944 ,v_qty_after_round - v_qty_before_round);
5945 END IF;
5946 --
5947 rlm_message_sv.app_error(
5948 x_ExceptionLevel => rlm_message_sv.k_warn_level,
5949 x_MessageName => 'RLM_OVERSHIP_ITEM',
5950 x_InterfaceHeaderId => x_sched_rec.header_id,
5951 x_InterfaceLineId => g_ManageDemand_tab(g_ManageDemand_tab.COUNT).line_id,
5952 x_ScheduleHeaderId => x_sched_rec.schedule_header_id,
5953 x_ScheduleLineId => g_ManageDemand_tab(g_ManageDemand_tab.COUNT).schedule_line_id,
5954 x_OrderHeaderId => x_group_rec.setup_terms_rec.header_id,
5955 x_OrderLineId => NULL,
5956 --x_ErrorText => 'Overshipment for Item',
5957 x_token1 => 'CUSTITEM',
5958 x_value1 => rlm_core_sv.get_item_number(g_ManageDemand_tab(g_ManageDemand_tab.COUNT).customer_item_id),
5959 x_token2 => 'OVRQTY',
5960 x_value2 => v_qty_after_round - v_qty_before_round);
5961 --
5962 --
5963 END IF;
5964 --
5965 END IF;
5966 --
5967 IF (l_debug <> -1) THEN
5968 rlm_core_sv.dpop(C_SDEBUG);
5969 END IF;
5970 --
5971 EXCEPTION
5972
5973 WHEN NO_DATA_FOUND THEN
5974 --
5975 IF (l_debug <> -1) THEN
5976 rlm_core_sv.dpop(C_SDEBUG,'EXCEPTION: '||SUBSTR(SQLERRM,1,200));
5977 END IF;
5978
5979 WHEN OTHERS THEN
5980 rlm_message_sv.sql_error('rlm_manage_demand_sv.RoundStandardPack',
5981 v_Progress);
5982 --
5983 IF (l_debug <> -1) THEN
5984 rlm_core_sv.dlog(C_DEBUG,'progress',v_Progress);
5985 rlm_core_sv.dpop(C_SDEBUG,'EXCEPTION: '||SUBSTR(SQLERRM,1,200));
5986 END IF;
5987 --
5988 raise;
5989
5990 END RoundStandardPack;
5991
5992 /*===========================================================================
5993
5994 PROCEDURE InitializeMdGroup
5995
5996 ===========================================================================*/
5997 PROCEDURE InitializeMdGroup(x_Sched_rec IN RLM_INTERFACE_HEADERS%ROWTYPE,
5998 x_Group_ref IN OUT NOCOPY rlm_manage_demand_sv.t_Cursor_ref,
5999 x_Group_rec IN rlm_dp_sv.t_Group_rec)
6000 IS
6001
6002 BEGIN
6003
6004 IF (l_debug <> -1) THEN
6005 rlm_core_sv.dpush(C_SDEBUG,'InitializeMdGroup');
6006 END IF;
6007
6008 OPEN x_Group_ref FOR
6009 SELECT rih.customer_id,
6010 ril.ship_from_org_id,
6011 ril.ship_to_address_id,
6012 ril.ship_to_org_id,
6013 ril.customer_item_id,
6014 ril.inventory_item_id,
6015 ril.industry_attribute15,
6016 ril.order_header_id,
6017 ril.blanket_number,
6018 -- CR changes
6019 ril.ship_to_customer_id
6020 -- Perf change
6021 -- ril.cust_production_seq_num
6022 FROM rlm_interface_headers rih,
6023 rlm_interface_lines_all ril
6024 WHERE rih.header_id = x_Sched_rec.header_id
6025 AND rih.org_id = ril.org_id
6026 AND ril.header_id = rih.header_id
6027 AND ril.industry_attribute15 = x_Group_rec.ship_from_org_id
6028 AND ril.process_status = rlm_core_sv.k_PS_AVAILABLE
6029 AND ril.customer_item_id = x_Group_rec.customer_item_id
6030 --AND ril.inventory_item_id = x_Group_rec.inventory_item_id
6031 AND ril.ship_to_address_id = x_Group_rec.ship_to_address_id
6032 GROUP BY rih.customer_id,
6033 ril.ship_from_org_id,
6034 ril.ship_to_address_id,
6035 ril.ship_to_org_id,
6036 ril.customer_item_id,
6037 ril.inventory_item_id,
6038 ril.industry_attribute15,
6039 ril.order_header_id,
6040 ril.blanket_number,
6041 ril.ship_to_customer_id
6042 -- Perf change
6043 -- ril.cust_production_seq_num
6044 ORDER BY ril.ship_to_address_id, ril.customer_item_id;
6045 /* we do not need to have the schedule item number as it prevents
6046 aggregation when there is a change in 2000 level in
6047 edi a new schedule item num is generated in this case there
6048 will be 2 lines which will be inserted but having the same
6049 match attributes */
6050
6051 IF (l_debug <> -1) THEN
6052 rlm_core_sv.dpop(C_SDEBUG);
6053 END IF;
6054
6055 EXCEPTION
6056 WHEN OTHERS THEN
6057 --
6058 IF (l_debug <> -1) THEN
6059 rlm_core_sv.dpop(C_SDEBUG,'EXCEPTION: '||SUBSTR(SQLERRM,1,200));
6060 END IF;
6061 --
6062 raise;
6063
6064 END InitializeMdGroup;
6065
6066 /*===========================================================================
6067
6068 FUNCTION FetchGroup
6069
6070 ===========================================================================*/
6071 FUNCTION FetchGroup(x_Group_ref IN OUT NOCOPY t_Cursor_ref,
6072 x_Group_rec IN OUT NOCOPY rlm_dp_sv.t_Group_rec)
6073 RETURN BOOLEAN
6074 IS
6075 BEGIN
6076
6077 IF (l_debug <> -1) THEN
6078 rlm_core_sv.dpush(C_SDEBUG,'FetchGroup');
6079 END IF;
6080
6081 FETCH x_Group_ref INTO
6082 x_Group_rec.customer_id,
6083 x_Group_rec.ship_from_org_id,
6084 x_Group_rec.ship_to_address_id,
6085 x_Group_rec.ship_to_org_id,
6086 x_Group_rec.customer_item_id,
6087 x_Group_rec.inventory_item_id,
6088 x_Group_rec.industry_attribute15,
6089 x_Group_rec.order_header_id,
6090 x_Group_rec.blanket_number,
6091 x_Group_rec.ship_to_customer_id;
6092 -- Perf change
6093 -- x_Group_rec.cust_production_seq_num;
6094 IF x_Group_ref%NOTFOUND THEN
6095 --
6096 IF (l_debug <> -1) THEN
6097 rlm_core_sv.dpop(C_SDEBUG, 'false');
6098 END IF;
6099 --
6100 RETURN(FALSE);
6101 ELSE
6102 --
6103 IF (l_debug <> -1) THEN
6104 rlm_core_sv.dpop(C_SDEBUG, 'true');
6105 END IF;
6106 --
6107 RETURN(TRUE);
6108 END IF;
6109
6110 EXCEPTION
6111 WHEN OTHERS THEN
6112 --
6113 IF (l_debug <> -1) THEN
6114 rlm_core_sv.dpop(C_SDEBUG,'EXCEPTION: '||SUBSTR(SQLERRM,1,200));
6115 END IF;
6116 --
6117 raise;
6118
6119 END FetchGroup;
6120
6121 /*===========================================================================
6122
6123 PROCEDURE CallSetups
6124
6125 ===========================================================================*/
6126 PROCEDURE CallSetups(x_Sched_rec IN RLM_INTERFACE_HEADERS%ROWTYPE,
6127 x_Group_rec IN OUT NOCOPY rlm_dp_sv.t_Group_rec)
6128 IS
6129
6130 v_SetupTerms_rec rlm_setup_terms_sv.setup_terms_rec_typ;
6131 v_TermsLevel VARCHAR2(30) := NULL;
6132 v_ReturnStatus BOOLEAN;
6133 v_ReturnMsg VARCHAR2(2000);
6134 e_SetupAPIFailed EXCEPTION;
6135 v_InterfaceLineID NUMBER;
6136 --
6137 BEGIN
6138 --
6139 IF (l_debug <> -1) THEN
6140 rlm_core_sv.dpush(C_SDEBUG,'CallSetups');
6141 rlm_core_sv.dlog(C_DEBUG,'x_Group_rec.ship_from_org_id',
6142 x_Group_rec.ship_from_org_id);
6143 rlm_core_sv.dlog(C_DEBUG,'x_Group_rec.customer_id',
6144 x_Group_rec.customer_id);
6145 rlm_core_sv.dlog(C_DEBUG,'x_Group_rec.ship_to_address_id',
6146 x_Group_rec.ship_to_address_id);
6147 rlm_core_sv.dlog(C_DEBUG,'x_Group_rec.customer_item_id',
6148 x_Group_rec.customer_item_id);
6149 END IF;
6150 --
6151 -- NOTE: call rla setups to populate setup info in the group rec:
6152 -- schedule precedence,match within/across strings
6153 -- firm disposition code and offset days, order header id
6154
6155 RLM_TPA_SV.get_setup_terms(x_Group_rec.ship_from_org_id,
6156 x_Group_rec.customer_id,
6157 x_Group_rec.ship_to_address_id,
6158 x_Group_rec.customer_item_id,
6159 v_TermsLevel,
6160 v_SetupTerms_rec,
6161 v_ReturnMsg,
6162 v_ReturnStatus);
6163 --
6164 IF (l_debug <> -1) THEN
6165 rlm_core_sv.dlog(C_DEBUG, 'v_TermsLevel', v_TermsLevel);
6166 rlm_core_sv.dlog(C_DEBUG, 'v_ReturnStatus', v_ReturnStatus);
6167 rlm_core_sv.dlog(C_DEBUG, 'v_ReturnMsg', v_ReturnMsg);
6168 rlm_core_sv.dlog(C_DEBUG,'v_SetupTerms_rec.schedule_hierarchy_code',
6169 v_SetupTerms_rec.schedule_hierarchy_code);
6170 rlm_core_sv.dlog(C_DEBUG,'v_SetupTerms_rec.header_id',
6171 v_SetupTerms_rec.header_id);
6172 rlm_core_sv.dlog(C_DEBUG,'v_SetupTerms_rec.blanket_number',
6173 v_SetupTerms_rec.blanket_number);
6174 END IF;
6175 --
6176 IF v_ReturnStatus THEN
6177 --
6178 IF SUBSTR(v_SetupTerms_rec.schedule_hierarchy_code,1,3) = 'PLN' THEN
6179 x_Group_rec.schedule_type_one := k_PLANNING;
6180 ELSIF SUBSTR(v_SetupTerms_rec.schedule_hierarchy_code,1,3) = 'SHP' THEN
6181 x_Group_rec.schedule_type_one := k_SHIPPING;
6182 ELSE
6183 x_Group_rec.schedule_type_one := k_SEQUENCED;
6184 END IF;
6185 --
6186 IF SUBSTR(v_SetupTerms_rec.schedule_hierarchy_code,5,3) = 'PLN' THEN
6187 x_Group_rec.schedule_type_two := k_PLANNING;
6188 ELSIF SUBSTR(v_SetupTerms_rec.schedule_hierarchy_code,5,3) = 'SHP' THEN
6189 x_Group_rec.schedule_type_two := k_SHIPPING;
6190 ELSE
6191 x_Group_rec.schedule_type_two := k_SEQUENCED;
6192 END IF;
6193 --
6194 IF SUBSTR(v_SetupTerms_rec.schedule_hierarchy_code,9,3) = 'PLN' THEN
6195 x_Group_rec.schedule_type_three := k_PLANNING;
6196 ELSIF SUBSTR(v_SetupTerms_rec.schedule_hierarchy_code,9,3) = 'SHP' THEN
6197 x_Group_rec.schedule_type_three := k_SHIPPING;
6198 ELSE
6199 x_Group_rec.schedule_type_three := k_SEQUENCED;
6200 END IF;
6201
6202 x_Group_rec.setup_terms_rec := v_SetupTerms_rec;
6203 --
6204 x_Group_rec.match_within := v_SetupTerms_rec.match_within_key;
6205 --
6206 x_Group_rec.match_across := v_SetupTerms_rec.match_across_key;
6207 --
6208 IF (l_debug <> -1) THEN
6209 rlm_core_sv.dlog(C_DEBUG,'x_Group_rec.match_within',
6210 x_Group_rec.match_within);
6211 END IF;
6212 --
6213 rlm_core_sv.populate_match_keys(x_Group_rec.match_within_rec,
6214 x_Group_rec.match_within);
6215 --
6216 IF (l_debug <> -1) THEN
6217 rlm_core_sv.dlog(C_DEBUG,'x_Group_rec.match_across',
6218 x_Group_rec.match_across);
6219 END IF;
6220 --
6221 rlm_core_sv.populate_match_keys(x_Group_rec.match_across_rec,
6222 x_Group_rec.match_across);
6223 --
6224 IF (l_debug <> -1) THEN
6225 rlm_core_sv.dlog(C_DEBUG,'x_Group_rec.setup_terms_rec.pln_frozen_day_from',
6226 x_Group_rec.setup_terms_rec.pln_frozen_day_from);
6227 rlm_core_sv.dlog(C_DEBUG,'x_Group_rec.setup_terms_rec.pln_frozen_day_to',
6228 x_Group_rec.setup_terms_rec.pln_frozen_day_to);
6229 rlm_core_sv.dlog(C_DEBUG,'x_Group_rec.setup_terms_rec.pln_firm_day_from',
6230 x_Group_rec.setup_terms_rec.pln_firm_day_from);
6231 rlm_core_sv.dlog(C_DEBUG,'x_Group_rec.setup_terms_rec.pln_firm_day_to',
6232 x_Group_rec.setup_terms_rec.pln_firm_day_to);
6233 rlm_core_sv.dlog(C_DEBUG,'x_Group_rec.setup_terms_rec.pln_forecast_day_from',
6234 x_Group_rec.setup_terms_rec.pln_forecast_day_from);
6235 rlm_core_sv.dlog(C_DEBUG,'x_Group_rec.setup_terms_rec.pln_forecast_day_to',
6236 x_Group_rec.setup_terms_rec.pln_forecast_day_to);
6237 rlm_core_sv.dlog(C_DEBUG,'x_Group_rec.setup_terms_rec.shp_frozen_day_from',
6238 x_Group_rec.setup_terms_rec.shp_frozen_day_from);
6239 rlm_core_sv.dlog(C_DEBUG,'x_Group_rec.setup_terms_rec.shp_frozen_day_to',
6240 x_Group_rec.setup_terms_rec.shp_frozen_day_to);
6241 rlm_core_sv.dlog(C_DEBUG,'x_Group_rec.setup_terms_rec.shp_firm_day_from',
6242 x_Group_rec.setup_terms_rec.shp_firm_day_from);
6243 rlm_core_sv.dlog(C_DEBUG,'x_Group_rec.setup_terms_rec.shp_firm_day_to',
6244 x_Group_rec.setup_terms_rec.shp_firm_day_to);
6245 rlm_core_sv.dlog(C_DEBUG,'x_Group_rec.setup_terms_rec.shp_forecast_day_from',
6246 x_Group_rec.setup_terms_rec.shp_forecast_day_from);
6247 rlm_core_sv.dlog(C_DEBUG,'x_Group_rec.setup_terms_rec.shp_forecast_day_to',
6248 x_Group_rec.setup_terms_rec.shp_forecast_day_to);
6249 rlm_core_sv.dlog(C_DEBUG,'x_Group_rec.setup_terms_rec.seq_frozen_day_from',
6250 x_Group_rec.setup_terms_rec.seq_frozen_day_from);
6251 rlm_core_sv.dlog(C_DEBUG,'x_Group_rec.setup_terms_rec.seq_frozen_day_to',
6252 x_Group_rec.setup_terms_rec.seq_frozen_day_to);
6253 rlm_core_sv.dlog(C_DEBUG,'x_Group_rec.setup_terms_rec.seq_firm_day_from',
6254 x_Group_rec.setup_terms_rec.seq_firm_day_from);
6255 rlm_core_sv.dlog(C_DEBUG,'x_Group_rec.setup_terms_rec.seq_firm_day_to',
6256 x_Group_rec.setup_terms_rec.seq_firm_day_to);
6257 rlm_core_sv.dlog(C_DEBUG,'x_Group_rec.setup_terms_rec.seq_forecast_day_from',
6258 x_Group_rec.setup_terms_rec.seq_forecast_day_from);
6259 rlm_core_sv.dlog(C_DEBUG,'x_Group_rec.setup_terms_rec.seq_forecast_day_to',
6260 x_Group_rec.setup_terms_rec.seq_forecast_day_to);
6261 rlm_core_sv.dlog(C_DEBUG,'x_Group_rec.schedule_type_one',
6262 x_Group_rec.schedule_type_one);
6263 rlm_core_sv.dlog(C_DEBUG,'x_Group_rec.schedule_type_two',
6264 x_Group_rec.schedule_type_two);
6265 rlm_core_sv.dlog(C_DEBUG,'x_Group_rec.schedule_type_three',
6266 x_Group_rec.schedule_type_three);
6267 rlm_core_sv.dlog(C_DEBUG,'x_Group_rec.setup_terms_rec.use_edi_sdp_code_flag',
6268 x_Group_rec.setup_terms_rec.use_edi_sdp_code_flag);
6269 rlm_core_sv.dlog(C_DEBUG,'x_Group_rec.setup_terms_rec.ship_delivery_rule_name',
6270 x_Group_rec.Setup_terms_rec.ship_delivery_rule_name);
6271 rlm_core_sv.dlog(C_DEBUG,'x_Group_rec.setup_terms_rec.ship_method',
6272 x_Group_rec.setup_terms_rec.ship_method);
6273 rlm_core_sv.dlog(C_DEBUG,'x_Group_rec.setup_terms_rec.intransit_time',
6274 x_Group_rec.setup_terms_rec.intransit_time);
6275 rlm_core_sv.dlog(C_DEBUG,'x_Group_rec.setup_terms_rec.customer_rcv_calendar_cd',
6276 x_Group_rec.setup_terms_rec.customer_rcv_calendar_cd);
6277 rlm_core_sv.dlog(C_DEBUG,'x_Group_rec.setup_terms_rec.supplier_shp_calendar_cd',
6278 x_Group_rec.setup_terms_rec.supplier_shp_calendar_cd);
6279 rlm_core_sv.dlog(C_DEBUG,'x_Group_rec.setup_terms_rec.time_uom_code',
6280 x_Group_rec.setup_terms_rec.time_uom_code);
6281 rlm_core_sv.dlog(C_DEBUG,'x_Group_rec.setup_terms_rec.cum_control_code',
6282 x_Group_rec.setup_terms_rec.cum_control_code);
6283 rlm_core_sv.dlog(C_DEBUG,'x_Group_rec.setup_terms_rec.exclude_non_workdays_flag',
6284 x_Group_rec.setup_terms_rec.exclude_non_workdays_flag);
6285 END IF;
6286 --
6287 ELSE
6288 --
6289 IF (l_debug <> -1) THEN
6290 rlm_core_sv.dlog(C_DEBUG,'setups failed');
6291 END IF;
6292 --
6293 raise e_SetupAPIFailed;
6294 --
6295 END IF;
6296 --
6297 IF (l_debug <> -1) THEN
6298 rlm_core_sv.dpop(C_SDEBUG);
6299 END IF;
6300 --
6301 EXCEPTION
6302 WHEN e_SetupAPIFailed THEN
6303 --
6304 BEGIN
6305 --
6306 SELECT line_id
6307 INTO v_InterfaceLineId
6308 FROM rlm_interface_lines
6309 WHERE header_id = x_Sched_rec.header_id
6310 AND ship_from_org_id = x_Group_rec.ship_from_org_id
6311 AND ship_to_address_id = x_Group_rec.ship_to_address_id
6312 AND customer_item_id = x_Group_rec.customer_item_id
6313 AND rownum = 1;
6314 --
6315 EXCEPTION
6316 --
6317 WHEN NO_DATA_FOUND THEN
6318 v_InterfaceLineId := NULL;
6319 --
6320 END;
6321 --
6322 rlm_message_sv.app_error(
6323 x_ExceptionLevel => rlm_message_sv.k_error_level,
6324 x_MessageName => 'RLM_SETUPAPI_FAILED',
6325 x_ChildMessageName => v_SetupTerms_rec.msg_name,
6326 x_InterfaceHeaderId => x_sched_rec.header_id,
6327 x_InterfaceLineId => v_InterfaceLineId,
6328 x_ScheduleHeaderId => x_sched_rec.schedule_header_id,
6329 x_ScheduleLineId => NULL,
6330 x_OrderHeaderId => x_group_rec.setup_terms_rec.header_id,
6331 x_OrderLineId => NULL,
6332 x_GroupInfo => TRUE,
6333 x_Token1 => 'ERROR',
6334 x_value1 => v_ReturnMsg);
6335 --
6336 IF (l_debug <> -1) THEN
6337 rlm_core_sv.dpop(C_SDEBUG);
6338 END IF;
6339 --
6340 raise e_GroupError;
6341 --
6342 WHEN OTHERS THEN
6343 --
6344 IF (l_debug <> -1) THEN
6345 rlm_core_sv.dpop(C_SDEBUG,'EXCEPTION: '||SUBSTR(SQLERRM,1,200));
6346 END IF;
6347 --
6348 raise;
6349
6350 END CallSetups;
6351
6352 /*=========================================================================
6353
6354 PROCEDURE NAME: LockLines
6355
6356 ===========================================================================*/
6357
6358 FUNCTION LockLines (x_headerId IN NUMBER,
6359 x_GroupRec IN rlm_dp_sv.t_Group_rec)
6360 RETURN BOOLEAN
6361 IS
6362 --
6363 x_progress VARCHAR2(3) := '010';
6364 --
6365 CURSOR c IS
6366 SELECT *
6367 FROM rlm_interface_lines_all
6368 WHERE header_id = x_HeaderId
6369 --and inventory_item_id = x_GroupRec.inventory_item_id
6370 and customer_item_id = x_GroupRec.customer_item_id
6371 and ship_from_org_id = x_GroupRec.ship_from_org_id
6372 and ship_to_org_id = x_GroupRec.ship_to_org_id
6373 --and schedule_item_num = x_GroupRec.schedule_item_num
6374 and order_header_id = x_GroupRec.Order_header_id
6375 -- Perf change
6376 --and cust_production_seq_num = x_GroupRec.cust_production_seq_num
6377 and process_status = rlm_core_sv.k_PS_AVAILABLE
6378 FOR UPDATE NOWAIT;
6379 --
6380 CURSOR c_blanket IS
6381 SELECT *
6382 FROM rlm_interface_lines_all
6383 WHERE header_id = x_HeaderId
6384 and customer_item_id = x_GroupRec.customer_item_id
6385 and ship_from_org_id = x_GroupRec.ship_from_org_id
6386 and ship_to_org_id = x_GroupRec.ship_to_org_id
6387 and blanket_number = x_GroupRec.blanket_number
6388 and process_status = rlm_core_sv.k_PS_AVAILABLE
6389 FOR UPDATE NOWAIT;
6390
6391 BEGIN
6392 --
6393 IF (l_debug <> -1) THEN
6394 rlm_core_sv.dpush(C_SDEBUG,'LockLines');
6395 rlm_core_sv.dlog(C_DEBUG,'Locking RLM_INTERFACE_LINES');
6396 END IF;
6397 --
6398 IF x_GroupRec.blanket_number is NULL THEN
6399 --
6400 OPEN c;
6401 CLOSE c;
6402 --
6403 ELSE
6404 --
6405 OPEN c_blanket;
6406 CLOSE c_blanket;
6407 --
6408 END IF;
6409 --
6410 IF (l_debug <> -1) THEN
6411 rlm_core_sv.dpop(C_SDEBUG);
6412 END IF;
6413 --
6414 RETURN(TRUE);
6415
6416 EXCEPTION
6417 WHEN APP_EXCEPTION.RECORD_LOCK_EXCEPTION THEN
6418 --
6419 IF (l_debug <> -1) THEN
6420 rlm_core_sv.dpop(C_SDEBUG);
6421 END IF;
6422 --
6423 RETURN(FALSE);
6424
6425 WHEN OTHERS THEN
6426 rlm_message_sv.sql_error('rlm_managedemand_sv.LockLines', x_progress);
6427 --
6428 IF (l_debug <> -1) THEN
6429 rlm_core_sv.dlog(C_DEBUG,'progress',x_Progress);
6430 rlm_core_sv.dpop(C_SDEBUG,'EXCEPTION: OTHER - sql error');
6431 END IF;
6432 --
6433 RAISE;
6434
6435 END LockLines;
6436
6437 /*=========================================================================
6438
6439 PROCEDURE NAME: UpdateHeaderStatus
6440
6441 ===========================================================================*/
6442
6443 PROCEDURE UpdateHeaderStatus (x_HeaderId IN NUMBER,
6444 x_ScheduleHeaderId IN NUMBER,
6445 x_ProcessStatus IN NUMBER )
6446 IS
6447
6448 x_progress VARCHAR2(3) := '010';
6449
6450 BEGIN
6451 --
6452 IF (l_debug <> -1) THEN
6453 rlm_core_sv.dpush(C_SDEBUG,'UpdateHeaderStatus');
6454 rlm_core_sv.dlog(C_DEBUG,'x_HeaderId',x_HeaderId);
6455 rlm_core_sv.dlog(C_DEBUG,'x_ScheduleHeaderId',x_ScheduleHeaderId);
6456 rlm_core_sv.dlog(C_DEBUG,'x_ProcessStatus',x_ProcessStatus);
6457 END IF;
6458 --
6459 UPDATE rlm_interface_headers_all
6460 SET process_status = x_ProcessStatus
6461 WHERE header_id = x_HeaderId;
6462 --
6463 IF (l_debug <> -1) THEN
6464 rlm_core_sv.dlog(C_DEBUG,'Number of Interface header updated',SQL%ROWCOUNT);
6465 END IF;
6466 --
6467 UPDATE rlm_schedule_headers_all
6468 SET process_status = x_ProcessStatus
6469 WHERE header_id = x_ScheduleHeaderId;
6470 --
6471 IF (l_debug <> -1) THEN
6472 rlm_core_sv.dlog(C_DEBUG,'Number of schedule header updated',SQL%ROWCOUNT);
6473 END IF;
6474 --
6475 IF (l_debug <> -1) THEN
6476 rlm_core_sv.dpop(C_SDEBUG);
6477 END IF;
6478 --
6479 EXCEPTION
6480 WHEN NO_DATA_FOUND THEN
6481 --
6482 IF (l_debug <> -1) THEN
6483 rlm_core_sv.dlog(C_DEBUG,'NO DATA FOUND ERROR',x_Progress);
6484 rlm_core_sv.dpop(C_SDEBUG);
6485 END IF;
6486
6487 WHEN OTHERS THEN
6488 rlm_message_sv.sql_error('rlm_managedemand_sv.UpdateHeaderStatus',x_progress);
6489 --
6490 IF (l_debug <> -1) THEN
6491 rlm_core_sv.dlog(C_DEBUG,'progress',x_Progress);
6492 rlm_core_sv.dpop(C_SDEBUG,'EXCEPTION: OTHER - sql error');
6493 END IF;
6494
6495 END UpdateHeaderStatus;
6496
6497 /*=========================================================================
6498
6499 PROCEDURE NAME: UpdateGroupStatus
6500
6501 ===========================================================================*/
6502
6503 PROCEDURE UpdateGroupStatus (x_HeaderId IN NUMBER,
6504 x_ScheduleHeaderId IN NUMBER,
6505 x_GroupRec IN rlm_dp_sv.t_Group_rec,
6506 x_ProcessStatus IN NUMBER,
6507 x_UpdateLevel IN VARCHAR2)
6508 IS
6509 --
6510 x_progress VARCHAR2(3) := '010';
6511 --
6512 BEGIN
6513 --
6514 IF (l_debug <> -1) THEN
6515 rlm_core_sv.dpush(C_SDEBUG,'UpdateGroupStatus');
6516 rlm_core_sv.dlog(C_DEBUG,'x_UpdateLevel',x_UpdateLevel);
6517 rlm_core_sv.dlog(C_DEBUG,'x_ProcessStatus',x_ProcessStatus);
6518 rlm_core_sv.dlog(C_DEBUG,'x_HeaderId',x_HeaderId);
6519 rlm_core_sv.dlog(C_DEBUG,'x_ScheduleHeaderId',x_ScheduleHeaderId);
6520 END IF;
6521 --
6522 IF x_UpdateLevel = 'GROUP' THEN
6523 --
6524 IF (l_debug <> -1) THEN
6525 rlm_core_sv.dlog(C_DEBUG,'x_GroupRec.inventory_item_id',x_GroupRec.inventory_item_id);
6526 rlm_core_sv.dlog(C_DEBUG,'x_GroupRec.ship_from_org_id',x_GroupRec.ship_from_org_id);
6527 rlm_core_sv.dlog(C_DEBUG,'x_GroupRec.ship_to_address_id',x_GroupRec.ship_to_address_id);
6528 rlm_core_sv.dlog(C_DEBUG,'x_GroupRec.Order_header_id',x_GroupRec.Order_header_id);
6529 /*rlm_core_sv.dlog(C_DEBUG,'x_GroupRec.cust_production_seq_num',
6530 x_GroupRec.cust_production_seq_num);*/
6531 END IF;
6532
6533 --
6534 UPDATE rlm_interface_lines
6535 SET process_status = x_ProcessStatus
6536 WHERE header_id = x_HeaderId
6537 and inventory_item_id = x_GroupRec.inventory_item_id
6538 and ship_from_org_id = x_GroupRec.ship_from_org_id
6539 and ship_to_address_id = x_GroupRec.ship_to_address_id
6540 and order_header_id = x_GroupRec.Order_header_id
6541 -- Perf change
6542 /*and nvl(cust_production_seq_num,k_VNULL) =
6543 nvl(x_GroupRec.cust_production_seq_num, k_VNULL)*/
6544 and process_status IN (rlm_core_sv.k_PS_AVAILABLE,
6545 rlm_core_sv.k_PS_FROZEN_FIRM);
6546 --
6547 IF (l_debug <> -1) THEN
6548 rlm_core_sv.dlog(C_DEBUG,'Number of Interface lines updated',SQL%ROWCOUNT);
6549 END IF;
6550 --
6551 UPDATE rlm_schedule_lines
6552 SET process_status = x_ProcessStatus
6553 WHERE header_id = x_ScheduleHeaderId
6554 and inventory_item_id = x_GroupRec.inventory_item_id
6555 and ship_from_org_id = x_GroupRec.ship_from_org_id
6556 and ship_to_address_id = x_GroupRec.ship_to_address_id
6557 -- and order_header_id = x_GroupRec.Order_header_id
6558 -- Perf change
6559 /*and nvl(cust_production_seq_num, k_VNULL) =
6560 nvl(x_GroupRec.cust_production_seq_num, k_VNULL)*/
6561 and process_status IN (rlm_core_sv.k_PS_AVAILABLE,
6562 rlm_core_sv.k_PS_FROZEN_FIRM);
6563 --
6564 IF (l_debug <> -1) THEN
6565 rlm_core_sv.dlog(C_DEBUG,'Number of schedule lines updated',SQL%ROWCOUNT);
6566 END IF;
6567 --
6568 ELSIF x_UpdateLevel = 'ALL' THEN
6569 --
6570 UPDATE rlm_interface_lines
6571 SET process_status = x_ProcessStatus
6572 WHERE header_id = x_HeaderId
6573 and process_status = rlm_core_sv.k_PS_AVAILABLE;
6574 --
6575 IF (l_debug <> -1) THEN
6576 rlm_core_sv.dlog(C_DEBUG,'Number of Interface lines updated',SQL%ROWCOUNT);
6577 END IF;
6578 --
6579 UPDATE rlm_schedule_lines
6580 SET process_status = x_ProcessStatus
6581 WHERE header_id = x_ScheduleHeaderId
6582 and process_status = rlm_core_sv.k_PS_AVAILABLE;
6583 --
6584 IF (l_debug <> -1) THEN
6585 rlm_core_sv.dlog(C_DEBUG,'Number of schedule lines updated',SQL%ROWCOUNT);
6586 END IF;
6587 --
6588 END IF;
6589 --
6590 IF (l_debug <> -1) THEN
6591 rlm_core_sv.dpop(C_SDEBUG);
6592 END IF;
6593 --
6594 EXCEPTION
6595 --
6596 WHEN NO_DATA_FOUND THEN
6597 --
6598 IF (l_debug <> -1) THEN
6599 rlm_core_sv.dlog(C_DEBUG,'NO DATA FOUND ERROR',x_Progress);
6600 rlm_core_sv.dpop(C_SDEBUG);
6601 END IF;
6602 --
6603 WHEN OTHERS THEN
6604 --
6605 rlm_message_sv.sql_error('rlm_managedemand_sv.UpdateGroupStatus',x_progress);
6606 --
6607 IF (l_debug <> -1) THEN
6608 rlm_core_sv.dlog(C_DEBUG,'progress',x_Progress);
6609 rlm_core_sv.dpop(C_SDEBUG,'EXCEPTION: OTHER - sql error');
6610 END IF;
6611 --
6612 END UpdateGroupStatus;
6613
6614 /*=============================================================================
6615
6616 PROCEDURE NAME: GetConvertedLeadTime
6617
6618 ==============================================================================*/
6619 FUNCTION GetConvertedLeadTime (x_LeadTime IN NUMBER,
6620 x_LeadUOM IN VARCHAR2)
6621 RETURN NUMBER
6622 IS
6623 --
6624 x_progress VARCHAR2(3) := '010';
6625 --
6626 BEGIN
6627 --
6628 IF (l_debug <> -1) THEN
6629 rlm_core_sv.dpush(C_SDEBUG,'apply_lead_time');
6630 rlm_core_sv.dlog(C_DEBUG,' x_LeadTime',x_LeadTime);
6631 rlm_core_sv.dlog(C_DEBUG,' x_LeadUOM ',x_LeadUom);
6632 END IF;
6633 --
6634 IF (x_LeadUom = 'DAY') THEN
6635 --
6636 IF (l_debug <> -1) THEN
6637 rlm_core_sv.dpop(C_SDEBUG);
6638 END IF;
6639 --
6640 RETURN x_LeadTime;
6641 --
6642 ELSIF (x_LeadUom = 'HR') THEN
6643 --
6644 IF (l_debug <> -1) THEN
6645 rlm_core_sv.dpop(C_SDEBUG);
6646 END IF;
6647 --
6648 RETURN (x_LeadTime/24);
6649 --
6650 ELSE
6651 --
6652 IF (l_debug <> -1) THEN
6653 rlm_core_sv.dpop(C_SDEBUG);
6654 END IF;
6655 --
6656 RETURN x_LeadTime;
6657 --
6658 END IF;
6659 --
6660 EXCEPTION
6661 --
6662 WHEN OTHERS THEN
6663 rlm_message_sv.sql_error('rlm_managedemand_sv.GetConvertedLeadTime',
6664 x_progress);
6665 --
6666 IF (l_debug <> -1) THEN
6667 rlm_core_sv.dpop(C_SDEBUG);
6668 END IF;
6669 --
6670 raise;
6671
6672 END GetConvertedLeadTime;
6673
6674 /*===========================================================================
6675
6676 FUNCTION NAME: GetTPContext
6677
6678 ===========================================================================*/
6679 PROCEDURE GetTPContext( x_sched_rec IN RLM_INTERFACE_HEADERS%ROWTYPE,
6680 x_group_rec IN rlm_dp_sv.t_Group_rec,
6681 x_customer_number OUT NOCOPY VARCHAR2,
6682 x_ship_to_ece_locn_code OUT NOCOPY VARCHAR2,
6683 x_bill_to_ece_locn_code OUT NOCOPY VARCHAR2,
6684 x_inter_ship_to_ece_locn_code OUT NOCOPY VARCHAR2,
6685 x_tp_group_code OUT NOCOPY VARCHAR2)
6686 IS
6687 --
6688 v_Progress VARCHAR2(3) := '010';
6689 --
6690 BEGIN
6691 --
6692 IF (l_debug <> -1) THEN
6693 rlm_core_sv.dpush(C_SDEBUG,'GetTPContext');
6694 rlm_core_sv.dlog(C_DEBUG,'customer_id', x_sched_rec.customer_id);
6695 rlm_core_sv.dlog(C_DEBUG,'x_sched_rec.ece_tp_translator_code',
6696 x_sched_rec.ece_tp_translator_code);
6697 rlm_core_sv.dlog(C_DEBUG,'x_sched_rec.ece_tp_location_code_ext',
6698 x_sched_rec.ece_tp_location_code_ext);
6699 rlm_core_sv.dlog(C_DEBUG,'x_group_rec.ship_to_address_id',
6700 x_group_rec.ship_to_address_id);
6701 END IF;
6702 --
6703 IF x_sched_rec.ECE_TP_LOCATION_CODE_EXT is NOT NULL THEN
6704 -- Following query is changed as per TCA obsolescence project.
6705 SELECT ETG.TP_GROUP_CODE
6706 INTO x_tp_group_code
6707 FROM ECE_TP_GROUP ETG,
6708 ECE_TP_HEADERS ETH,
6709 HZ_CUST_ACCT_SITES ACCT_SITE
6710 WHERE ETG.TP_GROUP_ID = ETH.TP_GROUP_ID
6711 and ETH.TP_HEADER_ID = ACCT_SITE.TP_HEADER_ID
6712 and ACCT_SITE.CUST_ACCOUNT_ID = x_sched_rec.CUSTOMER_ID
6713 and ACCT_SITE.ECE_TP_LOCATION_CODE = x_Sched_rec.ECE_TP_LOCATION_CODE_EXT ;
6714
6715 ELSE
6716 x_tp_group_code := x_sched_rec.ECE_TP_TRANSLATOR_CODE;
6717 END IF;
6718 --
6719
6720 BEGIN
6721 --
6722 -- Following query is changed as per TCA obsolescence project.
6723 SELECT ece_tp_location_code
6724 INTO x_ship_to_ece_locn_code
6725 FROM HZ_CUST_ACCT_SITES ACCT_SITE
6726 WHERE ACCT_SITE.CUST_ACCT_SITE_ID = x_group_rec.ship_to_address_id;
6727 --
6728 EXCEPTION
6729 WHEN NO_DATA_FOUND THEN
6730 x_ship_to_ece_locn_code := NULL;
6731 END;
6732
6733 -- BUG 2204888 : Since we do not group by bill_to anymore, we would not
6734 -- have the bill_to in x_group_rec. Code has been removed as a part of
6735 -- TCA OBSOLESCENCE PROJECT.
6736
6737 --
6738 IF x_sched_rec.customer_id is NOT NULL THEN
6739 --
6740 -- Following query is changed as per TCA obsolescence project.
6741 SELECT account_number
6742 INTO x_customer_number
6743 FROM HZ_CUST_ACCOUNTS CUST_ACCT
6744 WHERE CUST_ACCT.CUST_ACCOUNT_ID = x_sched_rec.customer_id;
6745 --
6746 END IF;
6747 --
6748 IF (l_debug <> -1) THEN
6749 rlm_core_sv.dlog(C_DEBUG, 'customer_number', x_customer_number);
6750 rlm_core_sv.dlog(C_DEBUG,'x_ship_to_ece_locn_code', x_ship_to_ece_locn_code);
6751 rlm_core_sv.dlog(C_DEBUG, 'x_bill_to_ece_locn_code', x_bill_to_ece_locn_code);
6752 rlm_core_sv.dlog(C_DEBUG, 'x_inter_ship_to_ece_locn_code', x_inter_ship_to_ece_locn_code);
6753 rlm_core_sv.dlog(C_DEBUG, 'x_tp_group_code',x_tp_group_code);
6754 rlm_core_sv.dpop(C_SDEBUG);
6755 END IF;
6756 --
6757 EXCEPTION
6758 --
6759 WHEN NO_DATA_FOUND THEN
6760 --
6761 x_customer_number := NULL;
6762 --
6763 IF (l_debug <> -1) THEN
6764 rlm_core_sv.dlog(C_DEBUG, 'No data found for' , x_sched_rec.customer_id);
6765 rlm_core_sv.dpop(C_SDEBUG);
6766 END IF;
6767 --
6768 WHEN OTHERS THEN
6769 --
6770 rlm_message_sv.sql_error('rlm_ManageDemand_sv.GetTPContext',v_Progress);
6771 --
6772 IF (l_debug <> -1) THEN
6773 rlm_core_sv.dpop(C_SDEBUG,'EXCEPTION: '||SUBSTR(SQLERRM,1,200));
6774 END IF;
6775 --
6776 raise;
6777
6778 END GetTPContext;
6779
6780 /*===========================================================================
6781
6782 FUNCTION CalculateIntransitQty
6783
6784 ===========================================================================*/
6785
6786 /*any changes to this package may be incorporated in the function rlm_managedemand_sv.GetAllIntransitQty and rlm_rd_sv.SynchronizeShipments and vice versa */
6787
6788
6789 FUNCTION CalculateIntransitQty(x_Sched_rec IN RLM_INTERFACE_HEADERS%ROWTYPE,
6790 x_Group_rec IN rlm_dp_sv.t_Group_rec)
6791 RETURN NUMBER
6792 IS
6793 --
6794 v_InTransitQty NUMBER := 0;
6795 --
6796 v_count NUMBER DEFAULT 0 ;
6797 v_shipment_date DATE;
6798 v_receipt_date DATE;
6799 v_date DATE;
6800 v_item_detail_subtype VARCHAR2(80);
6801 v_intransit_time NUMBER := 0;
6802 --
6803 x_progress VARCHAR2(3) DEFAULT '010';
6804 v_return_status VARCHAR2(240);
6805 --
6806 v_intransit_calc_basis VARCHAR2(15);
6807 v_shipper_rec WSH_RLM_INTERFACE.t_shipper_rec;
6808 v_match_rec WSH_RLM_INTERFACE.t_optional_match_rec;
6809 v_match_within_rule RLM_CORE_SV.t_Match_rec;
6810 v_match_across_rule RLM_CORE_SV.t_Match_rec;
6811 v_min_horizon_date VARCHAR2(30); --Bugfix 6265953
6812 v_match_rec_shipline RLM_RD_SV.t_generic_rec;--Bugfix 6265953
6813 v_Group_rec rlm_dp_sv.t_Group_rec; --Bugfix 6265953
6814 --
6815
6816 BEGIN
6817
6818 IF (l_debug <> -1) THEN
6819 rlm_core_sv.dpush(C_SDEBUG,'CalculateIntransitQty');
6820 END IF;
6821 --
6822 v_intransit_calc_basis := UPPER(x_Group_rec.setup_terms_rec.intransit_calc_basis);
6823 --
6824 IF (l_debug <> -1) THEN
6825 rlm_core_sv.dlog(C_DEBUG, 'Intransit Calc. basis', v_intransit_calc_basis);
6826 END IF;
6827 --
6828 IF (v_intransit_calc_basis = k_NONE OR v_intransit_calc_basis is NULL) THEN
6829 --
6830 IF (l_debug <> -1) THEN
6831 rlm_core_sv.dlog(C_DEBUG, 'Processing rule set to NONE or NULL');
6832 rlm_core_sv.dlog(C_DEBUG, 'All shipments assumed to be received');
6833 rlm_core_sv.dpop(C_SDEBUG);
6834 END IF;
6835 --
6836 RETURN v_IntransitQty;
6837 --
6838 ELSIF v_intransit_calc_basis IN (k_RECEIPT, k_SHIPMENT) THEN --Bugfix 6265953
6839 --
6840 RLM_RD_SV.InitializeIntransitParam(x_Sched_rec, x_Group_rec, v_intransit_calc_basis,
6841 v_Shipper_rec, v_Shipment_date);
6842 --
6843 InitializeMatchCriteria(v_match_within_rule, v_match_across_rule);
6844 --
6845 RLM_EXTINTERFACE_SV.getIntransitQty (
6846 x_Group_rec.customer_id,
6847 x_Group_rec.ship_to_org_id,
6848 x_Group_rec.intmed_ship_to_org_id, --Bugfix 5911991
6849 x_Group_rec.ship_from_org_id,
6850 x_Group_rec.inventory_item_id,
6851 x_Group_rec.customer_item_id,
6852 x_Group_rec.order_header_id,
6853 NVL(x_Group_rec.blanket_number, k_NULL),
6854 x_Sched_rec.org_id,
6855 x_Sched_rec.schedule_type,
6856 v_Shipper_Rec,
6857 v_Shipment_date,
6858 v_match_within_rule,
6859 v_match_across_rule,
6860 v_match_rec,
6861 x_Sched_rec.header_id,
6862 v_InTransitQty,
6863 v_return_status);
6864 --
6865 IF (l_debug <> -1) THEN
6866 rlm_core_sv.dlog(C_DEBUG, 'v_return_status', v_return_status);
6867 rlm_core_sv.dlog(C_DEBUG, 'v_InTransitQty', v_InTransitQty);
6868 END IF;
6869 --
6870 IF v_return_status = WSH_UTIL_CORE.G_RET_STS_ERROR THEN
6871 --
6872 IF (l_debug <> -1) THEN
6873 rlm_core_sv.dpop(C_SDEBUG, 'GetIntransitQtyAPI Failed');
6874 END IF;
6875 --
6876 RAISE e_group_error;
6877 --
6878 ELSIF v_return_status = WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR THEN
6879 --
6880 IF (l_debug <> -1) THEN
6881 rlm_core_sv.dpop(C_SDEBUG, 'GetIntransitQtyAPI Failed');
6882 END IF;
6883 --
6884 RAISE e_group_error;
6885 --
6886 END IF;
6887 --
6888 IF (l_debug <> -1) THEN
6889 rlm_core_sv.dlog(C_DEBUG, 'v_InTransitQty', v_InTransitQty);
6890 rlm_core_sv.dpop(C_SDEBUG);
6891 END IF;
6892 --
6893 RETURN (v_InTransitQty);
6894 --
6895 --Bugfix 6265953 START
6896 ELSIF (v_intransit_calc_basis IN ('SHIPPED_LINES','PART_SHIP_LINES')) THEN
6897
6898 v_Group_rec := x_Group_rec;
6899
6900 v_Group_rec.match_within_rec := v_match_within_rule;
6901 v_Group_rec.match_across_rec := v_match_across_rule;
6902 v_match_rec_shipline.industry_attribute15 := x_Group_rec.industry_attribute15;
6903
6904 --Purchase Order
6905 IF x_Group_rec.setup_terms_rec.cum_control_code IN ('CUM_BY_DATE_PO','CUM_BY_PO_ONLY') THEN
6906 --
6907 IF (l_debug <> -1) THEN
6908 rlm_core_sv.dlog(C_SDEBUG, 'Manage Demand - CUM BY PURCHASE ORDER');
6909 END IF;
6910
6911 IF x_group_rec.match_across_rec.cust_po_number = 'Y' THEN
6912 v_Group_rec.match_across_rec.cust_po_number := 'Y';
6913 ELSE
6914 v_Group_rec.match_within_rec.cust_po_number :='Y';
6915 END IF;
6916 --
6917 v_match_rec_shipline.cust_po_number := g_CUM_tab(g_count).purchase_order_number; --Bugfix 7007638
6918 END IF; /*Purchase Order*/
6919
6920 --Record Keeping Year
6921 IF x_Group_rec.setup_terms_rec.cum_control_code IN ('CUM_BY_DATE_RECORD_YEAR') THEN
6922 --
6923 IF (l_debug <> -1) THEN
6924 rlm_core_sv.dlog(C_SDEBUG, 'Manage Demand - CUM BY RECORD YEAR');
6925 END IF;
6926
6927 IF x_group_rec.match_across_rec.industry_attribute1 = 'Y' THEN
6928 v_Group_rec.match_across_rec.industry_attribute1 := 'Y';
6929 ELSE
6930 v_Group_rec.match_within_rec.industry_attribute1 :='Y';
6931 END IF;
6932 --
6933 v_match_rec_shipline.industry_attribute1 := g_CUM_tab(g_count).cust_record_year; --Bugfix 7007638
6934 END IF; /*Record Keeping Year*/
6935
6936 SELECT TO_CHAR(TRUNC(min(il.start_date_time)), 'RRRR/MM/DD HH24:MI:SS')
6937 INTO v_min_horizon_date
6938 FROM rlm_interface_lines il,
6939 rlm_schedule_lines sl
6940 WHERE il.header_id = x_Sched_rec.header_id
6941 AND il.ship_from_org_id = x_Group_rec.ship_from_org_id
6942 AND il.ship_to_org_id = x_Group_rec.ship_to_org_id
6943 AND il.inventory_item_id = x_Group_rec.inventory_item_id
6944 AND il.customer_item_id = x_Group_rec.customer_item_id
6945 AND il.schedule_line_id = sl.line_id
6946 AND NVL(il.item_detail_type, ' ')
6947 <> rlm_manage_demand_sv.k_SHIP_RECEIPT_INFO
6948 AND sl.qty_type_code = rlm_manage_demand_sv.k_ACTUAL;
6949
6950
6951 --
6952 IF (v_min_horizon_date IS NOT NULL ) THEN
6953 --
6954
6955 IF (l_debug <> -1) THEN
6956 rlm_core_sv.dlog(C_DEBUG, 'v_min_request_date', v_min_horizon_date);
6957 END IF;
6958 --
6959 IF TO_DATE(v_min_horizon_date,'RRRR/MM/DD HH24:MI:SS') > x_Sched_rec.sched_horizon_start_date THEN
6960 --
6961 v_min_horizon_date:= TO_CHAR(TRUNC(x_Sched_rec.sched_horizon_start_date), 'RRRR/MM/DD HH24:MI:SS');
6962 --
6963 END IF;
6964 --
6965 IF (l_debug <> -1) THEN
6966 rlm_core_sv.dlog(C_DEBUG, 'v_min_horizon_date', v_min_horizon_date);
6967 END IF;
6968
6969 RLM_EXTINTERFACE_SV.GetIntransitShippedLines(x_Sched_rec,
6970 v_Group_rec,
6971 v_match_rec_shipline,
6972 v_min_horizon_date,
6973 v_InTransitQty);
6974 IF (l_debug <> -1) THEN
6975 rlm_core_sv.dpop(C_SDEBUG, v_IntransitQty);
6976 END IF;
6977
6978 RETURN v_IntransitQty;
6979
6980 END IF;
6981
6982 END IF;
6983 --Bugfix 6265953 END
6984
6985 --
6986 EXCEPTION
6987 --
6988 WHEN e_group_error THEN
6989 --
6990 RAISE;
6991 --
6992 WHEN OTHERS THEN
6993 rlm_message_sv.sql_error('rlm_rd_sv.CalculateIntransitQty',x_progress);
6994 --
6995 IF (l_debug <> -1) THEN
6996 rlm_core_sv.dpop(C_SDEBUG,'EXCEPTION: '||SUBSTR(SQLERRM,1,200));
6997 END IF;
6998 --
6999 raise;
7000
7001 END CalculateIntransitQty;
7002
7003
7004 FUNCTION GetAllIntransitQty(x_Sched_rec IN RLM_INTERFACE_HEADERS%ROWTYPE,
7005 x_Group_rec IN rlm_dp_sv.t_Group_rec,
7006 x_Source_Tab IN RLM_MANAGE_DEMAND_SV.t_Source_Tab)
7007 RETURN NUMBER
7008 IS
7009
7010 -- The shipper ID is stored in the item_detail_ref_value_1 field
7011 -- when the item detail type = 4 and the sub type = 'RECEIPT', 'SHIPMENT'
7012 --
7013
7014 CURSOR c_RctShipperIds IS
7015 SELECT start_date_time,
7016 primary_quantity,
7017 substr(item_detail_ref_value_1,1,29) shipper_Id,
7018 line_id
7019 FROM rlm_schedule_lines
7020 WHERE ship_from_org_id = x_Group_rec.ship_from_org_id
7021 AND ship_to_org_id = x_Group_rec.ship_to_org_id
7022 AND inventory_item_id = x_Group_rec.inventory_item_id
7023 AND customer_item_id = x_Group_rec.customer_item_id
7024 AND item_detail_type = k_RECT
7025 AND qty_type_code = k_ACTUAL
7026 AND item_detail_subtype = k_RECEIPT
7027 ORDER BY start_date_time DESC;
7028
7029 CURSOR c_ShpShipperIds IS
7030 SELECT start_date_time,
7031 primary_quantity,
7032 substr(item_detail_ref_value_1,1,29) shipper_Id,
7033 line_id
7034 FROM rlm_schedule_lines
7035 WHERE ship_from_org_id = x_Group_rec.ship_from_org_id
7036 AND ship_to_org_id = x_Group_rec.ship_to_org_id
7037 AND inventory_item_id = x_Group_rec.inventory_item_id
7038 AND customer_item_id = x_Group_rec.customer_item_id
7039 AND item_detail_type = k_RECT
7040 AND qty_type_code = k_ACTUAL
7041 AND item_detail_subtype = k_SHIPMENT
7042 ORDER BY start_date_time DESC;
7043
7044 --
7045 -- This cursor is to select the most recent receipt
7046 -- line on the current schedule for each group
7047 --
7048 CURSOR c_LastReceipt(i IN NUMBER) IS
7049 SELECT start_date_time,
7050 item_detail_subtype,
7051 item_detail_ref_value_1
7052 FROM rlm_interface_lines
7053 WHERE header_id = x_Sched_rec.header_id
7054 AND ship_from_org_id = x_Source_Tab(i).organization_id
7055 AND ship_to_org_id = x_Group_rec.ship_to_org_id
7056 AND inventory_item_id = x_Group_rec.inventory_item_id
7057 AND customer_item_id = x_Group_rec.customer_item_id
7058 AND item_detail_type = k_RECT
7059 AND qty_type_code = k_ACTUAL
7060 AND item_detail_subtype = k_RECEIPT
7061 ORDER BY start_date_time DESC;
7062
7063
7064 --
7065 -- This cursor is to select the most recent shipment
7066 -- line on the current schedule for each group
7067 --
7068 CURSOR c_LastShipment(i IN NUMBER) IS
7069 SELECT start_date_time,
7070 item_detail_subtype,
7071 item_detail_ref_value_1
7072 FROM rlm_interface_lines
7073 WHERE header_id = x_Sched_rec.header_id
7074 AND ship_from_org_id = x_Source_Tab(i).organization_id
7075 AND ship_to_org_id = x_Group_rec.ship_to_org_id
7076 AND inventory_item_id = x_Group_rec.inventory_item_id
7077 AND customer_item_id = x_Group_rec.customer_item_id
7078 AND item_detail_type = k_RECT
7079 AND qty_type_code = k_ACTUAL
7080 AND item_detail_subtype = k_SHIPMENT
7081 ORDER BY start_date_time DESC;
7082
7083
7084 --
7085 v_InTransitQty NUMBER DEFAULT 0;
7086 v_Temp_InTransitQty NUMBER DEFAULT 0;
7087 --
7088 v_count NUMBER DEFAULT 0 ;
7089 v_shipment_date DATE;
7090 v_receipt_date DATE;
7091 v_date DATE;
7092 v_item_detail_subtype VARCHAR2(80);
7093 v_cust_production_seq_num VARCHAR2(35);
7094 v_intransit_time NUMBER := 0;
7095 --
7096 x_progress VARCHAR2(3) DEFAULT '010';
7097 v_return_status VARCHAR2(240);
7098
7099 v_Total_Qty NUMBER DEFAULT 0;
7100
7101 i NUMBER;
7102
7103 v_SetupTerms_rec rlm_setup_terms_sv.setup_terms_rec_typ;
7104 v_TermsLevel VARCHAR2(30) := NULL;
7105 v_ReturnStatus BOOLEAN;
7106 v_ReturnMsg VARCHAR2(2000);
7107 e_SetupAPIFailed EXCEPTION;
7108 v_order_header_id NUMBER;
7109 --
7110 v_match_within_rule RLM_CORE_SV.t_Match_rec;
7111 v_match_across_rule RLM_CORE_SV.t_Match_rec;
7112 v_match_rec WSH_RLM_INTERFACE.t_optional_match_rec;
7113 v_shipper_rec WSH_RLM_INTERFACE.t_shipper_rec;
7114 v_intransit_calc_basis VARCHAR2(15);
7115 v_deliveryID VARCHAR2(35);
7116 e_IntransitNone EXCEPTION;
7117 --
7118
7119 BEGIN
7120
7121 IF (l_debug <> -1) THEN
7122 rlm_core_sv.dpush(C_SDEBUG,'GetAllIntransitQty');
7123 END IF;
7124 --
7125 InitializeMatchCriteria(v_match_within_rule, v_match_across_rule);
7126 --
7127 IF (l_debug <> -1) THEN
7128 rlm_core_sv.dlog(C_DEBUG,'count', x_Source_Tab.COUNT);
7129 END IF;
7130 --
7131 FOR i IN 1 .. x_Source_Tab.COUNT LOOP
7132
7133 BEGIN /* outer begin */
7134 --
7135 IF (l_debug <> -1) THEN
7136 rlm_core_sv.dlog(C_DEBUG, 'Loop Counter', i);
7137 rlm_core_sv.dlog(C_DEBUG, 'Src Orgzn ID', x_Source_Tab(i).organization_id);
7138 END IF;
7139 --
7140 BEGIN
7141
7142 RLM_TPA_SV.get_setup_terms(x_Source_Tab(i).organization_id,
7143 x_Group_rec.customer_id,
7144 x_Group_rec.ship_to_address_id,
7145 x_Group_rec.customer_item_id,
7146 v_TermsLevel,
7147 v_SetupTerms_rec,
7148 v_ReturnMsg,
7149 v_ReturnStatus);
7150 IF v_ReturnStatus THEN
7151 v_order_header_id := v_SetupTerms_rec.header_id;
7152 ELSE
7153 RAISE e_SetupAPIFailed;
7154 END IF;
7155
7156 EXCEPTION
7157 WHEN e_SetupAPIFailed THEN
7158 --
7159 rlm_message_sv.app_error(
7160 x_ExceptionLevel => rlm_message_sv.k_error_level,
7161 x_MessageName => 'RLM_SETUPAPI_FAILED',
7162 x_ChildMessageName => v_SetupTerms_rec.msg_name,
7163 x_InterfaceHeaderId => x_sched_rec.header_id,
7164 x_InterfaceLineId => NULL,
7165 x_ScheduleHeaderId => x_sched_rec.schedule_header_id,
7166 x_ScheduleLineId => NULL,
7167 x_OrderHeaderId => x_group_rec.setup_terms_rec.header_id,
7168 x_OrderLineId => NULL,
7169 x_Token1 => 'ERROR',
7170 x_value1 => v_ReturnMsg);
7171 --
7172 IF (l_debug <> -1) THEN
7173 rlm_core_sv.dpop(C_SDEBUG);
7174 END IF;
7175 --
7176 raise e_group_error;
7177 --
7178
7179 WHEN OTHERS THEN
7180 --
7181 IF (l_debug <> -1) THEN
7182 rlm_core_sv.dpop(C_SDEBUG);
7183 END IF;
7184 --
7185 raise e_group_error;
7186
7187 END; /* get_setup_terms */
7188 --
7189 IF (l_debug <> -1) THEN
7190 rlm_core_sv.dlog(C_DEBUG,'order_header_id', v_order_header_id);
7191 rlm_core_sv.dlog(C_DEBUG, 'Intransit calc. basis', v_SetupTerms_rec.intransit_calc_basis);
7192 END IF;
7193 --
7194 IF (v_SetupTerms_rec.time_uom_code = 'HR') THEN
7195 v_intransit_time := nvl(v_SetupTerms_rec.intransit_time,0)/24;
7196 ELSE
7197 v_intransit_time := nvl(v_SetupTerms_rec.intransit_time,0);
7198 END IF;
7199 --
7200 IF (v_SetupTerms_rec.intransit_calc_basis = k_NONE OR v_SetupTerms_rec.intransit_calc_basis is NULL) THEN
7201 --
7202 RAISE e_IntransitNone;
7203 --
7204 ELSIF (v_SetupTerms_rec.intransit_calc_basis = k_RECEIPT) THEN
7205 --
7206 OPEN c_LastReceipt(i);
7207 FETCH c_LastReceipt INTO v_shipment_Date, v_item_detail_subtype, v_deliveryID;
7208 --
7209 IF (c_LastReceipt%NOTFOUND) THEN
7210 --
7211 IF (l_debug <> -1) THEN
7212 rlm_core_sv.dlog(c_DEBUG, 'No receipt line present on schedule');
7213 END IF;
7214 --
7215 v_shipment_date := x_Sched_rec.sched_generation_date - v_intransit_time;
7216 v_shipper_rec.shipper_Id1 := NULL;
7217 v_Shipper_rec.shipper_Id2 := NULL;
7218 v_Shipper_rec.shipper_Id3 := NULL;
7219 v_Shipper_rec.shipper_Id3 := NULL;
7220 v_Shipper_rec.shipper_Id3 := NULL;
7221 --
7222 ELSIF (v_deliveryID is NOT NULL) THEN
7223 --
7224 IF (l_debug <> -1) THEN
7225 rlm_core_sv.dlog(C_DEBUG, 'Delivery ID present on schedule');
7226 END IF;
7227 --
7228 FOR v_RctSID in c_RctShipperIds LOOP
7229 --
7230 IF (c_RctShipperIds%NOTFOUND OR v_count > 5 ) THEN
7231 EXIT;
7232 END IF;
7233 --
7234 v_count := v_count + 1;
7235 --
7236 IF (l_debug <> -1) THEN
7237 rlm_core_sv.dlog(C_DEBUG,'line_id', v_RctSID.line_id);
7238 rlm_core_sv.dlog(C_DEBUG,'start_date_time', v_RctSID.start_date_time);
7239 rlm_core_sv.dlog(C_DEBUG,'i', i);
7240 rlm_core_sv.dlog(C_DEBUG,'v_count', v_count);
7241 rlm_core_sv.dlog(C_DEBUG,'Shipper_id', v_RctSID.shipper_Id);
7242 END IF;
7243 --
7244 IF v_count = 1 THEN
7245 --
7246 v_shipper_rec.shipper_Id1 := v_RctSID.shipper_Id;
7247 --
7248 ELSIF v_count = 2 THEN
7249 --
7250 v_shipper_rec.shipper_Id2 := v_RctSID.shipper_Id;
7251 --
7252 ELSIF v_count = 3 THEN
7253 --
7254 v_shipper_rec.shipper_Id3 := v_RctSID.shipper_Id;
7255 --
7256 ELSIF v_count = 4 THEN
7257 --
7258 v_shipper_rec.shipper_Id4 := v_RctSID.shipper_Id;
7259 --
7260 ELSIF v_count = 5 THEN
7261 --
7262 v_shipper_rec.shipper_Id5 := v_RctSID.shipper_Id;
7263 --
7264 END IF;
7265 --
7266 END LOOP;
7267 --
7268 ELSIF (v_shipment_date is NOT NULL) THEN
7269 --
7270 IF (l_debug <> -1) THEN
7271 rlm_core_sv.dlog(C_DEBUG, 'No delivery ID present on schedule');
7272 END IF;
7273 --
7274 v_shipment_date := v_shipment_Date - v_intransit_time;
7275 v_shipper_rec.shipper_Id1 := NULL;
7276 v_Shipper_rec.shipper_Id2 := NULL;
7277 v_Shipper_rec.shipper_Id3 := NULL;
7278 v_Shipper_rec.shipper_Id3 := NULL;
7279 v_Shipper_rec.shipper_Id3 := NULL;
7280 --
7281 END IF;
7282 --
7283 CLOSE c_LastReceipt;
7284 --
7285 ELSE /* intransit calc. basis = 'shipment' */
7286 --
7287 OPEN c_LastShipment(i);
7288 FETCH c_LastShipment INTO v_shipment_date, v_item_detail_subtype, v_deliveryID;
7289 --
7290 IF (c_LastShipment%NOTFOUND) THEN
7291 --
7292 IF (l_debug <> -1) THEN
7293 rlm_core_sv.dlog(C_DEBUG, 'No shipment line, so shipment date = sched_gen_Date');
7294 END IF;
7295 --
7296 v_shipment_date := x_Sched_rec.sched_generation_date;
7297 v_shipper_rec.shipper_Id1 := NULL;
7298 v_Shipper_rec.shipper_Id2 := NULL;
7299 v_Shipper_rec.shipper_Id3 := NULL;
7300 v_Shipper_rec.shipper_Id4 := NULL;
7301 v_Shipper_rec.shipper_Id5 := NULL;
7302 --
7303 ELSIF (v_deliveryID is NOT NULL) THEN
7304 --
7305 IF (l_debug <> -1) THEN
7306 rlm_core_sv.dlog(C_DEBUG, 'Delivery ID present on schedule');
7307 END IF;
7308 --
7309 FOR v_ShpSID IN c_ShpShipperIds LOOP
7310 --
7311 IF (c_ShpShipperIds%NOTFOUND OR v_count > 5) THEN
7312 EXIT;
7313 END IF;
7314 --
7315 v_count := v_count + 1;
7316 --
7317 IF (l_debug <> -1) THEN
7318 rlm_core_sv.dlog(C_DEBUG,'line_id', v_ShpSID.line_id);
7319 rlm_core_sv.dlog(C_DEBUG,'start_date_time', v_ShpSID.start_date_time);
7320 rlm_core_sv.dlog(C_DEBUG,'v_count', v_count);
7321 rlm_core_sv.dlog(C_DEBUG,'Shipper_id', v_ShpSID.shipper_Id);
7322 END IF;
7323 --
7324 IF v_count = 1 THEN
7325 --
7326 v_shipper_rec.shipper_Id1 := v_ShpSID.shipper_Id;
7327 --
7328 ELSIF v_count = 2 THEN
7329 --
7330 v_shipper_rec.shipper_Id2 := v_ShpSID.shipper_Id;
7331 --
7332 ELSIF v_count = 3 THEN
7333 --
7334 v_shipper_rec.shipper_Id3 := v_ShpSID.shipper_Id;
7335 --
7336 ELSIF v_count = 4 THEN
7337 --
7338 v_shipper_rec.shipper_Id4 := v_ShpSID.shipper_Id;
7339 --
7340 ELSIF v_count = 5 THEN
7341 --
7342 v_shipper_rec.shipper_Id5 := v_ShpSID.shipper_Id;
7343 --
7344 END IF;
7345 --
7346 END LOOP;
7347 --
7348 ELSIF (v_shipment_date is NOT NULL) THEN
7349 --
7350 IF (l_debug <> -1) THEN
7351 rlm_core_sv.dlog(C_DEBUG, 'No delivery ID present on schedule');
7352 END IF;
7353 --
7354 v_shipper_rec.shipper_Id1 := NULL;
7355 v_Shipper_rec.shipper_Id2 := NULL;
7356 v_Shipper_rec.shipper_Id3 := NULL;
7357 v_Shipper_rec.shipper_Id3 := NULL;
7358 v_Shipper_rec.shipper_Id3 := NULL;
7359 --
7360 END IF;
7361 --
7362 CLOSE c_LastShipment;
7363 --
7364 END IF; /* if intransit calculation basis */
7365 --
7366 RLM_EXTINTERFACE_SV.getIntransitQty (
7367 x_Group_rec.customer_id,
7368 x_Group_rec.ship_to_org_id,
7369 x_Group_rec.intmed_ship_to_org_id, --Bugfix 5911991
7370 x_Source_Tab(i).organization_id,
7371 x_Group_rec.inventory_item_id,
7372 x_Group_rec.customer_item_id,
7373 v_order_header_id,
7374 NVL(x_Group_rec.blanket_number, k_NULL),
7375 x_Sched_rec.org_id,
7376 x_Sched_rec.schedule_type,
7377 v_Shipper_rec,
7378 v_Shipment_date,
7379 v_match_within_rule,
7380 v_match_across_rule,
7381 v_match_rec,
7382 x_Sched_rec.header_id,
7383 v_InTransitQty,
7384 v_return_status);
7385 --
7386 IF (l_debug <> -1) THEN
7387 rlm_core_sv.dlog(C_DEBUG, 'v_return_status', v_return_status);
7388 rlm_core_sv.dlog(C_DEBUG, 'v_InTransitQty', v_InTransitQty);
7389 END IF;
7390 --
7391 IF v_return_status = WSH_UTIL_CORE.G_RET_STS_ERROR THEN
7392 --
7393 IF (l_debug <> -1) THEN
7394 rlm_core_sv.dpop(C_SDEBUG, 'GetIntransitQtyAPI Failed');
7395 END IF;
7396 --
7397 RAISE e_group_error;
7398 --
7399 ELSIF v_return_status = WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR THEN
7400 --
7401 IF (l_debug <> -1) THEN
7402 rlm_core_sv.dpop(C_SDEBUG, 'GetIntransitQtyAPI Failed');
7403 END IF;
7404 --
7405 RAISE e_group_error;
7406 --
7407 END IF;
7408
7409 --
7410 -- to do JH : The line id os from schedule lines and not interface lines
7411 -- what implications of keeping this line id and also or line id as null?
7412 --
7413 v_Total_Qty := v_Total_Qty + v_InTransitQty;
7414
7415 EXCEPTION
7416 WHEN e_IntransitNone THEN
7417 --
7418 IF (l_debug <> -1) THEN
7419 rlm_core_sv.dlog(C_DEBUG, 'e_IntransitNone');
7420 rlm_core_sv.dlog(C_DEBUG, 'Skipping intransit calns for orgId', x_Source_Tab(i).organization_id);
7421 END IF;
7422
7423 END; /* outer begin */
7424
7425 END LOOP;
7426 --
7427 IF (l_debug <> -1) THEN
7428 rlm_core_sv.dpop(C_SDEBUG);
7429 END IF;
7430 --
7431 return v_Total_Qty;
7432 --
7433 EXCEPTION
7434 --
7435 WHEN e_group_error THEN
7436 --
7437 RAISE;
7438 --
7439 WHEN OTHERS THEN
7440 rlm_message_sv.sql_error('GetAllIntransitQty',x_progress);
7441 --
7442 IF (l_debug <> -1) THEN
7443 rlm_core_sv.dpop(C_SDEBUG,'EXCEPTION: '||SUBSTR(SQLERRM,1,200));
7444 END IF;
7445 --
7446 RAISE;
7447
7448 END GetAllIntransitQty;
7449
7450
7451 PROCEDURE InitializeMatchCriteria(x_match_within_rule IN OUT NOCOPY RLM_CORE_SV.t_Match_Rec,
7452 x_match_across_rule IN OUT NOCOPY RLM_CORE_SV.t_Match_rec)
7453 IS
7454
7455 BEGIN
7456 --
7457 IF (l_debug <> -1) THEN
7458 rlm_core_sv.dpush(C_SDEBUG, 'InitializeMatchCriteria');
7459 END IF;
7460 --
7461 x_match_within_rule.cust_production_line := 'N';
7462 x_match_within_rule.customer_dock_code := 'N';
7463 x_match_within_rule.request_date := 'N';
7464 x_match_within_rule.schedule_date := 'N';
7465 x_match_within_rule.cust_po_number := 'N';
7466 x_match_within_rule.customer_item_revision := 'N';
7467 x_match_within_rule.customer_job := 'N';
7468 x_match_within_rule.cust_model_serial_number := 'N';
7469 x_match_within_rule.cust_production_seq_num := 'N';
7470 x_match_within_rule.industry_attribute1 := 'N';
7471 x_match_within_rule.industry_attribute2 := 'N';
7472 x_match_within_rule.industry_attribute3 := 'N';
7473 x_match_within_rule.industry_attribute4 := 'N';
7474 x_match_within_rule.industry_attribute5 := 'N';
7475 x_match_within_rule.industry_attribute6 := 'N';
7476 x_match_within_rule.industry_attribute7 := 'N';
7477 x_match_within_rule.industry_attribute8 := 'N';
7478 x_match_within_rule.industry_attribute9 := 'N';
7479 x_match_within_rule.industry_attribute10 := 'N';
7480 x_match_within_rule.industry_attribute11 := 'N';
7481 x_match_within_rule.industry_attribute12 := 'N';
7482 x_match_within_rule.industry_attribute13 := 'N';
7483 x_match_within_rule.industry_attribute14 := 'N';
7484 x_match_within_rule.industry_attribute15 := 'N';
7485 x_match_within_rule.attribute1 := 'N';
7486 x_match_within_rule.attribute2 := 'N';
7487 x_match_within_rule.attribute3 := 'N';
7488 x_match_within_rule.attribute4 := 'N';
7489 x_match_within_rule.attribute5 := 'N';
7490 x_match_within_rule.attribute6 := 'N';
7491 x_match_within_rule.attribute7 := 'N';
7492 x_match_within_rule.attribute8 := 'N';
7493 x_match_within_rule.attribute9 := 'N';
7494 x_match_within_rule.attribute10 := 'N';
7495 x_match_within_rule.attribute11 := 'N';
7496 x_match_within_rule.attribute12 := 'N';
7497 x_match_within_rule.attribute13 := 'N';
7498 x_match_within_rule.attribute14 := 'N';
7499 x_match_within_rule.attribute15 := 'N';
7500 --
7501 x_match_across_rule.cust_production_line := 'N';
7502 x_match_across_rule.customer_dock_code := 'N';
7503 x_match_across_rule.request_date := 'N';
7504 x_match_across_rule.schedule_date := 'N';
7505 x_match_across_rule.cust_po_number := 'N';
7506 x_match_across_rule.customer_item_revision := 'N';
7507 x_match_across_rule.customer_job := 'N';
7508 x_match_across_rule.cust_model_serial_number := 'N';
7509 x_match_across_rule.cust_production_seq_num := 'N';
7510 x_match_across_rule.industry_attribute1 := 'N';
7511 x_match_across_rule.industry_attribute2 := 'N';
7512 x_match_across_rule.industry_attribute3 := 'N';
7513 x_match_across_rule.industry_attribute4 := 'N';
7514 x_match_across_rule.industry_attribute5 := 'N';
7515 x_match_across_rule.industry_attribute6 := 'N';
7516 x_match_across_rule.industry_attribute7 := 'N';
7517 x_match_across_rule.industry_attribute8 := 'N';
7518 x_match_across_rule.industry_attribute9 := 'N';
7519 x_match_across_rule.industry_attribute10 := 'N';
7520 x_match_across_rule.industry_attribute11 := 'N';
7521 x_match_across_rule.industry_attribute12 := 'N';
7522 x_match_across_rule.industry_attribute13 := 'N';
7523 x_match_across_rule.industry_attribute14 := 'N';
7524 x_match_across_rule.industry_attribute15 := 'N';
7525 x_match_across_rule.attribute1 := 'N';
7526 x_match_across_rule.attribute2 := 'N';
7527 x_match_across_rule.attribute3 := 'N';
7528 x_match_across_rule.attribute4 := 'N';
7529 x_match_across_rule.attribute5 := 'N';
7530 x_match_across_rule.attribute6 := 'N';
7531 x_match_across_rule.attribute7 := 'N';
7532 x_match_across_rule.attribute8 := 'N';
7533 x_match_across_rule.attribute9 := 'N';
7534 x_match_across_rule.attribute10 := 'N';
7535 x_match_across_rule.attribute11 := 'N';
7536 x_match_across_rule.attribute12 := 'N';
7537 x_match_across_rule.attribute13 := 'N';
7538 x_match_across_rule.attribute14 := 'N';
7539 x_match_across_rule.attribute15 := 'N';
7540 --
7541 IF (l_debug <> -1) THEN
7542 rlm_core_sv.dpop(C_SDEBUG, 'InitializeMatchCriteria');
7543 END IF;
7544 --
7545 END InitializeMatchCriteria;
7546
7547 /*=========================================================================
7548 --global_atp
7549 FUNCTION NAME: IsATPItem
7550
7551 ===========================================================================*/
7552
7553 FUNCTION IsATPItem (x_ship_from_org_id IN NUMBER,
7554 x_inventory_item_id IN NUMBER)
7555 RETURN BOOLEAN
7556 IS
7557 v_atp_flag VARCHAR2(1);
7558 v_atp_components_flag VARCHAR2(1);
7559 BEGIN
7560 --
7561 IF (l_debug <> -1) THEN
7562 rlm_core_sv.dpush(C_SDEBUG,'IsATPItem');
7563 rlm_core_sv.dlog(C_DEBUG,'x_ship_from_org_id',x_ship_from_org_id);
7564 rlm_core_sv.dlog(C_DEBUG,'x_inventory_item_id', x_inventory_item_id);
7565 END IF;
7566 --
7567 SELECT atp_flag, atp_components_flag
7568 INTO v_atp_flag, v_atp_components_flag
7569 FROM mtl_system_items
7570 WHERE inventory_item_id = x_inventory_item_id
7571 AND organization_id = x_ship_from_org_id;
7572
7573 IF v_atp_flag = 'Y' OR v_atp_components_flag = 'Y' THEN
7574 --
7575 IF (l_debug <> -1) THEN
7576 rlm_core_sv.dpop(C_SDEBUG, 'TRUE');
7577 END IF;
7578 --
7579 RETURN TRUE;
7580 ELSE
7581 --
7582 IF (l_debug <> -1) THEN
7583 rlm_core_sv.dpop(C_SDEBUG, 'FALSE');
7584 END IF;
7585 --
7586 RETURN FALSE;
7587 END IF;
7588 --
7589 EXCEPTION
7590 WHEN NO_DATA_FOUND THEN
7591 --
7592 IF (l_debug <> -1) THEN
7593 rlm_core_sv.dpop(C_SDEBUG, 'FALSE');
7594 END IF;
7595 --
7596 RETURN FALSE;
7597
7598 WHEN OTHERS THEN
7599 --
7600 IF (l_debug <> -1) THEN
7601 rlm_core_sv.dpop(C_SDEBUG,'EXCEPTION: OTHER - sql error');
7602 END IF;
7603 --
7604 RAISE;
7605
7606 END IsATPItem;
7607
7608 /*===========================================================================
7609
7610 PROCEDURE NAME: ReportExc
7611
7612 ===========================================================================*/
7613 PROCEDURE ReportExc(x_ExcpTab IN t_Match_tab)
7614 IS
7615 v_shipFrom org_organization_definitions.organization_code%TYPE;
7616 v_shipTo HZ_CUST_ACCT_SITES_ALL.ece_tp_location_code%TYPE; -- Parameter definition is changed as per TCA obsolescence project.
7617 v_Item mtl_customer_items.customer_item_number%TYPE;
7618 v_excpRec rlm_core_sv.t_Match_rec;
7619
7620
7621 BEGIN
7622 --
7623 IF (l_debug <> -1) THEN
7624 rlm_core_sv.dpush(C_SDEBUG,'ReportExc');
7625 END IF;
7626 --
7627 IF (l_debug <> -1) THEN
7628 rlm_core_sv.dlog(C_DEBUG,'shipFrom', g_ManageDemand_tab(1).ship_from_org_id);
7629 rlm_core_sv.dlog(C_DEBUG,'shipTo', g_ManageDemand_tab(1).ship_to_address_id);
7630 rlm_core_sv.dlog(C_DEBUG,'customerItem',g_ManageDemand_tab(1).customer_item_id);
7631 rlm_core_sv.dlog(C_DEBUG,'headerId', g_ManageDemand_tab(1).header_id);
7632 rlm_core_sv.dlog(C_DEBUG,'line_id', g_ManageDemand_tab(1).line_id);
7633 END IF;
7634 --
7635 FOR i IN 1..x_ExcpTab.COUNT LOOP
7636 IF x_ExcpTab(i).cust_production_line = 'Y' THEN
7637 v_excpRec.cust_production_line := 'Y' ;
7638 END IF;
7639 --
7640 IF x_ExcpTab(i).customer_dock_code = 'Y'THEN
7641 v_excpRec.customer_dock_code := 'Y' ;
7642 END IF;
7643 --
7644 IF x_ExcpTab(i).request_date = 'Y'THEN
7645 v_excpRec.request_date := 'Y';
7646 END IF;
7647 --
7648 IF x_ExcpTab(i).cust_po_number = 'Y'THEN
7649 v_excpRec.cust_po_number := 'Y';
7650 END IF;
7651 --
7652 IF x_ExcpTab(i).customer_item_revision = 'Y'THEN
7653 v_excpRec.customer_item_revision := 'Y';
7654 END IF;
7655 --
7656 IF x_ExcpTab(i).customer_job = 'Y'THEN
7657 v_excpRec.customer_job := 'Y' ;
7658 END IF;
7659 --
7660 IF x_ExcpTab(i).cust_model_serial_number = 'Y'THEN
7661 v_excpRec.cust_model_serial_number := 'Y';
7662 END IF;
7663 --
7664 IF x_ExcpTab(i).cust_production_seq_num = 'Y'THEN
7665 v_excpRec.cust_production_seq_num := 'Y' ;
7666 END IF;
7667 --
7668 IF x_ExcpTab(i).industry_attribute1 = 'Y'THEN
7669 v_excpRec.industry_attribute1 := 'Y' ;
7670 END IF;
7671 --
7672 IF x_ExcpTab(i).industry_attribute2 = 'Y'THEN
7673 v_excpRec.industry_attribute2 := 'Y';
7674 END IF;
7675 --
7676 IF x_ExcpTab(i).industry_attribute4 = 'Y'THEN
7677 v_excpRec.industry_attribute4 := 'Y';
7678 END IF;
7679 --
7680 IF x_ExcpTab(i).industry_attribute5 = 'Y'THEN
7681 v_excpRec.industry_attribute5 := 'Y';
7682 END IF;
7683 --
7684 IF x_ExcpTab(i).industry_attribute6 = 'Y'THEN
7685 v_excpRec.industry_attribute6 := 'Y';
7686 END IF;
7687 --
7688 IF x_ExcpTab(i).industry_attribute10 = 'Y'THEN
7689 v_excpRec.industry_attribute10 := 'Y';
7690 END IF;
7691 --
7692 IF x_ExcpTab(i).industry_attribute11 = 'Y'THEN
7693 v_excpRec.industry_attribute11 := 'Y';
7694 END IF;
7695 --
7696 IF x_ExcpTab(i).industry_attribute12 = 'Y'THEN
7697 v_excpRec.industry_attribute12 := 'Y';
7698 END IF;
7699 --
7700 IF x_ExcpTab(i).industry_attribute13 = 'Y'THEN
7701 v_excpRec.industry_attribute13 := 'Y';
7702 END IF;
7703 --
7704 IF x_ExcpTab(i).industry_attribute14 = 'Y'THEN
7705 v_excpRec.industry_attribute14 := 'Y';
7706 END IF;
7707 --
7708 IF x_ExcpTab(i).attribute1 = 'Y'THEN
7709 v_excpRec.attribute1 := 'Y';
7710 END IF;
7711 --
7712 IF x_ExcpTab(i).attribute2 = 'Y'THEN
7713 v_excpRec.attribute2 := 'Y';
7714 END IF;
7715 --
7716 IF x_ExcpTab(i).attribute3 = 'Y'THEN
7717 v_excpRec.attribute3 := 'Y';
7718 END IF;
7719 --
7720 IF x_ExcpTab(i).attribute4 = 'Y'THEN
7721 v_excpRec.attribute4 := 'Y';
7722 END IF;
7723 --
7724 IF x_ExcpTab(i).attribute5 = 'Y'THEN
7725 v_excpRec.attribute5 := 'Y';
7726 END IF;
7727 --
7728 IF x_ExcpTab(i).attribute6 = 'Y'THEN
7729 v_excpRec.attribute6 := 'Y';
7730 END IF;
7731 --
7732 IF x_ExcpTab(i).attribute7 = 'Y'THEN
7733 v_excpRec.attribute7 := 'Y';
7734 END IF;
7735 --
7736 IF x_ExcpTab(i).attribute8 = 'Y'THEN
7737 v_excpRec.attribute8 := 'Y';
7738 END IF;
7739 --
7740 IF x_ExcpTab(i).attribute9 = 'Y'THEN
7741 v_excpRec.attribute9 := 'Y';
7742 END IF;
7743 --
7744 IF x_ExcpTab(i).attribute10 = 'Y'THEN
7745 v_excpRec.attribute10 := 'Y';
7746 END IF;
7747 --
7748 IF x_ExcpTab(i).attribute11 = 'Y'THEN
7749 v_excpRec.attribute11 := 'Y';
7750 END IF;
7751 --
7752 IF x_ExcpTab(i).attribute12 = 'Y'THEN
7753 v_excpRec.attribute12 := 'Y';
7754 END IF;
7755 --
7756 IF x_ExcpTab(i).attribute13 = 'Y'THEN
7757 v_excpRec.attribute13 := 'Y';
7758 END IF;
7759 --
7760 IF x_ExcpTab(i).attribute14 = 'Y'THEN
7761 v_excpRec.attribute14 := 'Y';
7762 END IF;
7763 --
7764 IF x_ExcpTab(i).attribute15 = 'Y'THEN
7765 v_excpRec.attribute15 := 'Y';
7766 END IF;
7767 --
7768 END LOOP;
7769
7770 --Prepare to print warnings
7771 v_shipFrom := rlm_core_sv.get_ship_from(g_ManageDemand_tab(1).ship_from_org_id);
7772 --
7773 v_shipTo := rlm_core_sv.get_ship_to(g_ManageDemand_tab(1).ship_to_address_id);
7774 --
7775 v_item := rlm_core_sv.get_item_number(g_ManageDemand_tab(1).customer_item_id);
7776 --
7777 IF (l_debug <> -1) THEN
7778 rlm_core_sv.dlog(C_DEBUG,'v_item', v_item);
7779 rlm_core_sv.dlog(C_DEBUG,'v_shipTo', v_shipTo);
7780 rlm_core_sv.dlog(C_DEBUG,'v_shipFrom', v_shipFrom);
7781 END IF;
7782 --
7783 IF v_excpRec.cust_production_line = 'Y' THEN
7784 printMessage(k_CUST_PRODUCTION_LINE,v_shipFrom,v_shipTo,v_item);
7785 END IF;
7786 --
7787 IF v_excpRec.customer_dock_code = 'Y'THEN
7788 printMessage(k_CUSTOMER_DOCK_CODE,v_shipFrom,v_shipTo,v_item);
7789 END IF;
7790 --
7791 IF v_excpRec.request_date = 'Y'THEN
7792 printMessage(k_REQUEST_DATE,v_shipFrom,v_shipTo,v_item);
7793 END IF;
7794 --
7795 IF v_excpRec.cust_po_number = 'Y'THEN
7796 printMessage(k_CUST_PO_NUMBER,v_shipFrom,v_shipTo,v_item);
7797 END IF;
7798 --
7799 IF v_excpRec.customer_item_revision = 'Y'THEN
7800 printMessage(k_CUSTOMER_ITEM_REVISION,v_shipFrom,v_shipTo,v_item);
7801 END IF;
7802 --
7803 IF v_excpRec.customer_job = 'Y'THEN
7804 printMessage(k_CUSTOMER_JOB,v_shipFrom,v_shipTo,v_item);
7805 END IF;
7806 --
7807 IF v_excpRec.cust_model_serial_number = 'Y'THEN
7808 printMessage(k_CUST_MODEL_SERIAL_NUMBER,v_shipFrom,v_shipTo,v_item);
7809 END IF;
7810 --
7811 IF v_excpRec.cust_production_seq_num = 'Y'THEN
7812 printMessage(k_CUST_PRODUCTION_SEQ_NUM,v_shipFrom,v_shipTo,v_item);
7813 END IF;
7814 --
7815 IF v_excpRec.industry_attribute1 = 'Y'THEN
7816 printMessage(k_INDUSTRY_ATTRIBUTE1,v_shipFrom,v_shipTo,v_item);
7817 END IF;
7818 --
7819 IF v_excpRec.industry_attribute2 = 'Y'THEN
7820 printMessage(k_INDUSTRY_ATTRIBUTE2,v_shipFrom,v_shipTo,v_item);
7821 END IF;
7822 --
7823 IF v_excpRec.industry_attribute4 = 'Y'THEN
7824 printMessage(k_INDUSTRY_ATTRIBUTE4,v_shipFrom,v_shipTo,v_item);
7825 END IF;
7826 --
7827 IF v_excpRec.industry_attribute5 = 'Y'THEN
7828 printMessage(k_INDUSTRY_ATTRIBUTE5,v_shipFrom,v_shipTo,v_item);
7829 END IF;
7830 --
7831 IF v_excpRec.industry_attribute6 = 'Y'THEN
7832 printMessage(k_INDUSTRY_ATTRIBUTE6,v_shipFrom,v_shipTo,v_item);
7833 END IF;
7834 --
7835 IF v_excpRec.industry_attribute10 = 'Y'THEN
7836 printMessage(k_INDUSTRY_ATTRIBUTE10,v_shipFrom,v_shipTo,v_item);
7837 END IF;
7838 --
7839 IF v_excpRec.industry_attribute11 = 'Y'THEN
7840 printMessage(k_INDUSTRY_ATTRIBUTE11,v_shipFrom,v_shipTo,v_item);
7841 END IF;
7842 --
7843 IF v_excpRec.industry_attribute12 = 'Y'THEN
7844 printMessage(k_INDUSTRY_ATTRIBUTE12,v_shipFrom,v_shipTo,v_item);
7845 END IF;
7846 --
7847 IF v_excpRec.industry_attribute13 = 'Y'THEN
7848 printMessage(k_INDUSTRY_ATTRIBUTE13,v_shipFrom,v_shipTo,v_item);
7849 END IF;
7850 --
7851 IF v_excpRec.industry_attribute14 = 'Y'THEN
7852 printMessage(k_INDUSTRY_ATTRIBUTE14,v_shipFrom,v_shipTo,v_item);
7853 END IF;
7854 --
7855 IF v_excpRec.attribute1 = 'Y'THEN
7856 printMessage(k_ATTRIBUTE1,v_shipFrom,v_shipTo,v_item);
7857 END IF;
7858 --
7859 IF v_excpRec.attribute2 = 'Y'THEN
7860 printMessage(k_ATTRIBUTE2,v_shipFrom,v_shipTo,v_item);
7861 END IF;
7862 --
7863 IF v_excpRec.attribute3 = 'Y'THEN
7864 printMessage(k_ATTRIBUTE3,v_shipFrom,v_shipTo,v_item);
7865 END IF;
7866 --
7867 IF v_excpRec.attribute4 = 'Y'THEN
7868 printMessage(k_ATTRIBUTE4,v_shipFrom,v_shipTo,v_item);
7869 END IF;
7870 --
7871 IF v_excpRec.attribute5 = 'Y'THEN
7872 printMessage(k_ATTRIBUTE5,v_shipFrom,v_shipTo,v_item);
7873 END IF;
7874 --
7875 IF v_excpRec.attribute6 = 'Y'THEN
7876 printMessage(k_ATTRIBUTE6,v_shipFrom,v_shipTo,v_item);
7877 END IF;
7878 --
7879 IF v_excpRec.attribute7 = 'Y'THEN
7880 printMessage(k_ATTRIBUTE7,v_shipFrom,v_shipTo,v_item);
7881 END IF;
7882 --
7883 IF v_excpRec.attribute8 = 'Y'THEN
7884 printMessage(k_ATTRIBUTE8,v_shipFrom,v_shipTo,v_item);
7885 END IF;
7886 --
7887 IF v_excpRec.attribute9 = 'Y'THEN
7888 printMessage(k_ATTRIBUTE9,v_shipFrom,v_shipTo,v_item);
7889 END IF;
7890 --
7891 IF v_excpRec.attribute10 = 'Y'THEN
7892 printMessage(k_ATTRIBUTE10,v_shipFrom,v_shipTo,v_item);
7893 END IF;
7894 --
7895 IF v_excpRec.attribute11 = 'Y'THEN
7896 printMessage(k_ATTRIBUTE11,v_shipFrom,v_shipTo,v_item);
7897 END IF;
7898 --
7899 IF v_excpRec.attribute12 = 'Y'THEN
7900 printMessage(k_ATTRIBUTE12,v_shipFrom,v_shipTo,v_item);
7901 END IF;
7902 --
7903 IF v_excpRec.attribute13 = 'Y'THEN
7904 printMessage(k_ATTRIBUTE13,v_shipFrom,v_shipTo,v_item);
7905 END IF;
7906 --
7907 IF v_excpRec.attribute14 = 'Y'THEN
7908 printMessage(k_ATTRIBUTE14,v_shipFrom,v_shipTo,v_item);
7909 END IF;
7910 --
7911 IF v_excpRec.attribute15 = 'Y'THEN
7912 printMessage(k_ATTRIBUTE15,v_shipFrom,v_shipTo,v_item);
7913 END IF;
7914 --
7915 IF (l_debug <> -1) THEN
7916 rlm_core_sv.dpop(C_SDEBUG,'ReportExc');
7917 END IF;
7918 --
7919 EXCEPTION
7920 WHEN OTHERS THEN
7921 --
7922 IF (l_debug <> -1) THEN
7923 rlm_core_sv.dpop(C_SDEBUG,'Error '|| SUBSTR(SQLERRM,1,200));
7924 END IF;
7925 --
7926 END ReportExc;
7927
7928 /*===========================================================================
7929
7930 PROCEDURE NAME: printMessage
7931
7932 ===========================================================================*/
7933 PROCEDURE printMessage( x_lookupCode IN VARCHAR2,
7934 x_shipFrom IN VARCHAR2,
7935 x_shipTo IN VARCHAR2,
7936 x_customerItem IN VARCHAR2)
7937 IS
7938 BEGIN
7939 --
7940 IF (l_debug <> -1) THEN
7941 rlm_core_sv.dpush(C_SDEBUG,'printMessage');
7942 rlm_core_sv.dlog(C_DEBUG,'warning for:', x_lookupCode);
7943 END IF;
7944 --
7945 rlm_message_sv.app_error(
7946 x_ExceptionLevel => rlm_message_sv.k_warn_level,
7947 x_MessageName => 'RLM_DUPLICATE_LINES',
7948 x_InterfaceHeaderId => g_ManageDemand_tab(1).header_id,
7949 x_InterfaceLineId => g_ManageDemand_tab(1).line_id,
7950 x_token1=> 'MATCH_ATTRIBUTE',
7951 x_value1=> rlm_core_sv.get_lookup_meaning(
7952 'RLM_OPTIONAL_MATCH_ATTRIBUTES',
7953 x_lookupCode),
7954 x_token2=> 'SF',
7955 x_value2=> x_shipFrom,
7956 x_token3=> 'ST',
7957 x_value3=> x_shipTo,
7958 x_token4=> 'CI',
7959 x_value4=> x_customerItem);
7960 --
7961 IF (l_debug <> -1) THEN
7962 rlm_core_sv.dpop(C_SDEBUG,'printMessage ');
7963 END IF;
7964 --
7965 EXCEPTION
7966 WHEN OTHERS THEN
7967 --
7968 IF (l_debug <> -1) THEN
7969 rlm_core_sv.dpop(C_SDEBUG,'Exception '|| SUBSTR(SQLERRM,1,200));
7970 END IF;
7971 --
7972 raise;
7973 --
7974 END printMessage;
7975
7976 --
7977 -- Bug 2788014: Calculate intransit quantities across orgs and orders
7978 -- if CUM org level is xxx/All Ship Froms
7979 --
7980 FUNCTION GetIntransitAcrossOrgs(x_Sched_rec IN RLM_INTERFACE_HEADERS%ROWTYPE,
7981 x_Group_rec IN rlm_dp_sv.t_Group_rec,
7982 x_cum_key_id IN NUMBER)
7983 RETURN NUMBER IS
7984 -- The shipper ID is stored in the item_detail_ref_value_1 field
7985 -- when the item detail type = 4 and the sub type = 'RECEIPT', 'SHIPMENT'
7986 --
7987
7988 CURSOR c_RctShipperIds IS
7989 SELECT start_date_time,
7990 primary_quantity,
7991 substr(item_detail_ref_value_1,1,29) shipper_Id,
7992 line_id
7993 FROM rlm_schedule_lines
7994 WHERE ship_from_org_id = x_Group_rec.ship_from_org_id
7995 AND ship_to_org_id = x_Group_rec.ship_to_org_id
7996 AND inventory_item_id = x_Group_rec.inventory_item_id
7997 AND customer_item_id = x_Group_rec.customer_item_id
7998 AND item_detail_type = k_RECT
7999 AND qty_type_code = k_ACTUAL
8000 AND item_detail_subtype = k_RECEIPT
8001 ORDER BY start_date_time DESC;
8002
8003 CURSOR c_ShpShipperIds IS
8004 SELECT start_date_time,
8005 primary_quantity,
8006 substr(item_detail_ref_value_1,1,29) shipper_Id,
8007 line_id
8008 FROM rlm_schedule_lines
8009 WHERE ship_from_org_id = x_Group_rec.ship_from_org_id
8010 AND ship_to_org_id = x_Group_rec.ship_to_org_id
8011 AND inventory_item_id = x_Group_rec.inventory_item_id
8012 AND customer_item_id = x_Group_rec.customer_item_id
8013 AND item_detail_type = k_RECT
8014 AND qty_type_code = k_ACTUAL
8015 AND item_detail_subtype = k_SHIPMENT
8016 ORDER BY start_date_time DESC;
8017 --
8018 -- This cursor is to select the most recent receipt
8019 -- line on the current schedule for each group
8020 --
8021 CURSOR c_LastReceipt IS
8022 SELECT start_date_time,
8023 item_detail_subtype,
8024 item_detail_ref_value_1
8025 FROM rlm_interface_lines
8026 WHERE header_id = x_Sched_rec.header_id
8027 AND ship_from_org_id = x_Group_rec.ship_from_org_id
8028 AND ship_to_org_id = x_Group_rec.ship_to_org_id
8029 AND inventory_item_id = x_Group_rec.inventory_item_id
8030 AND customer_item_id = x_Group_rec.customer_item_id
8031 AND item_detail_type = k_RECT
8032 AND qty_type_code = k_ACTUAL
8033 AND item_detail_subtype = k_RECEIPT
8034 ORDER BY start_date_time DESC;
8035 --
8036 -- This cursor is to select the most recent shipment
8037 -- line on the current schedule for each group
8038 --
8039 CURSOR c_LastShipment IS
8040 SELECT start_date_time,
8041 item_detail_subtype,
8042 item_detail_ref_value_1
8043 FROM rlm_interface_lines
8044 WHERE header_id = x_Sched_rec.header_id
8045 AND ship_from_org_id = x_Group_rec.ship_from_org_id
8046 AND ship_to_org_id = x_Group_rec.ship_to_org_id
8047 AND inventory_item_id = x_Group_rec.inventory_item_id
8048 AND customer_item_id = x_Group_rec.customer_item_id
8049 AND item_detail_type = k_RECT
8050 AND qty_type_code = k_ACTUAL
8051 AND item_detail_subtype = k_SHIPMENT
8052 ORDER BY start_date_time DESC;
8053 --
8054 v_InTransitQty NUMBER DEFAULT 0;
8055 v_count NUMBER DEFAULT 0 ;
8056 v_shipment_date DATE;
8057 v_receipt_date DATE;
8058 v_date DATE;
8059 v_item_detail_subtype VARCHAR2(80);
8060 v_cust_production_seq_num VARCHAR2(35);
8061 v_intransit_time NUMBER := 0;
8062 --
8063 x_progress VARCHAR2(3) DEFAULT '010';
8064 v_return_status VARCHAR2(240);
8065 i NUMBER;
8066 v_ReturnStatus BOOLEAN;
8067 v_ReturnMsg VARCHAR2(2000);
8068 --
8069 v_match_within_rule RLM_CORE_SV.t_Match_rec;
8070 v_match_across_rule RLM_CORE_SV.t_Match_rec;
8071 v_match_rec WSH_RLM_INTERFACE.t_optional_match_rec;
8072 v_shipper_rec WSH_RLM_INTERFACE.t_shipper_rec;
8073 v_intransit_calc_basis VARCHAR2(15);
8074 v_deliveryID VARCHAR2(35);
8075 v_min_horizon_date VARCHAR2(30); --Bugfix 6265953
8076 v_match_rec_shipline RLM_RD_SV.t_generic_rec;--Bugfix 6265953
8077 v_Group_rec rlm_dp_sv.t_Group_rec; --Bugfix 6265953
8078 --
8079 CURSOR c_Orders IS
8080 SELECT header_id
8081 FROM oe_order_lines
8082 WHERE ship_to_org_id = x_Group_rec.ship_to_org_id
8083 AND ordered_item_id = x_Group_rec.customer_item_id
8084 AND inventory_item_id = x_Group_rec.inventory_item_id
8085 AND veh_cus_item_cum_key_id = x_cum_key_id
8086 GROUP BY header_id;
8087 --
8088 v_order_header_id NUMBER;
8089 v_IntransitQty_tmp NUMBER;
8090 --
8091 BEGIN
8092 --
8093 IF (l_debug <> -1) THEN
8094 rlm_core_sv.dpush(C_SDEBUG, 'GetIntransitAcrossOrgs');
8095 rlm_core_sv.dlog(C_DEBUG, 'CUM Key ID', x_cum_key_id);
8096 END IF;
8097 --
8098 InitializeMatchCriteria(v_match_within_rule, v_match_across_rule);
8099 --
8100 IF (l_debug <> -1) THEN
8101 rlm_core_sv.dlog(C_DEBUG, 'Intran. calc.basis', x_Group_rec.setup_terms_rec.intransit_calc_basis);
8102 END IF;
8103 --
8104 IF (x_Group_rec.setup_terms_rec.time_uom_code = 'HR') THEN
8105 v_intransit_time := nvl(x_Group_rec.setup_terms_rec.intransit_time,0)/24;
8106 ELSE
8107 v_intransit_time := nvl(x_Group_rec.setup_terms_rec.intransit_time,0);
8108 END IF;
8109 --
8110 IF (x_Group_rec.setup_terms_rec.intransit_calc_basis = k_NONE OR
8111 x_Group_rec.setup_terms_rec.intransit_calc_basis is NULL) THEN
8112 --
8113 IF (l_debug <> -1) THEN
8114 rlm_core_sv.dlog(C_DEBUG, 'No intransit qty calculations');
8115 rlm_core_sv.dpop(C_SDEBUG, v_IntransitQty);
8116 END IF;
8117 --
8118 RETURN v_IntransitQty;
8119 --
8120 ELSIF x_Group_rec.setup_terms_rec.intransit_calc_basis IN (k_RECEIPT, k_SHIPMENT) THEN --Bugfix 6265953
8121 --
8122 IF x_Group_rec.setup_terms_rec.intransit_calc_basis = k_RECEIPT THEN --Bugfix 6265953
8123
8124 OPEN c_LastReceipt;
8125 FETCH c_LastReceipt INTO v_shipment_Date, v_item_detail_subtype, v_deliveryID;
8126 --
8127 IF (c_LastReceipt%NOTFOUND) THEN
8128 --
8129 v_shipment_date := x_Sched_rec.sched_generation_date - v_intransit_time;
8130 v_shipper_rec.shipper_Id1 := NULL;
8131 v_Shipper_rec.shipper_Id2 := NULL;
8132 v_Shipper_rec.shipper_Id3 := NULL;
8133 v_Shipper_rec.shipper_Id3 := NULL;
8134 v_Shipper_rec.shipper_Id3 := NULL;
8135 --
8136 IF (l_debug <> -1) THEN
8137 rlm_core_sv.dlog(c_DEBUG, 'No receipt line present on schedule, using Sched Gen date');
8138 rlm_core_sv.dlog(C_DEBUG, 'v_shipment_date', v_shipment_date);
8139 END IF;
8140 --
8141 ELSIF (v_deliveryID is NOT NULL) THEN
8142 --
8143 IF (l_debug <> -1) THEN
8144 rlm_core_sv.dlog(C_DEBUG, 'Delivery ID present on schedule');
8145 END IF;
8146 --
8147 FOR v_RctSID in c_RctShipperIds LOOP
8148 --
8149 IF (c_RctShipperIds%NOTFOUND OR v_count > 5 ) THEN
8150 EXIT;
8151 END IF;
8152 --
8153 v_count := v_count + 1;
8154 --
8155 IF (l_debug <> -1) THEN
8156 rlm_core_sv.dlog(C_DEBUG,'line_id', v_RctSID.line_id);
8157 rlm_core_sv.dlog(C_DEBUG,'start_date_time', v_RctSID.start_date_time);
8158 rlm_core_sv.dlog(C_DEBUG,'i', i);
8159 rlm_core_sv.dlog(C_DEBUG,'v_count', v_count);
8160 rlm_core_sv.dlog(C_DEBUG,'Shipper_id', v_RctSID.shipper_Id);
8161 END IF;
8162 --
8163 IF v_count = 1 THEN
8164 v_shipper_rec.shipper_Id1 := v_RctSID.shipper_Id;
8165 ELSIF v_count = 2 THEN
8166 v_shipper_rec.shipper_Id2 := v_RctSID.shipper_Id;
8167 ELSIF v_count = 3 THEN
8168 v_shipper_rec.shipper_Id3 := v_RctSID.shipper_Id;
8169 ELSIF v_count = 4 THEN
8170 v_shipper_rec.shipper_Id4 := v_RctSID.shipper_Id;
8171 ELSIF v_count = 5 THEN
8172 v_shipper_rec.shipper_Id5 := v_RctSID.shipper_Id;
8173 END IF;
8174 --
8175 END LOOP;
8176 --
8177 ELSIF (v_shipment_date is NOT NULL) THEN
8178 --
8179 v_shipment_date := v_shipment_Date - v_intransit_time;
8180 v_shipper_rec.shipper_Id1 := NULL;
8181 v_Shipper_rec.shipper_Id2 := NULL;
8182 v_Shipper_rec.shipper_Id3 := NULL;
8183 v_Shipper_rec.shipper_Id3 := NULL;
8184 v_Shipper_rec.shipper_Id3 := NULL;
8185 --
8186 IF (l_debug <> -1) THEN
8187 rlm_core_sv.dlog(C_DEBUG, 'No delivery ID present on schedule');
8188 rlm_core_sv.dlog(C_DEBUG, 'v_shipment_date', v_shipment_date);
8189 END IF;
8190 --
8191 END IF;
8192 --
8193 CLOSE c_LastReceipt;
8194 --
8195 ELSE /* intransit calc. basis = 'shipment' */
8196 --
8197 OPEN c_LastShipment;
8198 FETCH c_LastShipment INTO v_shipment_date, v_item_detail_subtype, v_deliveryID;
8199 --
8200 IF (c_LastShipment%NOTFOUND) THEN
8201 --
8202 v_shipment_date := x_Sched_rec.sched_generation_date;
8203 v_shipper_rec.shipper_Id1 := NULL;
8204 v_Shipper_rec.shipper_Id2 := NULL;
8205 v_Shipper_rec.shipper_Id3 := NULL;
8206 v_Shipper_rec.shipper_Id4 := NULL;
8207 v_Shipper_rec.shipper_Id5 := NULL;
8208 --
8209 IF (l_debug <> -1) THEN
8210 rlm_core_sv.dlog(C_DEBUG, 'No shipment line, so shipment date = sched_gen_Date', v_shipment_date);
8211 END IF;
8212 --
8213 ELSIF (v_deliveryID is NOT NULL) THEN
8214 --
8215 IF (l_debug <> -1) THEN
8216 rlm_core_sv.dlog(C_DEBUG, 'Delivery ID present on schedule');
8217 END IF;
8218 --
8219 FOR v_ShpSID IN c_ShpShipperIds LOOP
8220 --
8221 IF (c_ShpShipperIds%NOTFOUND OR v_count > 5) THEN
8222 EXIT;
8223 END IF;
8224 --
8225 v_count := v_count + 1;
8226 --
8227 IF (l_debug <> -1) THEN
8228 rlm_core_sv.dlog(C_DEBUG,'line_id', v_ShpSID.line_id);
8229 rlm_core_sv.dlog(C_DEBUG,'start_date_time', v_ShpSID.start_date_time);
8230 rlm_core_sv.dlog(C_DEBUG,'v_count', v_count);
8231 rlm_core_sv.dlog(C_DEBUG,'Shipper_id', v_ShpSID.shipper_Id);
8232 END IF;
8233 --
8234 IF v_count = 1 THEN
8235 v_shipper_rec.shipper_Id1 := v_ShpSID.shipper_Id;
8236 ELSIF v_count = 2 THEN
8237 v_shipper_rec.shipper_Id2 := v_ShpSID.shipper_Id;
8238 ELSIF v_count = 3 THEN
8239 v_shipper_rec.shipper_Id3 := v_ShpSID.shipper_Id;
8240 ELSIF v_count = 4 THEN
8241 v_shipper_rec.shipper_Id4 := v_ShpSID.shipper_Id;
8242 ELSIF v_count = 5 THEN
8243 v_shipper_rec.shipper_Id5 := v_ShpSID.shipper_Id;
8244 END IF;
8245 --
8246 END LOOP;
8247 --
8248 ELSIF (v_shipment_date is NOT NULL) THEN
8249 --
8250 IF (l_debug <> -1) THEN
8251 rlm_core_sv.dlog(C_DEBUG, 'No delivery ID present on schedule');
8252 END IF;
8253 --
8254 v_shipper_rec.shipper_Id1 := NULL;
8255 v_Shipper_rec.shipper_Id2 := NULL;
8256 v_Shipper_rec.shipper_Id3 := NULL;
8257 v_Shipper_rec.shipper_Id3 := NULL;
8258 v_Shipper_rec.shipper_Id3 := NULL;
8259 --
8260 END IF;
8261 --
8262 CLOSE c_LastShipment;
8263 --
8264 END IF;
8265 --
8266 FOR c_Orders_rec IN c_Orders LOOP
8267 --
8268 v_order_header_id := c_Orders_rec.header_id;
8269 --
8270 IF (l_debug <> -1) THEN
8271 rlm_core_sv.dlog(C_DEBUG, 'Order Header ID', v_order_header_id);
8272 END IF;
8273 --
8274 RLM_EXTINTERFACE_SV.getIntransitQty (
8275 x_Group_rec.customer_id,
8276 x_Group_rec.ship_to_org_id,
8277 x_Group_rec.intmed_ship_to_org_id, --Bugfix 5911991
8278 NULL,
8279 x_Group_rec.inventory_item_id,
8280 x_Group_rec.customer_item_id,
8281 v_order_header_id,
8282 -- NVL(x_Group_rec.blanket_number, k_NULL), --Bugfix 6594840
8283 k_NULL, --Bugfix 6594840
8284 x_Sched_rec.org_id,
8285 x_Sched_rec.schedule_type,
8286 v_Shipper_rec,
8287 v_Shipment_date,
8288 v_match_within_rule,
8289 v_match_across_rule,
8290 v_match_rec,
8291 x_Sched_rec.header_id,
8292 v_InTransitQty_tmp,
8293 v_return_status);
8294 --
8295 IF (l_debug <> -1) THEN
8296 rlm_core_sv.dlog(C_DEBUG, 'v_return_status', v_return_status);
8297 rlm_core_sv.dlog(C_DEBUG, 'v_InTransitQty', v_InTransitQty_tmp);
8298 END IF;
8299 --
8300 IF v_return_status = WSH_UTIL_CORE.G_RET_STS_ERROR THEN
8301 --
8302 rlm_core_sv.dpop(C_SDEBUG, 'GetIntransitQtyAPI Failed');
8303 RAISE e_group_error;
8304 --
8305 ELSIF v_return_status = WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR THEN
8306 --
8307 rlm_core_sv.dpop(C_SDEBUG, 'GetIntransitQtyAPI Failed');
8308 RAISE e_group_error;
8309 --
8310 END IF;
8311 --
8312 v_IntransitQty := v_IntransitQty + v_IntransitQty_tmp;
8313 --
8314 END LOOP;
8315 --
8316 IF (l_debug <> -1) THEN
8317 rlm_core_sv.dpop(C_SDEBUG, v_IntransitQty);
8318 END IF;
8319 return v_IntransitQty; -- Bug 4535823
8320 --
8321 --Bugfix 6265953 START
8322 ELSIF (UPPER(x_Group_rec.setup_terms_rec.intransit_calc_basis) IN ('SHIPPED_LINES','PART_SHIP_LINES')) THEN
8323
8324 v_Group_rec := x_Group_rec;
8325
8326 v_Group_rec.match_within_rec := v_match_within_rule;
8327 v_Group_rec.match_across_rec := v_match_across_rule;
8328
8329 --Purchase Order
8330 IF x_Group_rec.setup_terms_rec.cum_control_code IN ('CUM_BY_DATE_PO','CUM_BY_PO_ONLY') THEN
8331 --
8332 IF (l_debug <> -1) THEN
8333 rlm_core_sv.dlog(C_SDEBUG, 'Manage Demand - CUM BY PURCHASE ORDER');
8334 END IF;
8335
8336 IF x_group_rec.match_across_rec.cust_po_number = 'Y' THEN
8337 v_Group_rec.match_across_rec.cust_po_number := 'Y';
8338 ELSE
8339 v_Group_rec.match_within_rec.cust_po_number :='Y';
8340 END IF;
8341 --
8342 v_match_rec_shipline.cust_po_number := g_CUM_tab(g_count).purchase_order_number; --Bugfix 7007638
8343 END IF; /*Purchase Order*/
8344
8345 --Record Keeping Year
8346 IF x_Group_rec.setup_terms_rec.cum_control_code IN ('CUM_BY_DATE_RECORD_YEAR') THEN
8347 --
8348 IF (l_debug <> -1) THEN
8349 rlm_core_sv.dlog(C_SDEBUG, 'Manage Demand - CUM BY RECORD YEAR');
8350 END IF;
8351
8352 IF x_group_rec.match_across_rec.industry_attribute1 = 'Y' THEN
8353 v_Group_rec.match_across_rec.industry_attribute1 := 'Y';
8354 ELSE
8355 v_Group_rec.match_within_rec.industry_attribute1 :='Y';
8356 END IF;
8357 --
8358 v_match_rec_shipline.industry_attribute1 := g_CUM_tab(g_count).cust_record_year; --Bugfix 7007638
8359 END IF; /*Record Keeping Year*/
8360
8361 SELECT TO_CHAR(TRUNC(min(il.start_date_time)), 'RRRR/MM/DD HH24:MI:SS')
8362 INTO v_min_horizon_date
8363 FROM rlm_interface_lines il,
8364 rlm_schedule_lines sl
8365 WHERE il.header_id = x_Sched_rec.header_id
8366 AND il.ship_from_org_id = x_Group_rec.ship_from_org_id
8367 AND il.ship_to_org_id = x_Group_rec.ship_to_org_id
8368 AND il.inventory_item_id = x_Group_rec.inventory_item_id
8369 AND il.customer_item_id = x_Group_rec.customer_item_id
8370 AND il.schedule_line_id = sl.line_id
8371 AND NVL(il.item_detail_type, ' ')
8372 <> rlm_manage_demand_sv.k_SHIP_RECEIPT_INFO
8373 AND sl.qty_type_code = rlm_manage_demand_sv.k_ACTUAL;
8374
8375
8376 --
8377 IF (v_min_horizon_date IS NOT NULL ) THEN
8378 --
8379
8380 IF (l_debug <> -1) THEN
8381 rlm_core_sv.dlog(C_DEBUG, 'v_min_request_date', v_min_horizon_date);
8382 END IF;
8383 --
8384 IF TO_DATE(v_min_horizon_date,'RRRR/MM/DD HH24:MI:SS') > x_Sched_rec.sched_horizon_start_date THEN
8385 --
8386 v_min_horizon_date:= TO_CHAR(TRUNC(x_Sched_rec.sched_horizon_start_date), 'RRRR/MM/DD HH24:MI:SS');
8387 --
8388 END IF;
8389 --
8390 IF (l_debug <> -1) THEN
8391 rlm_core_sv.dlog(C_DEBUG, 'v_min_horizon_date', v_min_horizon_date);
8392 END IF;
8393
8394 FOR c_Orders_rec IN c_Orders LOOP
8395
8396 v_Group_rec.order_header_id := c_Orders_rec.header_id;
8397 v_Group_rec.ship_from_org_id := NULL;
8398
8399 IF (l_debug <> -1) THEN
8400 rlm_core_sv.dlog(C_DEBUG, 'Order Header ID', v_Group_rec.order_header_id);
8401 END IF;
8402
8403 RLM_EXTINTERFACE_SV.GetIntransitShippedLines(x_Sched_rec,
8404 v_Group_rec,
8405 v_match_rec_shipline,
8406 v_min_horizon_date,
8407 v_InTransitQty_tmp);
8408 IF (l_debug <> -1) THEN
8409 rlm_core_sv.dlog(C_DEBUG, 'v_InTransitQty', v_InTransitQty_tmp);
8410 END IF;
8411
8412 v_IntransitQty := v_IntransitQty + v_IntransitQty_tmp;
8413 --
8414 END LOOP;
8415
8416 IF (l_debug <> -1) THEN
8417 rlm_core_sv.dpop(C_SDEBUG, v_IntransitQty);
8418 END IF;
8419
8420 RETURN v_IntransitQty;
8421
8422 END IF;
8423 END IF;
8424 --Bugfix 6265953 END
8425 --
8426 EXCEPTION
8427 WHEN e_Group_error THEN
8428 --
8429 RAISE;
8430 --
8431 WHEN OTHERS THEN
8432 rlm_message_sv.sql_error('GetIntransitAcrossOrgs',x_progress);
8433 --
8434 IF (l_debug <> -1) THEN
8435 rlm_core_sv.dpop(C_SDEBUG,'EXCEPTION: '||SUBSTR(SQLERRM,1,200));
8436 END IF;
8437 --
8438 RAISE;
8439 END GetIntransitAcrossOrgs;
8440
8441
8442 /*===========================================================================
8443
8444 PROCEDURE NAME: GetVarK_dNull
8445
8446 ===========================================================================*/
8447
8448 FUNCTION GetvarK_DNULL
8449
8450 RETURN DATE IS
8451
8452 BEGIN
8453
8454 return(RLM_MANAGE_DEMAND_SV.K_DNULL);
8455
8456 END GetvarK_DNULL;
8457
8458
8459 END RLM_MANAGE_DEMAND_SV;