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