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