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