DBA Data[Home] [Help]

PACKAGE BODY: APPS.RLM_VALIDATEDEMAND_SV

Source


1 PACKAGE BODY RLM_VALIDATEDEMAND_SV as
2 /* $Header: RLMDPVDB.pls 120.13.12000000.3 2007/07/09 05:51:59 brana ship $*/
3 /*=========================RLM_VALIDATEDEMAND_SV ===========================*/
4 
5 --
6 l_DEBUG NUMBER := NVL(fnd_profile.value('RLM_DEBUG_MODE'),-1);
7 --
8 /*===========================================================================
9 
10   PROCEDURE InitializeGroup
11 
12 ===========================================================================*/
13 
14 PROCEDURE InitializeGroup(x_header_id IN NUMBER,
15                           x_Group_ref IN OUT NOCOPY t_Cursor_ref,
16                           p_caller IN VARCHAR2 DEFAULT NULL)
17 IS
18 
19 BEGIN
20   --
21   IF (l_debug <> -1) THEN
22      rlm_core_sv.dpush(C_SDEBUG,'InitializeGroup');
23      rlm_core_sv.dlog(C_DEBUG,'x_header_id',x_header_id);
24      rlm_core_sv.dlog(C_DEBUG,'g_header_rec.schedule_type',
25                             g_header_rec.schedule_type);
26      rlm_core_sv.dlog(C_DEBUG,'p_caller',p_caller);
27   END IF;
28   --
29 
30   IF g_header_rec.schedule_type <> 'SEQUENCED' AND nvl(p_caller,'NULL') <> 'Header' THEN
31    --
32    IF (l_debug <> -1) THEN
33       rlm_core_sv.dlog(C_DEBUG,'p_caller',p_caller);
34    END IF;
35    --
36     OPEN x_Group_ref FOR
37       SELECT   'N',
38                ril.schedule_item_num,
39                null,
40                null,
41                null,
42                null,
43                null,
44                null
45       FROM     rlm_interface_headers   rih,
46                rlm_interface_lines_all ril
47       WHERE    ril.header_id = rih.header_id
48       AND      rih.header_id = x_header_id
49       AND      rih.org_id = ril.org_id
50       GROUP BY schedule_item_num;
51    --
52   ELSE
53    --
54   /*2313139*/
55 
56     IF g_header_rec.schedule_source <> 'MANUAL' THEN
57      --
58       OPEN x_Group_ref FOR
59         SELECT   'S',
60                  null,
61                  ril.cust_ship_from_org_ext,
62                  ril.cust_ship_to_ext,
63                  ril.customer_item_ext,
64                  null,
65                  null,
66                  null
67         FROM     rlm_interface_headers rih,
68                  rlm_interface_lines_all ril
69         WHERE    ril.header_id = rih.header_id
70         AND      rih.header_id = x_header_id
71         AND      rih.org_id = ril.org_id
72         GROUP BY cust_ship_from_org_ext, cust_ship_to_ext,
73                  customer_item_ext;
74      --
75     ELSE
76      --
77       OPEN x_Group_ref FOR
78       SELECT   'S',
79                null,
80                null,
81                null,
82                null,
83                ril.customer_item_id,
84                ril.ship_from_org_id,
85                ril.ship_to_address_id
86       FROM     rlm_interface_headers rih,
87                rlm_interface_lines_all ril
88       WHERE    ril.header_id = rih.header_id
89       AND      rih.header_id = x_header_id
90       AND      rih.org_id = ril.org_id
91       GROUP BY customer_item_id,
92                ship_from_org_id,
93                ship_to_address_id;
94 
95     END IF;
96      --
97   /*2313139*/
98   END IF;
99   --
100   IF (l_debug <> -1) THEN
101      rlm_core_sv.dpop(C_SDEBUG);
102   END IF;
103   --
104 EXCEPTION
105   --
106   WHEN OTHERS THEN
107     --
108     IF (l_debug <> -1) THEN
109        rlm_core_sv.dpop(C_SDEBUG,'EXCEPTION: '||SUBSTR(SQLERRM,1,200));
110     END IF;
111     --
112     raise;
113   --
114 END InitializeGroup;
115 
116 /*===========================================================================
117 
118   FUNCTION FetchGroup
119 
120 ===========================================================================*/
121 FUNCTION FetchGroup(x_Group_ref IN OUT NOCOPY t_Cursor_ref,
122                     x_Group_rec IN OUT NOCOPY t_Group_rec)
123 RETURN BOOLEAN
124 IS
125 
126 BEGIN
127   --
128   IF (l_debug <> -1) THEN
129      rlm_core_sv.dpush(C_SDEBUG,'FetchGroup');
130   END IF;
131   --
132     FETCH x_Group_ref INTO
133      x_Group_rec.group_type,
134      x_Group_rec.schedule_item_num,
135      x_Group_rec.cust_ship_from_org_ext,
136      x_Group_rec.cust_ship_to_ext,
137      x_Group_rec.customer_item_ext,
138      x_Group_rec.customer_item_id,
139      x_group_rec.ship_from_org_id,
140      x_group_rec.ship_to_address_id;
141   --
142   IF x_Group_ref%NOTFOUND THEN
143     --
144     IF (l_debug <> -1) THEN
145        rlm_core_sv.dpop(C_SDEBUG, 'false');
146     END IF;
147     --
148     RETURN(FALSE);
149     --
150   ELSE
151     --
152     IF (l_debug <> -1) THEN
153        rlm_core_sv.dlog(C_DEBUG,'group_type',x_Group_rec.group_type);
154        rlm_core_sv.dlog(C_DEBUG,'schedule_item_num',x_Group_rec.schedule_item_num);
155        rlm_core_sv.dpop(C_SDEBUG, 'true');
156     END IF;
157     --
158     RETURN(TRUE);
159     --
160   END IF;
161   --
162   EXCEPTION
163     --
164     WHEN OTHERS THEN
165       --
166       IF (l_debug <> -1) THEN
167          rlm_core_sv.dpop(C_SDEBUG,'EXCEPTION: '||SUBSTR(SQLERRM,1,200));
168       END IF;
169       --
170       raise;
171       --
172 END FetchGroup;
173 
174 /*===========================================================================
175 
176 	PROCEDURE NAME: CheckHeaderECETpLocCode
177 
178 ===========================================================================*/
179 
180 PROCEDURE CheckHeaderECETpLocCode(x_header_rec  IN OUT NOCOPY RLM_INTERFACE_HEADERS%ROWTYPE,
181                                   x_ReturnStatus  OUT NOCOPY NUMBER)
182 IS
183   --
184   v_progress            VARCHAR2(10) := '010';
185   v_Group_ref           t_Cursor_ref;
186   v_Group_rec           t_Group_rec;
187   v_shiptocustomerid    NUMBER;
188   v_prevshiptocustomerid    NUMBER;
189   e_NullHeaderLocCode   EXCEPTION;
190   e_InvalidTPLocCode    EXCEPTION;
191   v_ReturnStatus        VARCHAR2(10);
192   v_MsgCount            NUMBER;
193   v_MsgData             VARCHAR2(2000);
194   v_Customer            VARCHAR2(35);
195   v_ShipToLoc           VARCHAR2(35);
196   v_shipToAddressId     NUMBER;
197   e_InvalidCustomerExt  EXCEPTION;
198   e_NullCustomerExt     EXCEPTION;
199   e_NullShipToExt       EXCEPTION;
200   v_first               BOOLEAN;
201   p_caller             VARCHAR2(3);
202   --
203   BEGIN
204     --
205     IF (l_debug <> -1) THEN
206        rlm_core_sv.dpush(C_SDEBUG,'CheckHeaderECETpLocCode');
207        rlm_core_sv.dlog(C_DEBUG,'x_header_rec', x_header_rec.header_id);
208     END IF;
209     --
210     IF x_header_rec.customer_id is NULL THEN
211       --
212       v_first := TRUE;
213       --
214       IF x_header_rec.ece_tp_location_code_ext IS NULL THEN
215          --
216          InitializeGroup(x_header_rec.header_id, v_Group_ref, 'Header');
217          --
218          v_progress := '020';
219          --
220          IF (l_debug <> -1) THEN
221             rlm_core_sv.dlog(C_DEBUG,'start of loop to check related ship to');
222          END IF;
223          --
224          WHILE FetchGroup(v_Group_ref, v_Group_rec) LOOP
225            --
226             IF x_header_rec.customer_ext IS NOT NULL THEN
227                --
228                IF (l_debug <> -1) THEN
229                   rlm_core_sv.dlog(C_DEBUG,'customer_ext ',x_header_rec.customer_ext);
230                END IF;
231                --
232                v_Customer := x_header_rec.customer_ext;
233                --
234              ELSIF  x_header_rec.ece_tp_translator_code IS NOT NULL THEN
235                --
236                IF (l_debug <> -1) THEN
237                   rlm_core_sv.dlog(C_DEBUG,'ece_tp_translator_code',
238                                        x_header_rec.ece_tp_translator_code);
239                END IF;
240                --
241                v_Customer := x_header_rec.ece_tp_translator_code;
242                --
243              ELSE
244                --
245                raise e_NullCustomerExt;
246                --
247              END IF;
248              --
249              IF v_group_rec.cust_ship_to_ext is NULL THEN
250                 --
251                 raise e_NullShipToExt;
252                 --
253              END IF;
254              --
255              IF (l_debug <> -1) THEN
256                   rlm_core_sv.dlog(C_DEBUG,'cust_ship_to_ext',
257                                        v_group_rec.cust_ship_to_ext);
258              END IF;
259              --
260              ece_trading_partners_pub.get_tp_address(1, NULL, NULL, NULL,
261                                           NULL, v_ReturnStatus, v_MsgCount,
262                                           v_MsgData,
263                                           v_customer,
264                                           v_Group_rec.cust_ship_to_ext,
265                                           'CUSTOMER',
266                                           v_shipToCustomerId,
267                                           v_shipToAddressId);
268              --
269              IF (l_debug <> -1) THEN
270                 rlm_core_sv.dlog(C_DEBUG,'customer_id ', v_shipToCustomerId);
271                rlm_core_sv.dlog(C_DEBUG,'ship_to_address_id ', v_shipToAddressId);
272              END IF;
273              --
274              IF v_shipToCustomerId is NULL THEN
275                  --
276                  SELECT DISTINCT ACCT_SITE.CUST_ACCOUNT_ID
277                  INTO   v_shipToCustomerId
278                  FROM   HZ_CUST_ACCT_SITES ACCT_SITE ,
279                         ECE_TP_HEADERS eth
280                  WHERE  ACCT_SITE.tp_header_id = eth.tp_header_id
281                  AND    ACCT_SITE.ece_tp_location_code = v_Group_rec.cust_ship_to_ext
282                  AND    eth.TP_REFERENCE_EXT1 = v_Customer;
283                  --
284              END IF;
285 
286              IF v_shipToCustomerId IS NULL THEN
287                 --
288                 raise e_invalidTPLocCode;
289                 --
290              END IF;
291              --
292              IF v_shipToCustomerId <> v_prevShiptoCustomerId and NOT v_first THEN
293                 --
294                 raise e_NullHeaderLocCode;
295                 --
296              END IF;
297              --
298              v_prevShiptoCustomerId := v_shipToCustomerId;
299              --
300              v_first := FALSE;
301              --
302          END LOOP; /* while loop */
303          --
304          CLOSE v_Group_ref;
305          --
306       END IF;
307       --
308       x_header_rec.customer_id := v_shipToCustomerId;
309       --
310      END IF;
311      --
312      x_returnStatus := rlm_core_sv.k_PROC_SUCCESS;
313      --
314      IF (l_debug <> -1) THEN
315         rlm_core_sv.dpop(C_SDEBUG);
316      END IF;
317 
318 EXCEPTION
319     WHEN e_NullCustomerExt THEN
320     --
321     x_header_rec.process_status := rlm_core_sv.k_PS_ERROR;
322     g_Schedule_PS := rlm_core_sv.k_PS_ERROR;
323     --
324     rlm_message_sv.app_error(
325                 x_ExceptionLevel => rlm_message_sv.k_error_level,
326                 x_MessageName => 'RLM_CUSTOMER_NULL',
327                 x_InterfaceHeaderId => x_header_rec.header_id,
328                 x_ValidationType => 'CUSTOMER');
329     --
330     IF (l_debug <> -1) THEN
331        rlm_core_sv.dlog(C_DEBUG,'progress',v_Progress);
332        rlm_core_sv.dpop(C_SDEBUG,'EXCEPTION: RLM_CUSTOMER_NULL');
333     END IF;
334     --
335   WHEN e_NullHeaderLocCode  THEN
336      --
337      x_header_rec.process_status := rlm_core_sv.k_PS_ERROR;
338      x_returnStatus := rlm_core_sv.k_PROC_ERROR;
339      --
340      rlm_message_sv.app_error(
341                 x_ExceptionLevel => rlm_message_sv.k_error_level,
342                 x_MessageName => 'RLM_SCH_NULL_LOC_CODE_CR',
343                 x_InterfaceHeaderId => x_Header_Rec.header_id,
344                 x_Token1 => 'TRANSLATOR_CODE',
345                 x_value1 => x_header_rec.ece_tp_translator_code,
346                 x_ValidationType => 'CUSTOMER');
347      --
348      IF (l_debug <> -1) THEN
349         rlm_core_sv.dlog(C_DEBUG,'EXCEPTION: RLM_SCH_NULL_LOC_CODE_CR ',v_Progress);
350         rlm_core_sv.dpop(C_SDEBUG);
351      END IF;
352      --
353   WHEN NO_DATA_FOUND OR e_InvalidTPLocCode  THEN
354      --
355      x_header_rec.process_status := rlm_core_sv.k_PS_ERROR;
356      g_Schedule_PS := rlm_core_sv.k_PS_ERROR;
357      x_returnStatus := rlm_core_sv.k_PROC_ERROR;
358      --
359      IF x_header_rec.ece_tp_translator_code IS NOT NULL THEN
360         --
361         rlm_message_sv.app_error(
362                       x_ExceptionLevel => rlm_message_sv.k_error_level,
363                       x_MessageName => 'RLM_TP_TRANSL_SHIPTO_INVALID',
364                       x_InterfaceHeaderId => x_header_rec.header_id,
365                       x_token1=>'TP_TRANSLATOR',
366                       x_value1=>x_header_rec.ece_tp_translator_code,
367                       x_token2=>'SHIP_TO',
368                       x_value2=>v_group_rec.cust_ship_to_ext,
369                       x_ValidationType => 'CUSTOMER');
370         --
371         IF (l_debug <> -1) THEN
372              rlm_core_sv.dlog(C_DEBUG,'progress',v_Progress);
373              rlm_core_sv.dpop(C_SDEBUG,'EXCEPTION: RLM_TP_TRANSL_SHIPTO_INVALID');
374         END IF;
375         --
376      ELSE
377         --
378         rlm_message_sv.app_error(
379                        x_ExceptionLevel => rlm_message_sv.k_error_level,
380                        x_MessageName => 'RLM_CUST_SHIP_TO_INVALID',
381                        x_InterfaceHeaderId => x_header_rec.header_id,
382                        x_token1=>'CUSTOMER_EXT',
383                        x_value1=>x_header_rec.customer_ext,
384                        x_token2=>'SHIP_TO',
385                        x_value2=>v_group_rec.cust_ship_to_ext,
386                        x_ValidationType => 'CUSTOMER');
387         --
388         IF (l_debug <> -1) THEN
389               rlm_core_sv.dlog(C_DEBUG,'progress',v_Progress);
390               rlm_core_sv.dpop(C_SDEBUG,'EXCEPTION: RLM_CUST_SHIP_TO_INVALID');
391         END IF;
392         --
393      END IF;
394      --
395   WHEN e_NullShipToExt THEN
396      --
397      g_header_rec.process_status := rlm_core_sv.k_PS_ERROR;
398      x_returnStatus := rlm_core_sv.k_PROC_ERROR;
399      --
400      g_Schedule_PS := rlm_core_sv.k_PS_ERROR;
401      --
402     rlm_message_sv.app_error(
403                 x_ExceptionLevel => rlm_message_sv.k_error_level,
404                 x_MessageName => 'RLM_SHIPTO_NULL',
405                 x_InterfaceHeaderId => x_header_rec.header_id,
406                 x_token1=>'CUSTOMER_EXT',
407                 x_value1=>v_Customer,
408                 x_ValidationType => 'CUSTOMER');
409      --
410      IF (l_debug <> -1) THEN
411         rlm_core_sv.dlog(C_DEBUG,'EXCEPTION: RLM_SHIPTO_NULL ',v_Progress);
412         rlm_core_sv.dpop(C_SDEBUG);
413      END IF;
414      --
415   WHEN OTHERS THEN
416      --
417      g_header_rec.process_status := rlm_core_sv.k_PS_ERROR;
418      x_returnStatus := rlm_core_sv.k_PROC_ERROR;
419      rlm_message_sv.sql_error('rlm_validatedemand_sv.CheckHeaderECETpLocCode', v_Progress);
420      --
421      IF (l_debug <> -1) THEN
422         rlm_core_sv.dpop(C_SDEBUG,'EXCEPTION: '||SUBSTR(SQLERRM,1,200));
423      END IF;
424      --
425 END CheckHeaderECETpLocCode;
426 
427 /*===========================================================================
428 
429 	PROCEDURE NAME:  GroupValidateDemand
430 
431 ===========================================================================*/
432 
433 PROCEDURE GroupValidateDemand(x_Header_Id IN RLM_INTERFACE_HEADERS.HEADER_ID%TYPE,
434                               x_Procedure_Status OUT NOCOPY NUMBER)
435 IS
436   --
437   v_progress            VARCHAR2(10) := '010';
438   x_ReturnStatus        NUMBER;
439   v_Group_ref           t_Cursor_ref;
440   v_Group_rec           t_Group_rec;
441   curr_rec              NUMBER;
442   v_bill_to_customer_id NUMBER Default NULL;
443   v_first_time          BOOLEAN DEFAULT TRUE;
444   e_no_record_found     EXCEPTION;
445   e_error_found         EXCEPTION;
446   setupterms_APIFailed  EXCEPTION;
447   --
448   e_InactiveBlanket	EXCEPTION;
449   --
450   BEGIN
451     --
452     IF (l_debug <> -1) THEN
453        rlm_core_sv.dpush(C_SDEBUG,'GroupValidateDemand');
454        rlm_core_sv.dlog(C_DEBUG,'x_header_id',x_header_id);
455     END IF;
456     --
457     -- we start with a schedule process status of an error
458     -- if we find any one of the lines to be a success then we will
459     -- update the status to success in UpdateInterfaceLines.
460     -- This value of g_schedule_PS will be used to update the header PS
461     -- IF no success record found then g_schedule_PS will remain as an ERROR
462     --
463     g_schedule_PS := rlm_core_sv.k_PS_ERROR;
464     g_line_PS := rlm_core_sv.k_PS_AVAILABLE;
465     --
466     rlm_message_sv.initialize_dependency('VALIDATE_DEMAND');
467     --
468     IF NOT BuildHeaderRec(x_header_id) THEN
469       --
470       RAISE e_no_record_found;
471       --
472     END IF;
473     --
474     ApplyHeaderDefaults(g_header_rec);
475     --
476     v_progress := '020';
477     --
478     RLM_TPA_SV.ValidScheduleHeader(g_header_rec);
479     --
480     v_progress := '025';
481     --
482     CheckHeaderECETpLocCode(g_header_rec, x_ReturnStatus);
483     --
484     IF x_ReturnStatus =  rlm_core_sv.k_PROC_ERROR THEN
485        raise e_error_found;
486     END IF;
487     --
488     InitializeGroup(x_header_id, v_Group_ref);
489     --
490     v_progress := '030';
491     --
492     IF (l_debug <> -1) THEN
493        rlm_core_sv.dlog(C_DEBUG,'start of loop');
494     END IF;
495     --
496     WHILE FetchGroup(v_Group_ref, v_Group_rec) LOOP
497       --
498       BEGIN
499        --
500        v_progress := '040';
501        --
502        IF (l_debug <> -1) THEN
503           rlm_core_sv.dlog(C_DEBUG,'v_Group_rec.group_type',
504                                  v_Group_rec.group_type);
505           rlm_core_sv.dlog(C_DEBUG,'v_Group_rec.schedule_item_num',
506                                  v_Group_rec.schedule_item_num);
507        END IF;
508        --
509        PopulateLinesTab(v_Group_rec);
510        --
511        v_progress := '060';
512        --
513        -- THis record is used to store the first record which is derived and
514        -- validated for the entire line and then the values are assigned to
515        -- the entire grouping of lines in assign_line_values
516        v_progress := '070';
517        --
518        IF (l_debug <> -1) THEN
519           rlm_core_sv.dlog (C_DEBUG,'before Group Validate loop/ COUNT',
520                                           g_lines_tab.COUNT );
521        END IF;
522        --
523        v_first_time := TRUE;
524        --
525        --Bug 5098241
526        v_Group_rec.setup_terms_rec := NULL;
527 
528        FOR i IN 1..g_lines_tab.COUNT LOOP
529          -- performance related changes have to go in here.
530          -- instead of all the lines validations we need to
531          -- change the loop to be inside each of the following.
532          -- sub types e.g in DeriveCustomerID loop through all
533          -- the values and derive only when the values change or else default
534             --
535             curr_rec := i;
536             --
537   	    IF (l_debug <> -1) THEN
538                rlm_core_sv.dlog (C_DEBUG,'Processing line' , g_lines_tab(i).line_id);
539 	       rlm_core_sv.dlog(C_DEBUG, 'Index i', i);
540             END IF;
541 
542             --perf code some ids are derived per group only once
543 
544             IF(i=1) THEN
545               --
546               DeriveCustomerID(g_header_rec,g_lines_tab(i)) ;
547               DeriveShipToID(g_header_rec, g_lines_tab(i));
548               DeriveShipFromOrg(g_header_rec, g_lines_tab(i));
549               RLM_TPA_SV.ValidateCustomerItem(g_header_rec, g_lines_tab(i));
550 
551             --
552             ELSE
553               --
554               IF(NVL(g_lines_tab(i).cust_ship_to_ext,1) = NVL(g_lines_tab(1).cust_ship_to_ext,1)) THEN
555                 --
556 	        IF (l_debug <> -1) THEN
557                   rlm_core_sv.dlog(C_DEBUG, 'Line in same group, so copy IDs from first line');
558                 END IF;
559 	        --
560                 g_lines_tab(i).ship_to_address_id := NVL(g_lines_tab(1).ship_to_address_id, g_lines_tab(i).ship_to_address_id);
561                 --
562                 -- CR change
563                 g_lines_tab(i).ship_to_customer_id := NVL(g_lines_tab(1).ship_to_customer_id, g_lines_tab(i).ship_to_customer_id);
564                 --
565                 g_lines_tab(i).ship_to_org_id := NVL(g_lines_tab(1).ship_to_org_id,g_lines_tab(i).ship_to_org_id);
566 
567                 g_lines_tab(i).ship_to_site_use_id := NVL(g_lines_tab(1).ship_to_site_use_id,g_lines_tab(i).ship_to_site_use_id);
568 
569                 g_lines_tab(i).customer_item_id:= NVL(g_lines_tab(1).customer_item_id,g_lines_tab(i).customer_item_id);
570                 --
571               ELSE
572                 --
573 	        IF (l_debug <> -1) THEN
574                   rlm_core_sv.dlog(C_DEBUG, 'Line in different group, so derive IDs again');
575                 END IF;
576 	        --
577                 DeriveCustomerID(g_header_rec,g_lines_tab(i)) ;
578                 DeriveShipToID(g_header_rec, g_lines_tab(i));
579                 RLM_TPA_SV.ValidateCustomerItem(g_header_rec, g_lines_tab(i));
580                 --
581               END IF;
582 
583               g_lines_tab(i).ship_from_org_id := NVL(g_lines_tab(1).ship_from_org_id,
584 					g_lines_tab(i).ship_from_org_id);
585               --
586             END IF;
587 
588             --
589             DeriveIntrmdShipToID(g_header_rec, g_lines_tab(i));
590             --
591 	    RLM_TPA_SV.SetLineTPAttCategory(	g_header_rec,
592 				g_lines_tab(i),
593 				v_Group_rec);
594 	    --
595   	    IF (l_debug <> -1) THEN
596                rlm_core_sv.dlog (C_DEBUG,'after DeriveIDs/before CallSetups');
597             END IF;
598             --
599             v_progress := '080';
600             --
601              IF (i=1) THEN /* Call setup terms once for each group */
602                --
603                IF NOT CallSetups(v_Group_rec, g_header_rec, g_lines_tab(i)) THEN
604                  --
605   		 IF (l_debug <> -1) THEN
606                     rlm_core_sv.dlog (C_DEBUG,'Setup API failed for line ', g_lines_tab(i).line_id);
607                  END IF;
608 	         --
609                  g_lines_tab(i).process_status := rlm_core_sv.k_PS_ERROR;
610                  --RAISE setupterms_APIFailed; --continue processing other lines
611                 --
612                END IF;
613                --
614              ELSE
615 
616                IF(NVL(g_lines_tab(i).ship_to_address_id,1) <> NVL(g_lines_tab(1).ship_to_address_id,1)) THEN
617 
618                  IF NOT CallSetups(v_Group_rec, g_header_rec, g_lines_tab(i)) THEN
619                    --
620   		   IF (l_debug <> -1) THEN
621                       rlm_core_sv.dlog (C_DEBUG,'Setup API failed for line ', g_lines_tab(i).line_id);
622                    END IF;
623 	           --
624                    g_lines_tab(i).process_status := rlm_core_sv.k_PS_ERROR;
625                    --RAISE setupterms_APIFailed; --continue processing other lines
626                    --
627                  END IF;
628                  --
629                END IF;
630                --
631              END IF;
632 
633              --global_atp
634              IF g_lines_tab(i).ship_from_org_id IS NULL THEN
635                --
636                g_lines_tab(i).ship_from_org_id := v_Group_rec.setup_terms_rec.ship_from_org_id;
637                --
638              END IF;
639              --
640              DeriveBillToId(g_header_rec,
641                             g_lines_tab(i),
642                             v_Group_rec.setup_terms_rec.cum_org_level_code);
643              --
644              DeriveOrgDependentIDs (v_Group_rec.setup_terms_rec,
645                                       g_header_rec, g_lines_tab(i));
646 
647             /** Bugfix  6185706  commented the performance changes
648              --perf changes
649              IF(i=1) THEN
650                --
651                RLM_TPA_SV.DeriveInventoryItemId(g_header_rec, g_lines_tab(i));
652                --
653              ELSE
654                --
655                IF(NVL(g_lines_tab(i).ship_to_address_id,1) <> NVL(g_lines_tab(1).ship_to_address_id,1)) THEN
656                  --
657                  RLM_TPA_SV.DeriveInventoryItemId(g_header_rec, g_lines_tab(i));
658                  --
659                ELSE
660                  --
661                  g_lines_tab(i).inventory_item_id := NVL(g_lines_tab(1).inventory_item_id,g_lines_tab(i).inventory_item_id);
662                  --
663                END IF;
664                --
665              END IF;
666 
667              --perf changes
668              --
669              **/
670              v_progress := '80';
671              --
672              IF v_first_time
673                 AND g_lines_tab(i).Item_Detail_Type in ('0','1','2')
674              THEN
675               --
676               -- All the lines within a group have the same PO and Cust_rec_year
677               -- This procedure needs to be called once per group.
678               --
679               RLM_TPA_SV.CheckCUMKeyPO(v_group_rec,
680                              g_header_rec,
681                              g_lines_tab(i));
682                --
683                v_first_time := FALSE;
684                --
685              END IF;
686              --
687   	     IF (l_debug <> -1) THEN
688                 rlm_core_sv.dlog (C_DEBUG,'process_status',g_lines_tab(i).process_status);
689              END IF;
690              --
691              RLM_TPA_SV.ValidateLineDetails(v_Group_rec.setup_terms_rec,
692                                    g_header_rec,
693                                    g_lines_tab(i),
694                                    k_ORIGINAL);
695              --
696              v_progress := '100';
697              --
698 	     -- For blanket orders
699 	     --
700 	     IF (i=1) THEN
701 	      --
702               IF v_Group_rec.setup_terms_rec.blanket_number IS NOT NULL THEN
703                --
704                DeriveBlanketPO(g_lines_tab(i).cust_po_number, v_Group_rec, x_header_id);
705                --
706 	      END IF;
707 	      --
708 	     ELSE
709 	      --
710 	      IF g_lines_tab(i).blanket_number IS NOT NULL AND
711 		 g_lines_tab(i).blanket_number <> g_lines_tab(1).blanket_number THEN
712 	       --
713                DeriveBlanketPO(g_lines_tab(i).cust_po_number, v_Group_rec, x_header_id);
714                --
715 	      END IF;
716 	      --
717 	     END IF;
718 	     --
719        END LOOP; /* for loop */
720        --
721        --
722        -- Blanket Order should be validated after all IDs have been derived
723        --
724        IF v_Group_rec.setup_terms_rec.blanket_number IS NOT NULL THEN
725 	--
726         IF NOT ValidateBlanket(v_Group_rec, g_Header_rec) THEN
727 	 --
728          IF (l_debug <> -1) THEN
729 	   rlm_core_sv.dlog(C_DEBUG, 'ValidateBlanket failed');
730 	 END IF;
731 	 --
732 	 g_lines_tab(1).process_status := rlm_core_sv.k_PS_ERROR;
733 	 RAISE e_InactiveBlanket;
734          --
735         END IF;
736         --
737        END IF;
738        --
739        RLM_TPA_SV.UpdateInterfaceLines(g_header_rec);
740        --
741        --commit;
742        --
743        -- We need to reset_dependency so that the next group does not face the
744        -- same dependency problem
745        --
746        rlm_message_sv.reset_dependency;
747        --
748        -- bug 4570658
749        --
750        g_lines_tab.DELETE;
751 
752       EXCEPTION
753        --
754         WHEN setupterms_APIFailed  THEN
755           --
756   	  IF (l_debug <> -1) THEN
757              rlm_core_sv.dlog(C_DEBUG,'progress',v_Progress);
758           END IF;
759           /* update error status for the entire group */
760           RLM_TPA_SV.UpdateInterfaceLines(g_header_rec);
761           --
762         WHEN e_InactiveBlanket  THEN
763           --
764   	  IF (l_debug <> -1) THEN
765              rlm_core_sv.dlog(C_DEBUG,'progress',v_Progress);
766           END IF;
767 	  --
768           RLM_TPA_SV.UpdateInterfaceLines(g_header_rec);
769           --
770         WHEN OTHERS THEN
771           --
772   	  IF (l_debug <> -1) THEN
773              rlm_core_sv.dlog(C_DEBUG,'progress',v_Progress);
774              rlm_core_sv.dlog(C_DEBUG,'EXCEPTION: LOOP '||SUBSTR(SQLERRM,1,200));
775              rlm_core_sv.dlog (C_DEBUG,'g_lines_tab(curr_rec).process_status',
776                                      g_lines_tab(curr_rec).process_status);
777           END IF;
778           --
779           g_lines_tab(curr_rec).process_status := rlm_core_sv.k_PS_ERROR;
780           --
781   	  IF (l_debug <> -1) THEN
782              rlm_core_sv.dlog (C_DEBUG,'g_lines_tab(curr_rec).process_status',
783                                      g_lines_tab(curr_rec).process_status);
784           END IF;
785           --
786           /* update error status for the entire group */
787           RLM_TPA_SV.UpdateInterfaceLines(g_header_rec);
788           --
789       END;
790       --
791     END LOOP; /* while loop */
792     --
793     CLOSE v_Group_ref;
794     --
795     --bug 1560271
796     --
797     IF g_header_rec.process_status = rlm_core_sv.k_PS_ERROR THEN
798       g_schedule_PS := rlm_core_sv.k_PS_ERROR;
799     END IF;
800     --
801     UpdateInterfaceHeaders;
802     --
803     --commit;
804     --
805     x_procedure_status := rlm_core_sv.k_PROC_SUCCESS;
806     --
807     FOR i IN 1..rlm_message_sv.g_message_tab.COUNT LOOP
808       --
809       IF (l_debug <> -1) THEN
810          rlm_core_sv.dlog(C_DEBUG,'Message: ',
811                                rlm_message_sv.g_message_tab(i).message_name);
812       END IF;
813       --
814     END LOOP;
815     --
816     --commit;
817     --
818     IF (l_debug <> -1) THEN
819        rlm_core_sv.dpop(C_SDEBUG);
820     END IF;
821     --
822   EXCEPTION
823    --
824    WHEN e_error_found  THEN
825      --
826      x_procedure_status := rlm_core_sv.k_PROC_ERROR;
827      --
828      IF (l_debug <> -1) THEN
829         rlm_core_sv.dlog(C_DEBUG,'progress',v_Progress);
830         rlm_core_sv.dpop(C_SDEBUG);
831      END IF;
832      --
833      --added by asutar
834      UpdateInterfaceHeaders;
835      --commit;
836      --
837    WHEN NO_DATA_FOUND  THEN
838      --
839      x_procedure_status := rlm_core_sv.k_PROC_ERROR;
840      --
841      IF (l_debug <> -1) THEN
842         rlm_core_sv.dlog(C_DEBUG,'progress',v_Progress);
843         rlm_core_sv.dpop(C_SDEBUG);
844      END IF;
845      --
846      --added by asutar
847      UpdateInterfaceHeaders;
848      --commit;
849      --
850    WHEN e_no_record_found  THEN
851      --
852      x_procedure_status := rlm_core_sv.k_PROC_ERROR;
853      --
854      IF (l_debug <> -1) THEN
855         rlm_core_sv.dlog(C_DEBUG,'progress',v_Progress);
856         rlm_core_sv.dpop(C_SDEBUG);
857      END IF;
858      --
859      --added by asutar
860      UpdateInterfaceHeaders;
861      --commit;
862      --
863   WHEN OTHERS THEN
864      --
865      x_procedure_status := rlm_core_sv.k_PROC_ERROR;
866      rlm_message_sv.sql_error('rlm_validatedemand_sv.GroupValidateDemand', v_Progress);
867      --
868      IF (l_debug <> -1) THEN
869         rlm_core_sv.dlog(C_DEBUG,'progress',v_Progress);
870         rlm_core_sv.dpop(C_SDEBUG,'EXCEPTION: '||SUBSTR(SQLERRM,1,200));
871      END IF;
872      --
873      --added by asutar
874      UpdateInterfaceHeaders;
875      --commit;
876      raise;
877      --
878 END GroupValidateDemand;
879 
880 /*===========================================================================
881 
882 	PROCEDURE NAME:  ValidateLineDetails
883 
884 ===========================================================================*/
885 PROCEDURE ValidateLineDetails(
886                   x_setup_terms_rec  IN rlm_setup_terms_sv.setup_terms_rec_typ,
887                   x_header_rec IN RLM_INTERFACE_HEADERS%ROWTYPE,
888                   x_lines_rec IN OUT NOCOPY RLM_INTERFACE_LINES%ROWTYPE,
889                   x_line_source IN VARCHAR2)
890 IS
891   --
892   v_progress            VARCHAR2(3) := '010';
893   x_ForecastDesignator  VARCHAR2(30);
894   --
895 BEGIN
896   --
897   IF rlm_message_sv.check_dependency('VALIDATE_LINES') THEN
898     --
899     IF (l_debug <> -1) THEN
900        rlm_core_sv.dpush(C_SDEBUG,'ValidateLineDetails');
901     END IF;
902     --
903     IF x_line_source = k_ORIGINAL THEN
904       --
905       RLM_TPA_SV.ValidItemDetailType(x_header_rec, x_lines_rec);
906       --
907       RLM_TPA_SV.ValidItemDetailSubtype(x_header_rec, x_lines_rec);
908       --
909       RLM_TPA_SV.ValidQtyTypeCode(x_setup_terms_rec, x_header_rec, x_lines_rec);
910       --
911       RLM_TPA_SV.ValidItemDetailQty(x_header_rec, x_lines_rec);
912       --
913       RLM_TPA_SV.ValidDateTypeCode(x_header_rec, x_lines_rec);
914       --
915       RLM_TPA_SV.ValidDateRange(x_header_rec, x_lines_rec);
916       --
917       RLM_TPA_SV.ValidateUOM(x_header_rec, x_lines_rec);
918       --
919       --bug 1811536
920       --RLM_TPA_SV.ValidPlanningProdSeqNum(x_setup_terms_rec,x_header_rec, x_lines_rec);
921       --
922       RLM_TPA_SV.ValidLineScheduleType(x_header_rec, x_lines_rec);
923       --
924       --performance changes
925       --ValidForecastDesig(x_setup_terms_rec,x_header_rec, x_lines_rec,x_ForecastDesignator);
926       --
927     END IF;
928     --
929     -- Call to ValidOrderHeaderId should be made only if blankets are not setup.
930     --
931     IF x_setup_terms_rec.blanket_number IS NULL THEN
932      --
933      RLM_TPA_SV.ValidOrderHeaderId(x_setup_terms_rec, x_header_rec, x_lines_rec);
934      x_lines_rec.blanket_number := x_setup_terms_rec.blanket_number;
935      --
936     ELSE
937      --
938      x_lines_rec.blanket_number := x_setup_terms_rec.blanket_number;
939      x_lines_rec.order_header_id := x_setup_terms_rec.header_id;
940      --
941     END IF;
942     --
943     ValidateDateTypeATP(x_lines_rec);
944     ValidateCriticalKeys(x_setup_terms_rec, x_header_rec, x_lines_rec);
945     --
946     --CheckCUMKeyPO(x_setup_terms_rec, x_header_rec, x_lines_rec);
947     --
948     v_progress := '060';
949     --
950     IF (l_debug <> -1) THEN
951        rlm_core_sv.dpop(C_SDEBUG);
952     END IF;
953     --
954   END IF;
955   --
956 EXCEPTION
957   WHEN OTHERS THEN
958     --
959     --x_lines_rec.process_status := rlm_core_sv.k_PS_ERROR;
960     rlm_message_sv.sql_error('rlm_validatedemand_sv.ValidateLineDetails',
961                              v_Progress);
962     --
963     IF (l_debug <> -1) THEN
964        rlm_core_sv.dlog(C_DEBUG,'process_status',x_lines_rec.process_status);
965        rlm_core_sv.dlog(C_DEBUG,'progress',v_Progress);
966        rlm_core_sv.dpop(C_SDEBUG,'EXCEPTION: '||SUBSTR(SQLERRM,1,200));
967     END IF;
968     --
969     raise;
970     --
971 END ValidateLineDetails;
972 
973 /*===========================================================================
974 
975         PROCEDURE NAME:  GetOrderNumber
976 
977 ===========================================================================*/
978 
979 FUNCTION  GetOrderNumber(x_order_header_id  IN NUMBER)
980 RETURN NUMBER
981 IS
982   v_ord_num NUMBER;
983 BEGIN
984    --
985    SELECT order_number
986    INTO v_ord_num
987    FROM oe_order_headers_all
988    WHERE header_id = x_order_header_id;
989    --
990    RETURN v_ord_num;
991    --
992 EXCEPTION
993    --
994    WHEN NO_DATA_FOUND THEN
995         RETURN null;
996    --
997    WHEN OTHERS  THEN
998         raise;
999    --
1000 END GetOrderNumber;
1001 /*===========================================================================
1002 
1003         PROCEDURE NAME:  ValidOrderHeaderId
1004 
1005 ===========================================================================*/
1006 
1007 PROCEDURE ValidOrderHeaderId(
1008           x_setup_terms_rec   IN rlm_setup_terms_sv.setup_terms_rec_typ,
1009           x_header_rec  IN RLM_INTERFACE_HEADERS%ROWTYPE,
1010           x_lines_rec IN OUT NOCOPY RLM_INTERFACE_LINES%ROWTYPE)
1011 IS
1012   e_NoOrderDefined   EXCEPTION;
1013   e_OrderClosed      EXCEPTION;
1014   e_OrderIDMismatch  EXCEPTION;
1015   e_SalesOrderMissing EXCEPTION;
1016   e_SetupOrderMissing EXCEPTION;
1017   w_CustOrderInvalid EXCEPTION;
1018   x_Exists           NUMBER := 0;
1019   v_Progress         VARCHAR2(3) := '010';
1020   v_OpenFlag         VARCHAR2(1) ;
1021   v_OrderNumber      NUMBER ;
1022 
1023 BEGIN
1024 
1025   IF rlm_message_sv.check_dependency('ORDER_HEADER') THEN
1026     --
1027     IF (l_debug <> -1) THEN
1028        rlm_core_sv.dpush(C_SDEBUG,'ValidOrderHeaderId');
1029        rlm_core_sv.dlog(C_DEBUG,'x_lines_rec.Order_header_Id',
1030                                   x_lines_rec.Order_header_Id);
1031     END IF;
1032     --
1033     IF x_lines_rec.cust_order_num_ext IS NULL THEN
1034        --{
1035        IF (l_debug <> -1) THEN
1036           rlm_core_sv.dlog('Order Number on Schedule is Null ');
1037           rlm_core_sv.dlog('Order Header Id Null. Using default Setup.');
1038        END IF;
1039        --
1040        IF x_setup_terms_rec.header_id IS NOT NULL THEN
1041            --{
1042            x_lines_rec.Order_header_id := x_setup_terms_rec.header_id;
1043 	   --
1044   	   IF (l_debug <> -1) THEN
1045               rlm_core_sv.dlog(C_DEBUG,'Order_header_Id',x_lines_rec.Order_header_Id);
1046            END IF;
1047            --
1048            SELECT open_flag, order_number
1049            INTO   v_OpenFlag, v_OrderNumber
1050            FROM   oe_order_headers_all
1051            WHERE  header_id = x_lines_rec.Order_header_id;
1052            --
1053            IF (l_debug <> -1) THEN
1054               rlm_core_sv.dlog(C_DEBUG,'v_OpenFlag',v_OpenFlag);
1055               rlm_core_sv.dlog(C_DEBUG, 'v_OrderNumber', v_OrderNumber);
1056            END IF;
1057            --
1058            IF v_OpenFlag = 'N' then
1059              --
1060              raise e_OrderClosed;
1061              --
1062            END IF;
1063            --}
1064        ELSE
1065           --
1066           raise e_SalesOrderMissing;
1067           --
1068        END IF;
1069        --}
1070     ELSE
1071        --{
1072        BEGIN
1073          --{
1074          IF (l_debug <> -1) THEN
1075             rlm_core_sv.dlog('Order Number on schedule not Null ');
1076             rlm_core_sv.dlog(C_DEBUG,'cust_order_num_ext',
1077                                    x_lines_rec.cust_order_num_ext);
1078          END IF;
1079          --
1080          IF x_setup_terms_rec.header_id IS NOT NULL THEN
1081              --{
1082              SELECT order_number, open_flag
1083              INTO   v_Ordernumber, v_OpenFlag
1084              FROM   oe_order_headers_all
1085              WHERE  header_id =  x_setup_terms_rec.header_id;
1086              --
1087   	     IF (l_debug <> -1) THEN
1088                 rlm_core_sv.dlog('From setup terms');
1089                 rlm_core_sv.dlog(C_DEBUG,'v_Ordernumber', v_Ordernumber);
1090                 rlm_core_sv.dlog(C_DEBUG,'v_OpenFlag', v_OpenFlag);
1091              END IF;
1092              --
1093           BEGIN
1094              --{
1095              IF to_number(x_lines_rec.cust_order_num_ext) <> v_Ordernumber THEN
1096                 --
1097   		IF (l_debug <> -1) THEN
1098                    rlm_core_sv.dlog('Order Mismatch found, between setup terms and order number on schedule');
1099                 END IF;
1100 		--
1101                 raise e_OrderIDMismatch;
1102                 --
1103              END IF;
1104              --
1105              IF v_OpenFlag = 'N' THEN
1106               --
1107               IF (l_debug <> -1) THEN
1108                rlm_core_sv.dlog(C_DEBUG, 'Order is closed');
1109               END IF;
1110               --
1111               RAISE e_OrderClosed;
1112               --
1113              END IF;
1114              --
1115           EXCEPTION
1116               --
1117               WHEN e_OrderIDMismatch THEN
1118                  --
1119                  raise e_OrderIDMismatch;
1120                  --
1121               WHEN e_OrderClosed THEN
1122                  --
1123                  RAISE e_OrderClosed;
1124                  --
1125               WHEN OTHERS  THEN
1126                  --
1127                  raise invalid_number;
1128                  --
1129              --}
1130           END;
1131              --
1132              x_lines_rec.Order_header_id := x_setup_terms_rec.header_id;
1133              --
1134   	     IF (l_debug <> -1) THEN
1135                 rlm_core_sv.dlog(C_DEBUG,'Order_header_Id',
1136                                    x_lines_rec.Order_header_Id);
1137              END IF;
1138 	     --}
1139          ELSE
1140              --
1141              raise e_SetupOrderMissing;
1142              --
1143          END IF;
1144          --
1145       EXCEPTION
1146          --
1147          WHEN NO_DATA_FOUND THEN
1148            --
1149   	   IF (l_debug <> -1) THEN
1150               rlm_core_sv.dlog(C_DEBUG,'EXCEPTION: e_SetupOrderMissing');
1151            END IF;
1152            --
1153            raise e_SetupOrderMissing;
1154            --
1155          WHEN INVALID_NUMBER THEN
1156            --
1157            rlm_message_sv.app_error(
1158                     x_ExceptionLevel => rlm_message_sv.k_warn_level,
1159                     x_MessageName => 'RLM_WARN_ORDER_INVALID_NUMBER',
1160                     x_InterfaceHeaderId => x_lines_rec.header_id,
1161                     x_InterfaceLineId => x_lines_rec.line_id,
1162                     x_token1=>'CUST_ORDER_NUM_EXT',
1163                     x_value1=>x_lines_rec.cust_order_num_ext,
1164                     x_ValidationType => 'ORDER_HEADER');
1165            --
1166   	   IF (l_debug <> -1) THEN
1167               rlm_core_sv.dlog(C_DEBUG,'EXCEPTION: INVALID_NUMBER');
1168               rlm_core_sv.dlog(C_DEBUG,'EXCEPTION: RLM_WARN_ORDER_INVALID_NUMBER');
1169            END IF;
1170            --
1171          WHEN  e_SetupOrderMissing THEN
1172            --
1173            raise;
1174            --
1175          WHEN OTHERS THEN
1176            --
1177            x_lines_rec.process_status := rlm_core_sv.k_PS_ERROR;
1178 	   --
1179   	   IF (l_debug <> -1) THEN
1180               rlm_core_sv.dlog(C_DEBUG,'EXCEPTION: ValidOrderHeader'||SUBSTR(SQLERRM,1,200));
1181            END IF;
1182 	   --
1183            raise ;
1184         --}
1185        END;
1186        --}
1187     END IF;
1188     --
1189     IF (l_debug <> -1) THEN
1190        rlm_core_sv.dlog(C_DEBUG,'Order_header_Id',x_lines_rec.Order_header_Id);
1191     END IF;
1192     --
1193     IF (l_debug <> -1) THEN
1194        rlm_core_sv.dpop(C_SDEBUG);
1195     END IF;
1196     --
1197   END IF;
1198 
1199 EXCEPTION
1200   --
1201   WHEN NO_DATA_FOUND THEN
1202     --
1203     x_lines_rec.process_status := rlm_core_sv.k_PS_ERROR;
1204     --
1205     rlm_message_sv.app_error(
1206                 x_ExceptionLevel => rlm_message_sv.k_error_level,
1207                 x_MessageName => 'RLM_SALES_ORDER_MISSING',
1208                 x_InterfaceHeaderId => x_lines_rec.header_id,
1209                 x_InterfaceLineId => x_lines_rec.line_id,
1210                 x_ValidationType => 'ORDER_HEADER');
1211     --
1212     IF (l_debug <> -1) THEN
1213        rlm_core_sv.dpop(C_SDEBUG,'EXCEPTION:  RLM_SALES_ORDER_MISSING');
1214     END IF;
1215     --
1216   WHEN  e_SalesOrderMissing THEN
1217     --
1218     x_lines_rec.process_status := rlm_core_sv.k_PS_ERROR;
1219     --
1220     rlm_message_sv.app_error(
1221                 x_ExceptionLevel => rlm_message_sv.k_error_level,
1222                 x_MessageName => 'RLM_SALES_ORDER_MISSING',
1223                 x_InterfaceHeaderId => x_lines_rec.header_id,
1224                 x_InterfaceLineId => x_lines_rec.line_id,
1225                 x_ValidationType => 'ORDER_HEADER');
1226     --
1227     IF (l_debug <> -1) THEN
1228        rlm_core_sv.dpop(C_SDEBUG,'EXCEPTION:  RLM_SALES_ORDER_MISSING');
1229     END IF;
1230     --
1231   WHEN  e_SetupOrderMissing THEN
1232     --
1233     x_lines_rec.process_status := rlm_core_sv.k_PS_ERROR;
1234     --
1235     rlm_message_sv.app_error(
1236                 x_ExceptionLevel => rlm_message_sv.k_error_level,
1237                 x_MessageName => 'RLM_SETUP_ORDER_MISSING',
1238                 x_InterfaceHeaderId => x_lines_rec.header_id,
1239                 x_InterfaceLineId => x_lines_rec.line_id,
1240                 x_ValidationType => 'ORDER_HEADER');
1241     --
1242     IF (l_debug <> -1) THEN
1243        rlm_core_sv.dpop(C_SDEBUG,'EXCEPTION:  RLM_SETUP_ORDER_MISSING');
1244     END IF;
1245     --
1246   WHEN e_NoOrderDefined THEN
1247     --
1248     x_lines_rec.process_status := rlm_core_sv.k_PS_ERROR;
1249     --
1250     --
1251     -- Fetch relevant Cust_Order_num_ext for given header Id for error message
1252     rlm_message_sv.app_error(
1253                 x_ExceptionLevel => rlm_message_sv.k_error_level,
1254                 x_MessageName => 'RLM_SALES_ORDER_UNDEFINED',
1255                 x_InterfaceHeaderId => x_lines_rec.header_id,
1256                 x_InterfaceLineId => x_lines_rec.line_id,
1257                 x_token1=>'CUST_ORDER_NUM_EXT',
1258                 x_value1=>x_lines_rec.cust_order_num_ext,
1259                 x_ValidationType => 'ORDER_HEADER');
1260     --
1261     IF (l_debug <> -1) THEN
1262        rlm_core_sv.dlog(C_DEBUG,'Order_header_Id',x_lines_rec.Order_header_Id);
1263        rlm_core_sv.dpop(C_SDEBUG,'EXCEPTION: RLM_SALES_ORDER_UNDEFINED');
1264     END IF;
1265     --
1266   WHEN e_OrderClosed THEN
1267     --
1268     x_lines_rec.process_status := rlm_core_sv.k_PS_ERROR;
1269     --
1270     rlm_message_sv.app_error(
1271                 x_ExceptionLevel => rlm_message_sv.k_error_level,
1272                 x_MessageName => 'RLM_SALES_ORDER_CLOSED',
1273                 x_InterfaceHeaderId => x_lines_rec.header_id,
1274                 x_InterfaceLineId => x_lines_rec.line_id,
1275                 x_token1=>'CUST_ORDER_NUM_EXT',
1276                 x_value1=>v_OrderNumber,
1277                 x_ValidationType => 'ORDER_HEADER');
1278     --
1279     IF (l_debug <> -1) THEN
1280        rlm_core_sv.dpop(C_SDEBUG,'EXCEPTION: RLM_SALES_ORDER_CLOSED');
1281     END IF;
1282     --
1283   WHEN e_OrderIDMismatch THEN
1284     --
1285     x_lines_rec.process_status := rlm_core_sv.k_PS_ERROR;
1286     --
1287     rlm_message_sv.app_error(
1288                 x_ExceptionLevel => rlm_message_sv.k_error_level,
1289                 x_MessageName => 'RLM_ORDER_ID_MISMATCH',
1290                 x_InterfaceHeaderId => x_lines_rec.header_id,
1291                 x_InterfaceLineId => x_lines_rec.line_id,
1292                 x_token1=>'SCH_ORDER_NUM',
1293                 x_value1=>GetOrderNumber(x_lines_rec.order_header_id),
1294                 x_token2=>'SETUP_ORDER_NUM',
1295                 x_value2=>GetOrderNumber(x_setup_terms_rec.header_id),
1296                 x_ValidationType => 'ORDER_HEADER');
1297 
1298   IF (l_debug <> -1) THEN
1299        rlm_core_sv.dlog(C_DEBUG,'Order_header_Id',x_lines_rec.Order_header_Id);
1300        rlm_core_sv.dlog(C_DEBUG,'x_setup_terms_rec.header_id',x_setup_terms_rec.header_id);
1301        rlm_core_sv.dpop(C_SDEBUG,'EXCEPTION: RLM_ORDER_ID_MISMATCH');
1302     END IF;
1303 
1304   WHEN OTHERS THEN
1305     --
1306     x_lines_rec.process_status := rlm_core_sv.k_PS_ERROR;
1307     --
1308     rlm_message_sv.sql_error('rlm_validateDemand_sv.ValidOrderHeaderId',
1309                              v_Progress);
1310     --
1311     IF (l_debug <> -1) THEN
1312        rlm_core_sv.dlog(C_DEBUG,'process_status',x_lines_rec.process_status);
1313        rlm_core_sv.dlog(C_DEBUG,'progress',v_Progress);
1314        rlm_core_sv.dpop(C_SDEBUG,'EXCEPTION: '||SUBSTR(SQLERRM,1,200));
1315     END IF;
1316     --
1317     raise;
1318     --
1319 END ValidOrderHeaderId;
1320 
1321 /*===========================================================================
1322 
1323         PROCEDURE NAME:  ValidateUOM
1324 
1325 ===========================================================================*/
1326 PROCEDURE ValidateUOM(x_header_rec  IN RLM_INTERFACE_HEADERS%ROWTYPE,
1327           x_lines_rec IN OUT NOCOPY RLM_INTERFACE_LINES%ROWTYPE)
1328 IS
1329   v_Progress           VARCHAR(3) := '010';
1330   v_Primary_UOM_Code   VARCHAR(3);
1331   v_Primary_UOM_Class  VARCHAR(10);
1332   v_UOM_Class          VARCHAR(10);
1333   v_Cust_UOM_Class     VARCHAR(10);
1334   v_Cust_UOM_Code      VARCHAR(10);
1335   v_Count              NUMBER;
1336   e_UOMInactive        EXCEPTION;
1337   e_PrimaryCodeMissing EXCEPTION;
1338   e_NoConvPrimary      EXCEPTION;
1339   e_NoConvCustItemUOM  EXCEPTION;
1340   e_CustUOMDiff        EXCEPTION;
1341   x_Success            NUMBER := 1;
1342 
1343   CURSOR c_uom IS
1344     SELECT 1
1345     FROM MTL_UNITS_OF_MEASURE_vl
1346     WHERE UOM_CODE = x_lines_rec.uom_code;
1347 
1348   -- Bug 4176961
1349   CURSOR c_primary_uom IS
1350     SELECT PRIMARY_UOM_CODE
1351     FROM MTL_SYSTEM_ITEMS
1352     WHERE INVENTORY_ITEM_ID = x_lines_rec.INVENTORY_ITEM_ID
1353     AND ORGANIZATION_ID  =  x_lines_rec.ship_from_org_id;
1354 
1355 BEGIN
1356   IF rlm_message_sv.check_dependency('UOM_CODE') THEN
1357     --
1358     IF (l_debug <> -1) THEN
1359        rlm_core_sv.dpush(C_SDEBUG,'ValidateUOM');
1360        rlm_core_sv.dlog(C_DEBUG,'x_lines_rec.uom_code',x_lines_rec.UOM_CODE);
1361        rlm_core_sv.dlog(C_DEBUG,'x_lines_rec.INVENTORY_ITEM_ID',x_lines_rec.INVENTORY_ITEM_ID);
1362        --global_atp
1363        rlm_core_sv.dlog(C_DEBUG,'x_lines_rec.ship_from_org_id',x_lines_rec.ship_from_org_id);
1364     END IF;
1365   --
1366   OPEN c_uom ;
1367   --
1368   FETCH c_uom INTO x_success;
1369   --
1370   IF c_uom%NOTFOUND THEN
1371     --
1372     CLOSE c_uom;
1373     RAISE e_UOMInactive;
1374     --
1375   END IF;
1376   CLOSE c_uom; --4570658
1377   --
1378   -- Bug 4176961
1379   --
1380     OPEN c_primary_uom;
1381     --
1382     FETCH c_primary_uom iNTO v_Primary_UOM_Code;
1383     --
1384     x_lines_rec.primary_uom_code := v_Primary_UOM_Code;
1385     --
1386     IF (l_debug <> -1) THEN
1387        rlm_core_sv.dlog(C_DEBUG,'v_Primary_UOM_Code',v_Primary_UOM_Code);
1388     END IF;
1389     --
1390     v_Progress := '020';
1391     IF v_Primary_UOM_Code IS NULL THEN
1392         raise e_PrimaryCodeMissing;
1393     END IF;
1394   --
1395   -- Bug 4176961
1396   --
1397     IF v_Primary_UOM_Code <>  x_lines_rec.UOM_Code THEN
1398         g_convert_uom := TRUE;
1399     END IF;
1400     IF (l_debug <> -1) THEN
1401         rlm_core_sv.dlog(C_DEBUG,'g_convert_uom',g_convert_uom);
1402     END IF;
1403     --
1404 
1405 /* THIS CHECK IS NOT NEEDED AS OE ACCEPTS ANY UOM SENT IN
1406 SO WE DO NOT NEED TO verify that a conversion is available or not
1407     -- check if the primary UOM_Code is different
1408 
1409     IF v_Primary_UOM_Code <>  x_lines_rec.UOM_Code THEN
1410         SELECT Count(*)
1411         INTO   v_Count
1412         FROM MTL_UOM_CONVERSIONS a, MTL_UOM_CONVERSIONS b
1413         WHERE a.UOM_CODE = v_Primary_UOM_Code
1414         AND b.UOM_CODE = x_lines_rec.UOM_Code
1415         AND a.UOM_CLASS = b.UOM_CLASS ;
1416         --
1417   	IF (l_debug <> -1) THEN
1418            rlm_core_sv.dlog(C_DEBUG,'v_Count',v_Count);
1419         END IF;
1420         --
1421         IF v_Count < 1 THEN
1422            raise e_NoConvPrimary;
1423         END IF;
1424     END IF;
1425 */
1426     --
1427     IF (l_debug <> -1) THEN
1428        rlm_core_sv.dlog(C_DEBUG,'progress',v_Progress);
1429        rlm_core_sv.dpop(C_SDEBUG);
1430     END IF;
1431     --
1432   END IF;
1433 
1434 EXCEPTION
1435   WHEN e_UOMInactive THEN
1436     --
1437     x_lines_rec.process_status := rlm_core_sv.k_PS_ERROR;
1438     --
1439     rlm_message_sv.app_error(
1440                 x_ExceptionLevel => rlm_message_sv.k_error_level,
1441                 x_MessageName => 'RLM_UOM_INACTIVE',
1442                 x_InterfaceHeaderId => x_lines_rec.header_id,
1443                 x_InterfaceLineId => x_lines_rec.line_id,
1444                 x_token1=>'UOM_CODE',
1445                 x_value1=>x_lines_rec.uom_code,
1446                 x_ValidationType => 'UOM_CODE');
1447     --
1448     IF (l_debug <> -1) THEN
1449        rlm_core_sv.dpop(C_SDEBUG,'EXCEPTION:  RLM_UOM_INACTIVE ');
1450     END IF;
1451     --
1452   WHEN NO_DATA_FOUND THEN
1453     --
1454     x_lines_rec.process_status := rlm_core_sv.k_PS_ERROR;
1455     --
1456     rlm_message_sv.app_error(
1457                 x_ExceptionLevel => rlm_message_sv.k_error_level,
1458                 x_MessageName => 'RLM_UOM_INVALID',
1459                 x_InterfaceHeaderId => x_lines_rec.header_id,
1460                 x_InterfaceLineId => x_lines_rec.line_id,
1461                 x_token1=>'UOM_CODE',
1462                 x_value1=>x_lines_rec.uom_code,
1463                 x_ValidationType => 'UOM_CODE');
1464     --
1465     IF (l_debug <> -1) THEN
1466        rlm_core_sv.dpop(C_SDEBUG,'EXCEPTION:  RLM_UOM_INVALID ');
1467     END IF;
1468     --
1469   WHEN e_PrimaryCodeMissing THEN
1470     --
1471     rlm_message_sv.app_error(
1472                 x_ExceptionLevel => rlm_message_sv.k_warn_level,
1473                 x_MessageName => 'RLM_WARN_NO_PRIMARY_UOM',
1474                 x_InterfaceHeaderId => x_lines_rec.header_id,
1475                 x_InterfaceLineId => x_lines_rec.line_id,
1476                 x_ValidationType => 'UOM_CODE');
1477     --
1478     IF (l_debug <> -1) THEN
1479        rlm_core_sv.dpop(C_SDEBUG,'EXCEPTION:  RLM_WARN_NO_PRIMARY_UOM');
1480     END IF;
1481     --
1482   WHEN OTHERS THEN
1483     --
1484     x_lines_rec.process_status := rlm_core_sv.k_PS_ERROR;
1485     --
1486     rlm_message_sv.sql_error('rlm_validateDemand_sv.ValidateUOM', v_Progress);
1487     --
1488     IF (l_debug <> -1) THEN
1489        rlm_core_sv.dlog(C_DEBUG,'progress',v_Progress);
1490        rlm_core_sv.dpop(C_SDEBUG,'EXCEPTION: '||SUBSTR(SQLERRM,1,200));
1491     END IF;
1492     --
1493     raise;
1494     --
1495 END ValidateUOM;
1496 /*===========================================================================
1497 
1498 	PROCEDURE NAME:  ValidDateRange
1499 
1500 ===========================================================================*/
1501 PROCEDURE ValidDateRange(x_header_rec  IN RLM_INTERFACE_HEADERS%ROWTYPE,
1502           x_lines_rec IN OUT NOCOPY RLM_INTERFACE_LINES%ROWTYPE)
1503 IS
1504   --
1505   v_progress         VARCHAR2(3) := '010';
1506   e_DateRangeInv     EXCEPTION;
1507   e_StartHorizonInv  EXCEPTION;
1508   e_EndHorizonInv    EXCEPTION;
1509   e_StartDateInv     EXCEPTION;
1510   --
1511 BEGIN
1512   --
1513   IF rlm_message_sv.check_dependency('DATE_RANGE') THEN
1514     --
1515     IF (l_debug <> -1) THEN
1516        rlm_core_sv.dpush(C_SDEBUG,'ValidDateRange');
1517        rlm_core_sv.dlog(C_DEBUG,'Horizon Start Date',
1518                              x_header_rec.sched_horizon_start_date);
1519        rlm_core_sv.dlog(C_DEBUG,'Horizon End Date',
1520                              x_header_rec.sched_horizon_end_date);
1521        rlm_core_sv.dlog(C_DEBUG,'Start_Date_Time',
1522                              x_lines_rec.start_date_time);
1523        rlm_core_sv.dlog(C_DEBUG,'End_Date_Time',
1524                              x_lines_rec.end_date_time);
1525     END IF;
1526     --
1527     IF (x_lines_rec.end_date_time is NOT NULL) AND
1528        (x_lines_rec.end_date_time < x_lines_rec.start_date_time)
1529     THEN
1530        raise e_DateRangeInv;
1531     END IF;
1532     --
1533     v_progress := '020';
1534     --
1535     IF (x_lines_rec.start_date_time is NOT NULL) THEN
1536        --
1537        IF (x_lines_rec.start_date_time >=
1538              (TRUNC(x_header_rec.sched_horizon_end_date) + 1)) THEN
1539            --
1540            v_progress := '030';
1541            raise e_EndHorizonInv;
1542            --
1543        END IF;
1544        --
1545     ELSE
1546        --
1547        v_progress := '040';
1548        raise e_StartDateInv;
1549        --
1550     END IF;
1551     --
1552     IF (l_debug <> -1) THEN
1553        rlm_core_sv.dpop(C_SDEBUG);
1554     END IF;
1555     --
1556   END IF;
1557   --
1558 EXCEPTION
1559   WHEN e_EndHorizonInv THEN
1560     --
1561     x_lines_rec.process_status := rlm_core_sv.k_PS_ERROR;
1562     --
1563     rlm_message_sv.app_error(
1564                 x_ExceptionLevel => rlm_message_sv.k_error_level,
1565                 x_MessageName => 'RLM_END_HORIZON_INVALID',
1566                 x_InterfaceHeaderId => x_lines_rec.header_id,
1567                 x_InterfaceLineId => x_lines_rec.line_id,
1568                 x_token1=>'START_DATE_TIME',
1569                 x_value1=>x_lines_rec.start_date_time,
1570                 x_token2=>'END_HORIZON_DATE',
1571                 x_value2=>x_header_rec.sched_horizon_end_date,
1572                 x_ValidationType => 'DATE_RANGE');
1573     --
1574     IF (l_debug <> -1) THEN
1575        rlm_core_sv.dpop(C_SDEBUG,'EXCEPTION: RLM_END_HORIZON_INVALID');
1576     END IF;
1577     --
1578   WHEN e_StartDateInv THEN
1579     --
1580     x_lines_rec.process_status := rlm_core_sv.k_PS_ERROR;
1581     --
1582     rlm_message_sv.app_error(
1583                 x_ExceptionLevel => rlm_message_sv.k_error_level,
1584                 x_MessageName => 'RLM_START_DATE_NULL',
1585                 x_InterfaceHeaderId => x_lines_rec.header_id,
1586                 x_InterfaceLineId => x_lines_rec.line_id,
1587                 x_ValidationType => 'DATE_RANGE');
1588     --
1589     IF (l_debug <> -1) THEN
1590        rlm_core_sv.dpop(C_SDEBUG,'EXCEPTION: RLM_START_DATE_NULL');
1591     END IF;
1592     --
1593   WHEN e_DateRangeInv THEN
1594     --
1595     x_lines_rec.process_status := rlm_core_sv.k_PS_ERROR;
1596     rlm_message_sv.app_error(x_MessageName => 'RLM_DATE_RANGE_INVALID',
1597                              x_InterfaceHeaderId => x_lines_rec.header_id,
1598                              x_InterfaceLineId => x_lines_rec.line_id,
1599                              x_token1=>'START_DATE_TIME',
1600                              x_value1=>x_lines_rec.start_date_time,
1601                              x_token2=>'END_DATE_TIME',
1602                              x_value2=>x_lines_rec.end_date_time,
1603                              x_ValidationType => 'DATE_RANGE');
1604     --
1605     IF (l_debug <> -1) THEN
1606        rlm_core_sv.dpop(C_SDEBUG,'EXCEPTION: RLM_DATE_RANGE_INVALID');
1607     END IF;
1608     --
1609   WHEN OTHERS THEN
1610     --
1611     x_lines_rec.process_status := rlm_core_sv.k_PS_ERROR;
1612     rlm_message_sv.sql_error('rlm_validatedemand_sv.ValidDateRange',v_Progress);
1613     --
1614     IF (l_debug <> -1) THEN
1615        rlm_core_sv.dlog(C_DEBUG,'progress',v_Progress);
1616        rlm_core_sv.dpop(C_SDEBUG,'EXCEPTION: '||SUBSTR(SQLERRM,1,200));
1617     END IF;
1618     --
1619     raise;
1620     --
1621 END ValidDateRange;
1622 /*===========================================================================
1623 
1624 	PROCEDURE NAME:  ValidDateTypeCode
1625 
1626 ===========================================================================*/
1627 PROCEDURE ValidDateTypeCode(x_header_rec  IN RLM_INTERFACE_HEADERS%ROWTYPE,
1628           x_lines_rec IN OUT NOCOPY RLM_INTERFACE_LINES%ROWTYPE)
1629 IS
1630   --
1631   v_progress     VARCHAR2(3) := '010';
1632   e_DateTypeInv  EXCEPTION;
1633   --
1634 BEGIN
1635   --
1636   IF rlm_message_sv.check_dependency('DATE_TYPE_CODE') THEN
1637     --
1638     IF (l_debug <> -1) THEN
1639        rlm_core_sv.dpush(C_SDEBUG,'ValidDateTypeCode');
1640     END IF;
1641     --
1642     -- Allow custom date type values
1643     IF NOT x_lines_rec.item_detail_type in ('3','4','5') Then
1644       IF NOT RLM_TPA_SV.ValidLookup('RLM_DATE_TYPE_CODE', x_lines_rec.date_type_code,
1645                         Sysdate) THEN
1646          --
1647          v_progress := '020';
1648          raise e_DateTypeInv;
1649          --
1650        END IF;
1651     END IF;
1652     --
1653     IF (l_debug <> -1) THEN
1654        rlm_core_sv.dpop(C_SDEBUG);
1655     END IF;
1656     --
1657   END IF;
1658   --
1659 EXCEPTION
1660   WHEN e_DateTypeInv THEN
1661     --
1662     x_lines_rec.process_status := rlm_core_sv.k_PS_ERROR;
1663     --
1664     rlm_message_sv.app_error(
1665                 x_ExceptionLevel => rlm_message_sv.k_error_level,
1666                 x_MessageName => 'RLM_ITEM_DTL_DATE_TYPE_INVALID',
1667                 x_InterfaceHeaderId => x_lines_rec.header_id,
1668                 x_InterfaceLineId => x_lines_rec.line_id,
1669                 x_token1=>'DATE_TYPE_CODE',
1670                 x_value1=>x_lines_rec.date_type_code,
1671                 x_ValidationType => 'DATE_TYPE_CODE');
1672     --
1673     IF (l_debug <> -1) THEN
1674        rlm_core_sv.dpop(C_SDEBUG,'EXCEPTION: RLM_ITEM_DTL_DATE_TYPE_INVALID');
1675     END IF;
1676     --
1677   WHEN OTHERS THEN
1678     --
1679     x_lines_rec.process_status := rlm_core_sv.k_PS_ERROR;
1680     rlm_message_sv.sql_error('rlm_validatedemand_sv.ValidDateTypeCode: ',
1681                                                v_Progress);
1682     --
1683     IF (l_debug <> -1) THEN
1684        rlm_core_sv.dpop(C_SDEBUG,'EXCEPTION: '||SUBSTR(SQLERRM,1,200));
1685     END IF;
1686     --
1687     raise;
1688     --
1689 END ValidDateTypeCode;
1690 
1691 /*===========================================================================
1692 
1693 	PROCEDURE NAME:  ValidItemDetailQty
1694 
1695 ===========================================================================*/
1696 PROCEDURE ValidItemDetailQty(x_header_rec  IN RLM_INTERFACE_HEADERS%ROWTYPE,
1697           x_lines_rec IN OUT NOCOPY RLM_INTERFACE_LINES%ROWTYPE)
1698 IS
1699   --
1700   v_progress     VARCHAR2(3) := '010';
1701   e_QtyInvalid  EXCEPTION;
1702   --
1703 BEGIN
1704   --
1705   IF rlm_message_sv.check_dependency('ITEM_DETAIL_QUANTITY') THEN
1706     --
1707     IF (l_debug <> -1) THEN
1708        rlm_core_sv.dpush(C_SDEBUG,'ValidItemDetailQty');
1709        rlm_core_sv.dlog(C_DEBUG,'item_detail_quantity',
1710                               x_lines_rec.item_detail_quantity);
1711        rlm_core_sv.dlog(C_DEBUG,'Item_detail_Type',x_lines_rec.item_detail_type);
1712     END IF;
1713     --
1714     -- allow null quantities on ATH segments (bug 1892891)
1715     --
1716 /*
1717     IF (x_lines_rec.item_detail_type IN ('0','1','2','3','4','6')) AND
1718        ((x_lines_rec.item_detail_quantity is NULL)
1719         OR (x_lines_rec.item_detail_quantity < 0)) THEN
1720 */
1721     IF ((x_lines_rec.item_detail_type IN ('0','1','2','3','4','6') AND
1722 	(x_lines_rec.item_detail_quantity < 0)) OR
1723        (x_lines_rec.item_detail_type IN ('0','1','2','4','6') AND
1724 	(x_lines_rec.item_detail_quantity is NULL))) THEN
1725        --
1726        v_progress := '020';
1727        raise e_QtyInvalid;
1728        --
1729     END IF;
1730     --
1731     v_progress := '030';
1732     --
1733     IF (l_debug <> -1) THEN
1734        rlm_core_sv.dpop(C_SDEBUG);
1735     END IF;
1736     --
1737   END IF;
1738   --
1739 EXCEPTION
1740   WHEN e_QtyInvalid THEN
1741     --
1742     x_lines_rec.process_status := rlm_core_sv.k_PS_ERROR;
1743     --
1744     rlm_message_sv.app_error(
1745                 x_ExceptionLevel => rlm_message_sv.k_error_level,
1746                 x_MessageName => 'RLM_ITEM_DETAIL_QTY_INVALID',
1747                 x_InterfaceHeaderId => x_lines_rec.header_id,
1748                 x_InterfaceLineId => x_lines_rec.line_id,
1749                 x_token1=>'ITEM_DETAIL_QUANTITY',
1750                 x_value1=>x_lines_rec.item_detail_quantity,
1751                 x_ValidationType => 'ITEM_DETAIL_QUANTITY');
1752     --
1753     IF (l_debug <> -1) THEN
1754        rlm_core_sv.dpop(C_SDEBUG,'EXCEPTION: RLM_ITEM_DETAIL_QTY_INVALID');
1755     END IF;
1756     --
1757   WHEN OTHERS THEN
1758     --
1759     x_lines_rec.process_status := rlm_core_sv.k_PS_ERROR;
1760     --
1761     rlm_message_sv.sql_error('rlm_validatedemand_sv.ValidItemDetailQty: ',
1762                              v_Progress);
1763     --
1764     IF (l_debug <> -1) THEN
1765        rlm_core_sv.dpop(C_SDEBUG,'EXCEPTION: '||SUBSTR(SQLERRM,1,200));
1766     END IF;
1767     --
1768     raise;
1769     --
1770 END ValidItemDetailQty;
1771 
1772 /*===========================================================================
1773 
1774 	PROCEDURE NAME:  ValidQtyTypeCode
1775 
1776 ===========================================================================*/
1777 PROCEDURE ValidQtyTypeCode(
1778           x_setup_terms_rec  IN rlm_setup_terms_sv.setup_terms_rec_typ,
1779           x_header_rec  IN RLM_INTERFACE_HEADERS%ROWTYPE,
1780           x_lines_rec IN OUT NOCOPY RLM_INTERFACE_LINES%ROWTYPE)
1781 IS
1782   --
1783   v_progress     VARCHAR2(3) := '010';
1784   e_NoCum        EXCEPTION;
1785   e_QtyTypeInv  EXCEPTION;
1786   e_SeqCumQty  EXCEPTION;
1787   v_Count      NUMBER;
1788   --
1789 BEGIN
1790   --
1791   IF (l_debug <> -1) THEN
1792      rlm_core_sv.dpush(C_SDEBUG,'ValidQtyTypeCode');
1793   END IF;
1794   --
1795   IF rlm_message_sv.check_dependency('QUANTITY_TYPE_CODE') THEN
1796     --
1797     IF (l_debug <> -1) THEN
1798        rlm_core_sv.dlog(C_DEBUG,'Qty_Type_Code',x_lines_rec.qty_type_code);
1799        rlm_core_sv.dlog(C_DEBUG,'Item_Detail_Type',x_lines_rec.item_detail_type);
1800        rlm_core_sv.dlog(C_DEBUG,'schedule_type',x_header_rec.schedule_type);
1801     END IF;
1802     --
1803 
1804     -- Allow custom qty type codes
1805     IF NOT x_lines_rec.item_detail_type in ('3','4','5') Then
1806      IF NOT RLM_TPA_SV.ValidLookup( 'RLM_QTY_TYPE_CODE',
1807                          x_lines_rec.qty_type_code,
1808                          Sysdate) THEN
1809        raise e_QtyTypeInv;
1810      END IF;
1811     END IF;
1812     --
1813     IF x_lines_rec.item_detail_type IN (0,1,2) AND
1814        x_lines_rec.qty_type_code = 'CUMULATIVE' THEN
1815        --
1816        IF x_header_rec.schedule_type = 'SEQUENCED' THEN
1817           raise e_SeqCumQty;
1818        ELSIF x_setup_terms_rec.cum_control_code = 'NO_CUM' THEN
1819           raise  e_NOCum;
1820        END IF;
1821        --
1822     END IF;
1823     --
1824     v_progress := '060';
1825     --
1826   END IF;
1827   --
1828   -- Need to assign the primary quantity with the item detail qty
1829   -- if the primary quantity is populated i.e comes in from the edi
1830   -- schedule then we do use that quantity or else use the quantity from
1831   -- the item detail qty
1832   --
1833   --IF x_lines_rec.primary_quantity is NULL THEN
1834     --
1835     x_lines_rec.primary_quantity := nvl(x_lines_rec.item_detail_quantity,0);
1836     --
1837   --END IF;
1838   --
1839   IF (l_debug <> -1) THEN
1840      rlm_core_sv.dpop(C_SDEBUG);
1841   END IF;
1842   --
1843 EXCEPTION
1844   --
1845   WHEN e_NoCum THEN
1846     --
1847     x_lines_rec.process_status := rlm_core_sv.k_PS_ERROR;
1848     --
1849     rlm_message_sv.app_error(
1850                 x_ExceptionLevel => rlm_message_sv.k_error_level,
1851                 x_MessageName => 'RLM_CUM_QTY_TYPE_INVALID',
1852                 x_InterfaceHeaderId => x_lines_rec.header_id,
1853                 x_InterfaceLineId => x_lines_rec.line_id,
1854                 x_token1=>'QUANTITY_TYPE_CODE',
1855                 x_value1=>x_lines_rec.qty_type_code,
1856                 x_ValidationType => 'QUANTITY_TYPE_CODE');
1857     --
1858     IF (l_debug <> -1) THEN
1859        rlm_core_sv.dlog(C_DEBUG,'EXCEPTION: RLM_CUM_CONTROL_CODE_INVALID');
1860        rlm_core_sv.dpop(C_SDEBUG);
1861     END IF;
1862     --
1863   WHEN e_QtyTypeInv THEN
1864     --
1865     x_lines_rec.process_status := rlm_core_sv.k_PS_ERROR;
1866     --
1867     rlm_message_sv.app_error(
1868                 x_ExceptionLevel => rlm_message_sv.k_error_level,
1869                 x_MessageName => 'RLM_ITEM_QTY_TYPE_INVALID',
1870                 x_InterfaceHeaderId => x_lines_rec.header_id,
1871                 x_InterfaceLineId => x_lines_rec.line_id,
1872                 x_token1=>'QUANTITY_TYPE_CODE',
1873                 x_value1=>x_lines_rec.qty_type_code,
1874                 x_ValidationType => 'QUANTITY_TYPE_CODE');
1875     --
1876     IF (l_debug <> -1) THEN
1877        rlm_core_sv.dpop(C_SDEBUG,'EXCEPTION: RLM_ITEM_DTL_TYPE_INVALID');
1878     END IF;
1879     --
1880   WHEN e_SeqCumQty THEN
1881     --
1882     x_lines_rec.process_status := rlm_core_sv.k_PS_ERROR;
1883     --
1884     rlm_message_sv.app_error(
1885                 x_ExceptionLevel => rlm_message_sv.k_error_level,
1886                 x_MessageName => 'RLM_SEQUENCED_CUMULATIVE_QTY',
1887                 x_InterfaceHeaderId => x_lines_rec.header_id,
1888                 x_InterfaceLineId => x_lines_rec.line_id,
1889                 x_ValidationType => 'QUANTITY_TYPE_CODE');
1890     --
1891     IF (l_debug <> -1) THEN
1892        rlm_core_sv.dpop(C_SDEBUG,'EXCEPTION: RLM_SEQUENCED_CUMULATIVE_QTY');
1893     END IF;
1894     --
1895   WHEN OTHERS THEN
1896     --
1897     x_lines_rec.process_status := rlm_core_sv.k_PS_ERROR;
1898     --
1899     rlm_message_sv.sql_error('rlm_validatedemand_sv.ValidQtyTypeCode',
1900                              v_Progress);
1901     --
1902     IF (l_debug <> -1) THEN
1903        rlm_core_sv.dlog(C_DEBUG,'progress',v_Progress);
1904        rlm_core_sv.dpop(C_SDEBUG,'EXCEPTION: '||SUBSTR(SQLERRM,1,200));
1905     END IF;
1906     --
1907     raise;
1908     --
1909 END ValidQtyTypeCode;
1910 
1911 /*===========================================================================
1912 
1913 	PROCEDURE NAME:  ValidItemDetailSubtype
1914 
1915 ===========================================================================*/
1916 PROCEDURE ValidItemDetailSubtype(x_header_rec  IN RLM_INTERFACE_HEADERS%ROWTYPE,
1917           x_lines_rec IN OUT NOCOPY RLM_INTERFACE_LINES%ROWTYPE)
1918 IS
1919   --
1920   v_progress     VARCHAR2(3) := '010';
1921   e_DetailSubTypeInv  EXCEPTION;
1922   v_status  BOOLEAN;
1923   --
1924 BEGIN
1925   --
1926   IF rlm_message_sv.check_dependency('ITEM_DETAIL_SUBTYPE') THEN
1927     --
1928     IF (l_debug <> -1) THEN
1929        rlm_core_sv.dpush(C_SDEBUG,'ValidItemDetailSubtype');
1930     END IF;
1931     --
1932     IF x_lines_rec.item_detail_type IN ('0','1','2','6') THEN
1933        v_Status := RLM_TPA_SV.ValidLookup( 'RLM_DEMAND_SUBTYPE',
1934                                 x_lines_rec.ITEM_DETAIL_SUBTYPE,
1935                                 Sysdate);
1936 
1937 /*
1938     -- allow custom item detail subtypes
1939     ELSIF x_lines_rec.item_detail_type = '3' THEN
1940        v_Status := RLM_TPA_SV.ValidLookup( 'RLM_AUTH_SUBTYPE',
1941                                 x_lines_rec.ITEM_DETAIL_SUBTYPE,
1942                                      Sysdate);
1943     ELSIF x_lines_rec.item_detail_type = '4' THEN
1944        v_Status := RLM_TPA_SV.ValidLookup( 'RLM_SHP_RCV_SUBTYPE',
1945                                  x_lines_rec.ITEM_DETAIL_SUBTYPE,
1946                                      Sysdate);
1947     ELSE
1948        v_Status := RLM_TPA_SV.ValidLookup( 'RLM_INFO_SUBTYPE',
1949                                 x_lines_rec.ITEM_DETAIL_SUBTYPE,
1950                                      Sysdate);
1951 */
1952 
1953     END IF;
1954     --
1955     IF NOT v_Status THEN
1956        raise e_DetailSubTypeInv;
1957     END IF;
1958     --
1959     v_progress := '060';
1960     --
1961     IF (l_debug <> -1) THEN
1962        rlm_core_sv.dpop(C_SDEBUG);
1963     END IF;
1964     --
1965   END IF;
1966   --
1967 EXCEPTION
1968   --
1969   WHEN e_DetailSubTypeInv THEN
1970     --
1971     x_lines_rec.process_status := rlm_core_sv.k_PS_ERROR;
1972     rlm_message_sv.app_error(
1973                 x_ExceptionLevel => rlm_message_sv.k_error_level,
1974                 x_MessageName => 'RLM_DETAIL_SUBTYPE_INVALID',
1975                 x_InterfaceHeaderId => x_lines_rec.header_id,
1976                 x_InterfaceLineId => x_lines_rec.line_id,
1977                 x_token1=>'ITEM_DETAIL_SUBTYPE',
1978                 x_value1=>x_lines_rec.item_detail_subtype,
1979                 x_token2=>'ITEM_DETAIL_TYPE',
1980                 x_value2=>x_lines_rec.item_detail_type,
1981                 x_ValidationType => 'ITEM_DETAIL_SUBTYPE');
1982     --
1983     IF (l_debug <> -1) THEN
1984        rlm_core_sv.dlog(C_DEBUG,'RLM_DETAIL_SUBTYPE_INVALID',
1985                                    x_lines_rec.item_detail_subtype);
1986        rlm_core_sv.dpop(C_SDEBUG);
1987     END IF;
1988     --
1989   WHEN OTHERS THEN
1990     --
1991     x_lines_rec.process_status := rlm_core_sv.k_PS_ERROR;
1992     rlm_message_sv.sql_error('rlm_validatedemand_sv.ValidItemDetailSubtype: ',
1993                                              v_Progress);
1994     --
1995     IF (l_debug <> -1) THEN
1996        rlm_core_sv.dpop(C_SDEBUG,'EXCEPTION: '||SUBSTR(SQLERRM,1,200));
1997     END IF;
1998     --
1999     raise;
2000     --
2001 END ValidItemDetailSubtype;
2002 
2003 /*===========================================================================
2004 
2005 	PROCEDURE NAME:  ValidItemDetailType
2006 
2007 ===========================================================================*/
2008 PROCEDURE ValidItemDetailType(x_header_rec  IN RLM_INTERFACE_HEADERS%ROWTYPE,
2009           x_lines_rec IN OUT NOCOPY RLM_INTERFACE_LINES%ROWTYPE)
2010 IS
2011   --
2012   v_progress     VARCHAR2(3) := '010';
2013   e_ItemDetailTypeInvalid  EXCEPTION;
2014   --
2015 BEGIN
2016   --
2017   IF rlm_message_sv.check_dependency('ITEM_DETAIL_TYPE') THEN
2018     --
2019     IF (l_debug <> -1) THEN
2020        rlm_core_sv.dpush(C_SDEBUG,'ValidItemDetailType');
2021     END IF;
2022     --
2023     IF NOT RLM_TPA_SV.ValidLookup( 'RLM_DETAIL_TYPE_CODE',
2024                           x_lines_rec.item_detail_type,
2025                               Sysdate)
2026     THEN
2027        raise e_ItemDetailTypeInvalid;
2028     END IF;
2029 
2030     v_progress := '060';
2031     --
2032     IF (l_debug <> -1) THEN
2033        rlm_core_sv.dpop(C_SDEBUG);
2034     END IF;
2035     --
2036   END IF;
2037   --
2038 EXCEPTION
2039   --
2040   WHEN e_ItemDetailTypeInvalid THEN
2041     --
2042     x_lines_rec.process_status := rlm_core_sv.k_PS_ERROR;
2043     rlm_message_sv.app_error(
2044                 x_ExceptionLevel => rlm_message_sv.k_error_level,
2045                 x_MessageName => 'RLM_ITEM_DETAIL_TYPE_INVALID',
2046                 x_InterfaceHeaderId => x_lines_rec.header_id,
2047                 x_InterfaceLineId => x_lines_rec.line_id,
2048                 x_token1=>'ITEM_DETAIL_TYPE',
2049                 x_value1=>x_lines_rec.item_detail_type,
2050                 x_ValidationType => 'ITEM_DETAIL_TYPE');
2051     --
2052     IF (l_debug <> -1) THEN
2053        rlm_core_sv.dlog(C_DEBUG,'RLM_ITEM_DETAIL_TYPE_INVALID',
2054                                  x_lines_rec.item_detail_type);
2055        rlm_core_sv.dpop(C_SDEBUG);
2056     END IF;
2057     --
2058   WHEN OTHERS THEN
2059     --
2060     x_lines_rec.process_status := rlm_core_sv.k_PS_ERROR;
2061     rlm_message_sv.sql_error('rlm_validatedemand_sv.ValidItemDetailType: ',
2062                              v_Progress);
2063     --
2064     IF (l_debug <> -1) THEN
2065        rlm_core_sv.dlog(C_DEBUG,'OTHERS',x_lines_rec.item_detail_type);
2066        rlm_core_sv.dpop(C_SDEBUG,'EXCEPTION: '||SUBSTR(SQLERRM,1,200));
2067     END IF;
2068     --
2069     raise;
2070     --
2071 END ValidItemDetailType;
2072 
2073 /*===========================================================================
2074 
2075 	PROCEDURE NAME:  ValidateCriticalKeys
2076 
2077 ===========================================================================*/
2078 PROCEDURE ValidateCriticalKeys(
2079                x_setup_terms_rec IN RLM_SETUP_TERMS_SV.setup_terms_rec_typ,
2080                x_header_rec  IN RLM_INTERFACE_HEADERS%ROWTYPE,
2081                x_lines_rec IN OUT NOCOPY RLM_INTERFACE_LINES%ROWTYPE)
2082 IS
2083   --
2084   v_progress           VARCHAR2(3) := '010';
2085   x_critical_key_rec   rlm_core_sv.t_match_rec;
2086   x_key_description    VARCHAR2(100);
2087   e_CriticalKeyMissing EXCEPTION;
2088   --
2089 BEGIN
2090   --
2091   IF (l_debug <> -1) THEN
2092      rlm_core_sv.dpush(C_SDEBUG,'ValidateCriticalKeys');
2093   END IF;
2094   --
2095   IF rlm_message_sv.check_dependency('CRITICAL_KEYS') THEN
2096     --
2097     IF (l_debug <> -1) THEN
2098        rlm_core_sv.dlog(C_DEBUG,'critical_attribute_key',
2099                 x_setup_terms_rec.critical_attribute_key);
2100     END IF;
2101     --
2102     rlm_core_sv.Populate_Match_Keys(x_critical_key_rec,
2103                   nvl(x_setup_terms_rec.critical_attribute_key,'0'));
2104 
2105     -- Check whether Critical key attribute key missing
2106     -- May have to change code due to NLS requirements
2107     -- The current description of lookup type RLM_OPTIONAL_MATCH_ATTRIBUTES
2108     -- needs to be corrected before we can use lookup codes for description
2109 
2110     IF ((x_critical_key_rec.cust_production_line = 'Y') AND
2111         (x_lines_rec.cust_production_line IS NULL ) )
2112     THEN
2113        x_key_description := 'Production Line';
2114        raise e_CriticalKeyMissing;
2115     END IF;
2116     --
2117     IF ((x_critical_key_rec.customer_dock_code = 'Y') AND
2118         (x_lines_rec.customer_dock_code IS NULL ) )
2119     THEN
2120        x_key_description := 'Dock Code';
2121        raise e_CriticalKeyMissing;
2122     END IF;
2123     --
2124     IF ((x_critical_key_rec.request_date = 'Y') AND
2125         (x_lines_rec.request_date IS NULL ) )
2126     THEN
2127        x_key_description := 'Request Date';
2128        raise e_CriticalKeyMissing;
2129     END IF;
2130     --
2131     IF ((x_critical_key_rec.schedule_date = 'Y') AND
2132         (x_lines_rec.schedule_date IS NULL ) )
2133     THEN
2134        x_key_description := 'Schedule Date';
2135        raise e_CriticalKeyMissing;
2136     END IF;
2137     --
2138     IF ((x_critical_key_rec.cust_po_number = 'Y') AND
2139         (x_lines_rec.cust_po_number IS NULL ) )
2140     THEN
2141        x_key_description := 'PO Number';
2142        raise e_CriticalKeyMissing;
2143     END IF;
2144     --
2145     IF ((x_critical_key_rec.customer_item_revision = 'Y') AND
2146         (x_lines_rec.customer_item_revision IS NULL ) )
2147     THEN
2148        x_key_description := 'Item Revision';
2149        raise e_CriticalKeyMissing;
2150     END IF;
2151     --
2152     IF ((x_critical_key_rec.customer_job = 'Y') AND
2153         (x_lines_rec.customer_job IS NULL ) )
2154     THEN
2155        x_key_description := 'Customer Job';
2156        raise e_CriticalKeyMissing;
2157     END IF;
2158     --
2159     IF ((x_critical_key_rec.cust_model_serial_number = 'Y') AND
2160         (x_lines_rec.cust_model_serial_number IS NULL ) )
2161     THEN
2162        x_key_description := 'Model Serial Number';
2163        raise e_CriticalKeyMissing;
2164     END IF;
2165     --
2166     IF ((x_critical_key_rec.industry_attribute1 = 'Y') AND
2167         (x_lines_rec.industry_attribute1 IS NULL ) )
2168     THEN
2169        x_key_description := 'Record Year';
2170        raise e_CriticalKeyMissing;
2171     END IF;
2172     --
2173    --  Begin of changes for Bug 2183405
2174 
2175      IF ((x_critical_key_rec.industry_attribute2 = 'Y') AND
2176         (nvl(x_lines_rec.industry_attribute2,to_char(x_lines_rec.start_date_time,'RRRR/MM/DD HH24:MI:SS')) IS NULL ))
2177     THEN
2178        x_key_description := 'Customer Request date';
2179        raise e_CriticalKeyMissing;
2180     END IF;
2181     --
2182      IF ((x_critical_key_rec.cust_production_seq_num = 'Y') AND
2183         (x_lines_rec.cust_production_seq_num  IS  NULL))
2184      THEN
2185         x_key_description := 'Customer Production Sequence Number' ;
2186         raise e_CriticalKeyMissing;
2187      END IF ;
2188       -- end of changes for Bug 2183405
2189 
2190      IF ((x_critical_key_rec.industry_attribute4 = 'Y') AND
2191         (x_lines_rec.industry_attribute4 IS NULL ) )
2192     THEN
2193        x_key_description := 'Pull Signal Reference Number';
2194        raise e_CriticalKeyMissing;
2195     END IF;
2196     --
2197     IF ((x_critical_key_rec.industry_attribute5 = 'Y') AND
2198         (x_lines_rec.industry_attribute5 IS NULL ) )
2199     THEN
2200        x_key_description := 'Pull Signal Starting Serial Number';
2201        raise e_CriticalKeyMissing;
2202     END IF;
2203     --
2204     IF ((x_critical_key_rec.industry_attribute6 = 'Y') AND
2205         (x_lines_rec.industry_attribute6 IS NULL ) )
2206     THEN
2207        x_key_description := 'Pull Signal Ending Serial Number';
2208        raise e_CriticalKeyMissing;
2209     END IF;
2210     --
2211     IF ((x_critical_key_rec.industry_attribute8 = 'Y') AND
2212         (x_lines_rec.industry_attribute8 IS NULL ) )
2213     THEN
2214        x_key_description := 'Industry Attribute8';
2215        raise e_CriticalKeyMissing;
2216     END IF;
2217     --
2218     IF ((x_critical_key_rec.industry_attribute9 = 'Y') AND
2219         (x_lines_rec.industry_attribute9 IS NULL ) )
2220     THEN
2221        x_key_description := 'Industry Attribute9';
2222        raise e_CriticalKeyMissing;
2223     END IF;
2224     --
2225     IF ((x_critical_key_rec.industry_attribute10 = 'Y') AND
2226         (x_lines_rec.industry_attribute10 IS NULL ) )
2227     THEN
2228        x_key_description := 'Industry Attribute10';
2229        raise e_CriticalKeyMissing;
2230     END IF;
2231     --
2232     IF ((x_critical_key_rec.industry_attribute11 = 'Y') AND
2233         (x_lines_rec.industry_attribute11 IS NULL ) )
2234     THEN
2235        x_key_description := 'Industry Attribute11';
2236        raise e_CriticalKeyMissing;
2237     END IF;
2238     --
2239     IF ((x_critical_key_rec.industry_attribute12 = 'Y') AND
2240         (x_lines_rec.industry_attribute12 IS NULL ) )
2241     THEN
2242        x_key_description := 'Industry Attribute12';
2243        raise e_CriticalKeyMissing;
2244     END IF;
2245     --
2246     IF ((x_critical_key_rec.industry_attribute13 = 'Y') AND
2247         (x_lines_rec.industry_attribute13 IS NULL ) )
2248     THEN
2249        x_key_description := 'Industry Attribute13';
2250        raise e_CriticalKeyMissing;
2251     END IF;
2252     --
2253     IF ((x_critical_key_rec.industry_attribute14 = 'Y') AND
2254         (x_lines_rec.industry_attribute14 IS NULL ) )
2255     THEN
2256        x_key_description := 'Industry Attribute14';
2257        raise e_CriticalKeyMissing;
2258     END IF;
2259     --
2260 /* Commented as the industry attribute is copied later
2261     IF ((x_critical_key_rec.industry_attribute15 = 'Y') AND
2262         (x_lines_rec.industry_attribute15 IS NULL ) )
2263     THEN
2264        x_key_description := 'Industry Attribute15';
2265        raise e_CriticalKeyMissing;
2266     END IF;
2267     --
2268 */
2269     --
2270     IF ((x_critical_key_rec.attribute1 = 'Y') AND
2271         (x_lines_rec.attribute1 IS NULL ) )
2272     THEN
2273        x_key_description := 'Descriptive Flexfield Attribute1';
2274        raise e_CriticalKeyMissing;
2275     END IF;
2276     --
2277     IF ((x_critical_key_rec.attribute2 = 'Y') AND
2278         (x_lines_rec.attribute2 IS NULL ) )
2279     THEN
2280        x_key_description := 'Descriptive Flexfield Attribute2';
2281        raise e_CriticalKeyMissing;
2282     END IF;
2283     --
2284     IF ((x_critical_key_rec.attribute4 = 'Y') AND
2285         (x_lines_rec.attribute4 IS NULL ) )
2286     THEN
2287        x_key_description := 'Descriptive Flexfield Attribute4';
2288        raise e_CriticalKeyMissing;
2289     END IF;
2290     --
2291     IF ((x_critical_key_rec.attribute5 = 'Y') AND
2292         (x_lines_rec.attribute5 IS NULL ) )
2293     THEN
2294        x_key_description := 'Descriptive Flexfield Attribute5';
2295        raise e_CriticalKeyMissing;
2296     END IF;
2297     --
2298     IF ((x_critical_key_rec.attribute6 = 'Y') AND
2299         (x_lines_rec.attribute6 IS NULL ) )
2300     THEN
2301        x_key_description := 'Descriptive Flexfield Attribute6';
2302        raise e_CriticalKeyMissing;
2303     END IF;
2304     --
2305     IF ((x_critical_key_rec.attribute8 = 'Y') AND
2306         (x_lines_rec.attribute8 IS NULL ) )
2307     THEN
2308        x_key_description := 'Descriptive Flexfield Attribute8';
2309     END IF;
2310     --
2311     IF ((x_critical_key_rec.attribute9 = 'Y') AND
2312         (x_lines_rec.attribute9 IS NULL ) )
2313     THEN
2314        x_key_description := 'Descriptive Flexfield Attribute9';
2315        raise e_CriticalKeyMissing;
2316     END IF;
2317     --
2318     IF ((x_critical_key_rec.attribute10 = 'Y') AND
2319         (x_lines_rec.attribute10 IS NULL ) )
2320     THEN
2321        x_key_description := 'Descriptive Flexfield Attribute10';
2322        raise e_CriticalKeyMissing;
2323     END IF;
2324     --
2325     IF ((x_critical_key_rec.attribute11 = 'Y') AND
2326         (x_lines_rec.attribute11 IS NULL ) )
2327     THEN
2328        x_key_description := 'Descriptive Flexfield Attribute11';
2329        raise e_CriticalKeyMissing;
2330     END IF;
2331     --
2332     IF ((x_critical_key_rec.attribute12 = 'Y') AND
2333         (x_lines_rec.attribute12 IS NULL ) )
2334     THEN
2335        x_key_description := 'Descriptive Flexfield Attribute12';
2336        raise e_CriticalKeyMissing;
2337     END IF;
2338     --
2339     IF ((x_critical_key_rec.attribute13 = 'Y') AND
2340         (x_lines_rec.attribute13 IS NULL ) )
2341     THEN
2342        x_key_description := 'Descriptive Flexfield Attribute13';
2343        raise e_CriticalKeyMissing;
2344     END IF;
2345     --
2346     IF ((x_critical_key_rec.attribute14 = 'Y') AND
2347         (x_lines_rec.attribute14 IS NULL ) )
2348     THEN
2349        x_key_description := 'Descriptive Flexfield Attribute14';
2350        raise e_CriticalKeyMissing;
2351     END IF;
2352     --
2353     IF ((x_critical_key_rec.attribute15 = 'Y') AND
2354         (x_lines_rec.attribute15 IS NULL ) )
2355     THEN
2356        x_key_description := 'Descriptive Flexfield Attribute15';
2357        raise e_CriticalKeyMissing;
2358     END IF;
2359     --
2360     v_progress := '060';
2361     --
2362   END IF;
2363   --
2364   IF (l_debug <> -1) THEN
2365      rlm_core_sv.dpop(C_SDEBUG);
2366   END IF;
2367   --
2368 EXCEPTION
2369   WHEN e_CriticalKeyMissing THEN
2370     --
2371     rlm_message_sv.app_error(
2372                 x_ExceptionLevel => rlm_message_sv.k_warn_level,
2373                 x_MessageName => 'RLM_CRITICAL_KEY_NULL',
2374                 x_InterfaceHeaderId => x_lines_rec.header_id,
2375                 x_InterfaceLineId => x_lines_rec.line_id,
2376                 x_token1=>'DESCRIPTION',
2377                 x_value1=>x_key_description,
2378                 x_ValidationType => 'CRITICAL_KEYS');
2379     --
2380     IF (l_debug <> -1) THEN
2381        rlm_core_sv.dlog(C_DEBUG,'Missing key description',x_key_description);
2382        rlm_core_sv.dpop(C_SDEBUG,'WARNING: RLM_CRITICAL_KEY_NULL');
2383     END IF;
2384     --
2385   WHEN OTHERS THEN
2386     --
2387     x_lines_rec.process_status := rlm_core_sv.k_PS_ERROR;
2388     --
2389     rlm_message_sv.sql_error('rlm_validatedemand_sv.ValidateCriticalKeys:',
2390                               v_Progress);
2391     --
2392     IF (l_debug <> -1) THEN
2393        rlm_core_sv.dpop(C_SDEBUG,'EXCEPTION: '||SUBSTR(SQLERRM,1,200));
2394     END IF;
2395     --
2396     raise;
2397     --
2398 END ValidateCriticalKeys;
2399 
2400 /*===========================================================================
2401 
2402   PROCEDURE POPULATE_MATCH_KEY
2403         ( To be moved later to common package to be accessed both by
2404           Validate and Reconcile )
2405 
2406 ===========================================================================
2407 PROCEDURE PopulateMatchKeys(x_match_rec IN OUT NOCOPY t_match_rec,
2408                              x_match_key  IN VARCHAR2)
2409 IS
2410 
2411   x_progress          VARCHAR2(3) := '010';
2412 BEGIN
2413   --
2414   IF (l_debug <> -1) THEN
2415      rlm_core_sv.dpush(C_SDEBUG,'POPULATE_MATCH_KEY');
2416      rlm_core_sv.dlog(C_DEBUG,'x_match_key',x_match_key);
2417   END IF;
2418   --
2419   --
2420   SELECT DECODE(INSTR(x_match_key,'A'),0,'N','Y'),
2421          DECODE(INSTR(x_match_key,'B'),0,'N','Y'),
2422          DECODE(INSTR(x_match_key,'C'),0,'N','Y'),
2423          DECODE(INSTR(x_match_key,'D'),0,'N','Y'),
2424          DECODE(INSTR(x_match_key,'E'),0,'N','Y'),
2425          DECODE(INSTR(x_match_key,'F'),0,'N','Y'),
2426          DECODE(INSTR(x_match_key,'G'),0,'N','Y'),
2427          DECODE(INSTR(x_match_key,'H'),0,'N','Y'),
2428          DECODE(INSTR(x_match_key,'I'),0,'N','Y'),
2429          DECODE(INSTR(x_match_key,'J'),0,'N','Y'),
2430          DECODE(INSTR(x_match_key,'K'),0,'N','Y'),
2431          DECODE(INSTR(x_match_key,'L'),0,'N','Y'),
2432          DECODE(INSTR(x_match_key,'M'),0,'N','Y'),
2433          DECODE(INSTR(x_match_key,'N'),0,'N','Y'),
2434          DECODE(INSTR(x_match_key,'O'),0,'N','Y'),
2435          DECODE(INSTR(x_match_key,'P'),0,'N','Y'),
2436          DECODE(INSTR(x_match_key,'Q'),0,'N','Y'),
2437          DECODE(INSTR(x_match_key,'R'),0,'N','Y'),
2438          DECODE(INSTR(x_match_key,'S'),0,'N','Y'),
2439          DECODE(INSTR(x_match_key,'T'),0,'N','Y'),
2440          DECODE(INSTR(x_match_key,'U'),0,'N','Y'),
2441          DECODE(INSTR(x_match_key,'V'),0,'N','Y'),
2442          DECODE(INSTR(x_match_key,'W'),0,'N','Y'),
2443          DECODE(INSTR(x_match_key,'X'),0,'N','Y'),
2444          DECODE(INSTR(x_match_key,'Y'),0,'N','Y'),
2445          DECODE(INSTR(x_match_key,'Z'),0,'N','Y'),
2446          DECODE(INSTR(x_match_key,'1'),0,'N','Y'),
2447          DECODE(INSTR(x_match_key,'2'),0,'N','Y'),
2448          DECODE(INSTR(x_match_key,'3'),0,'N','Y'),
2449          DECODE(INSTR(x_match_key,'4'),0,'N','Y'),
2450          DECODE(INSTR(x_match_key,'5'),0,'N','Y'),
2451          DECODE(INSTR(x_match_key,'6'),0,'N','Y'),
2452          DECODE(INSTR(x_match_key,'7'),0,'N','Y'),
2453          DECODE(INSTR(x_match_key,'8'),0,'N','Y'),
2454          DECODE(INSTR(x_match_key,'9'),0,'N','Y')
2455   INTO
2456          x_match_rec.cust_production_line,
2457          x_match_rec.customer_dock_code,
2458          x_match_rec.request_date,
2459          x_match_rec.schedule_date,
2460          x_match_rec.cust_po_number,
2461          x_match_rec.customer_item_revision,
2462          x_match_rec.customer_job,
2463          x_match_rec.cust_model_serial_number,
2464          x_match_rec.industry_attribute1,
2465          x_match_rec.industry_attribute2,
2466          x_match_rec.industry_attribute4,
2467          x_match_rec.industry_attribute5,
2468          x_match_rec.industry_attribute6,
2469          x_match_rec.industry_attribute9,
2470          x_match_rec.industry_attribute10,
2471          x_match_rec.industry_attribute11,
2472          x_match_rec.industry_attribute12,
2473          x_match_rec.industry_attribute13,
2474          x_match_rec.industry_attribute14,
2475          x_match_rec.industry_attribute15,
2476          x_match_rec.attribute1,
2477          x_match_rec.attribute2,
2478          x_match_rec.attribute3,
2479          x_match_rec.attribute4,
2480          x_match_rec.attribute5,
2481          x_match_rec.attribute6,
2482          x_match_rec.attribute7,
2483          x_match_rec.attribute8,
2484          x_match_rec.attribute9,
2485          x_match_rec.attribute10,
2486          x_match_rec.attribute11,
2487          x_match_rec.attribute12,
2488          x_match_rec.attribute13,
2489          x_match_rec.attribute14,
2490          x_match_rec.attribute15
2491   FROM dual;
2492 
2493     IF (l_debug <> -1) THEN
2494        rlm_core_sv.dlog(C_DEBUG,'x_match_rec.cust_production_line',
2495                                 x_match_rec.cust_production_line);
2496        rlm_core_sv.dlog(C_DEBUG,'x_match_rec.customer_dock_code',
2497                                 x_match_rec.customer_dock_code);
2498        rlm_core_sv.dlog(C_DEBUG,'x_match_rec.request_date',
2499                                 x_match_rec.request_date);
2500        rlm_core_sv.dlog(C_DEBUG,'x_match_rec.schedule_date',
2501                                 x_match_rec.schedule_date);
2502        rlm_core_sv.dlog(C_DEBUG,'x_match_rec.cust_po_number',
2503                                 x_match_rec.cust_po_number);
2504        rlm_core_sv.dlog(C_DEBUG,'x_match_rec.customer_item_revision',
2505                                 x_match_rec.customer_item_revision);
2506        rlm_core_sv.dlog(C_DEBUG,'x_match_rec.customer_job',
2507                                 x_match_rec.customer_job);
2508        rlm_core_sv.dlog(C_DEBUG,'x_match_rec.cust_model_serial_number',
2509                                 x_match_rec.cust_model_serial_number);
2510        rlm_core_sv.dlog(C_DEBUG,'x_match_rec.industry_attribute1',
2511                                 x_match_rec.industry_attribute1);
2512        rlm_core_sv.dlog(C_DEBUG,'x_match_rec.industry_attribute2',
2513                                 x_match_rec.industry_attribute2);
2514        rlm_core_sv.dlog(C_DEBUG,'x_match_rec.industry_attribute4',
2515                                 x_match_rec.industry_attribute4);
2516        rlm_core_sv.dlog(C_DEBUG,'x_match_rec.industry_attribute5',
2517                                 x_match_rec.industry_attribute5);
2518        rlm_core_sv.dlog(C_DEBUG,'x_match_rec.industry_attribute6',
2519                                 x_match_rec.industry_attribute6);
2520        rlm_core_sv.dlog(C_DEBUG,'x_match_rec.industry_attribute9',
2521                                 x_match_rec.industry_attribute9);
2522        rlm_core_sv.dlog(C_DEBUG,'x_match_rec.industry_attribute10',
2523                                 x_match_rec.industry_attribute10);
2524        rlm_core_sv.dlog(C_DEBUG,'x_match_rec.industry_attribute11',
2525                                 x_match_rec.industry_attribute11);
2526        rlm_core_sv.dlog(C_DEBUG,'x_match_rec.industry_attribute12',
2527                                 x_match_rec.industry_attribute12);
2528        rlm_core_sv.dlog(C_DEBUG,'x_match_rec.industry_attribute13',
2529                                 x_match_rec.industry_attribute13);
2530        rlm_core_sv.dlog(C_DEBUG,'x_match_rec.industry_attribute14',
2531                               x_match_rec.industry_attribute14);
2532        rlm_core_sv.dlog(C_DEBUG,'x_match_rec.industry_attribute15',
2533                                x_match_rec.industry_attribute15);
2534        rlm_core_sv.dlog(C_DEBUG,'x_match_rec.attribute1',x_match_rec.attribute1);
2535        rlm_core_sv.dlog(C_DEBUG,'x_match_rec.attribute2',x_match_rec.attribute2);
2536        rlm_core_sv.dlog(C_DEBUG,'x_match_rec.attribute3',x_match_rec.attribute3);
2537        rlm_core_sv.dlog(C_DEBUG,'x_match_rec.attribute4',x_match_rec.attribute4);
2538        rlm_core_sv.dlog(C_DEBUG,'x_match_rec.attribute5',x_match_rec.attribute5);
2539        rlm_core_sv.dlog(C_DEBUG,'x_match_rec.attribute6',x_match_rec.attribute6);
2540        rlm_core_sv.dlog(C_DEBUG,'x_match_rec.attribute7',x_match_rec.attribute7);
2541        rlm_core_sv.dlog(C_DEBUG,'x_match_rec.attribute8',x_match_rec.attribute8);
2542        rlm_core_sv.dlog(C_DEBUG,'x_match_rec.attribute9',x_match_rec.attribute9);
2543        rlm_core_sv.dlog(C_DEBUG,'x_match_rec.attribute10',x_match_rec.attribute10);
2544        rlm_core_sv.dlog(C_DEBUG,'x_match_rec.attribute11',x_match_rec.attribute11);
2545        rlm_core_sv.dlog(C_DEBUG,'x_match_rec.attribute12',x_match_rec.attribute12);
2546        rlm_core_sv.dlog(C_DEBUG,'x_match_rec.attribute13',x_match_rec.attribute13);
2547        rlm_core_sv.dlog(C_DEBUG,'x_match_rec.attribute14',x_match_rec.attribute14);
2548        rlm_core_sv.dlog(C_DEBUG,'x_match_rec.attribute15',x_match_rec.attribute15);
2549        rlm_core_sv.dpop(C_SDEBUG);
2550     END IF;
2551 
2552 EXCEPTION
2553   WHEN OTHERS THEN
2554     rlm_message_sv.sql_error('rlm_validate_sv.PopulateMatchKeys',x_progress);
2555     --
2556     IF (l_debug <> -1) THEN
2557        rlm_core_sv.dpop(C_SDEBUG,'EXCEPTION: '||SUBSTR(SQLERRM,1,200));
2558     END IF;
2559     --
2560     raise;
2561 
2562 END PopulateMatchKeys;
2563 */
2564 
2565 /*===========================================================================
2566 
2567 	PROCEDURE NAME:  PopulateLinesTab
2568 
2569 ===========================================================================*/
2570 PROCEDURE PopulateLinesTab(v_Group_rec IN t_Group_rec)
2571 IS
2572   --
2573   v_lines_rec   RLM_INTERFACE_LINES%ROWTYPE;
2574   v_Progress    VARCHAR2(30) := '010';
2575   v_temp        VARCHAR2(30);
2576   v_Count       NUMBER := 1;
2577   TYPE  c_lines_typ  IS REF CURSOR;
2578   c_lines c_lines_typ;
2579   --
2580 BEGIN
2581   --
2582   IF (l_debug <> -1) THEN
2583      rlm_core_sv.dpush(C_SDEBUG,'PopulateLinesTab');
2584      rlm_core_sv.dlog(C_DEBUG,'schedule_item_num',v_Group_rec.schedule_item_num);
2585      rlm_core_sv.dlog(C_DEBUG,'header_id',g_header_rec.header_id);
2586      rlm_core_sv.dlog(C_DEBUG,'cust_ship_from_org_ext',
2587                             v_Group_rec.cust_ship_from_org_ext);
2588      rlm_core_sv.dlog(C_DEBUG,'cust_ship_to_ext',v_Group_rec.cust_ship_to_ext);
2589      rlm_core_sv.dlog(C_DEBUG,'cust_production_seq_num',
2590                             v_Group_rec.cust_production_seq_num);
2591   END IF;
2592   --
2593   g_lines_tab.DELETE;
2594   --
2595   v_Progress := '020';
2596   --
2597   IF v_Group_rec.group_type = 'N' THEN
2598     --
2599     OPEN c_lines FOR
2600       SELECT *
2601       FROM RLM_INTERFACE_LINES_ALL --bug 4907839
2602       WHERE schedule_item_num = v_Group_rec.schedule_item_num
2603       AND header_id = g_header_rec.header_id
2604       AND   process_status = rlm_core_sv.k_PS_AVAILABLE
2605       --ORDER BY item_detail_type desc
2606       FOR UPDATE NOWAIT;
2607     --
2608   ELSE
2609     --
2610     IF (g_header_rec.schedule_source <> 'MANUAL') THEN
2611       --
2612       IF (v_Group_rec.cust_ship_from_org_ext IS NOT NULL AND v_Group_rec.cust_ship_to_ext IS NOT NULL) THEN
2613           --
2614           OPEN c_lines FOR
2615           SELECT *
2616           FROM RLM_INTERFACE_LINES_ALL --Bug 4907839
2617           WHERE header_id       = g_header_rec.header_id
2618           AND  cust_ship_from_org_ext =
2619                v_Group_rec.cust_ship_from_org_ext
2620           AND  cust_ship_to_ext =
2621                 v_Group_rec.cust_ship_to_ext
2622           AND  customer_item_ext = v_Group_rec.customer_item_ext
2623           AND   process_status   = rlm_core_sv.k_PS_AVAILABLE
2624           --ORDER BY item_detail_type desc
2625           FOR UPDATE NOWAIT;
2626           --
2627       ELSE
2628         --
2629         OPEN c_lines FOR
2630         SELECT *
2631         FROM RLM_INTERFACE_LINES_ALL --bug 4907839
2632         WHERE header_id       = g_header_rec.header_id
2633         AND  nvl(cust_ship_from_org_ext,k_VNULL) =
2634                  nvl(v_Group_rec.cust_ship_from_org_ext,k_VNULL)
2635         AND  nvl(cust_ship_to_ext,k_VNULL) =
2636                 nvl(v_Group_rec.cust_ship_to_ext,k_VNULL)
2637         AND  customer_item_ext = v_Group_rec.customer_item_ext
2638         AND   process_status   = rlm_core_sv.k_PS_AVAILABLE
2639         --ORDER BY item_detail_type desc
2640         FOR UPDATE NOWAIT;
2641         --
2642       END IF;
2643 
2644     ELSE
2645       --
2646       OPEN c_lines FOR
2647         SELECT *
2648         FROM RLM_INTERFACE_LINES
2649         WHERE header_id       = g_header_rec.header_id
2650         AND  customer_item_id = v_Group_rec.customer_item_id
2651         AND  ship_from_org_id = v_Group_rec.ship_from_org_id
2652         AND  ship_to_address_id = v_Group_rec.ship_to_address_id
2653         AND   process_status   = rlm_core_sv.k_PS_AVAILABLE
2654         --ORDER BY item_detail_type desc
2655         FOR UPDATE NOWAIT;
2656       --
2657     END IF;
2658     --
2659   END IF;
2660   --
2661   v_Count := 1;
2662   --
2663  LOOP
2664     FETCH c_lines INTO v_lines_rec ;
2665     --
2666     EXIT WHEN c_lines%NOTFOUND  ;
2667     --
2668     v_Progress := '030';
2669     --
2670     IF (l_debug <> -1) THEN
2671        rlm_core_sv.dlog(C_DEBUG,'inserted line_id',v_lines_rec.line_id);
2672     END IF;
2673     --
2674     g_lines_tab(v_Count) := v_lines_rec;
2675     g_lines_tab(v_Count).process_status  := rlm_core_sv.k_PS_AVAILABLE;
2676     v_Count := v_Count + 1;
2677     v_Progress := '040';
2678     --
2679   END LOOP;
2680   --
2681   CLOSE  c_lines;
2682   --
2683   IF (l_debug <> -1) THEN
2684      rlm_core_sv.dpop(C_SDEBUG);
2685   END IF;
2686   --
2687 EXCEPTION
2688   --
2689   WHEN OTHERS THEN
2690     --
2691     g_header_rec.process_status := rlm_core_sv.k_PS_ERROR;
2692     rlm_message_sv.sql_error('rlm_validatedemand_sv.PopulateLinesTab',
2693                               v_Progress);
2694     --
2695     IF (l_debug <> -1) THEN
2696        rlm_core_sv.dpop(C_SDEBUG,'EXCEPTION: '||SUBSTR(SQLERRM,1,200));
2697     END IF;
2698     --
2699     raise;
2700     --
2701 END PopulateLinesTab;
2702 
2703 /*===========================================================================
2704 
2705 	PROCEDURE NAME:  BuildHeaderRec
2706 
2707 ===========================================================================*/
2708 FUNCTION BuildHeaderRec(x_header_id IN rlm_interface_headers.header_id%TYPE)
2709 RETURN BOOLEAN
2710 IS
2711   --
2712   v_Progress    VARCHAR2(30) := '010';
2713   --
2714 BEGIN
2715   --
2716   IF (l_debug <> -1) THEN
2717      rlm_core_sv.dpush(C_SDEBUG,'BuildHeaderRec');
2718      rlm_core_sv.dlog(C_DEBUG,'x_header_id',x_header_id);
2719   END IF;
2720   --
2721   SELECT *
2722   INTO g_header_rec
2723   FROM rlm_interface_headers
2724   WHERE header_id = x_header_id
2725   FOR UPDATE NOWAIT;
2726   --
2727   IF (l_debug <> -1) THEN
2728      rlm_core_sv.dlog(C_DEBUG,'No of headers selected',SQL%ROWCOUNT);
2729      rlm_core_sv.dpop(C_SDEBUG);
2730   END IF;
2731   --
2732   RETURN TRUE;
2733   --
2734 EXCEPTION
2735   --
2736   WHEN NO_DATA_FOUND THEN
2737     --
2738     IF (l_debug <> -1) THEN
2739        rlm_core_sv.dlog(C_DEBUG,'x_header_id',x_header_id);
2740        rlm_core_sv.dpop(C_SDEBUG,'EXCEPTION: NO_DATA_FOUND');
2741     END IF;
2742     --
2743     RETURN FALSE;
2744     --
2745   WHEN OTHERS THEN
2746     --
2747     rlm_message_sv.sql_error('rlm_validatedemand_sv.BuildHeaderRec',v_Progress);
2748     --
2749     IF (l_debug <> -1) THEN
2750        rlm_core_sv.dpop(C_SDEBUG,'EXCEPTION: '||SUBSTR(SQLERRM,1,200));
2751     END IF;
2752     --
2753     RETURN FALSE; /* should we raise here */
2754     --
2755 END BuildHeaderRec;
2756 
2757 /*===========================================================================
2758 
2759 	PROCEDURE NAME:  ApplyHeaderDefaults
2760 
2761 ===========================================================================*/
2762 PROCEDURE ApplyHeaderDefaults(x_header_rec IN OUT NOCOPY RLM_INTERFACE_HEADERS%ROWTYPE)
2763 IS
2764  --
2765   v_progress     VARCHAR2(3) := '010';
2766  --
2767 BEGIN
2768  --
2769  IF (l_debug <> -1) THEN
2770     rlm_core_sv.dpush(C_SDEBUG,'ApplyHeaderDefaults');
2771  END IF;
2772  --
2773  IF x_header_rec.sched_horizon_start_date IS NULL THEN
2774      --
2775      x_header_rec.sched_horizon_start_date := GetDateFromTable('START');
2776      v_progress := '020';
2777      --
2778      IF (l_debug <> -1) THEN
2779         rlm_core_sv.dlog(C_DEBUG,'Horizon start date',
2780               x_header_rec.sched_horizon_start_date);
2781      END IF;
2782      --
2783  END IF;
2784  --
2785  IF  x_header_rec.sched_horizon_end_date IS NULL THEN
2786      --
2787      x_header_rec.sched_horizon_end_date := GetDateFromTable('END');
2788      v_progress := '030';
2789      --
2790      IF (l_debug <> -1) THEN
2791         rlm_core_sv.dlog(C_DEBUG,'Horizon end date',
2792               x_header_rec.sched_horizon_end_date);
2793      END IF;
2794      --
2795  ELSE
2796      --
2797      v_progress := '040';
2798      --
2799      IF (l_debug <> -1) THEN
2800         rlm_core_sv.dlog(C_DEBUG,'no defaulting needed');
2801      END IF;
2802      --
2803  END IF;
2804  --
2805  v_progress := '050';
2806  --
2807  RLM_TPA_SV.SetHdrTPAttCategory(x_header_rec);
2808  --
2809  IF (l_debug <> -1) THEN
2810     rlm_core_sv.dpop(C_SDEBUG);
2811  END IF;
2812  --
2813 EXCEPTION
2814   --
2815   WHEN OTHERS THEN
2816     --
2817     x_header_rec.process_status := rlm_core_sv.k_PS_ERROR;
2818     rlm_message_sv.sql_error('rlm_validatedemand_sv.ApplyHeaderDefaults',
2819                               v_Progress);
2820     --
2821     IF (l_debug <> -1) THEN
2822        rlm_core_sv.dpop(C_SDEBUG,'EXCEPTION: '||SUBSTR(SQLERRM,1,200));
2823     END IF;
2824     --
2825     raise;
2826     --
2827 END ApplyHeaderDefaults;
2828 
2829 /*===========================================================================
2830 
2831 	FUNCTION  NAME:  GetDateFromTable
2832 This function will return the date based on  the criteria specified
2833 If criteria = 'START' THEN
2834   return the date which is least for the schedule item num
2835 If criteria = 'END' THEN
2836   return the date which is greatest for the schedule item num
2837 
2838 ===========================================================================*/
2839 FUNCTION GetDateFromTable(p_date_criteria VARCHAR2)
2840 RETURN DATE
2841 IS
2842   --
2843   v_progress     VARCHAR2(3) := '010';
2844   v_Start_Date   DATE;
2845   v_End_Date_d   DATE ;
2846   v_End_Date_w   DATE ;
2847   v_End_Date_m   DATE ;
2848   v_End_Date_f   DATE ;
2849   v_End_Date     DATE ;
2850   v_SundayDate   VARCHAR2(30) := '05/01/1997';
2851   --
2852 BEGIN
2853   --
2854   IF (l_debug <> -1) THEN
2855      rlm_core_sv.dpush(C_SDEBUG,'GetDateFromTable');
2856      rlm_core_sv.dlog(C_DEBUG,'p_date_criteria',p_date_criteria);
2857   END IF;
2858   --
2859   IF p_date_criteria = 'START' THEN
2860      --
2861      SELECT MIN(start_date_time)
2862      INTO v_start_date
2863      FROM rlm_interface_lines
2864      WHERE header_id = g_header_rec.header_id;
2865      --
2866      IF (l_debug <> -1) THEN
2867         rlm_core_sv.dlog(C_DEBUG,'v_Start_Date',v_Start_Date);
2868         rlm_core_sv.dpop(C_SDEBUG);
2869      END IF;
2870      --
2871      RETURN(v_Start_Date);
2872      --
2873   ELSIF p_date_criteria = 'END' THEN
2874      --{
2875      SELECT MAX(end_date_time)
2876      INTO   v_end_date_f
2877      FROM   rlm_interface_lines
2878      WHERE  header_id = g_header_rec.header_id
2879      AND    item_detail_type IN (0,1,2,6) --Bug 5478817
2880      AND    item_detail_subtype = rlm_ship_delivery_pattern_sv.g_FLEXIBLE;
2881      --
2882      IF (l_debug <> -1) THEN
2883         rlm_core_sv.dlog(C_DEBUG,'v_End_Date_f',v_End_Date_f);
2884      END IF;
2885      --
2886      SELECT MAX(start_date_time)
2887      INTO   v_End_Date_d
2888      FROM   rlm_interface_lines
2889      WHERE  header_id = g_header_rec.header_id
2890      AND    item_detail_type IN (0,1,2,6) --Bug 5478817
2891      AND    item_detail_subtype = rlm_ship_delivery_pattern_sv.g_DAY;
2892      --
2893      IF (l_debug <> -1) THEN
2894         rlm_core_sv.dlog(C_DEBUG,'v_End_Date_d',v_End_Date_d);
2895      END IF;
2896      --
2897      SELECT MAX(start_date_time)
2898      INTO   v_End_Date_w
2899      FROM   rlm_interface_lines
2900      WHERE  header_id = g_header_rec.header_id
2901      AND    item_detail_type IN (0,1,2,6) --Bug 5478817
2902      AND    item_detail_subtype = rlm_ship_delivery_pattern_sv.g_WEEK;
2903      --
2904      IF (l_debug <> -1) THEN
2905       rlm_core_sv.dlog(C_DEBUG, 'v_End_Date_w', v_End_Date_w);
2906      END IF;
2907      --
2908      SELECT MAX(start_date_time)
2909      INTO   v_End_Date_m
2910      FROM   rlm_interface_lines
2911      WHERE  header_id = g_header_rec.header_id
2912      AND    item_detail_type IN (0,1,2,6) --Bug 5478817
2913      AND    item_detail_subtype = rlm_ship_delivery_pattern_sv.g_MONTH;
2914      --
2915      IF (l_debug <> -1) THEN
2916       rlm_core_sv.dlog(C_DEBUG, 'v_End_Date_m', v_End_Date_m);
2917      END IF;
2918      --
2919      SELECT NEXT_DAY(v_End_Date_w,
2920             to_char(to_date(v_SundayDate, 'DD/MM/RRRR'), 'DY'))
2921      INTO v_End_Date_w
2922      FROM DUAL;
2923      --
2924      IF (l_debug <> -1) THEN
2925         rlm_core_sv.dlog(C_DEBUG,'Sunday after v_End_Date_w',v_End_Date_w);
2926      END IF;
2927      --
2928      SELECT LAST_DAY(v_End_Date_m)
2929      INTO v_End_Date_m
2930      FROM DUAL;
2931      --
2932      IF (l_debug <> -1) THEN
2933        rlm_core_sv.dlog(C_DEBUG, 'Last day of the month of v_End_Date_m',
2934                         v_End_Date_m);
2935      END IF;
2936      --
2937      -- Compare each of the end dates to figure out the horiz. end date
2938      --
2939      IF v_End_Date_f IS NOT NULL AND v_End_date_m IS NOT NULL THEN
2940       v_End_Date := GREATEST(v_End_Date_f, v_End_date_m);
2941      ELSE
2942       v_End_Date := NVL(v_End_Date_f, v_End_date_m);
2943      END IF;
2944      --
2945      IF v_End_Date IS NOT NULL THEN
2946       --
2947       IF v_End_Date_w IS NOT NULL THEN
2948        v_End_Date := GREATEST(v_End_Date, v_End_Date_w);
2949       ELSIF v_End_date_d IS NOT NULL THEN
2950        v_End_Date := GREATEST(v_End_Date, v_End_Date_d);
2951       END IF;
2952       --
2953      ELSE
2954       --
2955       IF v_End_Date_w IS NOT NULL AND v_End_date_d IS NOT NULL THEN
2956        v_End_Date := GREATEST(v_End_Date_w, v_End_date_d);
2957       ELSE
2958        v_End_Date := NVL(v_End_Date_w, v_End_Date_d);
2959       END IF;
2960       --
2961      END IF;
2962      --
2963      IF (l_debug <> -1) THEN
2964         rlm_core_sv.dlog(C_DEBUG,'v_End_Date',v_End_Date);
2965         rlm_core_sv.dpop(C_SDEBUG);
2966      END IF;
2967      --
2968      RETURN(v_End_Date);
2969      --}
2970   END IF;
2971   --
2972   IF (l_debug <> -1) THEN
2973      rlm_core_sv.dpop(C_SDEBUG);
2974   END IF;
2975   --
2976 EXCEPTION
2977   --
2978   WHEN OTHERS THEN
2979     --
2980     g_header_rec.process_status := rlm_core_sv.k_PS_ERROR;
2981     rlm_message_sv.sql_error('rlm_validatedemand_sv.GetDateFromTable', v_Progress);
2982     --
2983     IF (l_debug <> -1) THEN
2984        rlm_core_sv.dlog(C_DEBUG,'progress',v_Progress);
2985        rlm_core_sv.dpop(C_SDEBUG,'EXCEPTION: '||SUBSTR(SQLERRM,1,200));
2986     END IF;
2987     --
2988     raise;
2989     --
2990 END GetDateFromTable;
2991 
2992 /*===========================================================================
2993 
2994 	PROCEDURE NAME:  ValidScheduleHeader
2995 
2996 ===========================================================================*/
2997 PROCEDURE ValidScheduleHeader(x_header_rec IN OUT NOCOPY RLM_INTERFACE_HEADERS%ROWTYPE)
2998 IS
2999   --
3000   v_progress     VARCHAR2(3) := '010';
3001   --
3002 BEGIN
3003   --
3004   IF (l_debug <> -1) THEN
3005      rlm_core_sv.dpush(C_SDEBUG,'ValidScheduleHeader');
3006   END IF;
3007   --
3008   RLM_TPA_SV.ValidScheduleType(x_header_rec);
3009   v_progress := '020';
3010   RLM_TPA_SV.ValidSchedulePurpose(x_header_rec);
3011   v_progress := '030';
3012   RLM_TPA_SV.ValidHorizonDates(x_header_rec);
3013   v_progress := '040';
3014   RLM_TPA_SV.ValidScheduleReferenceNum(x_header_rec);
3015   v_progress := '060';
3016   RLM_TPA_SV.ValidScheduleSource(x_header_rec);
3017   v_progress := '070';
3018   RLM_TPA_SV.ValidNumberLines(x_header_rec);
3019   --
3020   IF (l_debug <> -1) THEN
3021      rlm_core_sv.dpop(C_SDEBUG);
3022   END IF;
3023   --
3024 EXCEPTION
3025   --
3026   WHEN OTHERS THEN
3027     --
3028     x_header_rec.process_status := rlm_core_sv.k_PS_ERROR;
3029     rlm_message_sv.sql_error('rlm_validatedemand_sv.ValidScheduleHeader', v_Progress);
3030     --
3031     IF (l_debug <> -1) THEN
3032        rlm_core_sv.dpop(C_SDEBUG,'EXCEPTION: '||SUBSTR(SQLERRM,1,200));
3033     END IF;
3034     --
3035     raise;
3036     --
3037 END ValidScheduleHeader;
3038 
3039 /*===========================================================================
3040 
3041 	PROCEDURE NAME:  ValidNumberLines
3042 
3043 ===========================================================================*/
3044 PROCEDURE ValidNumberLines(x_header_rec  IN OUT NOCOPY RLM_INTERFACE_HEADERS%ROWTYPE)
3045 IS
3046   --
3047   v_progress     VARCHAR2(3) := '010';
3048   e_no_lines EXCEPTION;
3049   v_Count NUMBER;
3050   --
3051 BEGIN
3052   --
3053   IF (l_debug <> -1) THEN
3054      rlm_core_sv.dpush(C_SDEBUG,'ValidNumberLines');
3055      rlm_core_sv.dlog(C_DEBUG,'x_header_rec.header_id',x_header_rec.header_id);
3056   END IF;
3057   --
3058   SELECT count(*)
3059   INTO v_Count
3060   FROM rlm_interface_lines
3061   where header_id = x_header_rec.header_id;
3062   --
3063   IF (l_debug <> -1) THEN
3064      rlm_core_sv.dlog(C_DEBUG,'ValidNumberLines ', v_Count);
3065   END IF;
3066   --
3067   IF v_count = 0 THEN
3068      raise e_no_lines;
3069   END IF;
3070   --
3071   IF (l_debug <> -1) THEN
3072      rlm_core_sv.dpop(C_SDEBUG);
3073   END IF;
3074   --
3075 EXCEPTION
3076   --
3077   WHEN e_no_lines THEN
3078     --
3079     x_header_rec.process_status := rlm_core_sv.k_PS_ERROR;
3080     --
3081     rlm_message_sv.app_error(
3082                 x_ExceptionLevel => rlm_message_sv.k_error_level,
3083                 x_MessageName => 'RLM_NO_LINES_ON_SCHEDULE',
3084                 x_InterfaceHeaderId => x_header_rec.header_id);
3085     --
3086     IF (l_debug <> -1) THEN
3087        rlm_core_sv.dpop(C_SDEBUG, 'EXCEPTION: RLM_NO_LINES_ON_SCHEDULE');
3088     END IF;
3089     --
3090   WHEN OTHERS THEN
3091     --
3092     x_header_rec.process_status := rlm_core_sv.k_PS_ERROR;
3093     --
3094     rlm_message_sv.sql_error('rlm_validatedemand_sv.ValidNumberLines',
3095                              v_Progress);
3096     --
3097     IF (l_debug <> -1) THEN
3098        rlm_core_sv.dpop(C_SDEBUG,'EXCEPTION: '||SUBSTR(SQLERRM,1,200));
3099     END IF;
3100     --
3101     raise;
3102     --
3103 END ValidNumberLines;
3104 
3105 /*===========================================================================
3106 
3107 	PROCEDURE NAME:  ValidScheduleSource
3108 
3109 ===========================================================================*/
3110 
3111 
3112 PROCEDURE ValidScheduleSource(x_header_rec IN OUT NOCOPY RLM_INTERFACE_HEADERS%ROWTYPE)
3113 IS
3114   --
3115   v_progress     VARCHAR2(3) := '010';
3116   v_Chk_Date     DATE;
3117   e_SchSrcInv    EXCEPTION;
3118   e_OldManualSch EXCEPTION;
3119   --   Bug 4995267:
3120   TYPE c_typ IS REF CURSOR;
3121   c c_typ;
3122   v_edi_num2               VARCHAR2(15);
3123   v_edi_num3               VARCHAR2(15);
3124   v_ref_num                VARCHAR2(35);
3125   v_purpose                NUMBER;
3126   v_status                 NUMBER;
3127   v_new_purpose            NUMBER;
3128   v_purpose_code           VARCHAR2(30);
3129   v_gen_date               DATE;
3130   v_creation_date          DATE;
3131   e_HighGenDateProcessed   EXCEPTION;
3132   e_HighEdiProcessed       EXCEPTION;
3133   e_HighRefProcessed       EXCEPTION;
3134   e_HighPurProcessed       EXCEPTION;
3135   e_HighCrDateProcessed    EXCEPTION;
3136   --
3137   CURSOR c_processed_stype IS
3138     SELECT   sched_generation_date,
3139              edi_control_num_2,
3140              edi_control_num_3,
3141              schedule_reference_num,
3142 	     process_status,
3143              schedule_purpose,
3144              DECODE(schedule_purpose, 'ADD', 1, 'CONFIRMATION', 2, 'ORIGINAL', 3, 'REPLACE', 4,
3145                                       'REPLACE_ALL', 5, 'CANCELLATION', 6, 'CHANGE', 7, 'DELETE', 8),
3146              creation_date
3147     FROM     rlm_schedule_headers
3148     WHERE    ece_tp_translator_code   = x_header_rec.ece_tp_translator_code
3149     AND      ece_tp_location_code_ext = x_header_rec.ece_tp_location_code_ext
3150     AND      schedule_type            = x_header_rec.schedule_type
3151     AND      interface_header_id      <> x_header_rec.header_id
3152     AND      schedule_source          <> 'MANUAL'
3153     AND      process_status            IN (5,7)
3154     ORDER BY sched_generation_date    DESC,
3155              edi_control_num_2        DESC,
3156              edi_control_num_3        DESC,
3157              schedule_reference_num   DESC,
3158              DECODE(schedule_purpose, 'ADD', 1, 'CONFIRMATION', 2, 'ORIGINAL', 3,
3159                     'REPLACE', 4, 'REPLACE_ALL', 5, 'CANCELLATION', 6, 'CHANGE', 7, 'DELETE', 8) DESC,
3160              creation_date DESC;
3161   --
3162 BEGIN
3163   --
3164   IF (l_debug <> -1) THEN
3165      rlm_core_sv.dpush(C_SDEBUG,'ValidScheduleSource');
3166   END IF;
3167   --
3168   IF RLM_MESSAGE_SV.CHECK_DEPENDENCY('SCHEDULE_SOURCE') THEN
3169     --
3170     IF (l_debug <> -1) THEN
3171        rlm_core_sv.dlog(C_DEBUG,'schedule_source',
3172                               x_header_rec.schedule_source);
3173     END IF;
3174     --
3175     IF (x_header_rec.schedule_source IS NULL )  THEN
3176        --
3177        raise e_SchSrcInv;
3178        --
3179     ELSIF (x_header_rec.schedule_source <> 'MANUAL' ) THEN
3180     --{
3181        --
3182        --
3183        -- Bug 4995267: Query rlm_schedule_headers table for schedules.  Then, compare each attribute
3184        -- (one-by-one) according to the ORDER BY clause (RLMDPWPB). If at any point of
3185        -- attribute comparison, we find a schedule whose attributes are greater than the one
3186        -- currently being processed, DSP should stop indicating that the processing is out of order.
3187        --
3188        IF (l_debug <> -1) THEN
3189            --
3190            rlm_core_sv.dlog(C_DEBUG,'----- Checking the schedules in the archive tables -----');
3191            rlm_core_sv.dlog(C_DEBUG,'RLM_DP_SV.g_order_by_schedule_type', RLM_DP_SV.g_order_by_schedule_type);
3192            --
3193        END IF;
3194        --
3195        OPEN  c_processed_stype;
3196        FETCH c_processed_stype INTO v_gen_date, v_edi_num2, v_edi_num3, v_ref_num, v_status, v_purpose_code, v_purpose, v_creation_date;
3197        CLOSE c_processed_stype;
3198            --
3199        --
3200        IF (l_debug <> -1) THEN
3201            rlm_core_sv.dlog(C_DEBUG,'--- Archive schedule info ---');
3202                rlm_core_sv.dlog(C_DEBUG,'v_gen_date',
3203                                          to_char(v_gen_date,'DD-MON-YYYY HH24:MI:SS'));
3204                rlm_core_sv.dlog(C_DEBUG,'v_edi_num2',v_edi_num2);
3205                rlm_core_sv.dlog(C_DEBUG,'v_edi_num3',v_edi_num3);
3206                rlm_core_sv.dlog(C_DEBUG,'v_ref_num',v_ref_num);
3207                rlm_core_sv.dlog(C_DEBUG,'v_status',v_status);
3208                rlm_core_sv.dlog(C_DEBUG,'v_purpose_code',v_purpose_code);
3209                rlm_core_sv.dlog(C_DEBUG,'v_creation_date',
3210                                          to_char(v_creation_date,'DD-MON-YYYY HH24:MI:SS'));
3211                rlm_core_sv.dlog(C_DEBUG,'--- Incoming schedule info ---');
3212                rlm_core_sv.dlog(C_DEBUG,'x_header_rec.sched_generation_date',
3213                                          to_char(x_header_rec.sched_generation_date,'DD-MON-YYYY HH24:MI:SS'));
3214                rlm_core_sv.dlog(C_DEBUG,'x_header_rec.edi_control_num_2', x_header_rec.edi_control_num_2);
3215                rlm_core_sv.dlog(C_DEBUG,'x_header_rec.edi_control_num_3', x_header_rec.edi_control_num_3);
3216                rlm_core_sv.dlog(C_DEBUG,'x_header_rec.schedule_reference_num', x_header_rec.schedule_reference_num);
3217                rlm_core_sv.dlog(C_DEBUG,'x_header_rec.schedule_purpose', x_header_rec.schedule_purpose);
3218                rlm_core_sv.dlog(C_DEBUG,'x_header_rec.x_header_rec.creation_date',
3219                                          to_char(x_header_rec.creation_date,'DD-MON-YYYY HH24:MI:SS'));
3220        END IF;
3221        --
3222        IF ( v_gen_date IS NOT NULL) THEN
3223        --{
3224            --
3225            IF (v_gen_date > x_header_rec.sched_generation_date) THEN
3226                --
3227                raise e_HighGenDateProcessed;
3228                --
3229            ELSIF ( v_gen_date = x_header_rec.sched_generation_date ) THEN
3230                --
3231                IF ( v_edi_num2 > x_header_rec.edi_control_num_2 ) THEN
3232                    --
3233                    IF (l_debug <> -1) THEN
3234                        rlm_core_sv.dlog(C_DEBUG,'Higher EDI Control Number2');
3235                    END IF;
3236                    --
3237                    raise e_HighEdiProcessed;
3238                    --
3239                ELSIF ( (v_edi_num2 = x_header_rec.edi_control_num_2) OR
3240                        (v_edi_num2 IS NULL AND x_header_rec.edi_control_num_2 IS NULL) ) THEN
3241                    --
3242                    IF ( v_edi_num3 > x_header_rec.edi_control_num_3 ) THEN
3243                        --
3244                        IF (l_debug <> -1) THEN
3245                            rlm_core_sv.dlog(C_DEBUG,'Higher EDI Control Number3');
3246                        END IF;
3247                        --
3248                        raise e_HighEdiProcessed;
3249                        --
3250                    ELSIF ( (v_edi_num3 = x_header_rec.edi_control_num_3) OR
3251                            (v_edi_num3 IS NULL AND x_header_rec.edi_control_num_3 IS NULL)  ) THEN
3252                        --
3253                        IF ( v_ref_num > x_header_rec.schedule_reference_num ) THEN
3254                            --
3255                            raise e_HighRefProcessed;
3256                            --
3257                        ELSIF ( v_ref_num = x_header_rec.schedule_reference_num ) THEN
3258                            --
3259                            OPEN c FOR
3260                                 SELECT DECODE(schedule_purpose, 'ADD', 1,
3261                                               'CONFIRMATION', 2, 'ORIGINAL', 3,'REPLACE', 4,
3262                                               'REPLACE_ALL', 5, 'CANCELLATION', 6,'CHANGE', 7, 'DELETE', 8)
3263                                 FROM   rlm_interface_headers
3264                                 WHERE  header_id = x_header_rec.header_id;
3265                            FETCH c into v_new_purpose;
3266                            CLOSE c;
3267                            --
3268                            IF (l_debug <> -1) THEN
3269                                rlm_core_sv.dlog(C_DEBUG,'v_purpose',v_purpose);
3270                                rlm_core_sv.dlog(C_DEBUG,'v_new_purpose',v_new_purpose);
3271                            END IF;
3272                            --
3273                            IF ( v_purpose > v_new_purpose ) THEN
3274                                --
3275                                raise e_HighPurProcessed;
3276                                --
3277                            ELSIF ( v_purpose = v_new_purpose ) THEN
3278                                --
3279                                IF ( v_creation_date > x_header_rec.creation_date ) THEN
3280                                    --
3281                                    raise e_HighCrDateProcessed;
3282                                    --
3283                                END IF;
3284                                --
3285                            END IF; /* Sch Purpose Check */
3286                            --
3287                        END IF; /* Sch Ref Num Check */
3288                        --
3289                    END IF; /* Edi Num3 Check */
3290                    --
3291                END IF; /*  Edi Num2 Check*/
3292                --
3293            END IF; /* Sch Gen Date Check */
3294            --
3295        --}
3296        END IF; /* v_Gen_Date Null Check */
3297        --  Bug 4995267: End
3298        --
3299     --}
3300     END IF;
3301     --
3302     IF (l_debug <> -1) THEN
3303        rlm_core_sv.dlog(C_DEBUG,'ValidScheduleSource valid');
3304     END IF;
3305     --
3306   ELSE
3307     --
3308     IF (l_debug <> -1) THEN
3309        rlm_core_sv.dlog(C_DEBUG,'ValidScheduleSource not required because of dep');
3310     END IF;
3311     --
3312   END IF;
3313   --
3314   IF (l_debug <> -1) THEN
3315      rlm_core_sv.dpop(C_SDEBUG);
3316   END IF;
3317   --
3318 EXCEPTION
3319   --
3320   WHEN e_SchSrcInv THEN
3321     --
3322     x_header_rec.process_status := rlm_core_sv.k_PS_ERROR;
3323     --
3324     rlm_message_sv.app_error(
3325                 x_ExceptionLevel => rlm_message_sv.k_error_level,
3326                 x_MessageName => 'RLM_SCHEDULE_SOURCE_INVALID',
3327                 x_InterfaceHeaderId => x_header_rec.header_id,
3328                 x_ValidationType => 'SCHEDULE_SOURCE');
3329     --
3330     IF (l_debug <> -1) THEN
3331        rlm_core_sv.dpop(C_SDEBUG, 'EXCEPTION: RLM_SCHEDULE_SOURCE_INVALID');
3332     END IF;
3333     --
3334   -- Bug 4995267: Start
3335   WHEN e_HighGenDateProcessed THEN
3336     --
3337     IF (l_debug <> -1) THEN
3338         rlm_core_sv.dlog(C_DEBUG,'Schedule with Higher Schedule Generation Date already processed');
3339     END IF;
3340     --
3341     x_header_rec.process_status := rlm_core_sv.k_PS_ERROR;
3342     rlm_message_sv.app_error(
3343                      x_ExceptionLevel => rlm_message_sv.k_error_level,
3344                      x_MessageName => 'RLM_HIGH_GEN_DATE_PROCESSED',
3345                      x_InterfaceHeaderId => x_header_rec.header_id,
3346                      x_token1=> 'REF_NUM',
3347                      x_value1=> v_ref_num,
3348                      x_token2=> 'STATUS',
3349                      x_value2=> rlm_core_sv.get_proc_status_meaning(v_status),
3350                      x_token3=> 'ECE_TP_LOC_CD_EXT',
3351                      x_value3=> x_header_rec.ece_tp_location_code_ext,
3352                      x_token4=> 'ECE_TP_TRANS_CD',
3353                      x_value4=> x_header_rec.ece_tp_translator_code,
3354                      x_token5=> 'GEN_DATE',
3355                      x_value5=> to_char(v_gen_date,'DD-MON-YYYY HH24:MI:SS'),
3356 		     x_ValidationType => 'SCHEDULE_PURPOSE');
3357     --
3358     IF (l_debug <> -1) THEN
3359         rlm_core_sv.dpop(C_DEBUG,'EXCEPTION: RLM_HIGH_GEN_DATE_PROCESSED');
3360     END IF;
3361     --
3362   WHEN e_HighEdiProcessed THEN
3363     --
3364     IF (l_debug <> -1) THEN
3365         rlm_core_sv.dlog(C_DEBUG,'Schedule with Higher EDI control num already processed');
3366     END IF;
3367     --
3368     x_header_rec.process_status := rlm_core_sv.k_PS_ERROR;
3369     rlm_message_sv.app_error(
3370                      x_ExceptionLevel => rlm_message_sv.k_error_level,
3371                      x_MessageName => 'RLM_HIGH_EDI_PROCESSED',
3372                      x_InterfaceHeaderId => x_header_rec.header_id,
3373                      x_token1=> 'REF_NUM',
3374                      x_value1=> v_ref_num,
3375                      x_token2=> 'STATUS',
3376                      x_value2=> rlm_core_sv.get_proc_status_meaning(v_status),
3377                      x_token3=> 'ECE_TP_LOC_CD_EXT',
3378                      x_value3=> x_header_rec.ece_tp_location_code_ext,
3379                      x_token4=> 'ECE_TP_TRANS_CD',
3380                      x_value4=> x_header_rec.ece_tp_translator_code,
3381                      x_token5=> 'GEN_DATE',
3382                      x_value5=> to_char(v_gen_date,'DD-MON-YYYY HH24:MI:SS'),
3383                      x_token6=> 'EDI_NUM',
3384                      x_value6=> v_edi_num2 || '-' || v_edi_num3,
3385                      x_ValidationType => 'SCHEDULE_PURPOSE');
3386     --
3387     IF (l_debug <> -1) THEN
3388         rlm_core_sv.dpop(C_DEBUG,'EXCEPTION: RLM_HIGH_EDI_PROCESSED');
3389     END IF;
3390     --
3391   WHEN e_HighRefProcessed THEN
3392     --
3393     --
3394     IF (l_debug <> -1) THEN
3395         rlm_core_sv.dlog(C_DEBUG,'Schedule with Higher Schedule Reference num already processed');
3396     END IF;
3397     --
3398     x_header_rec.process_status := rlm_core_sv.k_PS_ERROR;
3399     rlm_message_sv.app_error(
3400                      x_ExceptionLevel => rlm_message_sv.k_error_level,
3401                      x_MessageName => 'RLM_HIGH_REF_PROCESSED',
3402                      x_InterfaceHeaderId => x_header_rec.header_id,
3403                      x_token1=> 'REF_NUM',
3404                      x_value1=> v_ref_num,
3405                      x_token2=> 'STATUS',
3406                      x_value2=> rlm_core_sv.get_proc_status_meaning(v_status),
3407                      x_token3=> 'ECE_TP_LOC_CD_EXT',
3408                      x_value3=> x_header_rec.ece_tp_location_code_ext,
3409                      x_token4=> 'ECE_TP_TRANS_CD',
3410                      x_value4=> x_header_rec.ece_tp_translator_code,
3411                      x_token5=> 'GEN_DATE',
3412                      x_value5=> to_char(v_gen_date,'DD-MON-YYYY HH24:MI:SS'),
3413                      x_token6=> 'EDI_NUM',
3414                      x_value6=> v_edi_num2 || '-' || v_edi_num3,
3415                      x_ValidationType => 'SCHEDULE_PURPOSE');
3416     --
3417     IF (l_debug <> -1) THEN
3418         rlm_core_sv.dpop(C_DEBUG,'EXCEPTION: RLM_HIGH_REF_PROCESSED');
3419     END IF;
3420     --
3421     --
3422   WHEN e_HighPurProcessed THEN
3423     --
3424     IF (l_debug <> -1) THEN
3425         rlm_core_sv.dlog(C_DEBUG,'Schedule with Higher Schedule Purpose Code already processed');
3426     END IF;
3427     --
3428     x_header_rec.process_status := rlm_core_sv.k_PS_ERROR;
3429     rlm_message_sv.app_error(
3430                      x_ExceptionLevel => rlm_message_sv.k_error_level,
3431                      x_MessageName => 'RLM_HIGH_PUR_PROCESSED',
3432                      x_InterfaceHeaderId => x_header_rec.header_id,
3433                      x_token1=> 'REF_NUM',
3434                      x_value1=> v_ref_num,
3435                      x_token2=> 'STATUS',
3436                      x_value2=> rlm_core_sv.get_proc_status_meaning(v_status),
3437                      x_token3=> 'ECE_TP_LOC_CD_EXT',
3438                      x_value3=> x_header_rec.ece_tp_location_code_ext,
3439                      x_token4=> 'ECE_TP_TRANS_CD',
3440                      x_value4=> x_header_rec.ece_tp_translator_code,
3441                      x_token5=> 'GEN_DATE',
3442                      x_value5=> to_char(v_gen_date,'DD-MON-YYYY HH24:MI:SS'),
3443                      x_token6=> 'EDI_NUM',
3444                      x_value6=> v_edi_num2 || '-' || v_edi_num3,
3445                      x_token7=> 'PURPOSE',
3446                      x_value7=> v_purpose_code,
3447                      x_ValidationType => 'SCHEDULE_PURPOSE');
3448     --
3449     IF (l_debug <> -1) THEN
3450         rlm_core_sv.dpop(C_DEBUG,'EXCEPTION: RLM_HIGH_PUR_PROCESSED');
3451     END IF;
3452     --
3453   WHEN e_HighCrDateProcessed THEN
3454     --
3455     IF (l_debug <> -1) THEN
3456         rlm_core_sv.dlog(C_DEBUG,'Schedule with HIGHER Creation Date already processed');
3457     END IF;
3458     --
3459     x_header_rec.process_status := rlm_core_sv.k_PS_ERROR;
3460     rlm_message_sv.app_error(
3461                      x_ExceptionLevel => rlm_message_sv.k_error_level,
3462                      x_MessageName => 'RLM_HIGH_CR_DATE_PROCESSED',
3463                      x_InterfaceHeaderId => x_header_rec.header_id,
3464                      x_token1=> 'REF_NUM',
3465                      x_value1=> v_ref_num,
3466                      x_token2=> 'STATUS',
3467                      x_value2=> rlm_core_sv.get_proc_status_meaning(v_status),
3468                      x_token3=> 'ECE_TP_LOC_CD_EXT',
3469                      x_value3=> x_header_rec.ece_tp_location_code_ext,
3470                      x_token4=> 'ECE_TP_TRANS_CD',
3471                      x_value4=> x_header_rec.ece_tp_translator_code,
3472                      x_token5=> 'GEN_DATE',
3473                      x_value5=> to_char(v_gen_date,'DD-MON-YYYY HH24:MI:SS'),
3474                      x_token6=> 'EDI_NUM',
3475                      x_value6=> v_edi_num2 || '-' || v_edi_num3,
3476                      x_token7=> 'PURPOSE',
3477                      x_value7=> v_purpose_code,
3478                      x_token8=> 'CR_DATE',
3479                      x_value8=> to_char(v_creation_date,'DD-MON-YYYY HH24:MI:SS'),
3480                      x_ValidationType => 'SCHEDULE_PURPOSE');
3481     --
3482     IF (l_debug <> -1) THEN
3483         rlm_core_sv.dpop(C_DEBUG,'EXCEPTION: RLM_HIGH_CR_DATE_PROCESSED');
3484     END IF;
3485     --
3486   -- Bug 4995267: End
3487   WHEN OTHERS THEN
3488     --
3489     x_header_rec.process_status := rlm_core_sv.k_PS_ERROR;
3490     rlm_message_sv.sql_error('rlm_validatedemand_sv.ValidScheduleSource',
3491                                   v_Progress);
3492     --
3493     IF (l_debug <> -1) THEN
3494        rlm_core_sv.dpop(C_SDEBUG,'EXCEPTION: '||SUBSTR(SQLERRM,1,200));
3495     END IF;
3496     --
3497     raise;
3498     --
3499 END ValidScheduleSource;
3500 
3501 /*===========================================================================
3502 
3503 	PROCEDURE NAME:  ValidHorizonDates
3504 
3505 ===========================================================================*/
3506 PROCEDURE ValidHorizonDates(x_header_rec  IN OUT NOCOPY RLM_INTERFACE_HEADERS%ROWTYPE)
3507 IS
3508   --
3509   v_progress     VARCHAR2(3) := '010';
3510   e_horizon_dates_invalid EXCEPTION;
3511   --
3512 BEGIN
3513   --
3514   IF (l_debug <> -1) THEN
3515      rlm_core_sv.dpush(C_SDEBUG,'ValidHorizonDates');
3516   END IF;
3517   --
3518   IF RLM_MESSAGE_SV.CHECK_DEPENDENCY('HORIZON_DATES') THEN
3519     --
3520     IF (l_debug <> -1) THEN
3521        rlm_core_sv.dlog(C_DEBUG,'SCHED_HORIZON_START_DATE',
3522                               x_header_rec.SCHED_HORIZON_START_DATE);
3523        rlm_core_sv.dlog(C_DEBUG,'SCHED_HORIZON_END_DATE',
3524                               x_header_rec.SCHED_HORIZON_END_DATE);
3525     END IF;
3526     --
3527     IF (x_header_rec.SCHED_HORIZON_START_DATE >
3528                 x_header_rec.SCHED_HORIZON_END_DATE) THEN
3529        --
3530        raise e_horizon_dates_invalid;
3531        --
3532     END IF;
3533     --
3534     IF (l_debug <> -1) THEN
3535        rlm_core_sv.dlog(C_DEBUG,'ValidHorizonDates valid');
3536     END IF;
3537     --
3538   END IF;
3539   --
3540   IF (l_debug <> -1) THEN
3541      rlm_core_sv.dpop(C_SDEBUG);
3542   END IF;
3543   --
3544 EXCEPTION
3545   --
3546   WHEN e_horizon_dates_invalid THEN
3547     --
3548      x_header_rec.process_status := rlm_core_sv.k_PS_ERROR;
3549      rlm_message_sv.app_error(
3550                 x_ExceptionLevel => rlm_message_sv.k_error_level,
3551                 x_MessageName => 'RLM_HORIZON_DATES_INVALID',
3552                 x_InterfaceHeaderId => x_header_rec.header_id,
3553                 x_token1=>'SCHED_HORIZON_START_DATE',
3554                 x_value1=>x_header_rec.sched_horizon_start_date,
3555                 x_token2=>'SCHED_HORIZON_END_DATE',
3556                 x_value2=>x_header_rec.sched_horizon_end_date,
3557                 x_ValidationType => 'HORIZON_DATES');
3558     --
3559     IF (l_debug <> -1) THEN
3560        rlm_core_sv.dpop(C_SDEBUG, 'EXCEPTION: RLM_HORIZON_DATES_INVALID');
3561     END IF;
3562     --
3563   WHEN OTHERS THEN
3564     --
3565     x_header_rec.process_status := rlm_core_sv.k_PS_ERROR;
3566     rlm_message_sv.sql_error('rlm_validatedemand_sv.ValidHorizonDates',
3567                                v_Progress);
3568     --
3569     IF (l_debug <> -1) THEN
3570        rlm_core_sv.dpop(C_SDEBUG,'EXCEPTION: '||SUBSTR(SQLERRM,1,200));
3571     END IF;
3572     --
3573     raise;
3574     --
3575 END ValidHorizonDates;
3576 
3577 /*===========================================================================
3578 
3579 	PROCEDURE NAME:  ValidScheduleReferenceNum
3580 
3581 ===========================================================================*/
3582 PROCEDURE ValidScheduleReferenceNum(x_header_rec  IN OUT NOCOPY RLM_INTERFACE_HEADERS%ROWTYPE)
3583 IS
3584   --
3585   v_progress     VARCHAR2(3) := '010';
3586   e_SchRefInv EXCEPTION;
3587   --
3588 BEGIN
3589   --
3590   IF (l_debug <> -1) THEN
3591      rlm_core_sv.dpush(C_SDEBUG,'ValidScheduleReferenceNum');
3592   END IF;
3593   --
3594   IF RLM_MESSAGE_SV.CHECK_DEPENDENCY('SCHEDULE_REF_NUM') THEN
3595     --
3596     IF (l_debug <> -1) THEN
3597        rlm_core_sv.dlog(C_DEBUG,'schedule_reference_num',
3598                            x_header_rec.schedule_reference_num);
3599     END IF;
3600     --
3601     IF x_header_rec.schedule_reference_num IS NULL THEN
3602        --
3603        RAISE e_SchRefInv;
3604        --
3605     END IF;
3606     --
3607   END IF;
3608   --
3609   IF (l_debug <> -1) THEN
3610      rlm_core_sv.dpop(C_SDEBUG);
3611   END IF;
3612   --
3613 EXCEPTION
3614   --
3615   WHEN e_SchRefInv THEN
3616     --
3617     x_header_rec.process_status := rlm_core_sv.k_PS_ERROR;
3618     rlm_message_sv.app_error(
3619                 x_ExceptionLevel => rlm_message_sv.k_error_level,
3620                 x_MessageName => 'RLM_SCHEDULE_REFERENCE_MISS',
3621                 x_InterfaceHeaderId => x_header_rec.header_id,
3622                 x_ValidationType => 'SCHEDULE_REF_NUM');
3623     --
3624     IF (l_debug <> -1) THEN
3625        rlm_core_sv.dpop(C_SDEBUG, 'EXCEPTION: RLM_SCHEDULE_REFERENCE_MISS');
3626     END IF;
3627     --
3628   WHEN OTHERS THEN
3629     --
3630     x_header_rec.process_status := rlm_core_sv.k_PS_ERROR;
3631     rlm_message_sv.sql_error('rlm_validatedemand_sv.ValidScheduleReferenceNum',
3632                                v_Progress);
3633     --
3634     IF (l_debug <> -1) THEN
3635        rlm_core_sv.dpop(C_SDEBUG,'EXCEPTION: '||SUBSTR(SQLERRM,1,200));
3636     END IF;
3637     --
3638     raise;
3639     --
3640 END ValidScheduleReferenceNum;
3641 
3642 /*===========================================================================
3643 
3644 	PROCEDURE NAME:  ValidScheduleType
3645 
3646 ===========================================================================*/
3647 PROCEDURE ValidScheduleType(x_header_rec  IN OUT NOCOPY RLM_INTERFACE_HEADERS%ROWTYPE)
3648 IS
3649   --
3650   v_progress     VARCHAR2(3) := '010';
3651   e_SchTypeInv   EXCEPTION;
3652   --
3653 BEGIN
3654   --
3655   IF (l_debug <> -1) THEN
3656      rlm_core_sv.dpush(C_SDEBUG,'ValidScheduleType');
3657   END IF;
3658   --
3659   IF RLM_MESSAGE_SV.CHECK_DEPENDENCY('SCHEDULE_TYPE') THEN
3660     --
3661     IF (l_debug <> -1) THEN
3662        rlm_core_sv.dlog(C_DEBUG,'ScheduleType',x_header_rec.schedule_type);
3663     END IF;
3664     --
3665     IF NOT (RLM_TPA_SV.ValidLookup('RLM_SCHEDULE_TYPE',
3666                         x_header_rec.schedule_type,
3667                         x_header_rec.sched_generation_date)) THEN
3668        --
3669        RAISE e_SchTypeInv;
3670        --
3671     END IF;
3672     --
3673   END IF;
3674   --
3675   IF (l_debug <> -1) THEN
3676      rlm_core_sv.dpop(C_SDEBUG);
3677   END IF;
3678   --
3679 EXCEPTION
3680   --
3681   WHEN e_SchTypeInv THEN
3682     --
3683     x_header_rec.process_status := rlm_core_sv.k_PS_ERROR;
3684     rlm_message_sv.app_error(
3685                 x_ExceptionLevel => rlm_message_sv.k_error_level,
3686                 x_MessageName => 'RLM_SCHEDULE_TYPE_INVALID',
3687                 x_InterfaceHeaderId => x_header_rec.header_id,
3688                 x_token1=>'SCHEDULE_TYPE',
3689                 x_value1=>x_header_rec.schedule_type,
3690                 x_token2=>'SCHED_GENERATION_DATE',
3691                 x_value2=>x_header_rec.sched_generation_date,
3692                 x_ValidationType => 'SCHEDULE_TYPE');
3693     --
3694     IF (l_debug <> -1) THEN
3695        rlm_core_sv.dpop(C_SDEBUG, 'EXCEPTION: RLM_SCHEDULE_TYPE_INVALID');
3696     END IF;
3697     --
3698   WHEN OTHERS THEN
3699     --
3700     x_header_rec.process_status := rlm_core_sv.k_PS_ERROR;
3701     rlm_message_sv.sql_error('rlm_validatedemand_sv.ValidScheduleType: ',
3702                                 v_Progress);
3703     --
3704     IF (l_debug <> -1) THEN
3705        rlm_core_sv.dpop(C_SDEBUG,'EXCEPTION: '||SUBSTR(SQLERRM,1,200));
3706     END IF;
3707     --
3708     raise;
3709     --
3710 END ValidScheduleType;
3711 
3712 /*===========================================================================
3713 
3714 	PROCEDURE NAME:  ValidLookup
3715 
3716 ===========================================================================*/
3717 FUNCTION ValidLookup(p_lookup_type IN VARCHAR2,
3718                        p_lookup_code IN VARCHAR2,
3719                        p_date IN DATE)
3720 RETURN BOOLEAN
3721 IS
3722   --
3723   v_progress     VARCHAR2(3) := '010';
3724   --
3725   CURSOR c
3726   IS SELECT 1
3727   FROM fnd_lookups
3728   WHERE lookup_type = p_lookup_type
3729   AND   lookup_code = p_lookup_code
3730   AND   p_date between nvl(start_date_active,to_date('01/01/1900','dd/mm/yyyy'))
3731         AND   nvl(end_date_active, to_date('31/12/4712','dd/mm/yyyy'));
3732   --
3733   v_dummy VARCHAR2(1);
3734   --
3735 BEGIN
3736  --
3737  IF (l_debug <> -1) THEN
3738     rlm_core_sv.dpush(C_SDEBUG,'ValidLookup');
3739     rlm_core_sv.dlog(C_DEBUG,'Lookup type ' || p_lookup_type );
3740     rlm_core_sv.dlog(C_DEBUG,'Lookup code ' || p_lookup_code );
3741     rlm_core_sv.dlog(C_DEBUG,'date  ' || p_date );
3742  END IF;
3743  --
3744  OPEN c;
3745  --
3746  FETCH c INTO v_dummy ;
3747  --
3748  v_progress  := '020';
3749  --
3750  IF c%NOTFOUND THEN
3751     --
3752     v_progress  := '030';
3753     --
3754     IF (l_debug <> -1) THEN
3755        rlm_core_sv.dlog(C_DEBUG,'Lookup ' || p_lookup_code || ' not valid');
3756        rlm_core_sv.dpop(C_SDEBUG);
3757     END IF;
3758     --
3759     RETURN FALSE;
3760     --
3761  END IF;
3762  --
3763  CLOSE c;
3764  --
3765  v_progress  := '040';
3766  --
3767  IF (l_debug <> -1) THEN
3768     rlm_core_sv.dpop(C_SDEBUG);
3769  END IF;
3770  --
3771  RETURN TRUE;
3772  --
3773 EXCEPTION
3774   --
3775   WHEN OTHERS THEN
3776     --
3777     rlm_message_sv.sql_error('rlm_validatedemand_sv.ValidLookup: ',v_Progress);
3778     --
3779     IF (l_debug <> -1) THEN
3780        rlm_core_sv.dpop(C_SDEBUG,'EXCEPTION: '||SUBSTR(SQLERRM,1,200));
3781     END IF;
3782     --
3783     raise;
3784     --
3785 END ValidLookup;
3786 
3787 /*===========================================================================
3788 
3789 	PROCEDURE NAME:  ValidSchedulePurpose
3790 
3791 ===========================================================================*/
3792 PROCEDURE ValidSchedulePurpose(x_header_rec IN OUT NOCOPY RLM_INTERFACE_HEADERS%ROWTYPE)
3793 IS
3794   --
3795   v_progress      VARCHAR2(3) := '010';
3796   e_SchPurposeInv EXCEPTION;
3797   v_sch_pur       NUMBER;
3798   v_edi_count     NUMBER;
3799   v_sched_ref     VARCHAR2(35);
3800   TYPE c_typ IS REF CURSOR;
3801   c c_typ;
3802   --
3803   --   Bug 4995267:
3804   v_edi_num2             VARCHAR2(15);
3805   v_edi_num3             VARCHAR2(15);
3806   v_ref_num              VARCHAR2(35);
3807   v_status               NUMBER;
3808   v_purpose              NUMBER;
3809   v_new_purpose          NUMBER;
3810   v_purpose_code         VARCHAR2(30);
3811   v_gen_date             DATE;
3812   v_creation_date        DATE;
3813   e_LowGenDatePending    EXCEPTION;
3814   e_LowEdiPending        EXCEPTION;
3815   e_LowRefPending        EXCEPTION;
3816   e_LowPurPending        EXCEPTION;
3817   e_LowCrDatePending     EXCEPTION;
3818   --
3819   CURSOR c_pending_stype IS
3820     SELECT   sched_generation_date,
3821              edi_control_num_2,
3822              edi_control_num_3,
3823              schedule_reference_num,
3824              process_status,
3825              schedule_purpose,
3826              DECODE(schedule_purpose, 'ADD', 1, 'CONFIRMATION', 2, 'ORIGINAL', 3, 'REPLACE', 4,
3827                                       'REPLACE_ALL', 5, 'CANCELLATION', 6, 'CHANGE', 7, 'DELETE', 8),
3828              creation_date
3829     FROM     rlm_interface_headers
3830     WHERE    ece_tp_translator_code   = x_header_rec.ece_tp_translator_code
3831     AND      ece_tp_location_code_ext = x_header_rec.ece_tp_location_code_ext
3832     AND      schedule_type            = x_header_rec.schedule_type
3833     AND      header_id                <> x_header_rec.header_id
3834     AND      schedule_source          <> 'MANUAL'
3835     ORDER BY sched_generation_date,
3836              edi_control_num_2,
3837              edi_control_num_3,
3838              schedule_reference_num ,
3839              DECODE(schedule_purpose, 'ADD', 1, 'CONFIRMATION', 2, 'ORIGINAL', 3,
3840                     'REPLACE', 4, 'REPLACE_ALL', 5, 'CANCELLATION', 6, 'CHANGE', 7, 'DELETE', 8),
3841              creation_date;
3842   --   Bug 4995267:
3843   --
3844 BEGIN
3845   --
3846   IF (l_debug <> -1) THEN
3847      rlm_core_sv.dpush(C_SDEBUG,'ValidSchedulePurpose');
3848   END IF;
3849   --
3850   IF RLM_MESSAGE_SV.CHECK_DEPENDENCY('SCHEDULE_PURPOSE') THEN
3851     --
3852     IF (l_debug <> -1) THEN
3853        rlm_core_sv.dlog(C_DEBUG,'x_header_rec.schedule_purpose',
3854                                 x_header_rec.schedule_purpose);
3855        rlm_core_sv.dlog(C_DEBUG,'x_header_rec.ece_tp_translator_code',
3856                                 x_header_rec.ece_tp_translator_code );
3857        rlm_core_sv.dlog(C_DEBUG,'x_header_rec.ece_tp_location_code_ext',
3858                                 x_header_rec.ece_tp_location_code_ext );
3859        rlm_core_sv.dlog(C_DEBUG,'x_header_rec.schedule_purpose',
3860                                 x_header_rec.schedule_purpose );
3861     END IF;
3862     --
3863     IF NOT (RLM_TPA_SV.ValidLookup('RLM_SCHEDULE_PURPOSE',
3864                          x_header_rec.schedule_purpose,
3865                          x_header_rec.sched_generation_date)) THEN
3866        --
3867        RAISE e_SchPurposeInv;
3868        --
3869     ELSIF (x_header_rec.edi_control_num_2 IS NULL AND
3870            x_header_rec.edi_control_num_3 IS NULL ) THEN
3871           --
3872        IF x_header_rec.schedule_purpose IN (k_CANCEL, k_CHANGE, k_DELETE)THEN
3873            --
3874            SELECT count(*)
3875            INTO v_sch_pur
3876            FROM rlm_interface_headers
3877            WHERE ece_tp_translator_code = x_header_rec.ece_tp_translator_code
3878            AND ece_tp_location_code_ext=x_header_rec.ece_tp_location_code_ext
3879            AND schedule_type=x_header_rec.schedule_type
3880            AND sched_generation_date = x_header_rec.sched_generation_date
3881            AND schedule_reference_num = x_header_rec.schedule_reference_num
3882            AND schedule_purpose IN (
3883                DECODE (x_header_rec.schedule_purpose, k_CANCEL, k_DELETE,
3884                        k_DELETE, k_CANCEL, k_CHANGE, k_DELETE),
3885                DECODE (x_header_rec.schedule_purpose, k_CANCEL,
3886                        k_CHANGE, k_DELETE, k_CHANGE, k_CHANGE, k_CANCEL),
3887                k_ORIGINAL, k_REPLACE, k_REPLACE_ALL, k_ADD);
3888    	   --
3889            IF (l_debug <> -1) THEN
3890               rlm_core_sv.dlog(C_DEBUG,'v_sch_pur', v_sch_pur);
3891            END IF;
3892            --
3893            IF (v_sch_pur > 0  ) THEN
3894                --
3895   	       IF (l_debug <> -1) THEN
3896                   rlm_core_sv.dlog(C_DEBUG,'Null EDI control values and purpose in
3897                                          CANCEL, CHANGE, DELETE');
3898                END IF;
3899 	       --
3900                x_header_rec.process_status := rlm_core_sv.k_PS_ERROR;
3901                rlm_message_sv.app_error(
3902                            x_ExceptionLevel => rlm_message_sv.k_error_level,
3903                            x_MessageName => 'RLM_PUR_PROCESSING_ORDER_V',
3904                            x_InterfaceHeaderId => x_header_rec.header_id,
3905                            x_token1=>'SCHEDULE_REF_NUM',
3906                            x_value1=>x_header_rec.schedule_reference_num,
3907                            x_token2=>'ECE_TP_TRANS_CD',
3908                            x_value2=>x_header_rec.ece_tp_translator_code,
3909                            x_token3=>'ECE_TP_LOC_CD_EXT',
3910                            x_value3=>x_header_rec.ece_tp_location_code_ext,
3911                            x_token4=>'SCHED_GENERATION_DATE',
3912                            x_value4=>x_header_rec.sched_generation_date,
3913                            x_ValidationType => 'SCHEDULE_PURPOSE');
3914 		--
3915   		IF (l_debug <> -1) THEN
3916                    rlm_core_sv.dlog(C_DEBUG,'EXCEPTION: PURPOSE ORDER VIOLATION');
3917                 END IF;
3918                 --
3919            END IF;
3920           --
3921        END IF;
3922        --
3923     ELSE -- When x_header_rec.edi_control_num_2 IS NOT NULL OR x_header_rec.edi_control_num_3 IS NOT NULL
3924     --{
3925          /* Bug 4995267: First query rlm_interface_headers table for schedules, irrespective of their
3926                          process_status and start comparing each attribute (one-by-one) as indicated
3927                          in the ORDER BY clause (RLMDPWPB).  If at any point of attribute comparison,
3928                          we find a schedule whose attributes are less than the one currently being
3929                          processed, DSP should stop indicating that the processing is out of order. */
3930        --
3931        IF (x_header_rec.schedule_source <> 'MANUAL' ) THEN
3932            --
3933            IF (l_debug <> -1) THEN
3934                --
3935                rlm_core_sv.dlog(C_DEBUG,'----- Checking the schedules in the interface tables -----');
3936                rlm_core_sv.dlog(C_DEBUG,'RLM_DP_SV.g_order_by_schedule_type', RLM_DP_SV.g_order_by_schedule_type);
3937                --
3938            END IF;
3939            --
3940            --
3941            OPEN  c_pending_stype;
3942            FETCH c_pending_stype INTO v_Gen_Date, v_edi_num2, v_edi_num3, v_ref_num, v_status, v_purpose_code, v_purpose, v_creation_date;
3943            CLOSE c_pending_stype;
3944            --
3945            --
3946            IF (l_debug <> -1) THEN
3947                rlm_core_sv.dlog(C_DEBUG,'--- Interface schedule info ---');
3948                rlm_core_sv.dlog(C_DEBUG,'v_gen_date',
3949                                          to_char(v_gen_date,'DD-MON-YYYY HH24:MI:SS'));
3950                rlm_core_sv.dlog(C_DEBUG,'v_edi_num2',v_edi_num2);
3951                rlm_core_sv.dlog(C_DEBUG,'v_edi_num3',v_edi_num3);
3952                rlm_core_sv.dlog(C_DEBUG,'v_ref_num',v_ref_num);
3953                rlm_core_sv.dlog(C_DEBUG,'v_purpose_code',v_purpose_code);
3954                rlm_core_sv.dlog(C_DEBUG,'v_creation_date',
3955                                          to_char(v_creation_date,'DD-MON-YYYY HH24:MI:SS'));
3956                rlm_core_sv.dlog(C_DEBUG,'--- Incoming schedule info ---');
3957                rlm_core_sv.dlog(C_DEBUG,'x_header_rec.sched_generation_date',
3958                                          to_char(x_header_rec.sched_generation_date,'DD-MON-YYYY HH24:MI:SS'));
3959                rlm_core_sv.dlog(C_DEBUG,'x_header_rec.edi_control_num_2', x_header_rec.edi_control_num_2);
3960                rlm_core_sv.dlog(C_DEBUG,'x_header_rec.edi_control_num_3', x_header_rec.edi_control_num_3);
3961                rlm_core_sv.dlog(C_DEBUG,'x_header_rec.schedule_reference_num', x_header_rec.schedule_reference_num);
3962                rlm_core_sv.dlog(C_DEBUG,'x_header_rec.schedule_purpose', x_header_rec.schedule_purpose);
3963                rlm_core_sv.dlog(C_DEBUG,'x_header_rec.x_header_rec.creation_date',
3964                                          to_char(x_header_rec.creation_date,'DD-MON-YYYY HH24:MI:SS'));
3965            END IF;
3966            --
3967            IF ( v_gen_date IS NOT NULL) THEN
3968                --
3969                IF (v_gen_date < x_header_rec.sched_generation_date) THEN
3970                    --
3971                    raise e_LowGenDatePending;
3972                    --
3973                ELSIF ( v_gen_date = x_header_rec.sched_generation_date ) THEN
3974                    --
3975                    IF ( v_edi_num2 < x_header_rec.edi_control_num_2 ) THEN
3976                        --
3977                        IF (l_debug <> -1) THEN
3978                            rlm_core_sv.dlog(C_DEBUG,'Lower EDI Control Number2');
3979                        END IF;
3980                        --
3981                        raise e_LowEdiPending;
3982                        --
3983                    ELSIF ( (v_edi_num2 = x_header_rec.edi_control_num_2) OR
3984                            (v_edi_num2 IS NULL AND x_header_rec.edi_control_num_2 IS NULL) ) THEN
3985                        --
3986                        IF ( v_edi_num3 < x_header_rec.edi_control_num_3 ) THEN
3987                            --
3988                            IF (l_debug <> -1) THEN
3989                                rlm_core_sv.dlog(C_DEBUG,'Lower EDI Control Number3');
3990                            END IF;
3991                            --
3992                            raise e_LowEdiPending;
3993                            --
3994                        ELSIF ( (v_edi_num3 = x_header_rec.edi_control_num_3) OR
3995                                (v_edi_num3 IS NULL AND x_header_rec.edi_control_num_3 IS NULL) ) THEN
3996                            --
3997                            IF ( v_ref_num < x_header_rec.schedule_reference_num ) THEN
3998                                --
3999                                raise e_LowRefPending;
4000                                --
4001                            ELSIF ( v_ref_num = x_header_rec.schedule_reference_num ) THEN
4002                                --
4003                                OPEN c FOR
4004                                     SELECT DECODE(schedule_purpose, 'ADD',1,
4005                                                   'CONFIRMATION', 2, 'ORIGINAL', 3,'REPLACE', 4,
4006                                                    'REPLACE_ALL', 5, 'CANCELLATION', 6,'CHANGE', 7, 'DELETE', 8)
4007                                     FROM   rlm_interface_headers
4008                                     WHERE  header_id = x_header_rec.header_id;
4009                                FETCH c into v_new_purpose;
4010                                CLOSE c;
4011                                --
4012                                IF (l_debug <> -1) THEN
4013                                    rlm_core_sv.dlog(C_DEBUG,'v_purpose',v_purpose);
4014                                    rlm_core_sv.dlog(C_DEBUG,'v_new_purpose',v_new_purpose);
4015                                END IF;
4016                                --
4017                                IF ( v_purpose < v_new_purpose ) THEN
4018                                    --
4019                                    raise e_LowPurPending;
4020                                    --
4021                                ELSIF ( v_purpose = v_new_purpose ) THEN
4022                                    --
4023                                    IF ( v_creation_date < x_header_rec.creation_date ) THEN
4024                                        --
4025                                        raise e_LowCrDatePending;
4026                                        --
4027                                    END IF;
4028                                    --
4029                                END IF; /* Sch Purpose Check */
4030                                --
4031                            END IF; /* Sch Ref Num Check */
4032                            --
4033                        END IF; /* Edi Num3 Check */
4034                        --
4035                    END IF; /* Edi Num2 Check */
4036                    --
4037                END IF; /* Sch Gen Date Check */
4038                --
4039            END IF; /* v_Gen_Date Null Check */
4040            --
4041        END IF; /* Manual check */
4042        --
4043     --}
4044     END IF;
4045     --
4046   END IF;
4047   --
4048   IF (l_debug <> -1) THEN
4049      rlm_core_sv.dpop(C_SDEBUG);
4050   END IF;
4051   --
4052 EXCEPTION
4053   --
4054   WHEN e_SchPurposeInv THEN
4055     --
4056     x_header_rec.process_status := rlm_core_sv.k_PS_ERROR;
4057     rlm_message_sv.app_error(
4058                 x_ExceptionLevel => rlm_message_sv.k_error_level,
4059                 x_MessageName => 'RLM_SCHEDULE_PURPOSE_INVALID',
4060                 x_InterfaceHeaderId => x_header_rec.header_id,
4061                 x_token1=>'SCHEDULE_PURPOSE',
4062                 x_value1=>x_header_rec.schedule_purpose,
4063                 x_token2=>'SCHED_GENERATION_DATE',
4064                 x_value2=>x_header_rec.sched_generation_date,
4065                 x_ValidationType => 'SCHEDULE_PURPOSE');
4066     --
4067     IF (l_debug <> -1) THEN
4068         rlm_core_sv.dpop(C_SDEBUG, 'EXCEPTION: RLM_SCHEDULE_PURPOSE_INVALID');
4069      END IF;
4070     --
4071   -- Bug 4995267: Start
4072   WHEN e_LowGenDatePending THEN
4073     --
4074     IF (l_debug <> -1) THEN
4075         rlm_core_sv.dlog(C_DEBUG,'Schedule with lower Schedule Generation Date is not yet processed');
4076     END IF;
4077     --
4078     x_header_rec.process_status := rlm_core_sv.k_PS_ERROR;
4079     rlm_message_sv.app_error(
4080                      x_ExceptionLevel => rlm_message_sv.k_error_level,
4081                      x_MessageName => 'RLM_LOW_GEN_DATE_PENDING',
4082                      x_InterfaceHeaderId => x_header_rec.header_id,
4083                      x_token1=> 'REF_NUM',
4084                      x_value1=> v_ref_num,
4085                      x_token2=> 'STATUS',
4086                      x_value2=> rlm_core_sv.get_proc_status_meaning(v_status),
4087                      x_token3=> 'ECE_TP_LOC_CD_EXT',
4088                      x_value3=> x_header_rec.ece_tp_location_code_ext,
4089                      x_token4=> 'ECE_TP_TRANS_CD',
4090                      x_value4=> x_header_rec.ece_tp_translator_code,
4091                      x_token5=> 'GEN_DATE',
4092                      x_value5=> to_char(v_gen_date,'DD-MON-YYYY HH24:MI:SS'),
4093                      x_ValidationType => 'SCHEDULE_PURPOSE');
4094     --
4095     IF (l_debug <> -1) THEN
4096         rlm_core_sv.dpop(C_DEBUG,'EXCEPTION: RLM_LOW_GEN_DATE_PENDING');
4097     END IF;
4098     --
4099   WHEN e_LowEdiPending THEN
4100     --
4101     IF (l_debug <> -1) THEN
4102         rlm_core_sv.dlog(C_DEBUG,'Schedule with lower EDI control num is not yet processed');
4103     END IF;
4104     --
4105     x_header_rec.process_status := rlm_core_sv.k_PS_ERROR;
4106     rlm_message_sv.app_error(
4107                      x_ExceptionLevel => rlm_message_sv.k_error_level,
4108                      x_MessageName => 'RLM_LOW_EDI_PENDING',
4109                      x_InterfaceHeaderId => x_header_rec.header_id,
4110                      x_token1=> 'REF_NUM',
4111                      x_value1=> v_ref_num,
4112                      x_token2=> 'STATUS',
4113                      x_value2=> rlm_core_sv.get_proc_status_meaning(v_status),
4114                      x_token3=> 'ECE_TP_LOC_CD_EXT',
4115                      x_value3=> x_header_rec.ece_tp_location_code_ext,
4116                      x_token4=> 'ECE_TP_TRANS_CD',
4117                      x_value4=> x_header_rec.ece_tp_translator_code,
4118                      x_token5=> 'GEN_DATE',
4119                      x_value5=> to_char(v_gen_date,'DD-MON-YYYY HH24:MI:SS'),
4120                      x_token6=> 'EDI_NUM',
4121                      x_value6=> v_edi_num2 || '-' || v_edi_num3,
4122                      x_ValidationType => 'SCHEDULE_PURPOSE');
4123     --
4124     IF (l_debug <> -1) THEN
4125         rlm_core_sv.dpop(C_DEBUG,'EXCEPTION: RLM_LOW_EDI_PENDING');
4126     END IF;
4127     --
4128   WHEN e_LowRefPending THEN
4129     --
4130     --
4131     IF (l_debug <> -1) THEN
4132         rlm_core_sv.dlog(C_DEBUG,'Schedule with lower Schedule Reference num is not yet processed');
4133     END IF;
4134     --
4135     x_header_rec.process_status := rlm_core_sv.k_PS_ERROR;
4136     rlm_message_sv.app_error(
4137                      x_ExceptionLevel => rlm_message_sv.k_error_level,
4138                      x_MessageName => 'RLM_LOW_REF_PENDING',
4139                      x_InterfaceHeaderId => x_header_rec.header_id,
4140                      x_token1=> 'REF_NUM',
4141                      x_value1=> v_ref_num,
4142                      x_token2=> 'STATUS',
4143                      x_value2=> rlm_core_sv.get_proc_status_meaning(v_status),
4144                      x_token3=> 'ECE_TP_LOC_CD_EXT',
4145                      x_value3=> x_header_rec.ece_tp_location_code_ext,
4146                      x_token4=> 'ECE_TP_TRANS_CD',
4147                      x_value4=> x_header_rec.ece_tp_translator_code,
4148                      x_token5=> 'GEN_DATE',
4149                      x_value5=> to_char(v_gen_date,'DD-MON-YYYY HH24:MI:SS'),
4150                      x_token6=> 'EDI_NUM',
4151                      x_value6=> v_edi_num2 || '-' || v_edi_num3,
4152                      x_ValidationType => 'SCHEDULE_PURPOSE');
4153     --
4154     IF (l_debug <> -1) THEN
4155         rlm_core_sv.dpop(C_DEBUG,'EXCEPTION: RLM_LOW_REF_PENDING');
4156     END IF;
4157     --
4158   WHEN e_LowPurPending THEN
4159     --
4160     IF (l_debug <> -1) THEN
4161         rlm_core_sv.dlog(C_DEBUG,'Schedule with lower Schedule Purpose Code is not yet processed');
4162     END IF;
4163     --
4164     x_header_rec.process_status := rlm_core_sv.k_PS_ERROR;
4165     rlm_message_sv.app_error(
4166                      x_ExceptionLevel => rlm_message_sv.k_error_level,
4167                      x_MessageName => 'RLM_LOW_PUR_PENDING',
4168                      x_InterfaceHeaderId => x_header_rec.header_id,
4169                      x_token1=> 'REF_NUM',
4170                      x_value1=> v_ref_num,
4171                      x_token2=> 'STATUS',
4172                      x_value2=> rlm_core_sv.get_proc_status_meaning(v_status),
4173                      x_token3=> 'ECE_TP_LOC_CD_EXT',
4174                      x_value3=> x_header_rec.ece_tp_location_code_ext,
4175                      x_token4=> 'ECE_TP_TRANS_CD',
4176                      x_value4=> x_header_rec.ece_tp_translator_code,
4177                      x_token5=> 'GEN_DATE',
4178                      x_value5=> to_char(v_gen_date,'DD-MON-YYYY HH24:MI:SS'),
4179                      x_token6=> 'EDI_NUM',
4180                      x_value6=> v_edi_num2 || '-' || v_edi_num3,
4181                      x_token7=> 'PURPOSE',
4182                      x_value7=> v_purpose_code,
4183                      x_ValidationType => 'SCHEDULE_PURPOSE');
4184     --
4185     IF (l_debug <> -1) THEN
4186         rlm_core_sv.dpop(C_DEBUG,'EXCEPTION: RLM_LOW_PUR_PENDING');
4187     END IF;
4188     --
4189   WHEN e_LowCrDatePending THEN
4190     --
4191     IF (l_debug <> -1) THEN
4192         rlm_core_sv.dlog(C_DEBUG,'Schedule with lower Creation Date is not yet processed');
4193     END IF;
4194     --
4195     x_header_rec.process_status := rlm_core_sv.k_PS_ERROR;
4196     rlm_message_sv.app_error(
4197                      x_ExceptionLevel => rlm_message_sv.k_error_level,
4198                      x_MessageName => 'RLM_LOW_CR_DATE_PENDING',
4199                      x_InterfaceHeaderId => x_header_rec.header_id,
4200                      x_token1=> 'REF_NUM',
4201                      x_value1=> v_ref_num,
4202                      x_token2=> 'STATUS',
4203                      x_value2=> rlm_core_sv.get_proc_status_meaning(v_status),
4204                      x_token3=> 'ECE_TP_LOC_CD_EXT',
4205                      x_value3=> x_header_rec.ece_tp_location_code_ext,
4206                      x_token4=> 'ECE_TP_TRANS_CD',
4207                      x_value4=> x_header_rec.ece_tp_translator_code,
4208                      x_token5=> 'GEN_DATE',
4209                      x_value5=> to_char(v_gen_date,'DD-MON-YYYY HH24:MI:SS'),
4210                      x_token6=> 'EDI_NUM',
4211                      x_value6=> v_edi_num2 || '-' || v_edi_num3,
4212                      x_token7=> 'PURPOSE',
4213                      x_value7=> v_purpose_code,
4214                      x_token8=> 'CR_DATE',
4215                      x_value8=> to_char(v_creation_date,'DD-MON-YYYY HH24:MI:SS'),
4216                      x_ValidationType => 'SCHEDULE_PURPOSE');
4217     --
4218     IF (l_debug <> -1) THEN
4219         rlm_core_sv.dpop(C_DEBUG,'EXCEPTION: RLM_LOW_CR_DATE_PENDING');
4220     END IF;
4221     --
4222     -- Bug 4995267: End
4223   WHEN OTHERS THEN
4224     --
4225     x_header_rec.process_status := rlm_core_sv.k_PS_ERROR;
4226     rlm_message_sv.sql_error('rlm_validatedemand_sv.ValidSchedulePurpose: ',
4227                                 v_Progress);
4228     --
4229     IF (l_debug <> -1) THEN
4230        rlm_core_sv.dpop(C_SDEBUG,'EXCEPTION: '||SUBSTR(SQLERRM,1,200));
4231     END IF;
4232     --
4233     raise;
4234     --
4235 END ValidSchedulePurpose;
4236 
4237 /*===========================================================================
4238 
4239 	PROCEDURE NAME:  DeriveOrgDependentIDs
4240 
4241 ===========================================================================*/
4242 PROCEDURE DeriveOrgDependentIDs(
4243                    x_setup_terms_rec  IN RLM_SETUP_TERMS_SV.setup_terms_rec_typ,
4244                    x_header_rec IN RLM_INTERFACE_HEADERS%ROWTYPE,
4245                    x_lines_rec IN OUT NOCOPY RLM_INTERFACE_LINES%ROWTYPE)
4246 IS
4247   --
4248   v_progress     VARCHAR2(3) := '010';
4249   --
4250 BEGIN
4251   --
4252   IF (l_debug <> -1) THEN
4253      rlm_core_sv.dpush(C_SDEBUG,'DeriveOrgDependentIDs');
4254   END IF;
4255   --
4256   --undo performance changes for bug 6185706
4257   RLM_TPA_SV.DeriveInventoryItemId(x_header_rec, x_lines_rec);
4258   DerivePurchaseOrder(x_setup_terms_rec, x_header_rec, x_lines_rec);
4259   --derive_price_list; -- TODO
4260   --
4261   IF (l_debug <> -1) THEN
4262      rlm_core_sv.dpop(C_SDEBUG);
4263   END IF;
4264   --
4265 EXCEPTION
4266   --
4267   WHEN OTHERS THEN
4268     --
4269     x_lines_rec.process_status := rlm_core_sv.k_PS_ERROR;
4270     rlm_message_sv.sql_error('rlm_validatedemand_sv.DeriveOrgDependentIDs: ',
4271                                    v_Progress);
4272     --
4273     IF (l_debug <> -1) THEN
4274        rlm_core_sv.dpop(C_SDEBUG,'EXCEPTION: '||SUBSTR(SQLERRM,1,200));
4275     END IF;
4276     --
4277     raise;
4278     --
4279 END DeriveOrgDependentIDs;
4280 
4281 /*===========================================================================
4282 
4283 	PROCEDURE NAME:  DeriveIDs
4284 
4285 ===========================================================================*/
4286 PROCEDURE DeriveIDs( x_header_rec IN OUT NOCOPY RLM_INTERFACE_HEADERS%ROWTYPE,
4287                      x_lines_rec IN OUT NOCOPY RLM_INTERFACE_LINES%ROWTYPE)
4288 IS
4289 
4290   v_progress     VARCHAR2(3) := '010';
4291   v_bill_to_customer_id NUMBER default NULL;
4292 
4293   -- Need to change all the DeriveIDs to accept records
4294   --
4295 BEGIN
4296   --
4297   IF (l_debug <> -1) THEN
4298      rlm_core_sv.dpush(C_SDEBUG,'DeriveIDs');
4299   END IF;
4300   --
4301   DeriveCustomerID(x_header_rec,x_lines_rec) ;
4302   DeriveShipToID(x_header_rec, x_lines_rec);
4303   --DeriveBillToID(x_header_rec, x_lines_rec);
4304   --
4305   --rlm_core_sv.dlog(C_DEBUG,'BILLTOID', x_lines_rec.bill_to_address_id);
4306 
4307   --     validate the relationship of customer id of bill_to and ship_to
4308   --
4309   DeriveIntrmdShipToID(x_header_rec, x_lines_rec);
4310   RLM_TPA_SV.ValidateCustomerItem(x_header_rec, x_lines_rec);
4311   DeriveShipFromOrg(x_header_rec, x_lines_rec);
4312   --
4313   IF (l_debug <> -1) THEN
4314      rlm_core_sv.dpop(C_SDEBUG);
4315   END IF;
4316   --
4317 EXCEPTION
4318   --
4319   WHEN OTHERS THEN
4320     --
4321     x_lines_rec.process_status := rlm_core_sv.k_PS_ERROR;
4322     rlm_message_sv.sql_error('rlm_validatedemand_sv.DeriveIDs', v_Progress);
4323     --
4324     IF (l_debug <> -1) THEN
4325        rlm_core_sv.dpop(C_SDEBUG,'EXCEPTION: '||SUBSTR(SQLERRM,1,200));
4326     END IF;
4327     --
4328     raise;
4329     --
4330 END DeriveIDs;
4331 
4332 /*===========================================================================
4333 
4334 	PROCEDURE NAME:  DeriveInventoryItemId
4335 
4336 ===========================================================================*/
4337 PROCEDURE DeriveInventoryItemId(x_header_rec  IN RLM_INTERFACE_HEADERS%ROWTYPE,
4338           x_lines_rec IN OUT NOCOPY RLM_INTERFACE_LINES%ROWTYPE)
4339 IS
4340   --
4341   v_progress     VARCHAR2(3) := '010';
4342   v_CustomerId                  NUMBER;
4343   v_CustomerCategoryCode        VARCHAR2(30);
4344   v_AddressId                   NUMBER;
4345   v_CustomerItemNumber          VARCHAR2(50);
4346   v_BillCustomerItemId          NUMBER;
4347   v_BillInventoryItemId         NUMBER;
4348   v_ItemDefinitionLevel         VARCHAR2(1);
4349   v_CustomerItemDesc            VARCHAR2(240);
4350   v_ModelCustomerItemId         NUMBER;
4351   v_CommodityCodeId             NUMBER;
4352   v_MasterContainerItemId       NUMBER;
4353   v_ContainerItemOrgId          NUMBER;
4354   v_DetailContainerItemId       NUMBER;
4355   v_MinFillPercentage           NUMBER;
4356   v_DepPlanRequiredFlag         VARCHAR2(1);
4357   v_DepPlanPriorBldFlag         VARCHAR2(1);
4358   v_DemandTolerancePositive     NUMBER;
4359   v_DemandToleranceNegative     NUMBER;
4360   v_InventoryItemIdFromSup      NUMBER;
4361   v_InventoryItemIdFromSeg      NUMBER;
4362   v_AttributeCategory           VARCHAR2(30);
4363   v_Attribute1                  VARCHAR2(150);
4364   v_Attribute2                  VARCHAR2(150);
4365   v_Attribute3                  VARCHAR2(150);
4366   v_Attribute4                  VARCHAR2(150);
4367   v_Attribute5                  VARCHAR2(150);
4368   v_Attribute6                  VARCHAR2(150);
4369   v_Attribute7                  VARCHAR2(150);
4370   v_Attribute8                  VARCHAR2(150);
4371   v_Attribute9                  VARCHAR2(150);
4372   v_Attribute10                 VARCHAR2(150);
4373   v_Attribute11                 VARCHAR2(150);
4374   v_Attribute12                 VARCHAR2(150);
4375   v_Attribute13                 VARCHAR2(150);
4376   v_Attribute14                 VARCHAR2(150);
4377   v_Attribute15                 VARCHAR2(150);
4378   v_MasterOrganizationId        NUMBER;
4379   v_BillMasterOrganizationId    NUMBER;
4380   v_PreferenceNumber            NUMBER;
4381   v_ErrorCode                   VARCHAR2(9);
4382   v_ErrorFlag                   VARCHAR2(1);
4383   v_ErrorMessage                VARCHAR2(2000);
4384   e_NullCustItemId              EXCEPTION;
4385   e_SuppItemInvalid             EXCEPTION;
4386   e_InvalidItem                 EXCEPTION;
4387   -- global_atp
4388   e_ATPSequenced                EXCEPTION;
4389   v_Active                      NUMBER := 0;
4390   v_customer_item_id            NUMBER;
4391   v_CustOrderEnabledFlag        VARCHAR2(1);
4392   v_dummy_id                    NUMBER;
4393   e_NotCustOrderEnabled		EXCEPTION;
4394   v_ship_to_address_id          NUMBER;
4395   --
4396   CURSOR c_CustOrderEnabled(p_InvItemId NUMBER, p_ShipFromOrgId NUMBER) IS
4397   SELECT customer_order_enabled_flag
4398   FROM mtl_system_items
4399   WHERE inventory_item_id = p_InvItemId AND
4400   organization_id = p_ShipFromOrgId;
4401   --
4402 BEGIN
4403   --
4404   IF (l_debug <> -1) THEN
4405      rlm_core_sv.dpush(C_SDEBUG,'DeriveInventoryItemId');
4406      rlm_core_sv.dlog(C_DEBUG,'inventory_item_id ',x_lines_rec.inventory_item_id);
4407   END IF;
4408   --
4409 
4410   IF rlm_message_sv.check_dependency('INVENTORY_ITEM') THEN
4411     --
4412     -- The original customer item id needs to be stored. This value
4413     -- can be lost if inv api returns false
4414     v_customer_item_id := x_lines_rec.customer_item_id;
4415 
4416     IF x_lines_rec.inventory_item_id IS NULL THEN
4417       --
4418       IF (l_debug <> -1) THEN
4419          rlm_core_sv.dlog(C_DEBUG,'inventory item derived from inv API');
4420          rlm_core_sv.dlog(C_DEBUG,'customer_item_id id ' ,
4421                                  x_lines_rec.customer_item_id);
4422          rlm_core_sv.dlog(C_DEBUG,'ship_from_org ' ,
4423                                  x_lines_rec.ship_from_org_id);
4424       END IF;
4425       --
4426       -- get_inv_item_id from inventory API
4427       -- where customer_item_id = x_lines_rec.customer_item_id
4428       -- and master_organization_id = x_lines_rec.ship_from_org_id
4429       IF (x_header_rec.customer_id is  not NULL) THEN
4430         --
4431         IF (l_debug <> -1) THEN
4432            rlm_core_sv.dlog(C_DEBUG, 'Calling inv_customer_item_grp.fetch_attributes ');
4433            rlm_core_sv.dlog(C_DEBUG, 'x_lines_rec.ship_to_address_id',
4434                                      x_lines_rec.ship_to_address_id);
4435            rlm_core_sv.dlog(C_DEBUG, 'x_lines_rec.ship_to_customer_id',
4436                                      x_lines_rec.ship_to_customer_id);
4437            rlm_core_sv.dlog(C_DEBUG, 'x_lines_rec.Ship_From_Org_Id',
4438                                      x_lines_rec.Ship_From_Org_Id);
4439            rlm_core_sv.dlog(C_DEBUG, 'x_lines_rec.customer_item_id',
4440                                            x_lines_rec.customer_item_id);
4441         END IF;
4442         --
4443         IF (x_header_rec.customer_id <> nvl(x_lines_rec.ship_to_customer_id, x_header_rec.customer_id)) THEN
4444          --
4445          v_ship_to_address_id := NULL;
4446          --
4447         ELSE
4448          --
4449          v_ship_to_address_id := x_lines_rec.SHIP_TO_ADDRESS_ID;
4450          --
4451         END IF;
4452         --
4453         IF (l_debug <> -1) THEN
4454            rlm_core_sv.dlog(C_DEBUG, 'v_ship_to_address_id ',
4455                                            v_ship_to_address_id);
4456         END IF;
4457         --
4458         inv_customer_item_grp.fetch_attributes(
4459                --x_lines_rec.SHIP_TO_ADDRESS_ID,
4460                v_ship_to_address_id,
4461                NULL, x_header_rec.customer_id,
4462                x_lines_rec.Customer_Item_Ext,
4463                x_lines_rec.Ship_From_Org_Id,
4464                x_lines_rec.Customer_Item_Id,NULL,
4465                --x_lines_rec.Customer_Item_Id,
4466                v_dummy_id,
4467                v_CustomerId, v_CustomerCategoryCode,
4468                v_AddressId, v_CustomerItemNumber,
4469                v_ItemDefinitionLevel,
4470                v_CustomerItemDesc,
4471                v_ModelCustomerItemId,
4472                v_CommodityCodeId,
4473                v_MasterContainerItemId,
4474                v_ContainerItemOrgId,
4475                v_DetailContainerItemId,
4476                v_MinFillPercentage,
4477                v_DepPlanRequiredFlag,
4478                v_DepPlanPriorBldFlag,
4479                v_DemandTolerancePositive,
4480                v_DemandToleranceNegative,
4481                v_AttributeCategory,
4482                v_Attribute1, v_Attribute2,
4483                v_Attribute3, v_Attribute4,
4484                v_Attribute5, v_Attribute6,
4485                v_Attribute7, v_Attribute8,
4486                v_Attribute9, v_Attribute10,
4487                v_Attribute11, v_Attribute12,
4488                v_Attribute13, v_Attribute14,
4489                v_Attribute15,
4490                x_lines_rec.INVENTORY_ITEM_ID,
4491                v_MasterOrganizationId,
4492                v_PreferenceNumber, v_ErrorCode,
4493                v_ErrorFlag, v_ErrorMessage);
4494         --
4495         IF (l_debug <> -1) THEN
4496            rlm_core_sv.dlog(C_DEBUG,'v_ErrorMessage', v_ErrorMessage);
4497            rlm_core_sv.dlog(C_DEBUG,'v_ErrorCode', v_ErrorCode);
4498            rlm_core_sv.dlog(C_DEBUG, 'Inventory Item ID from Inventory API',
4499                             x_lines_rec.inventory_item_id);
4500         END IF;
4501         --
4502         IF v_ErrorFlag = 'Y' THEN
4503           --
4504           raise e_InvalidItem;
4505           --
4506         ELSIF x_lines_rec.Customer_Item_Id is NULL THEN
4507           --
4508           raise e_NullCustItemId;
4509           --
4510         END IF;
4511         --
4512         OPEN c_CustOrderEnabled(x_lines_rec.inventory_item_id,
4513                           x_lines_rec.ship_from_org_id);
4514         FETCH c_CustOrderEnabled INTO v_CustOrderEnabledFlag;
4515         CLOSE c_CustOrderEnabled;
4516         --
4517         IF (l_debug <> -1) THEN
4518          rlm_core_sv.dlog(C_DEBUG, 'customer_order_enabled_flag',
4519                           v_CustOrderEnabledFlag);
4520         END IF;
4521         --
4522         IF NVL(v_CustOrderEnabledFlag, 'N') <> 'Y' THEN
4523           RAISE e_NotCustOrderEnabled;
4524         END IF;
4525         --
4526       END IF;
4527       --
4528       IF x_lines_rec.supplier_item_ext IS NOT NULL THEN
4529         --
4530         v_progress := '020';
4531         --
4532         BEGIN
4533           --
4534           SELECT inventory_item_id
4535           INTO   v_InventoryItemidFromSup
4536           FROM   mtl_item_flexfields
4537           WHERE  item_number =  x_lines_rec.supplier_item_ext
4538           AND    organization_id  =  x_lines_rec.ship_from_org_id
4539           AND    customer_order_enabled_flag = 'Y';
4540           --
4541           -- Check if this is the same as derived from customer item
4542           --
4543           IF(v_InventoryItemIdFromSup <> x_lines_rec.inventory_item_id) THEN
4544 
4545             rlm_message_sv.app_error(
4546                          x_ExceptionLevel => rlm_message_sv.k_warn_level,
4547                          x_MessageName => 'RLM_SUPPLIER_ITEM_MISMATCH',
4548                          x_InterfaceHeaderId => x_lines_rec.header_id,
4549                          x_InterfaceLineId => x_lines_rec.line_id,
4550                          x_token1=>'SUPPLIER_ITEM',
4551                          x_value1=>x_lines_rec.supplier_item_ext);
4552 	    --
4553   	    IF (l_debug <> -1) THEN
4554                rlm_core_sv.dlog('WARNING: RLM_SUPPLIER_ITEM_MISMATCH');
4555             END IF;
4556 	    --
4557           END IF;
4558 
4559         EXCEPTION
4560           WHEN NO_DATA_FOUND THEN
4561             --
4562             rlm_message_sv.app_error(
4563                          x_ExceptionLevel => rlm_message_sv.k_warn_level,
4564                          x_MessageName => 'RLM_INVALID_SUPPLIER_ITEM',
4565                          x_InterfaceHeaderId => x_lines_rec.header_id,
4566                          x_InterfaceLineId => x_lines_rec.line_id,
4567                          x_token1=>'SUPPLIER_ITEM',
4568                          x_value1=>x_lines_rec.supplier_item_ext);
4569 	    --
4570   	    IF (l_debug <> -1) THEN
4571                rlm_core_sv.dlog('WARNING: RLM_INVALID_SUPPLIER_ITEM');
4572             END IF;
4573             --
4574         END;
4575       --
4576       ELSIF (x_lines_rec.inventory_item_segment1 IS NOT NULL AND
4577              x_lines_rec.inventory_item_segment2 IS NOT NULL AND
4578              x_lines_rec.inventory_item_segment3 IS NOT NULL AND
4579              x_lines_rec.inventory_item_segment4 IS NOT NULL AND
4580              x_lines_rec.inventory_item_segment5 IS NOT NULL AND
4581              x_lines_rec.inventory_item_segment6 IS NOT NULL AND
4582              x_lines_rec.inventory_item_segment7 IS NOT NULL AND
4583              x_lines_rec.inventory_item_segment8 IS NOT NULL AND
4584              x_lines_rec.inventory_item_segment9 IS NOT NULL AND
4585              x_lines_rec.inventory_item_segment10 IS NOT NULL AND
4586              x_lines_rec.inventory_item_segment11 IS NOT NULL AND
4587              x_lines_rec.inventory_item_segment12 IS NOT NULL AND
4588              x_lines_rec.inventory_item_segment13 IS NOT NULL AND
4589              x_lines_rec.inventory_item_segment14 IS NOT NULL AND
4590              x_lines_rec.inventory_item_segment15 IS NOT NULL AND
4591              x_lines_rec.inventory_item_segment16 IS NOT NULL AND
4592              x_lines_rec.inventory_item_segment17 IS NOT NULL AND
4593              x_lines_rec.inventory_item_segment18 IS NOT NULL AND
4594              x_lines_rec.inventory_item_segment19 IS NOT NULL AND
4595              x_lines_rec.inventory_item_segment20 IS NOT NULL)
4596       THEN
4597         -- derive inv item based on the segments
4598         IF (l_debug <> -1) THEN
4599            rlm_core_sv.dlog(C_DEBUG,'inventory_item_segment1 ',
4600                                        x_lines_rec.inventory_item_segment1);
4601            rlm_core_sv.dlog(C_DEBUG,'inventory_item_segment2 ',
4602                                        x_lines_rec.inventory_item_segment2);
4603            rlm_core_sv.dlog(C_DEBUG,'inventory_item_segment3 ',
4604                                        x_lines_rec.inventory_item_segment3);
4605            rlm_core_sv.dlog(C_DEBUG,'inventory_item_segment4 ',
4606                                        x_lines_rec.inventory_item_segment4);
4607            rlm_core_sv.dlog(C_DEBUG,'inventory_item_segment5 ',
4608                                       x_lines_rec.inventory_item_segment5);
4609            rlm_core_sv.dlog(C_DEBUG,'inventory_item_segment6 ',
4610                                       x_lines_rec.inventory_item_segment6);
4611            rlm_core_sv.dlog(C_DEBUG,'inventory_item_segment7 ',
4612                                       x_lines_rec.inventory_item_segment7);
4613            rlm_core_sv.dlog(C_DEBUG,'inventory_item_segment8 ',
4614                                       x_lines_rec.inventory_item_segment8);
4615            rlm_core_sv.dlog(C_DEBUG,'inventory_item_segment9 ',
4616                                       x_lines_rec.inventory_item_segment9);
4617            rlm_core_sv.dlog(C_DEBUG,'inventory_item_segment10 ',
4618                                       x_lines_rec.inventory_item_segment10);
4619            rlm_core_sv.dlog(C_DEBUG,'inventory_item_segment11',
4620                                       x_lines_rec.inventory_item_segment11);
4621            rlm_core_sv.dlog(C_DEBUG,'inventory_item_segment12 ',
4622                                       x_lines_rec.inventory_item_segment12);
4623            rlm_core_sv.dlog(C_DEBUG,'inventory_item_segment13 ',
4624                                       x_lines_rec.inventory_item_segment13);
4625            rlm_core_sv.dlog(C_DEBUG,'inventory_item_segment14 ',
4626                                        x_lines_rec.inventory_item_segment14);
4627            rlm_core_sv.dlog(C_DEBUG,'inventory_item_segment15 ',
4628                                       x_lines_rec.inventory_item_segment15);
4629            rlm_core_sv.dlog(C_DEBUG,'inventory_item_segment16 ',
4630                                       x_lines_rec.inventory_item_segment16);
4631            rlm_core_sv.dlog(C_DEBUG,'inventory_item_segment17 ',
4632                                       x_lines_rec.inventory_item_segment17);
4633            rlm_core_sv.dlog(C_DEBUG,'inventory_item_segment18 ',
4634                                       x_lines_rec.inventory_item_segment18);
4635            rlm_core_sv.dlog(C_DEBUG,'inventory_item_segment19 ',
4636                                       x_lines_rec.inventory_item_segment19);
4637            rlm_core_sv.dlog(C_DEBUG,'inventory_item_segment20 ',
4638                                       x_lines_rec.inventory_item_segment20);
4639         END IF;
4640         --
4641         BEGIN
4642         --
4643           SELECT inventory_item_id
4644           INTO   v_InventoryItemIdFromSeg
4645           FROM   mtl_system_items
4646           WHERE  segment1 = x_lines_rec.inventory_item_segment1
4647           AND    segment2 = x_lines_rec.inventory_item_segment2
4648           AND    segment3 = x_lines_rec.inventory_item_segment3
4649           AND    segment4 = x_lines_rec.inventory_item_segment4
4650           AND    segment5 = x_lines_rec.inventory_item_segment5
4651           AND    segment6 = x_lines_rec.inventory_item_segment6
4652           AND    segment7 = x_lines_rec.inventory_item_segment7
4653           AND    segment8 = x_lines_rec.inventory_item_segment8
4654           AND    segment9 = x_lines_rec.inventory_item_segment9
4655           AND    segment10 = x_lines_rec.inventory_item_segment10
4656           AND    segment11 = x_lines_rec.inventory_item_segment11
4657           AND    segment12 = x_lines_rec.inventory_item_segment12
4658           AND    segment13 = x_lines_rec.inventory_item_segment13
4659           AND    segment14 = x_lines_rec.inventory_item_segment14
4660           AND    segment15 = x_lines_rec.inventory_item_segment15
4661           AND    segment16 = x_lines_rec.inventory_item_segment16
4662           AND    segment17 = x_lines_rec.inventory_item_segment17
4663           AND    segment18 = x_lines_rec.inventory_item_segment18
4664           AND    segment19 = x_lines_rec.inventory_item_segment19
4665           AND    segment20 = x_lines_rec.inventory_item_segment20
4666           AND    customer_order_enabled_flag = 'Y';
4667           --
4668           v_progress := '040';
4669 
4670           --check if this is the same as derived from customer item
4671 
4672           IF(v_InventoryItemIdFromSeg <> x_lines_rec.inventory_item_id) THEN
4673 
4674             rlm_message_sv.app_error(
4675                          x_ExceptionLevel => rlm_message_sv.k_warn_level,
4676                          x_MessageName => 'RLM_INV_ITEM_SEG_MISMATCH',
4677                          x_InterfaceHeaderId => x_lines_rec.header_id,
4678                          x_InterfaceLineId => x_lines_rec.line_id);
4679 	    --
4680   	    IF (l_debug <> -1) THEN
4681                rlm_core_sv.dlog('WARNING: RLM_INVENTORY_ITEM_SEG_MISMATCH');
4682             END IF;
4683 	    --
4684           END IF;
4685 
4686         EXCEPTION
4687           WHEN NO_DATA_FOUND THEN
4688             --
4689             rlm_message_sv.app_error(
4690                          x_ExceptionLevel => rlm_message_sv.k_warn_level,
4691                          x_MessageName => 'RLM_INVALID_INVENTORY_ITEM_SEG',
4692                          x_InterfaceHeaderId => x_lines_rec.header_id,
4693                          x_InterfaceLineId => x_lines_rec.line_id);
4694 	    --
4695   	    IF (l_debug <> -1) THEN
4696                rlm_core_sv.dlog('WARNING: RLM_INVALID_INVENTORY_ITEM_SEGMENTS');
4697             END IF;
4698             --
4699 
4700         END;
4701         --
4702       END IF; --checks for supplier and inv item segments
4703       --
4704     END IF; --inventory_item_id
4705     --
4706     IF (l_debug <> -1) THEN
4707        rlm_core_sv.dlog(C_DEBUG,'inventory_item_id is ' ||
4708                                  x_lines_rec.inventory_item_id);
4709     END IF;
4710     --
4711   END IF;
4712   --
4713   -- global_atp
4714   -- Validate: ATP items in sequenced schedule should be rejected
4715   IF RLM_MANAGE_DEMAND_SV.IsATPItem(x_lines_rec.ship_from_org_id,
4716                                     x_lines_rec.inventory_item_id) THEN
4717      --
4718      IF x_header_rec.schedule_type = 'SEQUENCED' THEN
4719         --
4720         RAISE e_ATPSequenced;
4721         --
4722      END IF;
4723      --
4724   END IF;
4725   --
4726   IF (l_debug <> -1) THEN
4727      rlm_core_sv.dpop(C_SDEBUG);
4728   END IF;
4729   --
4730 EXCEPTION
4731   --
4732   WHEN e_ATPSequenced THEN
4733     --
4734     x_lines_rec.process_status := rlm_core_sv.k_PS_ERROR;
4735     --
4736     rlm_message_sv.app_error(
4737                 x_ExceptionLevel => rlm_message_sv.k_error_level,
4738                 x_MessageName => 'RLM_ATP_SEQUENCED',
4739                 x_InterfaceHeaderId => x_lines_rec.header_id,
4740                 x_InterfaceLineId => x_lines_rec.line_id,
4741                 x_ValidationType => 'INVENTORY_ITEM');
4742     --
4743     IF (l_debug <> -1) THEN
4744        rlm_core_sv.dpop(C_SDEBUG, 'EXCEPTION: RLM_ATP_SEQUENCED');
4745     END IF;
4746     --
4747   WHEN e_NullCustItemId THEN
4748     --
4749     x_lines_rec.process_status := rlm_core_sv.k_PS_ERROR;
4750     --
4751     rlm_message_sv.app_error(
4752                 x_ExceptionLevel => rlm_message_sv.k_error_level,
4753                 x_MessageName => 'RLM_NULL_CUSTOMER_ITEM_ID',
4754                 x_InterfaceHeaderId => x_lines_rec.header_id,
4755                 x_InterfaceLineId => x_lines_rec.line_id,
4756                 x_token1=> 'CUSTEXT',
4757                 x_value1=> x_lines_rec.customer_item_ext,
4758                 x_ValidationType => 'INVENTORY_ITEM');
4759     --
4760     IF (l_debug <> -1) THEN
4761        rlm_core_sv.dlog(C_DEBUG,'progress',v_Progress);
4762        rlm_core_sv.dpop(C_SDEBUG, 'EXCEPTION: RLM_NULL_CUSTOMER_ITEM_ID');
4763     END IF;
4764     --
4765   WHEN e_SuppItemInvalid THEN
4766     --
4767     x_lines_rec.process_status := rlm_core_sv.k_PS_ERROR;
4768     rlm_message_sv.app_error(
4769                 x_ExceptionLevel => rlm_message_sv.k_error_level,
4770                 x_MessageName => 'RLM_SUPPLIER_ITEM_INVALID',
4771                 x_InterfaceHeaderId => x_lines_rec.header_id,
4772                 x_InterfaceLineId => x_lines_rec.line_id,
4773                 x_token1=>'SUPPLIER_ITEM_EXT',
4774                 x_value1=>x_lines_rec.supplier_item_ext,
4775                 x_ValidationType => 'INVENTORY_ITEM');
4776     --
4777     IF (l_debug <> -1) THEN
4778        rlm_core_sv.dlog(C_DEBUG,'progress',v_Progress);
4779        rlm_core_sv.dpop(C_SDEBUG,'EXCEPTION: RLM_SUPPLIER_ITEM_INVALID');
4780     END IF;
4781     --
4782   WHEN e_InvalidItem THEN
4783     --
4784     x_lines_rec.process_status := rlm_core_sv.k_PS_ERROR;
4785     --
4786     rlm_message_sv.app_error(
4787                 x_ExceptionLevel => rlm_message_sv.k_error_level,
4788                 x_MessageName => 'RLM_INVENTORY_ITEM_INACTIVE',
4789                 x_InterfaceHeaderId => x_lines_rec.header_id,
4790                 x_InterfaceLineId => x_lines_rec.line_id,
4791                 x_token1=> 'CUSTOMER_ITEM',
4792                 x_value1=> RLM_CORE_SV.get_item_number(v_customer_item_id),
4793                 x_ValidationType => 'INVENTORY_ITEM');
4794     --
4795     IF (l_debug <> -1) THEN
4796        rlm_core_sv.dlog(C_DEBUG,'progress',v_Progress);
4797        rlm_core_sv.dpop(C_SDEBUG,'EXCEPTION: RLM_INVENTORY_ITEM_INACTIVE');
4798     END IF;
4799     --
4800   WHEN e_NotCustOrderEnabled THEN
4801     --
4802     x_lines_rec.process_status := rlm_core_sv.k_PS_ERROR;
4803     --
4804     rlm_message_sv.app_error(
4805              x_ExceptionLevel => rlm_message_sv.k_error_level,
4806              x_MessageName => 'RLM_ITEM_NOT_CUST_ORDERABLE',
4807              x_InterfaceHeaderId => x_lines_rec.header_id,
4808              x_InterfaceLineId => x_lines_rec.line_id,
4809              x_GroupInfo => TRUE,
4810              x_token1=>'CUSTOMER_ITEM',
4811              x_value1=>v_CustomerItemNumber,
4812              x_token2=>'SHIP_FROM_ORG',
4813              x_value2=>RLM_CORE_SV.get_ship_from(x_lines_rec.ship_from_org_id),
4814              x_ValidationType => 'INVENTORY_ITEM');
4815     --
4816     IF (l_debug <> -1) THEN
4817      rlm_core_sv.dpop(C_SDEBUG, 'EXCEPTION:RLM_ITEM_NOT_CUST_ORDERABLE');
4818     END IF;
4819     --
4820   WHEN NO_DATA_FOUND THEN
4821     --
4822     x_lines_rec.process_status := rlm_core_sv.k_PS_ERROR;
4823     --
4824     rlm_message_sv.app_error(
4825                 x_ExceptionLevel => rlm_message_sv.k_error_level,
4826                 x_MessageName => 'RLM_INVITEM_NOT_DERIVED',
4827                 x_InterfaceHeaderId => x_lines_rec.header_id,
4828                 x_InterfaceLineId => x_lines_rec.line_id,
4829                 x_ValidationType => 'INVENTORY_ITEM');
4830     --
4831     IF (l_debug <> -1) THEN
4832        rlm_core_sv.dlog(C_DEBUG,'progress',v_Progress);
4833        rlm_core_sv.dpop(C_SDEBUG,'EXCEPTION: RLM_INVITEM_NOT_DERIVED');
4834     END IF;
4835     --
4836   WHEN OTHERS THEN
4837     --
4838     x_lines_rec.process_status := rlm_core_sv.k_PS_ERROR;
4839     rlm_message_sv.sql_error('rlm_validatedemand_sv.DeriveInventoryItemId',
4840                                                        v_Progress);
4841     --
4842     IF (l_debug <> -1) THEN
4843        rlm_core_sv.dpop(C_SDEBUG,'EXCEPTION: '||SUBSTR(SQLERRM,1,200));
4844     END IF;
4845     --
4846     raise;
4847     --
4848 END DeriveInventoryItemId;
4849 
4850 /*===========================================================================
4851 
4852 	PROCEDURE NAME:  ValidateCustomerItem
4853 
4854 ===========================================================================*/
4855 PROCEDURE ValidateCustomerItem(x_header_rec  IN RLM_INTERFACE_HEADERS%ROWTYPE,
4856           x_lines_rec IN OUT NOCOPY RLM_INTERFACE_LINES%ROWTYPE)
4857 IS
4858   --
4859   v_progress     VARCHAR2(3) := '010';
4860 
4861 BEGIN
4862   --
4863   IF (l_debug <> -1) THEN
4864      rlm_core_sv.dpush(C_SDEBUG,'ValidateCustomerItem');
4865      rlm_core_sv.dlog(C_DEBUG,'customer item ext', x_lines_rec.customer_item_ext);
4866      rlm_core_sv.dlog(C_DEBUG,'customer_item_id', x_lines_rec.customer_item_id);
4867      rlm_core_sv.dlog(C_DEBUG,'ship_to_address_id',x_lines_rec.ship_to_address_id);
4868   END IF;
4869   --
4870   IF rlm_message_sv.check_dependency('CUSTOMER_ITEM') THEN
4871     --
4872     IF x_lines_rec.customer_item_id IS NULL THEN
4873      --
4874      BEGIN
4875        --
4876        IF (l_debug <> -1) THEN
4877 	  rlm_core_sv.dlog(C_DEBUG, 'Check if item is defined at address level in Inventory');
4878           rlm_core_sv.dlog(C_DEBUG,'x_header_rec.customer_id', x_header_rec.customer_id);
4879           rlm_core_sv.dlog(C_DEBUG, 'x_lines_rec.ship_to_address_id', x_lines_rec.ship_to_address_id);
4880        END IF;
4881        --
4882        SELECT customer_item_id
4883        INTO x_lines_rec.customer_item_id
4884        FROM mtl_customer_items
4885        WHERE customer_item_number = x_lines_rec.customer_item_ext
4886        AND   customer_id   = x_header_rec.customer_id
4887        AND   address_id    = x_lines_rec.ship_to_address_id
4888        AND   item_definition_level = '3'
4889        AND   inactive_flag = 'N';
4890        --
4891        IF (l_debug <> -1) THEN
4892           rlm_core_sv.dlog(C_DEBUG,'Address level, customer item ID', x_lines_rec.customer_item_id);
4893        END IF;
4894        --
4895      EXCEPTION
4896        --
4897        WHEN NO_DATA_FOUND THEN
4898        --
4899        IF (l_debug <> -1) THEN
4900 	  rlm_core_sv.dlog(C_DEBUG, 'Check if item is defined at address-category level in Inventory');
4901           rlm_core_sv.dlog(C_DEBUG,'x_header_rec.customer_id', x_header_rec.customer_id);
4902        END IF;
4903        --
4904        BEGIN
4905          --
4906          -- Following query is changed as per TCA obsolescence project.
4907          SELECT mci.customer_item_id
4908          INTO x_lines_rec.customer_item_id
4909          FROM mtl_customer_items mci
4910          WHERE mci.customer_item_number = x_lines_rec.customer_item_ext
4911          AND   mci.customer_id   = x_header_rec.customer_id
4912          AND   x_lines_rec.ship_to_address_id IN
4913 			       (select cust_acct_site_id from hz_cust_acct_sites
4914 			        where customer_category_code = mci.customer_category_code
4915 			        and cust_account_id = mci.customer_id)
4916          AND   mci.item_definition_level = '2'
4917          AND   mci.inactive_flag = 'N';
4918          --
4919          IF (l_debug <> -1) THEN
4920            rlm_core_sv.dlog(C_DEBUG,'Address-Cat level, customer item ID', x_lines_rec.customer_item_id);
4921          END IF;
4922          --
4923          EXCEPTION
4924            --
4925            WHEN NO_DATA_FOUND THEN
4926             --
4927             IF (l_debug <> -1) THEN
4928               rlm_core_sv.dlog(C_DEBUG,'Check if item is defined at customer level in Inventory');
4929             END IF;
4930             --
4931             SELECT customer_item_id
4932             INTO x_lines_rec.customer_item_id
4933             FROM mtl_customer_items
4934             WHERE customer_item_number = x_lines_rec.customer_item_ext
4935             AND   address_id IS NULL
4936             AND   customer_id   = x_header_rec.customer_id
4937             AND   item_definition_level = '1'
4938             AND   inactive_flag = 'N';
4939             --
4940             IF (l_debug <> -1) THEN
4941               rlm_core_sv.dlog(C_DEBUG,'Customer Level, customer item ID', x_lines_rec.customer_item_id);
4942             END IF;
4943             --
4944        END;
4945        --
4946      END;
4947      --
4948    END IF;
4949    --
4950   END IF;
4951   --
4952   IF (l_debug <> -1) THEN
4953      rlm_core_sv.dpop(C_SDEBUG);
4954   END IF;
4955   --
4956 EXCEPTION
4957   --
4958   WHEN NO_DATA_FOUND THEN
4959     --
4960     x_lines_rec.process_status := rlm_core_sv.k_PS_ERROR;
4961     --
4962     -- bug 5197388
4963     --
4964     rlm_message_sv.app_error(
4965                 x_ExceptionLevel => rlm_message_sv.k_error_level,
4966                 x_MessageName => 'RLM_CUSTOMER_ITEM_NOT_DERIVED',
4967                 x_InterfaceHeaderId => x_lines_rec.header_id,
4968                 x_InterfaceLineId => x_lines_rec.line_id,
4969                 x_token1=>'CUSTOMER_ITEM',
4970                 x_value1=>x_lines_rec.customer_item_ext,
4971                 x_token2=>'CUSTOMER',
4972                 x_value2=>nvl(rlm_core_sv.get_customer_name(x_header_rec.customer_id), x_header_rec.cust_name_ext ),
4973                 x_ValidationType => 'CUSTOMER_ITEM');
4974     --
4975     IF (l_debug <> -1) THEN
4976        rlm_core_sv.dlog(C_DEBUG,'progress',v_Progress);
4977        rlm_core_sv.dpop(C_SDEBUG,'EXCEPTION: RLM_CUSTOMER_ITEM_NOT_DERIVED');
4978     END IF;
4979     --
4980   WHEN OTHERS THEN
4981     --
4982     x_lines_rec.process_status := rlm_core_sv.k_PS_ERROR;
4983     rlm_message_sv.sql_error('rlm_validatedemand_sv.ValidateCustomerItem',
4984                                                 v_Progress);
4985     --
4986     IF (l_debug <> -1) THEN
4987        rlm_core_sv.dpop(C_SDEBUG,'EXCEPTION: '||SUBSTR(SQLERRM,1,200));
4988     END IF;
4989     --
4990     raise;
4991     --
4992 END ValidateCustomerItem;
4993 
4994 /*===========================================================================
4995 
4996 	PROCEDURE NAME:  DerivePurchaseOrder
4997 
4998 ===========================================================================*/
4999 
5000 PROCEDURE DerivePurchaseOrder(
5001                  x_setup_terms_rec  IN rlm_setup_terms_sv.setup_terms_rec_typ,
5002                  x_header_rec IN rlm_interface_headers%ROWTYPE,
5003                  x_lines_rec IN OUT NOCOPY rlm_interface_lines%ROWTYPE)
5004 IS
5005   --
5006   l_org_code              VARCHAR2(30);
5007   v_progress              VARCHAR2(3) := '010';
5008   v_OE_Purchase_Order     VARCHAR2(50);
5009   v_Agreement_id          NUMBER;
5010   v_Agreement_Name        VARCHAR2(240);
5011   v_fut_Agreement_id      NUMBER;
5012   v_fut_Agreement_Name    VARCHAR2(240);
5013   v_start_date            DATE;
5014   v_end_date              DATE;
5015   x_Price_list_id         NUMBER;
5016   v_Price_list_name       VARCHAR2(240);
5017   --DeriveARPriceList     BOOLEAN := FALSE;
5018   e_SetupAgreementInv     EXCEPTION;
5019   e_POAgreementDiff       EXCEPTION;
5020   e_POWithoutAgreement    EXCEPTION;
5021   e_POAgreementInv        EXCEPTION;
5022   e_CustMissingPriceList  EXCEPTION;
5023   e_POAgreementInactive   EXCEPTION;
5024   e_PriceListInactive     EXCEPTION;
5025   --
5026 BEGIN
5027   --
5028   IF (l_debug <> -1) THEN
5029      rlm_core_sv.dpush(C_SDEBUG,'DerivePurchaseOrder');
5030      rlm_core_sv.dlog(C_DEBUG,'item_detail_type', x_lines_rec.item_detail_type);
5031   END IF;
5032   --
5033   IF rlm_message_sv.check_dependency('PURCHASE_ORDER') THEN
5034     --
5035     IF x_lines_rec.item_detail_type in ('0','1','2') THEN
5036        --
5037        v_Agreement_id := x_setup_terms_rec.agreement_id;
5038        v_Agreement_Name := x_setup_terms_rec.agreement_name;
5039        v_fut_Agreement_id := x_setup_terms_rec.future_agreement_id;
5040        v_fut_Agreement_Name := x_setup_terms_rec.future_agreement_name;
5041        x_Price_list_id := x_setup_terms_rec.price_list_id;
5042        --
5043        IF (l_debug <> -1) THEN
5044           rlm_core_sv.dlog(C_DEBUG,'x_setup_terms_rec.agreement_name',v_Agreement_Name);
5045           rlm_core_sv.dlog(C_DEBUG,'x_setup_terms_rec.agreement_id',v_Agreement_Id);
5046           rlm_core_sv.dlog(C_DEBUG,'x_setup_terms_rec.fut_agreement_id',v_fut_Agreement_Id);
5047           rlm_core_sv.dlog(C_DEBUG,'x_setup_terms_rec.Price_list_id',x_Price_list_id);
5048           rlm_core_sv.dlog(C_DEBUG,'PO on schedule - cust_po_number',
5049                                                x_lines_rec.cust_po_number);
5050        END IF;
5051        --
5052        IF (x_Price_list_id IS NULL) THEN
5053         --
5054         x_lines_rec.price_list_id := x_Price_list_id;
5055         --
5056         IF (l_debug <> -1) THEN
5057    	  rlm_core_sv.dlog(C_DEBUG, ' Null price list x_lines_rec.price_list_id', x_lines_rec.price_list_id);
5058 	END IF;
5059         --
5060        END IF;
5061        --
5062        IF (v_Agreement_id is NULL) THEN  --Changed from Agreement_name to agreement_id
5063 	--
5064         x_lines_rec.agreement_id := NULL;
5065 	--
5066 	IF (l_debug <> -1) THEN
5067           rlm_core_sv.dlog(C_DEBUG, 'Null agreement on setup terms x_lines_rec.agreement_id', x_lines_rec.agreement_id);
5068         END IF;
5069         --
5070        END IF;
5071        --
5072        ---Replaced Agreement_id with Agreement_name
5073        IF  v_agreement_id is NOT NULL THEN
5074          --
5075          v_progress := '020';
5076          --
5077          BEGIN
5078            --
5079            v_start_date := x_lines_rec.start_date_time;
5080 
5081            SELECT oea.price_list_id, oea.purchase_order_num
5082            INTO   x_lines_rec.price_list_id,
5083                   v_OE_Purchase_Order
5084            FROM   oe_agreements oea
5085            WHERE  oea.agreement_id  = v_agreement_id
5086            AND  v_start_date between nvl(oea.start_date_active, to_date('01/01/1900','dd/mm/yyyy'))
5087                 and nvl(oea.end_date_active, to_date('31/12/4712','dd/mm/yyyy'));
5088            --
5089            x_lines_rec.agreement_id := v_agreement_id;
5090            --
5091   	   IF (l_debug <> -1) THEN
5092               rlm_core_sv.dlog(C_DEBUG,'current agreement Purchase Order',
5093                                                  v_OE_Purchase_Order);
5094               rlm_core_sv.dlog(C_DEBUG,'x_lines_rec.Price_List_Id',
5095                                          x_lines_rec.Price_List_Id);
5096               rlm_core_sv.dlog(C_DEBUG,'x_lines_rec.agreement_id',
5097                                          x_lines_rec.agreement_id);
5098               rlm_core_sv.dlog(C_DEBUG,'x_lines_rec.cust_po_number',
5099                                          x_lines_rec.cust_po_number);
5100            END IF;
5101 	   --
5102          EXCEPTION
5103             --
5104             WHEN NO_DATA_FOUND THEN
5105               --
5106   	      IF (l_debug <> -1) THEN
5107                  rlm_core_sv.dlog(C_DEBUG,'Start date time does not fall
5108                      within the current agreement effective dates');
5109               END IF;
5110               --
5111               v_progress := '030';
5112               BEGIN
5113                 --
5114                 SELECT  oea.price_list_id, oea.purchase_order_num
5115                 INTO  x_lines_rec.price_list_id,
5116                        v_OE_Purchase_Order
5117                 FROM   oe_agreements oea
5118                 WHERE  agreement_id = v_fut_agreement_id
5119                 AND  v_start_date between nvl(oea.start_date_active, to_date('01/01/1900','dd/mm/yyyy') )
5120                       and nvl(oea.end_date_active, to_date('31/12/4712','dd/mm/yyyy'));
5121                  --
5122                  x_lines_rec.agreement_id := v_fut_agreement_id;
5123                  --
5124 
5125   		IF (l_debug <> -1) THEN
5126                    rlm_core_sv.dlog(C_DEBUG,' future agreement Purchase_Order',
5127                                                           v_OE_Purchase_Order);
5128                    rlm_core_sv.dlog(C_DEBUG,' future agreement Price List',
5129                                          x_lines_rec.Price_List_Id);
5130                    rlm_core_sv.dlog(C_DEBUG,'PO number on schedule ',
5131                                          x_lines_rec.cust_po_number);
5132                 END IF;
5133                 --
5134               EXCEPTION
5135                 --
5136                 WHEN NO_DATA_FOUND THEN
5137                      --
5138   		     IF (l_debug <> -1) THEN
5139 
5140                         rlm_core_sv.dlog(C_DEBUG,'WARNING: No Agreement_id found for future and current agreements ');
5141                         rlm_core_sv.dlog(C_DEBUG,' agreement Purchase_Order',
5142                                                           v_OE_Purchase_Order);
5143                         rlm_core_sv.dlog(C_DEBUG,' Price List',
5144                                          x_lines_rec.Price_List_Id);
5145                         rlm_core_sv.dlog(C_DEBUG,'PO number on schedule ',
5146                                          x_lines_rec.cust_po_number);
5147                      END IF;
5148 		     --
5149                      rlm_message_sv.app_error(
5150                              x_ExceptionLevel => rlm_message_sv.k_warn_level,
5151                              x_MessageName => 'RLM_SETUP_AGREEMENT_INVALID',
5152                              x_InterfaceHeaderId => x_lines_rec.header_id,
5153                              x_InterfaceLineId => x_lines_rec.line_id,
5154                              x_token1=>'CURRENT_AGR',
5155                              x_value1=>v_Agreement_Name,
5156                              x_token2=>'FUTURE_AGR',
5157                              x_value2=>v_fut_Agreement_Name,
5158                              x_ValidationType => 'PURCHASE_ORDER');
5159 		     --
5160   		     IF (l_debug <> -1) THEN
5161                         rlm_core_sv.dlog(C_DEBUG,'progress',v_Progress);
5162                         rlm_core_sv.dlog(C_SDEBUG,'RLM_SETUP_AGREEMENT_INVALID');
5163                      END IF;
5164                      --
5165                 WHEN OTHERS THEN
5166                      --
5167   		     IF (l_debug <> -1) THEN
5168                         rlm_core_sv.dlog(C_DEBUG,'EXCEPTION:'
5169                                                    ||SUBSTR(SQLERRM,1,200));
5170                      END IF;
5171 		     --
5172                      raise ;
5173                      --
5174               END;
5175               --
5176             WHEN OTHERS THEN
5177                 --
5178   		IF (l_debug <> -1) THEN
5179                    rlm_core_sv.dlog(C_DEBUG,'EXCEPTION: '||SUBSTR(SQLERRM,1,200));
5180                 END IF;
5181 		--
5182                 raise ;
5183                 --
5184          END;
5185          --
5186          v_start_date := null;
5187          v_progress := '030';
5188          IF x_lines_rec.cust_po_number IS NOT NULL AND
5189             x_lines_rec.cust_po_number <> v_OE_Purchase_Order THEN
5190             --
5191             raise e_POAgreementDiff;
5192             --
5193          END IF;
5194          --
5195        ELSE
5196           IF x_Price_list_id is NOT NULL THEN
5197              --
5198   	     IF (l_debug <> -1) THEN
5199                 rlm_core_sv.dlog(C_DEBUG,'x_Price_List_Id',
5200                                         x_Price_List_Id);
5201              END IF;
5202 	     --
5203              x_lines_rec.PRICE_LIST_ID := x_Price_List_Id;
5204 	     --
5205   	     IF (l_debug <> -1) THEN
5206                 rlm_core_sv.dlog(C_DEBUG,'x_lines_rec.cust_po_number',
5207                                        x_lines_rec.cust_po_number);
5208              END IF;
5209              --
5210              IF x_lines_rec.cust_po_number is NOT NULL THEN
5211                 v_Progress := '015';
5212                 --perf raise e_POWithoutAgreement;
5213              END IF;
5214              --
5215           /* ELSE took out this portion for bug 1490685
5216             IF x_lines_rec.cust_po_number is NOT NULL THEN
5217              v_Progress := '020';
5218 	     --
5219   	     IF (l_debug <> -1) THEN
5220                 rlm_core_sv.dlog(C_DEBUG,'x_lines_rec.cust_po_number',
5221                                          x_lines_rec.cust_po_number);
5222              END IF;
5223 	     --
5224              BEGIN
5225                  SELECT oea.agreement_id, oea.name,
5226                         oea.price_list_id,oea.start_date_active,
5227                         oea.end_date_active
5228                  INTO   x_lines_rec.agreement_id, v_agreement_name,
5229                         x_lines_rec.price_list_id, v_start_date, v_end_date
5230                  FROM   oe_agreements oea
5231                  WHERE  purchase_order_num = x_lines_rec.cust_po_number
5232                  AND    x_lines_rec.start_date_time
5233                         BETWEEN oea.start_date_active AND
5234                         nvl(oea.end_date_active,
5235                         to_date('31/12/4712','dd/mm/yyyy'))
5236                  AND    revision = (Select MAX(oem.revision)
5237                         FROM oe_agreements oem
5238                         WHERE oem.purchase_order_num =
5239                                 x_lines_rec.cust_po_number);
5240 	         --
5241   		 IF (l_debug <> -1) THEN
5242                     rlm_core_sv.dlog(C_DEBUG,'x_lines_rec.price_list_id',
5243                                          x_lines_rec.price_list_id);
5244                  END IF;
5245                  --
5246                  IF x_lines_rec.start_date_time > v_end_date OR
5247                     x_lines_rec.start_date_time < v_start_date THEN
5248                     --
5249                     rlm_message_sv.app_error(
5250                          x_ExceptionLevel => rlm_message_sv.k_warn_level,
5251                          x_MessageName => 'RLM_AGREEMENT_INACTIVE',
5252                          x_InterfaceHeaderId => x_lines_rec.header_id,
5253                          x_InterfaceLineId => x_lines_rec.line_id,
5254                          x_token1=>'PURCHASE_ORDER',
5255                          x_value1=>x_lines_rec.cust_po_number,
5256                          x_token2=>'AGREEMENT_NAME',
5257                          x_value2=>v_agreement_name,
5258                          x_ValidationType => 'PURCHASE_ORDER');
5259 		     --
5260   		     IF (l_debug <> -1) THEN
5261                         rlm_core_sv.dlog(C_DEBUG,'progress',v_Progress);
5262                      END IF;
5263                      --
5264                  END IF;
5265                  --
5266                  EXCEPTION
5267                     WHEN NO_DATA_FOUND THEN
5268 			--
5269   			IF (l_debug <> -1) THEN
5270                            rlm_core_sv.dlog(C_DEBUG,'WARNING:
5271                          Cannot Derive agreement from Purchase Order on line');
5272                         END IF;
5273 			--
5274                         --DeriveARPriceList := TRUE;
5275                         rlm_message_sv.app_error(
5276                                 x_ExceptionLevel => rlm_message_sv.k_warn_level,
5277                                 x_MessageName => 'RLM_WARN_PO_AGREEMENT_ID',
5278                                 x_InterfaceHeaderId => x_lines_rec.header_id,
5279                                 x_InterfaceLineId => x_lines_rec.line_id,
5280                                 x_token1=>'PURCHASE_ORDER',
5281                                 x_value1=>x_lines_rec.cust_po_number,
5282                                 x_ValidationType => 'PURCHASE_ORDER');
5283 			--
5284 			IF (l_debug <> -1) THEN
5285                            rlm_core_sv.dlog(C_DEBUG,'progress',v_Progress);
5286                            rlm_core_sv.dlog(C_SDEBUG,'RLM_WARN_PO_AGREEMENT_ID');
5287                         END IF;
5288                         --
5289                     WHEN OTHERS THEN
5290                        rlm_message_sv.sql_error(
5291                         'rlm_validateDemand_sv.DerivePurchaseOrder',v_Progress);
5292 		       --
5293   		       IF (l_debug <> -1) THEN
5294                           rlm_core_sv.dlog(C_DEBUG,'EXCEPTION:'||SUBSTR(SQLERRM,1,200));
5295                        END IF;
5296 		       --
5297                        raise ;
5298              END;
5299             END IF; */
5300 
5301           END IF;/* Price List Id is  not NULL */
5302        END IF; /* Agreement name not null */
5303        --
5304        v_progress := '051';
5305        --
5306        IF (l_debug <> -1) THEN
5307           rlm_core_sv.dlog(C_DEBUG,'CustomerId',x_header_rec.customer_id);
5308           rlm_core_sv.dlog(C_DEBUG,'x_lines_rec.cust_po_number',
5309                                          x_lines_rec.cust_po_number);
5310           rlm_core_sv.dlog(C_DEBUG,'x_Price_List_Id',x_Price_List_Id);
5311           rlm_core_sv.dlog(C_DEBUG,'x_lines_rec.agreement_id',
5312                                               x_lines_rec.agreement_id);
5313        END IF;
5314        --
5315 /*
5316         IF DeriveARPriceList THEN
5317           v_progress := '055';
5318           BEGIN
5319 	      --
5320   	      IF (l_debug <> -1) THEN
5321                  rlm_core_sv.dlog(C_DEBUG,'x_header_rec.customer_id',
5322                                              x_header_rec.customer_id);
5323               END IF;
5324 	      --
5325               -- Following query is changed as per TCA obsolescence project.
5326               SELECT	CUST_ACCT.PRICE_LIST_ID
5327               INTO	x_lines_rec.PRICE_LIST_ID
5328               FROM	HZ_CUST_ACCOUNTS CUST_ACCT
5329               WHERE	CUST_ACCT.CUST_ACCOUNT_ID = x_header_rec.customer_id;
5330           EXCEPTION
5331                WHEN NO_DATA_FOUND THEN
5332 		  --
5333   		  IF (l_debug <> -1) THEN
5334                      rlm_core_sv.dlog(C_DEBUG,'EXCEPTION: NO_DATA_FOUND');
5335                   END IF;
5336 		  --
5337                   raise e_CustMissingPriceList;
5338 		  --
5339                WHEN OTHERS THEN
5340 		  --
5341   		  IF (l_debug <> -1) THEN
5342                      rlm_core_sv.dlog(C_DEBUG,'EXCEPTION:'||SUBSTR(SQLERRM,1,200));
5343                   END IF;
5344 		  --
5345                   raise ;
5346           END;
5347        END IF;
5348  */
5349        --
5350        IF x_lines_rec.price_list_id is NOT NULL THEN
5351           --
5352           v_progress := '060';
5353 	  --
5354   	  IF (l_debug <> -1) THEN
5355              rlm_core_sv.dlog(C_DEBUG,'Price list id',x_lines_rec.price_list_id);
5356           END IF;
5357 	  --
5358           BEGIN
5359              --
5360              SELECT oep.name
5361              INTO   v_Price_list_name
5362              FROM   qp_list_headers oep
5363              WHERE  oep.LIST_HEADER_ID = x_lines_rec.price_list_id
5364              AND    x_lines_rec.start_date_time BETWEEN
5365                     nvl(oep.start_date_active,
5366                      to_date('01/01/1900','dd/mm/yyyy'))  AND
5367                     nvl(oep.end_date_active,to_date('31/12/4712','dd/mm/yyyy'));
5368              --
5369              IF (l_debug <> -1) THEN
5370                 rlm_core_sv.dlog(C_DEBUG, 'Price list name', v_Price_list_name);
5371              END IF;
5372              --
5373           EXCEPTION
5374              WHEN NO_DATA_FOUND THEN
5375                   raise e_PriceListInactive;
5376           END;
5377           --
5378        END IF; /* checking effective dates for price lists */
5379        --
5380     END IF; /* Item detail type in (0,1,2)*/
5381     --
5382     v_progress := '070';
5383     --
5384   END IF;
5385   --
5386   IF (l_debug <> -1) THEN
5387      rlm_core_sv.dpop(C_SDEBUG);
5388   END IF;
5389   --
5390 EXCEPTION
5391   --
5392   WHEN e_PriceListInactive THEN
5393     -- Waning message
5394     rlm_message_sv.app_error(
5395             x_ExceptionLevel => rlm_message_sv.k_warn_level,
5396             x_MessageName => 'RLM_PRICE_LIST_INACTIVE',
5397             x_InterfaceHeaderId => x_lines_rec.header_id,
5398             x_InterfaceLineId => x_lines_rec.line_id,
5399             x_token1=>'PRICE_LIST',
5400             x_value1=>v_Price_list_name,
5401             x_token2=>'START_DATE',
5402             x_value2=>x_lines_rec.start_date_time,
5403             x_ValidationType => 'PURCHASE_ORDER');
5404     --
5405     IF (l_debug <> -1) THEN
5406        rlm_core_sv.dpop(C_SDEBUG,'RLM_PRICE_LIST_INACTIVE');
5407     END IF;
5408     --
5409   WHEN e_POAgreementDiff THEN
5410     -- Waning message
5411     rlm_message_sv.app_error(
5412             x_ExceptionLevel => rlm_message_sv.k_warn_level,
5413             x_MessageName => 'RLM_WARN_SETUP_PO_MISMATCH',
5414             x_InterfaceHeaderId => x_lines_rec.header_id,
5415             x_InterfaceLineId => x_lines_rec.line_id,
5416             x_token1=>'PRICING_CONTRACT',
5417             x_value1=>v_Agreement_Name,
5418             x_token2=>'PURCHASE_ORDER',
5419             x_value2=>x_lines_rec.cust_po_number,
5420             x_token3=>'SETUP_PURCHASE_ORDER',
5421             x_value3=>v_OE_Purchase_Order,
5422             x_ValidationType => 'PURCHASE_ORDER');
5423     --
5424     IF (l_debug <> -1) THEN
5425        rlm_core_sv.dlog(C_DEBUG,'progress',v_Progress);
5426        rlm_core_sv.dpop(C_SDEBUG,'RLM_SETUP_PO_MISMATCH');
5427     END IF;
5428     --
5429   WHEN e_POAgreementInv THEN
5430     -- Waning message
5431     rlm_message_sv.app_error(
5432             x_ExceptionLevel => rlm_message_sv.k_warn_level,
5433             x_MessageName => 'RLM_WARN_PO_AGREEMENT_ID',
5434             x_InterfaceHeaderId => x_lines_rec.header_id,
5435             x_InterfaceLineId => x_lines_rec.line_id,
5436             x_token1=>'PURCHASE_ORDER',
5437             x_value1=>x_lines_rec.cust_po_number,
5438             x_ValidationType => 'PURCHASE_ORDER');
5439     --
5440     IF (l_debug <> -1) THEN
5441        rlm_core_sv.dlog(C_DEBUG,'progress',v_Progress);
5442        rlm_core_sv.dpop(C_SDEBUG,'RLM_WARN_PO_AGREEMENT_ID');
5443     END IF;
5444     --
5445   WHEN e_POWithoutAgreement THEN
5446     -- Warning message
5447     rlm_message_sv.app_error(
5448             x_ExceptionLevel => rlm_message_sv.k_warn_level,
5449             x_MessageName => 'RLM_WARN_PO_WITHOUT_AGREEMENT',
5450             x_InterfaceHeaderId => x_lines_rec.header_id,
5451             x_InterfaceLineId => x_lines_rec.line_id,
5452             x_token1=>'PURCHASE_ORDER',
5453             x_value1=>x_lines_rec.cust_po_number,
5454             x_ValidationType => 'PURCHASE_ORDER');
5455     --
5456     IF (l_debug <> -1) THEN
5457        rlm_core_sv.dlog(C_DEBUG,'progress',v_Progress);
5458        rlm_core_sv.dpop(C_SDEBUG,'RLM_WARN_PO_WITHOUT_AGREEMENT');
5459     END IF;
5460     --
5461   WHEN e_CustMissingPriceList THEN
5462     --
5463     x_lines_rec.process_status := rlm_core_sv.k_PS_ERROR;
5464     --
5465     rlm_message_sv.app_error(
5466             x_ExceptionLevel => rlm_message_sv.k_error_level,
5467             x_MessageName => 'RLM_CUST_WITHOUT_PRICELIST',
5468             x_InterfaceHeaderId => x_lines_rec.header_id,
5469             x_InterfaceLineId => x_lines_rec.line_id,
5470             x_token1=> 'CUSTEXT',
5471             x_value1=> nvl(x_header_rec.customer_ext,
5472                            x_header_rec.ece_tp_translator_code),
5473             x_ValidationType => 'PURCHASE_ORDER');
5474     --
5475     IF (l_debug <> -1) THEN
5476        rlm_core_sv.dlog(C_DEBUG,'progress',v_Progress);
5477        rlm_core_sv.dpop(C_SDEBUG,'RLM_CUST_WITHOUT_PRICELIST');
5478     END IF;
5479     --
5480   WHEN OTHERS THEN
5481     --
5482     x_lines_rec.process_status := rlm_core_sv.k_PS_ERROR;
5483     rlm_message_sv.sql_error('rlm_validatedemand_sv.DerivePurchaseOrder',
5484                                                  v_Progress);
5485     --
5486     IF (l_debug <> -1) THEN
5487        rlm_core_sv.dpop(C_SDEBUG,'EXCEPTION: '||SUBSTR(SQLERRM,1,200));
5488     END IF;
5489     --
5490     raise;
5491     --
5492 END DerivePurchaseOrder;
5493 
5494 /*===========================================================================
5495 
5496 	PROCEDURE NAME:  DeriveCustomerID
5497 
5498 ===========================================================================*/
5499 PROCEDURE DeriveCustomerID(x_header_rec  IN OUT NOCOPY RLM_INTERFACE_HEADERS%ROWTYPE,
5500           x_lines_rec IN OUT NOCOPY RLM_INTERFACE_LINES%ROWTYPE)
5501 IS
5502 
5503   v_progress     VARCHAR2(3) := '010';
5504   --
5505   v_ReturnStatus        VARCHAR2(10);
5506   v_MsgCount            NUMBER;
5507   v_MsgData             VARCHAR2(2000);
5508   v_Customer            VARCHAR2(35);
5509   v_ShipToLoc           VARCHAR2(35);
5510   v_shipToAddressId	NUMBER;
5511   v_tmp_ship            NUMBER;
5512   e_InvalidCustomerExt  EXCEPTION;
5513   e_NullCustomerExt     EXCEPTION;
5514   e_NullShipToExt       EXCEPTION;
5515   --
5516 BEGIN
5517      --
5518      IF (l_debug <> -1) THEN
5519         rlm_core_sv.dpush(C_SDEBUG,'DeriveCustomerID');
5520      END IF;
5521      --
5522      --
5523      v_progress := '020';
5524      --
5525      -- if customer_id is not null then we do not need to derive the cust id
5526      -- again as it has already been allocated before
5527      -- Choose the Customer based on customer_ext or ece_tp_translator_code
5528 
5529      IF x_header_rec.customer_id IS NULL  THEN
5530         --
5531         IF x_header_rec.customer_ext IS NOT NULL THEN
5532           --
5533           IF (l_debug <> -1) THEN
5534              rlm_core_sv.dlog(C_DEBUG,'customer_ext ',x_header_rec.customer_ext);
5535           END IF;
5536 	  --
5537           v_Customer := x_header_rec.customer_ext;
5538           --
5539         ELSIF  x_header_rec.ece_tp_translator_code IS NOT NULL THEN
5540           --
5541 	  IF (l_debug <> -1) THEN
5542              rlm_core_sv.dlog(C_DEBUG,'ece_tp_translator_code',
5543                                      x_header_rec.ece_tp_translator_code);
5544           END IF;
5545 	  --
5546           v_Customer := x_header_rec.ece_tp_translator_code;
5547           --
5548         END IF;
5549         -- CR Changes
5550         -- Choose the Ship To Location based on
5551         -- ece_tp_location_code_ext first.  If this is null, look for
5552         -- line level cust_ship_to_ext
5553 
5554         IF x_header_rec.ece_tp_location_code_ext IS NOT NULL THEN
5555           --
5556           IF (l_debug <> -1) THEN
5557              rlm_core_sv.dlog(C_DEBUG,'ece_tp_location_code_ext',
5558                                          x_header_rec.ece_tp_location_code_ext);                   END IF;
5559           --
5560           v_ShipToLoc := x_header_rec.ece_tp_location_code_ext;
5561           --
5562         ELSIF x_lines_rec.cust_ship_to_ext IS NOT NULL THEN
5563           --
5564   	  IF (l_debug <> -1) THEN
5565              rlm_core_sv.dlog(C_DEBUG,'cust_ship_to_ext ',
5566                                              x_lines_rec.cust_ship_to_ext);
5567           END IF;
5568 	  --
5569           v_ShipToLoc := x_lines_rec.cust_ship_to_ext;
5570 --          g_LineLevelShipTo := TRUE;
5571           --
5572         END IF;
5573 
5574         IF v_Customer IS NOT NULL THEN
5575           --
5576           v_progress := '030';
5577 	  --
5578   	  IF (l_debug <> -1) THEN
5579              rlm_core_sv.dlog(C_DEBUG,'v_Customer ', v_Customer);
5580              rlm_core_sv.dlog(C_DEBUG,'v_ShipToLoc ', v_ShipToLoc);
5581           END IF;
5582           --
5583           ece_trading_partners_pub.get_tp_address(1, NULL, NULL, NULL,
5584                                         NULL, v_ReturnStatus, v_MsgCount,
5585                                         v_MsgData,
5586                                         v_Customer,
5587                                         v_ShipToLoc,
5588                                         'CUSTOMER',
5589                                         x_header_rec.customer_id,
5590                                         v_shipToAddressId);
5591           --
5592           IF (l_debug <> -1) THEN
5593              rlm_core_sv.dlog(C_DEBUG,'customer_id ',x_header_rec.customer_id);
5594              rlm_core_sv.dlog(C_DEBUG,'ship_to_address_id ',
5595                                             v_shipToAddressId);
5596           END IF;
5597           --
5598            IF x_header_rec.customer_id IS NULL THEN
5599              IF v_ShipToLoc IS NOT NULL THEN
5600                BEGIN
5601                   v_progress := '060';
5602                    --
5603   		   IF (l_debug <> -1) THEN
5604                       rlm_core_sv.dlog(C_DEBUG,'v_Customer ', v_Customer);
5605                       rlm_core_sv.dlog(C_DEBUG,'v_ShipToLoc ', v_ShipToLoc);
5606                    END IF;
5607                    --
5608                    -- Following query is changed as per TCA obsolescence project.
5609                    SELECT DISTINCT ACCT_SITE.CUST_ACCOUNT_ID
5610                    INTO   x_header_rec.customer_id
5611                    FROM   HZ_CUST_ACCT_SITES ACCT_SITE ,
5612                           ece_tp_headers eth
5613                    WHERE  ACCT_SITE.tp_header_id = eth.tp_header_id
5614                    AND    ACCT_SITE.ece_tp_location_code = v_ShipToLoc
5615                    AND    eth.TP_REFERENCE_EXT1 = v_Customer;
5616                   --
5617   	          IF (l_debug <> -1) THEN
5618                      rlm_core_sv.dlog(C_DEBUG,'customer_id ',
5619                                                  x_header_rec.customer_id);
5620                   END IF;
5621                   --
5622                   IF x_header_rec.ece_tp_location_code_ext IS NULL THEN
5623                    g_LineLevelShipTo := TRUE;
5624                   END IF;
5625                   --
5626                EXCEPTION
5627                   WHEN NO_DATA_FOUND THEN
5628                     raise e_InvalidCustomerExt;
5629                   WHEN OTHERS THEN
5630                     raise;
5631                END;
5632              ELSE
5633                  raise e_NullShipToExt;
5634              END IF; /*If v_ShipToLoc Not Null */
5635            END IF; /*If customer_id NULL */
5636           --
5637         ELSE
5638            raise e_NullCustomerExt;
5639         END IF; /*If v_Customer Not Null */
5640      ELSE
5641       --{
5642       IF (l_debug <> -1) THEN
5643         rlm_core_sv.dlog(C_DEBUG,'customer_id ', x_header_rec.customer_id);
5644       END IF;
5645       --}
5646      END IF;
5647      --
5648      IF FND_GLOBAL.CONC_REQUEST_ID = -1 THEN
5649              ec_debug.disable_debug;
5650      END IF;
5651      --
5652      v_progress := '080';
5653      --
5654      IF (l_debug <> -1) THEN
5655         rlm_core_sv.dpop(C_SDEBUG);
5656      END IF;
5657      --
5658 EXCEPTION
5659   --
5660   WHEN NO_DATA_FOUND THEN
5661     -- Warning
5662 /*
5663     rlm_message_sv.app_error(
5664                 x_ExceptionLevel => rlm_message_sv.k_warn_level,
5665                 x_MessageName => 'RLM_PRIMARYADDRESS_NOT_DERIVED',
5666                 x_InterfaceHeaderId => x_lines_rec.header_id,
5667                 x_InterfaceLineId => x_lines_rec.line_id,
5668                 x_ValidationType => 'CUSTOMER');
5669 
5670     rlm_core_sv.dpop(C_SDEBUG,'WARNING: RLM_PRIMARYADDRESS_NOT_DERIVED');
5671 */
5672     --
5673     IF (l_debug <> -1) THEN
5674        rlm_core_sv.dlog(C_DEBUG,'progress',v_Progress);
5675        rlm_core_sv.dpop(C_SDEBUG);
5676     END IF;
5677     --
5678   WHEN e_NullCustomerExt THEN
5679     --
5680     x_lines_rec.process_status := rlm_core_sv.k_PS_ERROR;
5681     g_Schedule_PS := rlm_core_sv.k_PS_ERROR;
5682     --
5683     rlm_message_sv.app_error(
5684                 x_ExceptionLevel => rlm_message_sv.k_error_level,
5685                 x_MessageName => 'RLM_CUSTOMER_NULL',
5686                 x_InterfaceHeaderId => x_lines_rec.header_id,
5687                 x_InterfaceLineId => x_lines_rec.line_id,
5688                 x_ValidationType => 'CUSTOMER');
5689     --
5690     IF (l_debug <> -1) THEN
5691        rlm_core_sv.dlog(C_DEBUG,'progress',v_Progress);
5692        rlm_core_sv.dpop(C_SDEBUG,'EXCEPTION: RLM_CUSTOMER_NULL');
5693     END IF;
5694     --
5695   WHEN e_NullShipToExt THEN
5696     --
5697     x_lines_rec.process_status := rlm_core_sv.k_PS_ERROR;
5698     g_Schedule_PS := rlm_core_sv.k_PS_ERROR;
5699     --
5700     rlm_message_sv.app_error(
5701                 x_ExceptionLevel => rlm_message_sv.k_error_level,
5702                 x_MessageName => 'RLM_SHIPTO_NULL',
5703                 x_InterfaceHeaderId => x_lines_rec.header_id,
5704                 x_InterfaceLineId => x_lines_rec.line_id,
5705                 x_token1=>'CUSTOMER_EXT',
5706                 x_value1=>v_Customer,
5707                 x_ValidationType => 'CUSTOMER');
5708     --
5709     IF (l_debug <> -1) THEN
5710        rlm_core_sv.dlog(C_DEBUG,'progress',v_Progress);
5711        rlm_core_sv.dpop(C_SDEBUG,'EXCEPTION: RLM_SHIPTO_NULL');
5712     END IF;
5713     --
5714   WHEN e_InvalidCustomerExt THEN
5715     --
5716     x_lines_rec.process_status := rlm_core_sv.k_PS_ERROR;
5717     g_Schedule_PS := rlm_core_sv.k_PS_ERROR;
5718     --
5719     IF x_header_rec.customer_ext IS NOT NULL THEN
5720        --
5721        IF x_lines_rec.cust_ship_to_ext IS NOT NULL THEN
5722            --
5723            rlm_message_sv.app_error(
5724                        x_ExceptionLevel => rlm_message_sv.k_error_level,
5725                        x_MessageName => 'RLM_CUST_SHIP_TO_INVALID',
5726                        x_InterfaceHeaderId => x_lines_rec.header_id,
5727                        x_InterfaceLineId => x_lines_rec.line_id,
5728                        x_token1=>'CUSTOMER_EXT',
5729                        x_value1=>x_header_rec.customer_ext,
5730                        x_token2=>'SHIP_TO',
5731                        x_value2=>x_lines_rec.cust_ship_to_ext,
5732                        x_ValidationType => 'CUSTOMER');
5733            --
5734   	   IF (l_debug <> -1) THEN
5735               rlm_core_sv.dlog(C_DEBUG,'progress',v_Progress);
5736               rlm_core_sv.dpop(C_SDEBUG,'EXCEPTION: RLM_CUST_SHIP_TO_INVALID');
5737            END IF;
5738            --
5739        ELSIF x_header_rec.ece_tp_location_code_ext IS NOT NULL THEN
5740            --
5741            rlm_message_sv.app_error(
5742                        x_ExceptionLevel => rlm_message_sv.k_error_level,
5743                        x_MessageName => 'RLM_CUST_TPLOC_INVALID',
5744                        x_InterfaceHeaderId => x_lines_rec.header_id,
5745                        x_InterfaceLineId => x_lines_rec.line_id,
5746                        x_token1=>'CUSTOMER_EXT',
5747                        x_value1=>x_header_rec.customer_ext,
5748                        x_token2=>'TP_LOCATION',
5749                        x_value2=>x_header_rec.ece_tp_location_code_ext,
5750                        x_ValidationType => 'CUSTOMER');
5751            --
5752   	   IF (l_debug <> -1) THEN
5753               rlm_core_sv.dlog(C_DEBUG,'progress',v_Progress);
5754               rlm_core_sv.dpop(C_SDEBUG,'EXCEPTION: RLM_CUST_TPLOC_INVALID');
5755            END IF;
5756            --
5757        END IF;
5758        --
5759     ELSIF x_header_rec.ece_tp_translator_code IS NOT NULL THEN
5760        --
5761        IF x_lines_rec.cust_ship_to_ext IS NOT NULL THEN
5762           --
5763           rlm_message_sv.app_error(
5764                       x_ExceptionLevel => rlm_message_sv.k_error_level,
5765                       x_MessageName => 'RLM_TP_TRANSL_SHIPTO_INVALID',
5766                       x_InterfaceHeaderId => x_lines_rec.header_id,
5767                       x_InterfaceLineId => x_lines_rec.line_id,
5768                       x_token1=>'TP_TRANSLATOR',
5769                       x_value1=>x_header_rec.ece_tp_translator_code,
5770                       x_token2=>'SHIP_TO',
5771                       x_value2=>x_lines_rec.cust_ship_to_ext,
5772                       x_ValidationType => 'CUSTOMER');
5773           --
5774   	  IF (l_debug <> -1) THEN
5775              rlm_core_sv.dlog(C_DEBUG,'progress',v_Progress);
5776              rlm_core_sv.dpop(C_SDEBUG,'EXCEPTION: RLM_TP_TRANSL_SHIPTO_INVALID');
5777           END IF;
5778           --
5779        ELSIF x_header_rec.ece_tp_location_code_ext IS NOT NULL THEN
5780           --
5781           rlm_message_sv.app_error(
5782                       x_ExceptionLevel => rlm_message_sv.k_error_level,
5783                       x_MessageName => 'RLM_TP_TRANSL_LOC_CODE_INVALID',
5784                       x_InterfaceHeaderId => x_lines_rec.header_id,
5785                       x_InterfaceLineId => x_lines_rec.line_id,
5786                       x_token1=>'TP_TRANSLATOR',
5787                       x_value1=>x_header_rec.ece_tp_translator_code,
5788                       x_token2=>'TP_LOCATION',
5789                       x_value2=>x_header_rec.ece_tp_location_code_ext,
5790                       x_ValidationType => 'CUSTOMER');
5791           --
5792   	  IF (l_debug <> -1) THEN
5793              rlm_core_sv.dlog(C_DEBUG,'progress',v_Progress);
5794              rlm_core_sv.dpop(C_SDEBUG,'EXCEPTION: RLM_TP_TRANSL_LOC_CODE_INVALID');
5795           END IF;
5796           --
5797        END IF;
5798        --
5799     END IF;
5800     --
5801   WHEN OTHERS THEN
5802     --
5803     x_lines_rec.process_status := rlm_core_sv.k_PS_ERROR;
5804     g_Schedule_PS := rlm_core_sv.k_PS_ERROR;
5805     rlm_message_sv.sql_error('rlm_validatedemand_sv.DeriveCustomerID',
5806                                                                  v_Progress);
5807     --
5808     IF (l_debug <> -1) THEN
5809        rlm_core_sv.dpop(C_SDEBUG,'EXCEPTION: '||SUBSTR(SQLERRM,1,200));
5810     END IF;
5811     --
5812     raise;
5813     --
5814 END DeriveCustomerID;
5815 
5816 /*===========================================================================
5817 
5818 	PROCEDURE NAME:  DeriveShipFromOrg
5819 
5820 ===========================================================================*/
5821 PROCEDURE DeriveShipFromOrg(x_header_rec  IN RLM_INTERFACE_HEADERS%ROWTYPE,
5822                             x_lines_rec IN OUT NOCOPY RLM_INTERFACE_LINES%ROWTYPE)
5823 IS
5824   --
5825   l_org_code  VARCHAR2(30);
5826   v_progress  VARCHAR2(3) := '010';
5827   e_NoDataFound  EXCEPTION;
5828   e_ManyRows     EXCEPTION;
5829   --
5830 BEGIN
5831   --
5832   IF (l_debug <> -1) THEN
5833      rlm_core_sv.dpush(C_SDEBUG,'DeriveShipFromOrg');
5834      rlm_core_sv.dlog(C_DEBUG,'cust_ship_from_org_ext',
5835                                  x_lines_rec.cust_ship_from_org_ext);
5836      rlm_core_sv.dlog(C_DEBUG,'ship_from_org_id ', x_lines_rec.ship_from_org_id);
5837   END IF;
5838   --
5839   IF rlm_message_sv.check_dependency('SHIP_FROM_ORG') THEN
5840     --
5841     IF x_lines_rec.ship_from_org_id IS NULL THEN
5842     --
5843      IF x_lines_rec.cust_ship_from_org_ext IS NOT NULL THEN
5844        --
5845        v_progress := '020';
5846        --
5847        IF (l_debug <> -1) THEN
5848           rlm_core_sv.dlog(C_DEBUG,'cust_ship_from_org_ext ',
5849               x_lines_rec.cust_ship_from_org_ext);
5850           rlm_core_sv.dlog(C_DEBUG,'ship_to_address_id ',
5851               x_lines_rec.ship_to_address_id);
5852        END IF;
5853        --
5854        BEGIN
5855          --
5856   	 IF (l_debug <> -1) THEN
5857             rlm_core_sv.dlog(C_DEBUG,'Customer Address Level');
5858          END IF;
5859 	 --
5860          SELECT ship_from_org_id
5861          INTO   x_lines_rec.ship_from_org_id
5862          FROM   rlm_cust_shipto_terms t
5863           WHERE  customer_id = x_header_rec.customer_id
5864          AND    address_id  = nvl(x_lines_rec.ship_to_address_id,address_id)
5865          AND    cust_assign_supplier_cd =
5866                               x_lines_rec.cust_ship_from_org_ext;
5867          --
5868          v_progress := '030';
5869 	 --
5870 	 IF (l_debug <> -1) THEN
5871             rlm_core_sv.dlog(C_DEBUG,'organization id ' ||
5872                                  x_lines_rec.ship_from_org_id);
5873          END IF;
5874          --
5875        EXCEPTION
5876           --
5877           WHEN NO_DATA_FOUND THEN
5878              --
5879              BEGIN
5880                --
5881   	       IF (l_debug <> -1) THEN
5882                   rlm_core_sv.dlog(C_DEBUG,'Customer Level');
5883                END IF;
5884                --
5885                SELECT ship_from_org_id
5886                INTO   x_lines_rec.ship_from_org_id
5887                FROM   rlm_cust_shipto_terms t
5888                WHERE  customer_id = x_header_rec.customer_id AND
5889                       address_id IS NULL  AND
5890                       cust_assign_supplier_cd =
5891                                     x_lines_rec.cust_ship_from_org_ext;
5892                --
5893                v_progress := '040';
5894 	       --
5895   	       IF (l_debug <> -1) THEN
5896                   rlm_core_sv.dlog(C_DEBUG,'organization id ' ||
5897                                    x_lines_rec.ship_from_org_id);
5898                END IF;
5899              --
5900              EXCEPTION
5901                 WHEN NO_DATA_FOUND THEN
5902                      raise e_NoDataFound;
5903                 WHEN TOO_MANY_ROWS THEN
5904 		     --
5905   		     IF (l_debug <> -1) THEN
5906                         rlm_core_sv.dlog(C_DEBUG,'organization id ' ||
5907                                              x_lines_rec.ship_from_org_id);
5908                      END IF;
5909 	 	     --
5910                      raise e_ManyRows;
5911              END;
5912 	     --
5913           WHEN TOO_MANY_ROWS THEN
5914 	     --
5915   	     IF (l_debug <> -1) THEN
5916                 rlm_core_sv.dlog(C_DEBUG,'organization id ' ||
5917                                       x_lines_rec.ship_from_org_id);
5918              END IF;
5919 	     --
5920              raise e_ManyRows;
5921 	     --
5922           WHEN OTHERS THEN
5923              --
5924              rlm_message_sv.sql_error('rlm_validatedemand_sv.DeriveShipFromOrg',
5925                                                      v_Progress);
5926 	     --
5927   	     IF (l_debug <> -1) THEN
5928                 rlm_core_sv.dpop(C_SDEBUG,'EXCEPTION: '||SUBSTR(SQLERRM,1,200));
5929              END IF;
5930 	     --
5931              raise;
5932        END;
5933        --
5934     END IF;
5935 
5936     --
5937    ELSE
5938      --
5939      IF (l_debug <> -1) THEN
5940         rlm_core_sv.dlog(C_DEBUG,'ship_from_org_id ',x_lines_rec.ship_from_org_id);
5941      END IF;
5942      --
5943    END IF;
5944    --
5945    v_progress := '060';
5946    --
5947   END IF;
5948   --
5949   IF (l_debug <> -1) THEN
5950      rlm_core_sv.dpop(C_SDEBUG);
5951   END IF;
5952   --
5953 EXCEPTION
5954   --
5955   WHEN NO_DATA_FOUND or e_NoDataFound THEN
5956     --
5957     --2859506. ATP items should send null values for ship from org ext
5958     IF x_lines_rec.cust_ship_from_org_ext IS NOT NULL THEN
5959            --
5960        x_lines_rec.process_status := rlm_core_sv.k_PS_ERROR;
5961        --Bug Fix 2892076 added call to procedure app_error
5962 
5963        rlm_message_sv.app_error(
5964                     x_ExceptionLevel => rlm_message_sv.k_error_level,
5965                     x_MessageName => 'RLM_SHIPFROM_NOT_DERIVED',
5966                     x_InterfaceHeaderId => x_lines_rec.header_id,
5967                     x_InterfaceLineId => x_lines_rec.line_id,
5968                     x_token1=>'SHIP_FROM_ORG_EXT',
5969                     x_value1=>x_lines_rec.cust_ship_from_org_ext,
5970                     x_ValidationType => 'SHIP_FROM_ORG');
5971         --
5972         IF (l_debug <> -1) THEN
5973            rlm_core_sv.dlog(C_DEBUG,'progress',v_Progress);
5974            rlm_core_sv.dpop(C_SDEBUG,'EXCEPTION: RLM_SHIPFROM_NOT_DERIVED');
5975         END IF;
5976         --
5977         --raise; /* Bug 4395540 */
5978         --BUG 5098241 commented the raise
5979         --
5980     ELSE
5981       -- global_atp to be derived by Setup API later
5982       x_lines_rec.ship_from_org_id := NULL;
5983       --
5984       IF (l_debug <> -1) THEN
5985         rlm_core_sv.dpop(C_SDEBUG,'Null ship from org id ');
5986       END IF;
5987     END IF;
5988     --
5989   WHEN e_ManyRows THEN
5990     --
5991     -- global_atp to be derived by Setup API later
5992     x_lines_rec.ship_from_org_id := NULL;
5993     --
5994     IF (l_debug <> -1) THEN
5995        rlm_core_sv.dpop(C_SDEBUG,'In too many rows use default SF');
5996     END IF;
5997     --
5998   WHEN OTHERS THEN
5999     --
6000     x_lines_rec.process_status := rlm_core_sv.k_PS_ERROR;
6001     rlm_message_sv.sql_error('rlm_validatedemand_sv.DeriveShipFromOrg', v_Progress);
6002     --
6003     IF (l_debug <> -1) THEN
6004        rlm_core_sv.dpop(C_SDEBUG,'EXCEPTION: '||SUBSTR(SQLERRM,1,200));
6005     END IF;
6006     --
6007     raise;
6008     --
6009 END DeriveShipFromOrg;
6010 
6011 /*===========================================================================
6012 
6013 	PROCEDURE NAME:  derive_intmd_shipto_id
6014 
6015 ===========================================================================*/
6016 PROCEDURE DeriveIntrmdShipToID(x_header_rec IN RLM_INTERFACE_HEADERS%ROWTYPE,
6017                                x_lines_rec IN OUT NOCOPY RLM_INTERFACE_LINES%ROWTYPE)
6018 IS
6019   --
6020   v_progress            VARCHAR2(3) := '010';
6021   v_int_shp_to_cust_id     NUMBER;
6022   e_InvalidIntmdShipTo     EXCEPTION;
6023   e_invalidIntmdShiptoId   EXCEPTION;
6024   e_InactiveIntmdShipTo    EXCEPTION;
6025   e_IntrmdSiteUseInv       EXCEPTION;
6026   e_InactiveIntShipSiteUse EXCEPTION;
6027   e_InactiveIntShipTo      EXCEPTION;
6028   v_addStatus              VARCHAR2(1) := 'I';
6029   v_siteUseStatus          VARCHAR2(1) := 'I';
6030   --
6031 BEGIN
6032   --
6033   IF (l_debug <> -1) THEN
6034      rlm_core_sv.dpush(C_SDEBUG,'DeriveIntrmdShipToID');
6035      rlm_core_sv.dlog(C_DEBUG,'Cust_Intrmd_Ship_To_Ext',
6036                                         x_lines_rec.cust_intrmd_ship_to_ext);
6037      rlm_core_sv.dlog(C_DEBUG,'IntrmdShipToID',x_lines_rec.intrmd_ship_to_id);
6038   END IF;
6039   --
6040 --  IF rlm_message_sv.check_dependency('SHIPTO') THEN
6041     --
6042     IF x_lines_rec.intrmd_ship_to_id IS NULL AND
6043        x_lines_rec.cust_intrmd_ship_to_ext IS NOT NULL THEN
6044        --{
6045        v_progress := '020';
6046        --
6047        IF (l_debug <> -1) THEN
6048           rlm_core_sv.dlog(C_DEBUG,'cust_intrmd_ship_to_ext ',
6049                  x_lines_rec.cust_intrmd_ship_to_ext);
6050        END IF;
6051        --
6052        BEGIN
6053        --
6054        -- Following query is changed as per TCA obsolescence project.
6055        -- R12 Perf Bug 4129291 : Use HCSU also in query below
6056        --
6057          SELECT	ACCT_SITE.CUST_ACCT_SITE_ID,
6058 		ACCT_SITE.STATUS, SITE_USES.STATUS,
6059                 SITE_USES.site_use_id
6060          INTO	x_lines_rec.intrmd_ship_to_id ,
6061 		v_addStatus, v_siteUseStatus,
6062                 x_lines_rec.intrmd_st_site_use_id
6063          FROM	HZ_CUST_ACCT_SITES	 ACCT_SITE,
6064                 HZ_CUST_SITE_USES_ALL    SITE_USES
6065          WHERE	acct_site.ece_tp_location_code =
6066                  x_lines_rec.cust_intrmd_ship_to_ext
6067          AND    acct_site.cust_acct_site_id = site_uses.cust_acct_site_id
6068          AND    site_uses.site_use_code = 'SHIP_TO'
6069          AND    acct_site.org_id = site_uses.org_id
6070          AND   cust_account_id IN
6071                 (SELECT to_number(x_header_rec.customer_id) from dual
6072                  UNION
6073                  SELECT cust_account_id
6074                  FROM hz_cust_acct_relate_all
6075                  WHERE related_cust_account_id = x_header_rec.customer_id
6076                  AND ship_to_flag = 'Y'
6077                  AND status = 'A'
6078                  AND org_id = x_header_rec.org_id
6079                  AND oe_sys_parameters.value('CUSTOMER_RELATIONSHIPS_FLAG') IN ('Y', 'A'));
6080          --
6081   	 IF (l_debug <> -1) THEN
6082             rlm_core_sv.dlog(C_DEBUG,'intrmd_ship_to_id ',
6083                                x_lines_rec.intrmd_ship_to_id);
6084             rlm_core_sv.dlog(C_DEBUG, 'Intrmd ST Site Use ID',
6085                              x_lines_rec.intrmd_st_site_use_id);
6086             rlm_core_sv.dlog(C_DEBUG, 'Address Status', v_addStatus);
6087             rlm_core_sv.dlog(C_DEBUG, 'Site Use Status', v_siteUseStatus);
6088          END IF;
6089          --
6090          EXCEPTION
6091          -- The code is removed because above same query was written.
6092             WHEN NO_DATA_FOUND THEN
6093                    raise NO_DATA_FOUND;
6094               --
6095          --
6096          END;
6097          --
6098          IF v_addStatus = 'I' THEN
6099            raise e_InactiveIntShipTo;
6100          END IF;
6101          --
6102          IF v_siteUseStatus = 'I' THEN
6103            RAISE e_InactiveIntShipSiteUse;
6104          END IF;
6105        --}
6106     ELSIF x_lines_rec.intrmd_ship_to_id IS NOT NULL THEN
6107        --intrmd_ship_to_address_id is not null
6108        --{
6109        BEGIN
6110           --
6111           -- Following query is changed as per TCA obsolescence project.
6112           -- R12 Perf. Bug 4129291 : Use HCSU in query below
6113           --
6114           SELECT hcas.status, cust_account_id, hcsu.status,
6115                  hcsu.site_use_id
6116           INTO   v_addStatus, v_int_shp_to_cust_id, v_siteUseStatus,
6117                  x_lines_rec.intrmd_st_site_use_id
6118           FROM   hz_cust_acct_sites_all hcas, hz_cust_site_uses_all hcsu
6119           WHERE  hcas.cust_acct_site_id = x_lines_rec.intrmd_ship_to_id
6120           AND    hcas.cust_acct_site_id = hcsu.cust_acct_site_id
6121           AND    hcsu.site_use_code = 'SHIP_TO'
6122           AND    hcas.org_id = hcsu.org_id;
6123           --
6124           IF (l_debug <> -1) THEN
6125              rlm_core_sv.dlog(C_DEBUG, 'intermdiate ship-to customer id',
6126                               v_int_shp_to_cust_id);
6127              rlm_core_sv.dlog(C_DEBUG,'customer_id', x_header_rec.customer_id);
6128              rlm_core_sv.dlog(C_DEBUG, 'Intrmd ST Site Use ID',
6129                               x_lines_rec.intrmd_st_site_use_id);
6130              rlm_core_sv.dlog(C_DEBUG, 'Address Status', v_addStatus);
6131              rlm_core_sv.dlog(C_DEBUG, 'Site Use Status', v_siteUseStatus);
6132           END IF;
6133           --
6134           IF v_addStatus = 'I' THEN
6135              raise e_InactiveIntmdShipTo;
6136           END IF;
6137           --
6138           IF v_siteUseStatus = 'I' THEN
6139             RAISE e_InactiveIntShipSiteUse;
6140           END IF;
6141           --
6142           IF NOT CustomerRelationship(x_header_rec.customer_id,
6143                                 v_int_shp_to_cust_id,
6144                                 x_header_rec.header_id,
6145                                 'SHIP_TO') THEN
6146             --
6147             IF (l_debug <> -1) THEN
6148                rlm_core_sv.dlog(C_DEBUG,'Invalid customer relationship');
6149             END IF;
6150             --
6151             raise e_invalidIntmdShiptoId;
6152             --
6153           END IF;
6154           --
6155        EXCEPTION
6156           --
6157           WHEN NO_DATA_FOUND THEN
6158                raise e_InvalidIntmdShipto;
6159        END;
6160        --}
6161     END IF;
6162     --
6163     x_lines_rec.INTMED_SHIP_TO_ORG_ID := x_lines_rec.intrmd_st_site_use_id;
6164     --
6165     /*
6166      * R12 Perf Bug 4129291
6167      * We do not need this segment of code below since the status
6168      * of site use record is included in queries above
6169      *
6170     IF x_lines_rec.intrmd_ship_to_id IS NOT NULL THEN
6171       --{
6172       BEGIN
6173          --
6174          -- Following query is changed as per TCA obsolescence project.
6175          SELECT site_use_id ,
6176                 status
6177          INTO   x_lines_rec.intrmd_st_site_use_id,
6178                 v_status
6179          FROM   HZ_CUST_SITE_USES
6180          WHERE  CUST_ACCT_SITE_ID = x_lines_rec.INTRMD_SHIP_TO_ID
6181          AND    site_use_code = 'SHIP_TO';
6182          --
6183   	 IF (l_debug <> -1) THEN
6184             rlm_core_sv.dlog(C_DEBUG,'intrmd_st_site_use_id ',
6185                                 x_lines_rec.intrmd_st_site_use_id);
6186             rlm_core_sv.dlog(C_DEBUG,'intrmd_site_use_id status', v_status);
6187          END IF;
6188          --
6189          x_lines_rec.INTMED_SHIP_TO_ORG_ID := x_lines_rec.intrmd_st_site_use_id;
6190          v_progress := '030';
6191          --
6192          IF v_status = 'I' THEN
6193             raise e_InactiveIntShipSiteUse;
6194          END IF;
6195          --
6196       EXCEPTION
6197          --
6198          WHEN NO_DATA_FOUND THEN
6199             raise e_IntrmdSiteUseInv;
6200       END;
6201       --}
6202     END IF;
6203     */
6204     --
6205 --  END IF;
6206   --
6207   IF (l_debug <> -1) THEN
6208      rlm_core_sv.dpop(C_SDEBUG);
6209   END IF;
6210   --
6211 EXCEPTION
6212   --
6213   WHEN NO_DATA_FOUND THEN
6214     --
6215     x_lines_rec.process_status := rlm_core_sv.k_PS_ERROR;
6216     rlm_message_sv.app_error(
6217                 x_ExceptionLevel => rlm_message_sv.k_error_level,
6218                 x_MessageName => 'RLM_INTRMD_SHIPTO_ID_INVALID',
6219                 x_InterfaceHeaderId => x_lines_rec.header_id,
6220                 x_InterfaceLineId => x_lines_rec.line_id,
6221                 x_token1=>'INTRMD_SHIP_TO_EXT',
6222                 x_value1=>x_lines_rec.cust_intrmd_ship_to_ext,
6223                 x_ValidationType => 'INTRMD_SHIP_TO');
6224     --
6225     IF (l_debug <> -1) THEN
6226        rlm_core_sv.dlog(C_DEBUG,'progress',v_Progress);
6227        rlm_core_sv.dpop(C_SDEBUG,'EXCEPTION: RLM_INTRMD_SHIPTO_ID_INVALID');
6228     END IF;
6229     --
6230   WHEN e_invalidIntmdShiptoId THEN
6231     --
6232     x_lines_rec.process_status := rlm_core_sv.k_PS_ERROR;
6233     --
6234     IF (l_debug <> -1) THEN
6235        rlm_core_sv.dlog(C_DEBUG,'progress',v_Progress);
6236        rlm_core_sv.dpop(C_SDEBUG,'EXCEPTION: RLM_INTRMD_SHIP_TO_ID_RELATED');
6237     END IF;
6238     --
6239   WHEN e_IntrmdSiteUseInv THEN
6240     -- Warning
6241     rlm_message_sv.app_error(
6242                 x_ExceptionLevel => rlm_message_sv.k_warn_level,
6243                 x_MessageName => 'RLM_INTRMD_SHIPTO_SITEUSE',
6244                 x_InterfaceHeaderId => x_lines_rec.header_id,
6245                 x_InterfaceLineId => x_lines_rec.line_id,
6246                 x_token1=>'INTRMD_SHIP_TO_EXT',
6247                 x_value1=>x_lines_rec.cust_intrmd_ship_to_ext,
6248                 x_ValidationType => 'INTRMD_SHIP_TO');
6249     --
6250     IF (l_debug <> -1) THEN
6251        rlm_core_sv.dlog(C_DEBUG,'progress',v_Progress);
6252        rlm_core_sv.dpop(C_SDEBUG,'WARNING: RLM_INTRMD_SHIPTO_SITEUSE');
6253     END IF;
6254     --
6255   WHEN e_InactiveIntShipTo THEN
6256     -- Warning
6257     rlm_message_sv.app_error(
6258             x_ExceptionLevel => rlm_message_sv.k_warn_level,
6259             x_MessageName => 'RLM_INTSHIP_INACTIVE',
6260             x_InterfaceHeaderId => x_lines_rec.header_id,
6261             x_InterfaceLineId => x_lines_rec.line_id,
6262             x_token1=>'INTRMD_SHIP_TO_EXT',
6263             x_value1=>x_lines_rec.cust_intrmd_ship_to_ext,
6264             x_ValidationType => 'INTRMD_SHIP_TO');
6265     --
6266     IF (l_debug <> -1) THEN
6267        rlm_core_sv.dlog(C_DEBUG,'progress',v_Progress);
6268        rlm_core_sv.dpop(C_SDEBUG,'WARNING: RLM_INTSHIP_INACTIVE');
6269     END IF;
6270     --
6271   WHEN e_InactiveIntShipSiteUse THEN
6272     -- Warning
6273     rlm_message_sv.app_error(
6274             x_ExceptionLevel => rlm_message_sv.k_warn_level,
6275             x_MessageName => 'RLM_INTSHIP_SITE_USE_INACTIVE',
6276             x_InterfaceHeaderId => x_lines_rec.header_id,
6277             x_InterfaceLineId => x_lines_rec.line_id,
6278             x_token1=>'INTRMD_SHIP_TO_EXT',
6279             x_value1=>x_lines_rec.cust_intrmd_ship_to_ext,
6280             x_ValidationType => 'INTRMD_SHIP_TO');
6281     --
6282     IF (l_debug <> -1) THEN
6283        rlm_core_sv.dlog(C_DEBUG,'progress',v_Progress);
6284        rlm_core_sv.dpop(C_SDEBUG,'WARNING: RLM_INTSHIP_SITE_USE_INACTIVE');
6285     END IF;
6286     --
6287   WHEN OTHERS THEN
6288     --
6289     x_lines_rec.process_status := rlm_core_sv.k_PS_ERROR;
6290     rlm_message_sv.sql_error('rlm_validatedemand_sv.DeriveIntrmdShipToID',
6291                                                              v_Progress);
6292     --
6293     IF (l_debug <> -1) THEN
6294        rlm_core_sv.dpop(C_SDEBUG,'EXCEPTION: '||SUBSTR(SQLERRM,1,200));
6295     END IF;
6296     --
6297     raise;
6298     --
6299 END DeriveIntrmdShipToID;
6300 
6301 /*===========================================================================
6302 
6303 	PROCEDURE NAME:  DeriveBillToID
6304 
6305 ===========================================================================*/
6306 PROCEDURE DeriveBillToID(x_header_rec IN RLM_INTERFACE_HEADERS%ROWTYPE,
6307                          x_lines_rec IN OUT NOCOPY RLM_INTERFACE_LINES%ROWTYPE,
6308                          x_cum_org_level_code IN rlm_cust_shipto_terms.cum_org_level_code%TYPE)
6309 IS
6310   --
6311   v_progress             VARCHAR2(3) := '010';
6312   v_count                NUMBER;
6313   v_status               VARCHAR2(1) := 'I';
6314   v_bill_to_customer_id  NUMBER DEFAULT NULL;
6315   v_ship_to_customer_id  NUMBER;
6316   v_tp_loc               VARCHAR2(30);
6317   e_InvalidBillTo        EXCEPTION;
6318   e_InvalidBillToID      EXCEPTION;
6319   e_InactiveBillTo       EXCEPTION;
6320   e_NoBillTo             EXCEPTION;
6321   e_BillToSiteUseInv     EXCEPTION;
6322   e_InactiveBillSiteUse  EXCEPTION;
6323   e_bad_location         EXCEPTION;
6324   e_related_cust         EXCEPTION;
6325   v_addStatus            VARCHAR2(1) := 'I';
6326   v_siteUseStatus        VARCHAR2(1) := 'I';
6327   --
6328 BEGIN
6329   --
6330   IF (l_debug <> -1) THEN
6331      rlm_core_sv.dpush(C_SDEBUG,'DeriveBillToID');
6332      rlm_core_sv.dlog(C_DEBUG, 'x_lines_rec.bill_to_address_id',
6333                       x_lines_rec.bill_to_address_id);
6334      rlm_core_sv.dlog(C_DEBUG,'x_cum_org_level_code',
6335                             x_cum_org_level_code);
6336   END IF;
6337   --
6338   -- R12 Perf Bug 4129291 : Modified queries to use both hz_cust_acct_sites and
6339   -- hz_cust_site_uses, so DSP determines the status of address record and site use
6340   -- record in one DB query.
6341   --
6342   IF rlm_message_sv.check_dependency('BILL_TO') THEN
6343     --
6344     IF x_lines_rec.bill_to_address_id IS NULL THEN
6345        --{
6346        IF x_lines_rec.cust_bill_to_ext IS NOT NULL THEN
6347          --{
6348          BEGIN
6349            --{
6350            v_progress := '030';
6351            --
6352   	   IF (l_debug <> -1) THEN
6353               rlm_core_sv.dlog(C_DEBUG,'cust_bill_to_ext ',
6354                                 x_lines_rec.cust_bill_to_ext);
6355            END IF;
6356            --
6357            --if the bill_to does not exist for the customer, try customer
6358            -- relationship
6359            --
6360            BEGIN
6361              --{
6362              -- Following query is changed as per TCA obsolescence project.
6363              SELECT    ACCT_SITE.CUST_ACCT_SITE_ID,
6364                        ACCT_SITE.STATUS, SITE_USE.STATUS,
6365                        SITE_USE.site_use_id
6366              INTO      x_lines_rec.bill_to_address_id ,
6367                        v_addStatus, v_siteUseStatus,
6368                        x_lines_rec.bill_to_site_use_id
6369              FROM      HZ_CUST_ACCT_SITES ACCT_SITE, HZ_CUST_SITE_USES_ALL SITE_USE
6370              WHERE     acct_site.ece_tp_location_code = x_lines_rec.cust_bill_to_ext
6371              AND       ACCT_SITE.CUST_ACCOUNT_ID = x_header_rec.customer_id
6372              AND       site_use_code = 'BILL_TO'
6373              AND       ACCT_SITE.cust_acct_site_id = SITE_USE.cust_acct_site_id
6374              AND       ACCT_SITE.org_id = SITE_USE.org_id;
6375              --
6376            EXCEPTION
6377              --
6378              WHEN NO_DATA_FOUND THEN
6379 		--
6380   		IF (l_debug <> -1) THEN
6381                    rlm_core_sv.dlog(C_DEBUG,'e_related_cust');
6382                 END IF;
6383 		--
6384                 raise e_related_cust;
6385              --}
6386            END;
6387            --
6388   	   IF (l_debug <> -1) THEN
6389                 rlm_core_sv.dlog(C_DEBUG,'bill_to_address_id ',
6390                                    x_lines_rec.bill_to_address_id);
6391                 rlm_core_sv.dlog(C_DEBUG, 'bill_to_site_use_id',
6392                                    x_lines_rec.bill_to_site_use_id);
6393                 rlm_core_sv.dlog(C_DEBUG,'bill to Address status ', v_addStatus);
6394                 rlm_core_sv.dlog(C_DEBUG, 'Site Use Status', v_siteUseStatus);
6395            END IF;
6396            --
6397            IF v_addStatus = 'I' THEN
6398               raise e_InactiveBillTo;
6399            END IF;
6400            --
6401            IF v_siteUseStatus = 'I' THEN
6402              RAISE e_InactiveBillSiteUse;
6403            END IF;
6404            --
6405            EXCEPTION
6406             --
6407             WHEN e_InactiveBillTo THEN
6408                RAISE e_InactiveBillTo;
6409             --
6410             WHEN e_InactiveBillSiteUse THEN
6411                RAISE e_InactiveBillSiteUse;
6412             --
6413             WHEN e_related_cust THEN
6414 	      --
6415   	      IF (l_debug <> -1) THEN
6416                  rlm_core_sv.dlog(C_DEBUG,'ship_to_address_id ',
6417                                 x_lines_rec.ship_to_address_id);
6418               END IF;
6419 	      --
6420               BEGIN
6421                  --{
6422                  -- Following query is changed as per TCA obsolescence project.
6423 		 SELECT	ACCT_SITE.CUST_ACCT_SITE_ID,
6424 		       	ACCT_SITE.status,
6425 			ACCT_SITE.CUST_ACCOUNT_ID, SITE_USE.STATUS,
6426                         SITE_USE.site_use_id
6427 		 INTO	x_lines_rec.bill_to_address_id,
6428 			v_addStatus,
6429 			v_bill_to_customer_id, v_siteUseStatus,
6430                         x_lines_rec.bill_to_site_use_id
6431 		 FROM	HZ_CUST_ACCT_SITES  ACCT_SITE, HZ_CUST_SITE_USES_ALL SITE_USE
6432 		 WHERE	ACCT_SITE.ece_tp_location_code 	= x_lines_rec.cust_bill_to_ext
6433                  AND    ACCT_SITE.cust_acct_site_id = SITE_USE.cust_acct_site_id
6434                  AND    SITE_USE.site_use_code = 'BILL_TO'
6435                  AND    ACCT_SITE.org_id = SITE_USE.org_id
6436 		 AND	ACCT_SITE.CUST_ACCOUNT_ID in
6437 			(SELECT	DISTINCT cust_account_id
6438 			 FROM HZ_CUST_ACCT_RELATE_ALL
6439 			 WHERE related_cust_account_id = x_header_rec.customer_id
6440 			 AND status='A'
6441 			 AND bill_to_flag = 'Y'
6442                          AND oe_sys_parameters.value('CUSTOMER_RELATIONSHIPS_FLAG', x_header_rec.org_id) IN ('Y', 'A')
6443                          AND org_id = x_header_rec.org_id
6444 			);
6445 		 --
6446   		 IF (l_debug <> -1) THEN
6447                     rlm_core_sv.dlog(C_DEBUG,'bill_to_address_id ',
6448                          x_lines_rec.bill_to_address_id);
6449                     rlm_core_sv.dlog(C_DEBUG,'bill to Address status ', v_addStatus);
6450                     rlm_core_sv.dlog(C_DEBUG, 'Site Use Status', v_siteUseStatus);
6451                     rlm_core_sv.dlog(C_DEBUG,'v_bill_to_customer_id',
6452                                          v_bill_to_customer_id);
6453                  END IF;
6454                  --
6455                  IF v_addStatus = 'I' THEN
6456                     raise e_InactiveBillTo;
6457                  END IF;
6458                  --
6459                  IF v_siteUseStatus = 'I' THEN
6460                    RAISE e_InactiveBillSiteUse;
6461                  END IF;
6462                  --
6463               EXCEPTION
6464                --
6465                WHEN e_InactiveBillTo THEN
6466                   RAISE e_InactiveBillTo;
6467                --
6468                WHEN e_InactiveBillSiteUse THEN
6469                   RAISE e_InactiveBillSiteUse;
6470                --
6471                WHEN TOO_MANY_ROWS THEN
6472 		  --
6473   		  IF (l_debug <> -1) THEN
6474                      rlm_core_sv.dlog(C_DEBUG,'Too many rows');
6475                   END IF;
6476                   -- raising no_data_found, would give the message
6477                   -- RLM_BILLTO_INVALID
6478                   raise NO_DATA_FOUND;
6479                   --}
6480               END;
6481             --}
6482            END;
6483            --
6484            x_lines_rec.invoice_to_org_id := x_lines_rec.bill_to_site_use_id;
6485            --
6486          --}
6487       ELSE -- CUST_BILL_TO_EXT is null
6488          --{
6489          IF x_cum_org_level_code = 'BILL_TO_SHIP_FROM' THEN
6490            --{
6491            v_progress := '040';
6492 	   --
6493   	   IF (l_debug <> -1) THEN
6494               rlm_core_sv.dlog(C_DEBUG,'ship_to_address_id ',
6495                                   x_lines_rec.ship_to_address_id);
6496            END IF;
6497            --
6498            -- If the bill_to_ext is null then we use the bill_to
6499            -- defined in HZ_CUST_ACCT_SITES for the SHIP_TO
6500            -- the bill_To_site_use as from the HZ_CUST_ACCT_SITES where
6501            -- address_useage is ship to
6502            --
6503            -- Following query is changed as per TCA obsolescence project.
6504            BEGIN
6505               --{
6506 		SELECT	site_use_id, status
6507 		INTO	x_lines_rec.bill_to_site_use_id, v_status
6508 		FROM	HZ_CUST_SITE_USES
6509 		WHERE	CUST_ACCT_SITE_ID = x_lines_rec.ship_to_address_id
6510 		AND	site_use_code = 'SHIP_TO';
6511               --
6512   	      IF (l_debug <> -1) THEN
6513                  rlm_core_sv.dlog(C_DEBUG,'bill site use status ', v_siteUseStatus );
6514                  rlm_core_sv.dlog(C_DEBUG,'bill site use id ',
6515                                         x_lines_rec.bill_to_site_use_id );
6516               END IF;
6517 	      --
6518               x_lines_rec.invoice_to_org_id := x_lines_rec.bill_to_site_use_id;
6519 	      --
6520   	      IF (l_debug <> -1) THEN
6521                  rlm_core_sv.dlog(C_DEBUG,'invoice_to_org_id ',
6522                                            x_lines_rec.invoice_to_org_id );
6523               END IF;
6524               --
6525               IF x_lines_rec.bill_to_site_use_id is NOT NULL
6526                          AND v_status = 'A'THEN
6527                  --
6528                  -- Following query is changed as per TCA obsolescence project.
6529 		 SELECT	CUST_ACCT_SITE_ID,
6530 			status
6531 		 INTO	x_lines_rec.bill_to_address_id,
6532 			v_status
6533 		 FROM	HZ_CUST_SITE_USES_ALL
6534 		 WHERE	SITE_USE_ID =  x_lines_rec.bill_to_site_use_id;
6535                  --
6536               ELSE
6537                  --
6538                  IF x_lines_rec.bill_to_site_use_id is NULL THEN
6539                     raise e_NoBillTo;
6540                  ELSIF v_status = 'I' THEN
6541                     raise e_InactiveBillSiteUse;
6542                  END IF;
6543                  --
6544               END IF;
6545               --
6546            EXCEPTION
6547              --
6548              WHEN e_NoBillTo THEN
6549                raise e_InvalidBillTo;
6550             --}
6551            END;
6552            --
6553   	   IF (l_debug <> -1) THEN
6554               rlm_core_sv.dlog(C_DEBUG,'bill_to_address_id ',
6555                    x_lines_rec.bill_to_address_id);
6556            END IF;
6557            --}
6558         END IF;
6559         --}
6560       END IF;
6561       --}
6562     ELSE
6563        --{
6564        -- x_lines_rec.bill_to_address_id is NOT NULL
6565        --
6566        BEGIN
6567           --{
6568           -- Following query is changed as per TCA obsolescence project.
6569           SELECT	ACCT_SITE.STATUS, ACCT_SITE.CUST_ACCOUNT_ID,
6570                         SITE_USE.STATUS, SITE_USE.site_use_id
6571           INTO		v_addStatus, v_bill_to_customer_id,
6572                         v_siteUseStatus, x_lines_rec.bill_to_site_use_id
6573           FROM		HZ_CUST_ACCT_SITES  ACCT_SITE, HZ_CUST_SITE_USES_ALL SITE_USE
6574           WHERE		ACCT_SITE.CUST_ACCT_SITE_ID = x_lines_rec.bill_to_address_id
6575           AND           ACCT_SITE.cust_acct_site_id = SITE_USE.cust_acct_site_id
6576           AND           SITE_USE.site_use_code = 'BILL_TO'
6577           AND           ACCT_SITE.org_id = SITE_USE.org_id;
6578           --
6579           IF (l_debug <> -1) THEN
6580              rlm_core_sv.dlog(C_DEBUG,'bill_to_address_id',
6581                                     x_lines_rec.bill_to_address_id);
6582               rlm_core_sv.dlog(C_DEBUG,'v_bill_to_customer_id',v_bill_to_customer_id);
6583               rlm_core_sv.dlog(C_DEBUG, 'Address Status', v_addStatus);
6584               rlm_core_sv.dlog(C_DEBUG, 'Site Use Status', v_siteUseStatus);
6585               rlm_core_sv.dlog(C_DEBUG, 'Site Use ID', x_lines_rec.bill_to_site_use_id);
6586           END IF;
6587           --
6588           IF v_addStatus = 'I' THEN
6589              raise e_InactiveBillTo;
6590           END IF;
6591           --
6592           IF v_siteUseStatus = 'I' THEN
6593              RAISE e_InactiveBillSiteUse;
6594           END IF;
6595           --
6596           IF NOT CustomerRelationship(x_header_rec.customer_id,
6597                                       v_bill_to_customer_id,
6598                                       x_header_rec.header_id,
6599                                       'BILL_TO') THEN
6600              --
6601              raise e_InvalidBillToId;
6602              --
6603           END IF;
6604           --
6605           x_lines_rec.invoice_to_org_id := x_lines_rec.bill_to_site_use_id;
6606           --
6607           IF (l_debug <> -1) THEN
6608            rlm_core_sv.dlog(C_DEBUG, 'Invoice To Org ID', x_lines_rec.invoice_to_org_id);
6609           END IF;
6610           --}
6611        END;
6612        --}
6613     END IF;
6614     --}
6615   END IF;
6616   --
6617   IF (l_debug <> -1) THEN
6618      rlm_core_sv.dpop(C_SDEBUG);
6619   END IF;
6620   --
6621 EXCEPTION
6622   --
6623   WHEN NO_DATA_FOUND THEN
6624     --
6625     x_lines_rec.process_status := rlm_core_sv.k_PS_ERROR;
6626     rlm_message_sv.app_error(
6627                 x_ExceptionLevel => rlm_message_sv.k_error_level,
6628                 x_MessageName => 'RLM_BILLTO_INVALID',
6629                 x_InterfaceHeaderId => x_lines_rec.header_id,
6630                 x_InterfaceLineId => x_lines_rec.line_id,
6631                 x_token1=>'BILL_TO_EXT',
6632                 x_value1=> nvl(x_lines_rec.cust_bill_to_ext,
6633                                x_header_rec.ece_tp_location_code_ext),
6634                 x_ValidationType => 'BILL_TO');
6635     --
6636     IF (l_debug <> -1) THEN
6637        rlm_core_sv.dlog(C_DEBUG,'progress',v_Progress);
6638        rlm_core_sv.dpop(C_SDEBUG,'EXCEPTION: RLM_BILLTO_INVALID');
6639     END IF;
6640     --
6641   WHEN e_BillToSiteUseInv THEN
6642     --
6643     x_lines_rec.process_status := rlm_core_sv.k_PS_ERROR;
6644     rlm_message_sv.app_error(
6645                 x_ExceptionLevel => rlm_message_sv.k_error_level,
6646                 x_MessageName => 'RLM_BILLTO_SITEUSE',
6647                 x_InterfaceHeaderId => x_lines_rec.header_id,
6648                 x_InterfaceLineId => x_lines_rec.line_id,
6649                 x_token1=>'BILL_TO_EXT',
6650                 x_value1=> nvl(x_lines_rec.cust_bill_to_ext,
6651                                x_header_rec.ece_tp_location_code_ext),
6652                 x_ValidationType => 'BILL_TO');
6653     --
6654     IF (l_debug <> -1) THEN
6655        rlm_core_sv.dlog(C_DEBUG,'progress',v_Progress);
6656        rlm_core_sv.dpop(C_SDEBUG,'EXCEPTION: RLM_BILLTO_SITEUSE');
6657     END IF;
6658     --
6659   WHEN e_InvalidBillTo THEN
6660     --
6661     x_lines_rec.process_status := rlm_core_sv.k_PS_ERROR;
6662     rlm_message_sv.app_error(
6663                 x_MessageName => 'RLM_BILLTO_ID_NOT_DERIVED',
6664                 x_InterfaceHeaderId => x_lines_rec.header_id,
6665                 x_InterfaceLineId => x_lines_rec.line_id,
6666                 x_token1=>'TP_LOCATION',
6667                 x_value1=> nvl(x_lines_rec.cust_bill_to_ext,
6668                                x_header_rec.ece_tp_location_code_ext),
6669                 x_ValidationType => 'BILL_TO');
6670     --
6671     IF (l_debug <> -1) THEN
6672        rlm_core_sv.dlog(C_DEBUG,'progress',v_Progress);
6673        rlm_core_sv.dpop(C_SDEBUG,'EXCEPTION: RLM_BILLTO_ID_NOT_DERIVED');
6674     END IF;
6675     --
6676   WHEN e_bad_location THEN
6677     --
6678     x_lines_rec.process_status := rlm_core_sv.k_PS_ERROR;
6679     rlm_message_sv.app_error(
6680                 x_MessageName => 'RLM_BILLTO_ID_NOT_DERIVED',
6681                 x_InterfaceHeaderId => x_lines_rec.header_id,
6682                 x_InterfaceLineId => x_lines_rec.line_id,
6683                 x_token1=>'TP_LOCATION',
6684                 x_value1=> nvl(x_lines_rec.cust_bill_to_ext,
6685                                x_header_rec.ece_tp_location_code_ext),
6686                 x_ValidationType => 'BILL_TO');
6687     --
6688     IF (l_debug <> -1) THEN
6689        rlm_core_sv.dlog(C_DEBUG,'progress',v_Progress);
6690        rlm_core_sv.dpop(C_SDEBUG,'EXCEPTION: RLM_BILLTO_ID_NOT_DERIVED');
6691     END IF;
6692     --
6693   WHEN e_InactiveBillTo THEN
6694     --
6695     x_lines_rec.process_status := rlm_core_sv.k_PS_ERROR;
6696     --
6697     rlm_message_sv.app_error(
6698                 x_ExceptionLevel => rlm_message_sv.k_error_level,
6699                 x_MessageName => 'RLM_BILLTO_INACTIVE',
6700                 x_InterfaceHeaderId => x_lines_rec.header_id,
6701                 x_InterfaceLineId => x_lines_rec.line_id,
6702                 x_token1=>'TP_LOCATION',
6703                 x_value1=> nvl(x_lines_rec.cust_bill_to_ext,
6704                                x_header_rec.ece_tp_location_code_ext),
6705                 x_ValidationType => 'BILL_TO');
6706     --
6707     IF (l_debug <> -1) THEN
6708        rlm_core_sv.dlog(C_DEBUG,'progress',v_Progress);
6709        rlm_core_sv.dpop(C_SDEBUG,'EXCEPTION: RLM_BILLTO_ID_NOT_ACTIVE');
6710     END IF;
6711     --
6712   WHEN e_InvalidBilltoId THEN
6713     --
6714     x_lines_rec.process_status := rlm_core_sv.k_PS_ERROR;
6715     --
6716     rlm_message_sv.app_error(
6717                 x_ExceptionLevel => rlm_message_sv.k_error_level,
6718                 x_MessageName => 'RLM_BILL_TO_ID_NO_RELATED',
6719                 x_InterfaceHeaderId => x_lines_rec.header_id,
6720                 x_InterfaceLineId => x_lines_rec.line_id,
6721                 x_token1=>'CUSTOMER',
6722                 x_value1=> nvl(x_lines_rec.cust_bill_to_ext,
6723                                x_header_rec.ece_tp_location_code_ext),
6724                 x_ValidationType => 'BILL_TO');
6725     --
6726     IF (l_debug <> -1) THEN
6727        rlm_core_sv.dlog(C_DEBUG,'progress',v_Progress);
6728        rlm_core_sv.dlog(C_DEBUG,'Customer Relationships: Bill to address id passed does not belong to the Customer nor its related customers');
6729        rlm_core_sv.dpop(C_SDEBUG,'EXCEPTION: RLM_BILLTO_ID_NOT_RELATED');
6730     END IF;
6731     --
6732   WHEN e_InactiveBillSiteUse THEN
6733     --
6734     x_lines_rec.process_status := rlm_core_sv.k_PS_ERROR;
6735     rlm_message_sv.app_error(
6736             x_ExceptionLevel => rlm_message_sv.k_error_level,
6737             x_MessageName => 'RLM_BILLTO_SITE_USE_INACTIVE',
6738             x_InterfaceHeaderId => x_lines_rec.header_id,
6739             x_InterfaceLineId => x_lines_rec.line_id,
6740             x_token1=>'TP_LOCATION',
6741             x_value1=> nvl(x_lines_rec.cust_bill_to_ext,
6742                            x_header_rec.ece_tp_location_code_ext),
6743             x_ValidationType => 'BILL_TO');
6744     --
6745     IF (l_debug <> -1) THEN
6746        rlm_core_sv.dlog(C_DEBUG,'progress',v_Progress);
6747        rlm_core_sv.dpop(C_SDEBUG,'EXCEPTION: RLM_BILLTO_SITE_USE_INACTIVE');
6748     END IF;
6749     --
6750   WHEN OTHERS THEN
6751     --
6752     x_lines_rec.process_status := rlm_core_sv.k_PS_ERROR;
6753     rlm_message_sv.sql_error('rlm_validatedemand_sv.DeriveBillToID',v_Progress);
6754     --
6755     IF (l_debug <> -1) THEN
6756        rlm_core_sv.dpop(C_SDEBUG,'EXCEPTION: '||SUBSTR(SQLERRM,1,200));
6757     END IF;
6758     --
6759     raise;
6760     --
6761 END DeriveBillToID;
6762 
6763 /*===========================================================================
6764 
6765         PROCEDURE NAME:  DeriveShipToID
6766 
6767 ===========================================================================*/
6768 PROCEDURE DeriveShipToID(x_header_rec IN OUT NOCOPY RLM_INTERFACE_HEADERS%ROWTYPE,
6769                          x_lines_rec IN OUT NOCOPY RLM_INTERFACE_LINES%ROWTYPE)
6770 IS
6771   --
6772   v_progress            VARCHAR2(3) := '010';
6773   v_addStatus           VARCHAR2(1);
6774   v_siteUseStatus       VARCHAR2(1);
6775   v_ship_to_customer_id NUMBER;
6776   e_InvalidShipTo       EXCEPTION;
6777   e_InvalidShipToId       EXCEPTION;
6778   e_InactiveShipTo      EXCEPTION;
6779   e_ShipToSiteUseInv    EXCEPTION;
6780   e_InactiveShipSiteUse EXCEPTION;
6781   e_InvalidCustomerId   EXCEPTION;
6782   --
6783 BEGIN
6784   --
6785   IF (l_debug <> -1) THEN
6786      rlm_core_sv.dpush(C_SDEBUG, 'DeriveShipToID');
6787      rlm_core_sv.dlog(C_DEBUG, 'ship_to_address_id ',
6788                           x_lines_rec.ship_to_address_id);
6789      rlm_core_sv.dlog(C_DEBUG, 'ece_tp_location_code_ext',
6790                           x_header_rec.ece_tp_location_code_ext);
6791      rlm_core_sv.dlog(C_DEBUG, 'cust_ship_to_ext',
6792                           x_lines_rec.cust_ship_to_ext);
6793      rlm_core_sv.dlog(C_DEBUG, 'ece_primary_address_id',
6794                           x_header_rec.ece_primary_address_id);
6795 
6796   END IF;
6797   --
6798   IF rlm_message_sv.check_dependency('SHIPTO') THEN
6799     --
6800     IF x_lines_rec.ship_to_address_id IS NULL THEN
6801        --{
6802        IF x_lines_rec.cust_ship_to_ext IS NOT NULL THEN
6803          --{
6804          v_progress := '030';
6805 	 --
6806   	 IF (l_debug <> -1) THEN
6807             rlm_core_sv.dlog(C_DEBUG,'Using Ship-To-Ext to derive Id ',
6808                    x_lines_rec.cust_ship_to_ext);
6809          END IF;
6810          --
6811          -- Following query is changed as per TCA obsolescence project.
6812          -- CR Changes
6813          -- R12 Perf. Bug 4129291 : Use HCSU also in query below
6814          --
6815          SELECT hz.cust_acct_site_id, hz.status, cust_account_id,
6816                 hcsu.status, site_use_id
6817          INTO   x_lines_rec.ship_to_address_id, v_addStatus,
6818                 x_lines_rec.ship_to_customer_id, v_siteUseStatus,
6819                 x_lines_rec.ship_to_site_use_id
6820          FROM   hz_cust_acct_sites hz, hz_cust_site_uses_all hcsu
6821          WHERE  hz.ece_tp_location_code = x_lines_rec.cust_ship_to_ext
6822          AND    hz.cust_acct_site_id    = hcsu.cust_acct_site_id
6823          AND    site_use_code           = 'SHIP_TO'
6824          AND    hz.org_id               = hcsu.org_id
6825          AND    hz.cust_account_id IN
6826                 (SELECT to_number(x_header_rec.customer_id) from dual
6827                  UNION
6828                  SELECT cust_account_id
6829                  FROM hz_cust_acct_relate_all
6830                  WHERE related_cust_account_id = x_header_rec.customer_id
6831                  AND ship_to_flag = 'Y'
6832                  AND status = 'A'
6833                  AND org_id = x_header_rec.org_id
6834                  AND oe_sys_parameters.value('CUSTOMER_RELATIONSHIPS_FLAG')
6835                      IN ('Y', 'A'));
6836 	 --
6837   	 IF (l_debug <> -1) THEN
6838             rlm_core_sv.dlog(C_DEBUG,'ship_to_address_id ',
6839                       x_lines_rec.ship_to_address_id);
6840             rlm_core_sv.dlog(C_DEBUG,'x_lines_rec.ship_to_customer_id ',
6841                       x_lines_rec.ship_to_customer_id);
6842             rlm_core_sv.dlog(C_DEBUG,'customer_id ',
6843                       x_header_rec.customer_id);
6844             rlm_core_sv.dlog(C_DEBUG, 'x_lines_rec.ship_to_site_use_id',
6845                       x_lines_rec.ship_to_site_use_id);
6846             rlm_core_sv.dlog(C_DEBUG, 'Address Status', v_addStatus);
6847             rlm_core_sv.dlog(C_DEBUG, 'Site Use Status', v_siteUseStatus);
6848          END IF;
6849          --
6850          IF v_addStatus = 'I' THEN
6851           raise e_InactiveShipTo;
6852          END IF;
6853          --
6854          IF v_siteUseStatus = 'I' THEN
6855           RAISE e_InactiveShipSiteUse;
6856          END IF;
6857          --
6858          /* IF x_header_rec.customer_id <> x_lines_rec.ship_to_customer_id
6859             AND g_LineLevelShipTo THEN
6860             --
6861             IF (l_debug <> -1) THEN
6862               rlm_core_sv.dlog(C_DEBUG,'ship to customer id <> header customer id');
6863             END IF;
6864             --
6865             raise e_InvalidCustomerId;
6866             --
6867          END IF;  */
6868          --}
6869        --performance
6870 
6871        ELSIF x_header_rec.ece_tp_location_code_ext IS NOT NULL THEN
6872          --{
6873          v_progress := '035';
6874 	 --
6875   	 IF (l_debug <> -1) THEN
6876             rlm_core_sv.dlog(C_DEBUG,'Using TP Location Code to derive ID ',
6877                    x_header_rec.ece_tp_location_code_ext);
6878          END IF;
6879          --
6880          BEGIN
6881           --
6882           -- Following query is changed as per TCA obsolescence project.
6883           -- R12 Perf Bug 4129291 : Use HCSU in query below
6884           --
6885           SELECT hcas.cust_acct_site_id,  hcas.status, hcsu.status,
6886                  hcsu.site_use_id
6887           INTO   x_lines_rec.ship_to_address_id, v_addStatus, v_siteUseStatus,
6888                  x_lines_rec.ship_to_site_use_id
6889           FROM   hz_cust_acct_sites hcas, hz_cust_site_uses_all hcsu
6890           WHERE  ece_tp_location_code = x_header_rec.ece_tp_location_code_ext
6891           AND    hcas.cust_account_id = x_header_rec.customer_id
6892           AND    hcas.cust_acct_site_id = hcsu.cust_acct_site_id
6893           AND    site_use_code          = 'SHIP_TO'
6894           AND    hcas.org_id            = hcsu.org_id;
6895           --
6896   	  IF (l_debug <> -1) THEN
6897              rlm_core_sv.dlog(C_DEBUG,'ship_to_address_id ',
6898                   x_lines_rec.ship_to_address_id);
6899              rlm_core_sv.dlog(C_DEBUG,'ship_to_site_use_id',
6900                   x_lines_rec.ship_to_site_use_id);
6901              rlm_core_sv.dlog(C_DEBUG, 'Address Status', v_addStatus);
6902              rlm_core_sv.dlog(C_DEBUG, 'Site Use Status', v_siteUseStatus);
6903           END IF;
6904 	  --
6905           IF v_addStatus = 'I' THEN
6906            raise e_InactiveShipTo;
6907           END IF;
6908           --
6909           IF v_siteUseStatus = 'I' THEN
6910            RAISE e_InactiveShipSiteUse;
6911           END IF;
6912           --
6913          EXCEPTION
6914            --
6915            WHEN NO_DATA_FOUND THEN
6916               raise e_InvalidShipTo;
6917          END;
6918          --}
6919        ELSE
6920         --{
6921         v_progress := '040';
6922         --
6923         IF (x_header_rec.customer_id IS NOT NULL AND
6924             x_header_rec.ece_primary_address_id IS NULL) THEN
6925          --{
6926          -- Following query is changed as per TCA obsolescence project.
6927          SELECT rasu.cust_acct_site_id, rad.status, rasu.status,
6928                 rasu.site_use_id
6929          INTO   x_header_rec.ece_primary_address_id, v_addStatus, v_siteUseStatus,
6930                 x_lines_rec.ship_to_site_use_id
6931          FROM   hz_cust_acct_sites     rad,
6932                 hz_cust_site_uses_all  rasu
6933          WHERE  rad.cust_acct_site_id = rasu.cust_acct_site_id
6934          AND    rasu.site_use_code = 'SHIP_TO'
6935          AND    rasu.primary_flag = 'Y'
6936          AND    rad.cust_account_id = x_header_rec.customer_id
6937          AND    rad.status = 'A'
6938          AND    rad.org_id = rasu.org_id;
6939          --
6940          IF (l_debug <> -1) THEN
6941           rlm_core_sv.dlog(C_DEBUG,'customer_id ',x_header_rec.customer_id);
6942           rlm_core_sv.dlog(C_DEBUG,'ece_primary_address_id ',
6943                                  x_header_rec.ece_primary_address_id);
6944          END IF;
6945          --}
6946         END IF;
6947         --
6948         x_lines_rec.ship_to_address_id := x_header_rec.ece_primary_address_id;
6949         --
6950         IF (l_debug <> -1) THEN
6951            rlm_core_sv.dlog(C_DEBUG, 'Using ECE primary address as ship-to');
6952            rlm_core_sv.dlog(C_DEBUG,'ship_to_address_id ',
6953                    x_lines_rec.ship_to_address_id);
6954            rlm_core_sv.dlog(C_DEBUG, 'Address Status', v_addStatus);
6955            rlm_core_sv.dlog(C_DEBUG, 'Site Use Status', v_siteUseStatus);
6956         END IF;
6957         --}
6958        END IF;
6959        --
6960        IF v_addStatus = 'I' THEN
6961         raise e_InactiveShipTo;
6962        END IF;
6963        --
6964        IF v_siteUseStatus = 'I' THEN
6965         RAISE e_InactiveShipSiteUse;
6966        END IF;
6967        --
6968        --}
6969     ELSE    --ship_to_address_id is not null
6970        --{
6971        /* check if the address_id is inactive */
6972        BEGIN
6973           --
6974           -- Following query is changed as per TCA obsolescence project.
6975           SELECT hcas.status, cust_account_id, hcsu.status, hcsu.site_use_id
6976           INTO   v_addStatus, x_lines_rec.ship_to_customer_id, v_siteUseStatus,
6977                  x_lines_rec.ship_to_site_use_id
6978           FROM   hz_cust_acct_sites_all hcas, hz_cust_site_uses_all hcsu
6979           WHERE  hcas.cust_acct_site_id = x_lines_rec.ship_to_address_id
6980           AND    hcas.cust_acct_site_id = hcsu.cust_acct_site_id
6981           AND    hcsu.site_use_code     = 'SHIP_TO'
6982           AND    hcas.org_id = hcsu.org_id;
6983           --
6984           IF (l_debug <> -1) THEN
6985              rlm_core_sv.dlog(C_DEBUG, 'ship-to customer id',
6986                               x_lines_rec.ship_to_customer_id);
6987              rlm_core_sv.dlog(C_DEBUG, 'Ship To Site Use ID',
6988                               x_lines_rec.ship_to_site_use_id);
6989              rlm_core_sv.dlog(C_DEBUG, 'Address Status', v_addStatus);
6990              rlm_core_sv.dlog(C_DEBUG, 'Site Use Status', v_siteUseStatus);
6991           END IF;
6992           --
6993           IF v_addStatus = 'I' THEN
6994              raise e_InactiveShipTo;
6995           END IF;
6996           --
6997           IF v_siteUseStatus = 'I' THEN
6998             RAISE e_InactiveShipSiteUse;
6999           END IF;
7000           --
7001           IF (l_debug <> -1) THEN
7002              rlm_core_sv.dlog(C_DEBUG,'x_lines_rec.ship_to_customer_id', x_lines_rec.ship_to_customer_id);
7003           END IF;
7004           --
7005           IF NOT CustomerRelationship(x_header_rec.customer_id,
7006                                 x_lines_rec.ship_to_customer_id,
7007                                 x_header_rec.header_id,
7008                                 'SHIP_TO') THEN
7009             --
7010             IF (l_debug <> -1) THEN
7011                rlm_core_sv.dlog(C_DEBUG,'Invalid customer relationship');
7012             END IF;
7013             --
7014             raise e_InvalidShipToID;
7015             --
7016           END IF;
7017           --
7018        EXCEPTION
7019           WHEN NO_DATA_FOUND THEN
7020                raise e_InvalidShipto;
7021        END;
7022        --}
7023     END IF;
7024     --
7025     x_lines_rec.ship_to_org_id := x_lines_rec.ship_to_site_use_id;
7026     --
7027     /*
7028      * R12 Perf Bug 4129291
7029      * This segment of code is not required any longer, since the check on status
7030      * of site use record has been included in queries above
7031      *
7032     BEGIN
7033       --{
7034       v_progress := '050';
7035       --
7036       -- Following query is changed as per TCA obsolescence project.
7037          SELECT site_use_id , status
7038          INTO   x_lines_rec.ship_to_site_use_id, v_status
7039          FROM   HZ_CUST_SITE_USES
7040          WHERE  CUST_ACCT_SITE_ID = x_lines_rec.ship_to_address_id
7041          AND    site_use_code = 'SHIP_TO';
7042       --
7043       x_lines_rec.ship_to_org_id := x_lines_rec.ship_to_site_use_id;
7044       --
7045       IF (l_debug <> -1) THEN
7046          rlm_core_sv.dlog(C_DEBUG,'site use id status ', v_status );
7047          rlm_core_sv.dlog(C_DEBUG,'ship_to_site_use_id ',
7048                                  x_lines_rec.ship_to_site_use_id);
7049       END IF;
7050       --
7051       IF v_status = 'I' THEN
7052          --
7053          raise e_InactiveShipSiteUse;
7054          --
7055       END IF;
7056       --
7057       EXCEPTION
7058         --
7059         WHEN NO_DATA_FOUND THEN
7060             raise e_ShipToSiteUseInv;
7061      --}
7062     END; */
7063     --}
7064   END IF;
7065   --
7066   IF (l_debug <> -1) THEN
7067      rlm_core_sv.dpop(C_SDEBUG);
7068   END IF;
7069   --
7070  EXCEPTION
7071   --
7072   WHEN NO_DATA_FOUND THEN
7073     --
7074     x_lines_rec.process_status := rlm_core_sv.k_PS_ERROR;
7075     --
7076     rlm_message_sv.app_error(
7077             x_ExceptionLevel => rlm_message_sv.k_error_level,
7078             x_MessageName => 'RLM_SHIPTO_ID_NOT_DERIVED',
7079             x_InterfaceHeaderId => x_lines_rec.header_id,
7080             x_InterfaceLineId => x_lines_rec.line_id,
7081             x_token1=>'TP_LOCATION',
7082             x_value1=> nvl(x_lines_rec.cust_ship_to_ext,
7083                            x_header_rec.ece_tp_location_code_ext),
7084             x_ValidationType => 'SHIP_TO');
7085     --
7086     IF (l_debug <> -1) THEN
7087        rlm_core_sv.dlog(C_DEBUG,'progress',v_Progress);
7088        rlm_core_sv.dpop(C_SDEBUG,'EXCEPTION: RLM_SHIPTO_NOT_DERIVED');
7089     END IF;
7090     --
7091   WHEN e_ShipToSiteUseInv THEN
7092     --
7093     x_lines_rec.process_status := rlm_core_sv.k_PS_ERROR;
7094     rlm_message_sv.app_error(
7095             x_ExceptionLevel => rlm_message_sv.k_error_level,
7096             x_MessageName => 'RLM_SHIPTO_SITEUSE',
7097             x_InterfaceHeaderId => x_lines_rec.header_id,
7098             x_InterfaceLineId => x_lines_rec.line_id,
7099             x_token1=>'SHIP_TO_EXT',
7100             x_value1=> nvl(x_lines_rec.cust_ship_to_ext,
7101                            x_header_rec.ece_tp_location_code_ext),
7102             x_ValidationType => 'SHIP_TO');
7103     --
7104     IF (l_debug <> -1) THEN
7105        rlm_core_sv.dlog(C_DEBUG,'progress',v_Progress);
7106        rlm_core_sv.dpop(C_SDEBUG,'EXCEPTION: RLM_SHIPTO_SITEUSE');
7107     END IF;
7108     --
7109   WHEN e_InvalidShipTo THEN
7110     --
7111     x_lines_rec.process_status := rlm_core_sv.k_PS_ERROR;
7112     --
7113     rlm_message_sv.app_error(
7114             x_ExceptionLevel => rlm_message_sv.k_error_level,
7115             x_MessageName => 'RLM_SHIPTO_ID_NOT_DERIVED',
7116             x_InterfaceHeaderId => x_lines_rec.header_id,
7117             x_InterfaceLineId => x_lines_rec.line_id,
7118             x_token1=>'TP_LOCATION',
7119             x_value1=> nvl(x_lines_rec.cust_ship_to_ext,
7120                            x_header_rec.ece_tp_location_code_ext),
7121             x_ValidationType => 'SHIP_TO');
7122     --
7123     IF (l_debug <> -1) THEN
7124        rlm_core_sv.dlog(C_DEBUG,'progress',v_Progress);
7125        rlm_core_sv.dpop(C_SDEBUG,'EXCEPTION: RLM_SHIPTO_ID_NOT_DERIVED');
7126     END IF;
7127     --
7128   WHEN e_InvalidShipToID THEN
7129     --
7130     x_lines_rec.process_status := rlm_core_sv.k_PS_ERROR;
7131     --
7132     IF (l_debug <> -1) THEN
7133        rlm_core_sv.dlog(C_DEBUG,'progress',v_Progress);
7134        rlm_core_sv.dpop(C_SDEBUG,'EXCEPTION: RLM_SHIP_TO_ID_NOT_RELATED');
7135     END IF;
7136     --
7137   WHEN e_InactiveShipTo THEN
7138     --
7139     x_lines_rec.process_status := rlm_core_sv.k_PS_ERROR;
7140     --
7141     rlm_message_sv.app_error(
7142             x_ExceptionLevel => rlm_message_sv.k_error_level,
7143             x_MessageName => 'RLM_SHIPTO_INACTIVE',
7144             x_InterfaceHeaderId => x_lines_rec.header_id,
7145             x_InterfaceLineId => x_lines_rec.line_id,
7146             x_token1=>'TP_LOCATION',
7147             x_value1=> nvl(x_lines_rec.cust_ship_to_ext,
7148                            x_header_rec.ece_tp_location_code_ext),
7149             x_ValidationType => 'SHIP_TO');
7150     --
7151     IF (l_debug <> -1) THEN
7152        rlm_core_sv.dlog(C_DEBUG,'progress',v_Progress);
7153        rlm_core_sv.dpop(C_SDEBUG,'EXCEPTION: RLM_SHIPTO_INACTIVE');
7154     END IF;
7155     --
7156   WHEN e_InactiveShipSiteUse THEN
7157     --
7158     x_lines_rec.process_status := rlm_core_sv.k_PS_ERROR;
7159     --
7160     rlm_message_sv.app_error(
7161             x_ExceptionLevel => rlm_message_sv.k_error_level,
7162             x_MessageName => 'RLM_SHIPTO_SITE_USE_INACTIVE',
7163             x_InterfaceHeaderId => x_lines_rec.header_id,
7164             x_InterfaceLineId => x_lines_rec.line_id,
7165             x_token1=>'TP_LOCATION',
7166             x_value1=>x_header_rec.ece_tp_location_code_ext,
7167             x_ValidationType => 'SHIP_TO');
7168     --
7169     IF (l_debug <> -1) THEN
7170        rlm_core_sv.dlog(C_DEBUG,'progress',v_Progress);
7171        rlm_core_sv.dpop(C_SDEBUG,'EXCEPTION: RLM_SHIPTO_SITE_USE_INACTIVE');
7172     END IF;
7173     --
7174   WHEN e_InvalidCustomerId THEN
7175     --
7176     x_lines_rec.process_status := rlm_core_sv.k_PS_ERROR;
7177     --
7178     rlm_message_sv.app_error(
7179             x_ExceptionLevel => rlm_message_sv.k_error_level,
7180             x_MessageName => 'RLM_INVALID_CUSTOMER',
7181             x_InterfaceHeaderId => x_lines_rec.header_id,
7182             x_InterfaceLineId => x_lines_rec.line_id,
7183             x_token1=>'TP_LOCATION',
7184             x_value1=>x_header_rec.ece_tp_location_code_ext,
7185             x_ValidationType => 'SHIP_TO');
7186     --
7187     IF (l_debug <> -1) THEN
7188        rlm_core_sv.dlog(C_DEBUG,'progress',v_Progress);
7189        rlm_core_sv.dpop(C_SDEBUG,'EXCEPTION: RLM_INVALID_CUSTOMER');
7190     END IF;
7191     --
7192   WHEN OTHERS THEN
7193     --
7194     x_lines_rec.process_status := rlm_core_sv.k_PS_ERROR;
7195     rlm_message_sv.sql_error('rlm_validatedemand_sv.DeriveShipToID',
7196                                                             v_Progress);
7197     --
7198     IF (l_debug <> -1) THEN
7199        rlm_core_sv.dpop(C_SDEBUG,'EXCEPTION: '||SUBSTR(SQLERRM,1,200));
7200     END IF;
7201     raise;
7202     --
7203 END DeriveShipToID;
7204 
7205 /*====================================================================
7206 
7207         PROCEDURE validateWithCumRec
7208 
7209 ====================================================================*/
7210 PROCEDURE validateWithCumRec(
7211           x_cum_key_record   IN rlm_cum_sv.cum_key_attrib_rec_type,
7212           x_group_rec        IN t_group_rec,
7213           x_lines_rec        IN OUT NOCOPY RLM_INTERFACE_LINES%ROWTYPE)
7214 IS
7215 
7216   e_CumRecYearMissing  EXCEPTION;
7217   e_CumKeyPOMissing    EXCEPTION;
7218   e_NoCumRec           EXCEPTION;                         -- 4307505
7219   v_cum_key_record     rlm_cum_sv.cum_key_attrib_rec_type;
7220   v_cum_record         RLM_CUM_SV.cum_rec_type;           -- 4307505
7221 
7222 BEGIN
7223  --
7224  IF (l_debug <> -1) THEN
7225     rlm_core_sv.dpush(C_SDEBUG,'validateWithCumRec');
7226  END IF;
7227  --
7228  IF (x_lines_rec.cust_po_number IS NULL) AND
7229      x_Group_rec.setup_terms_rec.CUM_CONTROL_CODE IN
7230                 ('CUM_BY_PO_ONLY','CUM_BY_DATE_PO') THEN
7231    --
7232    raise e_CumKeyPOMissing;
7233    --
7234  END IF;
7235  --
7236  IF (x_lines_rec.industry_attribute1 IS NULL) AND
7237      x_Group_rec.setup_terms_rec.CUM_CONTROL_CODE = 'CUM_BY_DATE_RECORD_YEAR'
7238  THEN
7239    --
7240    raise e_CumRecYearMissing;
7241    --
7242  END IF;
7243  --
7244  -- 4307505 [  done only if the Intrasit calc basis is customer cum
7245  IF (x_Group_rec.setup_terms_rec.intransit_calc_basis = 'CUSTOMER_CUM' ) THEN
7246  --{ it.basis cust.cum
7247  --
7248   v_cum_record.cum_key_id := NULL;
7249   v_cum_key_record := x_cum_key_record;
7250  --
7251  IF (l_debug <> -1) THEN
7252     rlm_core_sv.dlog(C_DEBUG,'customer_item_id',
7253                            v_cum_key_record.customer_item_id);
7254     rlm_core_sv.dlog(C_DEBUG,'ship_from_org_id',
7255                            v_cum_key_record.ship_from_org_id);
7256     rlm_core_sv.dlog(C_DEBUG,'ship_to_address_id',
7257                          v_cum_key_record.ship_to_address_id);
7258  END IF;
7259   --
7260   v_cum_key_record.create_cum_key_flag := 'N';
7261   RLM_TPA_SV.CalculateCUMKey(v_cum_key_record, v_cum_record);
7262   --
7263   IF v_cum_record.cum_key_id IS NULL THEN
7264    --
7265    IF (l_debug <> -1) THEN
7266       rlm_core_sv.dlog(C_DEBUG,'error: rlm_nocum_rec');
7267    END IF;
7268    --
7269    raise e_NoCumRec;
7270    --
7271   END IF;
7272   --
7273  END IF;
7274  -- }  end.if. it.basis cust.cum
7275  --
7276  IF (l_debug <> -1) THEN
7277     rlm_core_sv.dpop(C_SDEBUG,'validateWithCumRec');
7278  END IF;
7279  --
7280 EXCEPTION
7281   WHEN e_CumRecYearMissing THEN
7282     --
7283     x_lines_rec.process_status := rlm_core_sv.k_PS_ERROR;
7284     rlm_message_sv.app_error(
7285                 x_ExceptionLevel => rlm_message_sv.k_error_level,
7286                 x_MessageName => 'RLM_CUM_RECORD_YEAR_MISSING',
7287                 x_InterfaceHeaderId => x_lines_rec.header_id,
7288                 x_InterfaceLineId => x_lines_rec.line_id,
7289                 x_ValidationType => 'CUM_KEY_PO');
7290     --
7291     IF (l_debug <> -1) THEN
7292        rlm_core_sv.dpop(C_SDEBUG,'EXCEPTION: RLM_CUM_RECORD_YEAR_MISSING');
7293     END IF;
7294     --
7295   WHEN e_CumKeyPOMissing THEN
7296     --
7297     x_lines_rec.process_status := rlm_core_sv.k_PS_ERROR;
7298     rlm_message_sv.app_error(
7299                 x_ExceptionLevel => rlm_message_sv.k_error_level,
7300                 x_MessageName => 'RLM_CUM_KEY_PO_MISSING',
7301                 x_InterfaceHeaderId => x_lines_rec.header_id,
7302                 x_InterfaceLineId => x_lines_rec.line_id,
7303                 x_ValidationType => 'CUM_KEY_PO');
7304     --
7305     IF (l_debug <> -1) THEN
7306        rlm_core_sv.dpop(C_SDEBUG,'EXCEPTION: RLM_CUM_KEY_PO_MISSING');
7307     END IF;
7308     --
7309   -- 4307505
7310   WHEN e_NoCumRec THEN
7311     x_lines_rec.process_status := rlm_core_sv.k_PS_ERROR;
7312     rlm_message_sv.app_error(
7313                 x_ExceptionLevel => rlm_message_sv.k_error_level,
7314                 x_MessageName => 'RLM_NOACT_CUMKEY_CSTCUM_INTRST',
7315                 x_InterfaceHeaderId => x_lines_rec.header_id,
7316                 x_InterfaceLineId => x_lines_rec.line_id,
7317                 x_Token1 => 'SHIP_TO',
7318                 x_Value1 =>
7319                        rlm_core_sv.get_ship_to(x_lines_rec.ship_to_address_id),
7320                 x_Token2 => 'CITEM',
7321                 x_Value2 =>
7322                     rlm_core_sv.get_item_number(x_lines_rec.customer_item_id));
7323     --
7324     IF (l_debug <> -1) THEN
7325        rlm_core_sv.dpop(C_SDEBUG,'EXCEPTION: RLM_NOACT_CUMKEY_CSTCUM_INTRST');
7326     END IF;
7327     --
7328 END validateWithCumRec;
7329 
7330 /*===============================================================
7331 
7332        PROCEDURE validateWithoutCumRec
7333 
7334 ===============================================================*/
7335 
7336 PROCEDURE validateWithoutCumRec(
7337           x_customer_id   IN NUMBER,
7338           x_group_rec     IN t_group_rec,
7339           x_lines_rec     IN OUT NOCOPY RLM_INTERFACE_LINES%ROWTYPE)
7340 
7341 IS
7342 
7343   v_cum_record         RLM_CUM_SV.cum_rec_type;
7344   v_cum_key_record      rlm_cum_sv.cum_key_attrib_rec_type;
7345   e_NoCumRec           EXCEPTION;
7346   e_NoPoCumRec         EXCEPTION;
7347 
7348 BEGIN
7349  --
7350  IF (l_debug <> -1) THEN
7351     rlm_core_sv.dpush(C_SDEBUG,'validateWithoutCumRec');
7352  END IF;
7353  --
7354  IF x_Group_rec.setup_terms_rec.cum_control_code = 'CUM_BY_PO_ONLY' THEN
7355     --bug 4307505
7356      rlm_message_sv.app_error(
7357         x_ExceptionLevel => rlm_message_sv.k_warn_level,
7358         x_MessageName => 'RLM_CUMPO_STUP_NO_RECORD',
7359         x_InterfaceHeaderId => x_lines_rec.header_id,
7360         x_InterfaceLineId => x_lines_rec.line_id);
7361     --
7362  END IF;
7363  --
7364  --give a warning
7365  --
7366  IF (l_debug <> -1) THEN
7367     rlm_core_sv.dlog(C_DEBUG,'warning: RLM_CUM_STUP_NO_RECORD');
7368  END IF;
7369  --
7370  rlm_message_sv.app_error(
7371         x_ExceptionLevel => rlm_message_sv.k_warn_level,
7372         x_MessageName => 'RLM_CUM_STUP_NO_RECORD',
7373         x_InterfaceHeaderId => x_lines_rec.header_id,
7374         x_InterfaceLineId => x_lines_rec.line_id);
7375  --
7376  v_cum_key_record.customer_id := x_customer_id;
7377  --
7378  v_cum_key_record.customer_item_id := x_lines_rec.customer_item_id;
7379  --
7380  v_cum_key_record.ship_from_org_id := x_lines_rec.ship_from_org_id;
7381  --
7382  v_cum_key_record.intrmd_ship_to_address_id :=
7383                                     x_lines_rec.intrmd_ship_to_id;
7384  --
7385  v_cum_key_record.ship_to_address_id := x_lines_rec.ship_to_address_id ;
7386  --
7387  v_cum_key_record.bill_to_address_id := x_lines_rec.bill_to_address_id ;
7388  --
7389  v_cum_key_record.purchase_order_number :=
7390                                    x_lines_rec.cust_po_number;
7391  --
7392  v_cum_key_record.cust_record_year := x_lines_rec.industry_attribute1;
7393  --
7394  IF (l_debug <> -1) THEN
7395     rlm_core_sv.dlog(C_DEBUG,'customer_item_id',
7396                            v_cum_key_record.customer_item_id);
7397     rlm_core_sv.dlog(C_DEBUG,'ship_from_org_id',
7398                            v_cum_key_record.ship_from_org_id);
7399     rlm_core_sv.dlog(C_DEBUG,'ship_to_address_id',
7400                          v_cum_key_record.ship_to_address_id);
7401  END IF;
7402  --
7403  v_cum_record.cum_key_id := NULL;
7404  v_cum_record.msg_name := NULL;
7405  --
7406  rlm_cum_sv.GetLatestCum(v_cum_key_record,
7407                            x_Group_rec.setup_terms_rec,
7408                            v_cum_record,
7409                            rlm_cum_sv.k_CalledByVD);
7410  --
7411  IF v_cum_record.cum_key_id IS NULL THEN
7412    --
7413    IF (l_debug <> -1) THEN
7414       rlm_core_sv.dlog(C_DEBUG,'error: rlm_nocum_rec');
7415    END IF;
7416    --
7417    raise e_NoCumRec;
7418    --
7419  ELSE
7420    --
7421    IF v_cum_record.msg_name = 'RLM_CUM_START_FUTURE' THEN
7422      --
7423      rlm_message_sv.app_error(
7424         x_ExceptionLevel => rlm_message_sv.k_warn_level,
7425         x_MessageName => 'RLM_CUM_START_FUTURE',
7426         x_InterfaceHeaderId => x_lines_rec.header_id,
7427         x_InterfaceLineId => x_lines_rec.line_id,
7428         x_token1=>'ITEM',
7429         x_value1=>
7430           rlm_core_sv.get_item_number(x_lines_rec.customer_item_id),
7431         x_token2=>'SDATE',
7432         x_value2=>v_cum_record.cum_start_date);
7433       --
7434    END IF;
7435    --
7436  END IF;
7437  --
7438  IF (l_debug <> -1) THEN
7439     rlm_core_sv.dpop(C_SDEBUG,'validateWithoutCumRec');
7440  END IF;
7441  --
7442 EXCEPTION
7443 
7444   WHEN e_NoCumRec THEN
7445     --
7446     x_lines_rec.process_status := rlm_core_sv.k_PS_ERROR;
7447     rlm_message_sv.app_error(
7448                 x_ExceptionLevel => rlm_message_sv.k_error_level,
7449                 x_MessageName => 'RLM_NO_ACTIVE_CUM',
7450                 x_InterfaceHeaderId => x_lines_rec.header_id,
7451                 x_InterfaceLineId => x_lines_rec.line_id);
7452     --
7453     IF (l_debug <> -1) THEN
7454        rlm_core_sv.dpop(C_SDEBUG,'EXCEPTION: RLM_NO_ACTIVE_CUM');
7455     END IF;
7456     --
7457  END validateWithoutCumRec;
7458 
7459 
7460 /*===========================================================================
7461 
7462    PROCEDURE NAME:  CheckCUMKeyPO
7463 
7464 ===========================================================================*/
7465 
7466 PROCEDURE CheckCUMKeyPO(
7467           x_group_rec      IN RLM_VALIDATEDEMAND_SV.t_group_rec,
7468           x_header_rec     IN RLM_INTERFACE_HEADERS%ROWTYPE,
7469           x_lines_rec IN OUT NOCOPY RLM_INTERFACE_LINES%ROWTYPE)
7470 IS
7471   --
7472   v_Progress           VARCHAR2(3) := '010';
7473   x_Success            NUMBER := 0;
7474   v_cum_record         RLM_CUM_SV.cum_rec_type;
7475   v_exist              VARCHAR2(30);
7476   v_cum_key_record     rlm_cum_sv.cum_key_attrib_rec_type;
7477 
7478   CURSOR c_cum
7479   IS
7480     SELECT  nvl(customer_item_id,   x_lines_rec.customer_item_id),
7481             nvl(inventory_item_id,  x_lines_rec.inventory_item_id),
7482             nvl(ship_from_org_id,   x_lines_rec.ship_from_org_id),
7483             nvl(intrmd_ship_to_id,  x_lines_rec.intrmd_ship_to_id),
7484             nvl(ship_to_address_id, x_lines_rec.ship_to_address_id),
7485             nvl(bill_to_address_id, x_lines_rec.bill_to_address_id),
7486             cust_po_number ,
7487             start_date_time,
7488             industry_attribute1                   -- cust_record_year
7489     FROM    rlm_interface_lines
7490     WHERE   header_id = x_header_rec.header_id
7491     AND     schedule_item_num = x_group_rec.schedule_item_num
7492     AND     item_detail_type = '4'
7493     AND     item_detail_subtype = 'CUM';
7494 
7495 
7496 BEGIN
7497   --
7498   IF (l_debug <> -1) THEN
7499      rlm_core_sv.dpush(C_SDEBUG,'CheckCUMKeyPO');
7500      rlm_core_sv.dlog(C_DEBUG,'calc_cum_flag',
7501                                 x_Group_rec.setup_terms_rec.calc_cum_flag);
7502      rlm_core_sv.dlog(C_DEBUG,'intransit calc basis',x_Group_rec.setup_terms_rec.intransit_calc_basis);
7503   END IF;
7504   --
7505   IF rlm_message_sv.check_dependency('CUM_KEY_PO') THEN
7506     --
7507     IF x_Group_rec.setup_terms_rec.calc_cum_flag = 'Y' THEN
7508 
7509        --calc_cum_flag = Y does not mean cum processing
7510        --find out if there are any cum info provided
7511        --
7512        IF NVL(x_Group_rec.setup_terms_rec.cum_control_code,'NO_CUM') IN
7513           ('CUM_BY_DATE_PO','CUM_BY_DATE_RECORD_YEAR'
7514             ,'CUM_BY_DATE_ONLY','CUM_BY_PO_ONLY')
7515        THEN --{
7516          --
7517   	 IF (l_debug <> -1) THEN
7518             rlm_core_sv.dlog(C_DEBUG,'schedule_item_num',
7519                                              x_group_rec.schedule_item_num );
7520          END IF;
7521          --
7522          v_Progress := 20;
7523          --
7524          --for each group find out if there is a cum info line (item detail
7525          -- type 4).  If there are no cum line sent, verify that there is
7526          -- a cum_key defined
7527          --
7528          BEGIN
7529 
7530            OPEN c_cum;
7531 
7532            FETCH c_cum into
7533             v_cum_key_record.customer_item_id,
7534             v_cum_key_record.inventory_item_id,
7535             v_cum_key_record.ship_from_org_id,
7536             v_cum_key_record.intrmd_ship_to_address_id,
7537             v_cum_key_record.ship_to_address_id,
7538             v_cum_key_record.bill_to_address_id,
7539             v_cum_key_record.purchase_order_number,
7540             v_cum_key_record.cum_start_date,
7541             v_cum_key_record.cust_record_year;
7542 
7543            IF c_cum%NOTFOUND THEN
7544              --
7545              raise no_data_found;
7546              --
7547            END IF;
7548 
7549            -- 4307505 : passing customer id in addition
7550            v_cum_key_record.customer_id := x_header_rec.customer_id;
7551            validateWithCumRec( v_cum_key_record, x_group_rec  , x_lines_rec );
7552            --
7553          EXCEPTION
7554            WHEN NO_DATA_FOUND THEN
7555              --
7556              validateWithoutCumRec(x_header_rec.customer_id,
7557                                   x_group_rec ,
7558                                   x_lines_rec);
7559            WHEN TOO_MANY_ROWS THEN
7560              --
7561   	     IF (l_debug <> -1) THEN
7562                 rlm_core_sv.dlog(C_DEBUG,'error:RLM_MULTIPLE_ITM_CUM_DTL_FOUND') ;
7563              END IF;
7564 	     --
7565              x_lines_rec.process_status := rlm_core_sv.k_PS_ERROR;
7566              rlm_message_sv.app_error(
7567                  x_ExceptionLevel => rlm_message_sv.k_error_level,
7568                  x_MessageName => 'RLM_MULTIPLE_ITM_CUM_DTL_FOUND',
7569                  x_InterfaceHeaderId => x_lines_rec.header_id,
7570                  x_InterfaceLineId => x_lines_rec.line_id,
7571                  x_Token1 => 'SHIP_FROM',
7572                  x_Value1 =>
7573                        rlm_core_sv.get_ship_from(x_lines_rec.ship_from_org_id),
7574                  x_Token2 => 'SHIP_TO',
7575                  x_Value2 =>
7576                        rlm_core_sv.get_ship_to(x_lines_rec.ship_to_address_id),
7577                  x_Token3 => 'CITEM',
7578                  x_Value3 =>
7579                     rlm_core_sv.get_item_number(x_lines_rec.customer_item_id));
7580              --
7581   	     IF (l_debug <> -1) THEN
7582                 rlm_core_sv.dlog(C_DEBUG,'progress',v_Progress);
7583                 rlm_core_sv.dlog(C_DEBUG,'EXCEPTION: e_TooManyRows');
7584              END IF;
7585              --
7586          END;
7587          --
7588        END IF;--}
7589        --
7590     END IF;
7591 
7592     IF x_Group_rec.setup_terms_rec.intransit_calc_basis= 'CUSTOMER_CUM' THEN         --
7593       BEGIN
7594         --
7595         IF c_cum%ISOPEN THEN
7596           --
7597           IF c_cum%NOTFOUND THEN
7598             --
7599             raise no_data_found;
7600             --
7601           END IF;
7602           --
7603         ELSE
7604           --
7605           OPEN c_cum;
7606           FETCH c_cum into
7607             v_cum_key_record.customer_item_id,
7608             v_cum_key_record.inventory_item_id,
7609             v_cum_key_record.ship_from_org_id,
7610             v_cum_key_record.intrmd_ship_to_address_id,
7611             v_cum_key_record.ship_to_address_id,
7612             v_cum_key_record.bill_to_address_id,
7613             v_cum_key_record.purchase_order_number,
7614             v_cum_key_record.cum_start_date,
7615             v_cum_key_record.cust_record_year;
7616 
7617           IF c_cum%NOTFOUND THEN
7618             --
7619             raise no_data_found;
7620             --
7621           END IF;
7622           --
7623         END IF;
7624         --
7625       EXCEPTION
7626        --
7627        When NO_DATA_FOUND then
7628          --
7629          -- 4307505 : changed this from Error to Warning
7630          rlm_message_sv.app_error(
7631                  x_ExceptionLevel => rlm_message_sv.k_warn_level,     -- 4307505
7632                  x_MessageName => 'RLM_NO_CUM_INTRST_CUST_CUM',
7633                  x_InterfaceHeaderId => x_lines_rec.header_id,
7634                  x_InterfaceLineId => x_lines_rec.line_id,
7635                  x_Token1 => 'SHIP_TO',
7636                  x_Value1 =>
7637                        rlm_core_sv.get_ship_to(x_lines_rec.ship_to_address_id),
7638                  x_Token2 => 'CITEM',
7639                  x_Value2 =>
7640                     rlm_core_sv.get_item_number(x_lines_rec.customer_item_id));
7641          --
7642   	 IF (l_debug <> -1) THEN
7643            rlm_core_sv.dlog(C_DEBUG,'progress',v_Progress);
7644            rlm_core_sv.dlog(C_DEBUG,'EXCEPTION: No CUM Line for Intransit Basis Customer CUM');
7645          END IF;
7646        --
7647       END;
7648       --
7649     END IF;
7650     --
7651   END IF;
7652   --
7653   IF c_cum%ISOPEN THEN
7654      CLOSE c_cum; --bug 4570658
7655   END IF;
7656 
7657   IF (l_debug <> -1) THEN
7658      rlm_core_sv.dpop(C_SDEBUG);
7659   END IF;
7660   --
7661 EXCEPTION
7662   --
7663   WHEN OTHERS THEN
7664     --
7665     IF c_cum%ISOPEN THEN
7666        CLOSE c_cum; --bug 4570658
7667     END IF;
7668 
7669     x_lines_rec.process_status := rlm_core_sv.k_PS_ERROR;
7670     rlm_message_sv.sql_error('rlm_validateDemand_sv.CheckCUMKeyPO', v_Progress);
7671     --
7672     IF (l_debug <> -1) THEN
7673        rlm_core_sv.dlog(C_DEBUG,'progress',v_Progress);
7674        rlm_core_sv.dpop(C_SDEBUG,'EXCEPTION: '||SUBSTR(SQLERRM,1,200));
7675     END IF;
7676     --
7677     raise;
7678     --
7679 END CheckCUMKeyPO;
7680 
7681 
7682 /*===========================================================================
7683 
7684         PROCEDURE NAME:  ValidPlanningProdSeqNum
7685 
7686 ===========================================================================*/
7687 PROCEDURE ValidPlanningProdSeqNum(
7688                  x_setup_terms_rec  IN rlm_setup_terms_sv.setup_terms_rec_typ,
7689                  x_header_rec IN RLM_INTERFACE_HEADERS%ROWTYPE,
7690                  x_lines_rec IN OUT NOCOPY RLM_INTERFACE_LINES%ROWTYPE)
7691 IS
7692   v_Progress         VARCHAR(3) := '010';
7693   e_ProdSeqMissing   EXCEPTION;
7694   e_MatchProdSeq     EXCEPTION;
7695 
7696 BEGIN
7697   --
7698   IF (l_debug <> -1) THEN
7699      rlm_core_sv.dpush(C_SDEBUG,'ValidPlanningProdSeqNum');
7700   END IF;
7701   --
7702   IF rlm_message_sv.check_dependency('PROD_SEQ_NUM') THEN
7703     --
7704     IF (l_debug <> -1) THEN
7705        rlm_core_sv.dlog(C_DEBUG,'ScheduleType',x_header_rec.schedule_type);
7706        rlm_core_sv.dlog(C_DEBUG,'Planning_Prod_Seq',
7707                                   x_lines_rec.CUST_PRODUCTION_SEQ_NUM);
7708     END IF;
7709     --
7710     IF (x_header_rec.schedule_type = 'SEQUENCED') THEN
7711        --
7712        IF (x_lines_rec.CUST_PRODUCTION_SEQ_NUM IS NULL AND
7713            x_lines_rec.item_detail_type IN ('0', '1', '2', '6')) THEN
7714           --
7715           raise e_ProdSeqMissing;
7716           --
7717        ELSE
7718           --
7719           IF INSTR(x_setup_terms_rec.match_within_key,'$') = 0 THEN
7720              /* Mandatory to set match within in case of a sequenced schedule*/
7721              raise e_MatchProdSeq;
7722           END IF ;
7723           --
7724        END IF;
7725        --
7726     END IF;
7727     --
7728   END IF;
7729   --
7730   IF (l_debug <> -1) THEN
7731      rlm_core_sv.dpop(C_SDEBUG);
7732   END IF;
7733   --
7734 EXCEPTION
7735   --
7736   WHEN e_ProdSeqMissing THEN
7737     --
7738     x_lines_rec.process_status := rlm_core_sv.k_PS_ERROR;
7739     --
7740     rlm_message_sv.app_error(
7741                 x_ExceptionLevel => rlm_message_sv.k_error_level,
7742                 x_MessageName => 'RLM_PLANNING_PROD_SEQ_MISSING',
7743                 x_InterfaceHeaderId => x_lines_rec.header_id,
7744                 x_InterfaceLineId => x_lines_rec.line_id,
7745                 x_ValidationType => 'PROD_SEQ_NUM');
7746     --
7747     IF (l_debug <> -1) THEN
7748        rlm_core_sv.dpop(C_SDEBUG,'EXCEPTION:  RLM_PLANNING_PROD_SEQ_MISSING');
7749     END IF;
7750     --
7751   WHEN e_MatchProdSeq THEN
7752     --
7753     x_lines_rec.process_status := rlm_core_sv.k_PS_ERROR;
7754     --
7755     rlm_message_sv.app_error(
7756                 x_ExceptionLevel => rlm_message_sv.k_error_level,
7757                 x_MessageName => 'RLM_MATCH_WITHIN_PLN_PROD_SEQ',
7758                 x_InterfaceHeaderId => x_lines_rec.header_id,
7759                 x_InterfaceLineId => x_lines_rec.line_id,
7760                 x_ValidationType => 'PROD_SEQ_NUM');
7761     --
7762     IF (l_debug <> -1) THEN
7763        rlm_core_sv.dpop(C_SDEBUG,'EXCEPTION:  RLM_MATCH_WITHIN_PLN_PROD_SEQ');
7764     END IF;
7765     --
7766   WHEN OTHERS THEN
7767     --
7768     x_lines_rec.process_status := rlm_core_sv.k_PS_ERROR;
7769     rlm_message_sv.sql_error('rlm_validateDemand_sv.ValidPlanningProdSeqNum',
7770                                        v_Progress);
7771     --
7772     IF (l_debug <> -1) THEN
7773        rlm_core_sv.dpop(C_SDEBUG,'EXCEPTION: '||SUBSTR(SQLERRM,1,200));
7774     END IF;
7775     --
7776     raise;
7777     --
7778 END ValidPlanningProdSeqNum;
7779 
7780 /*===========================================================================
7781 
7782         PROCEDURE NAME:  ValidLineScheduleType
7783 
7784 ===========================================================================*/
7785 PROCEDURE ValidLineScheduleType(x_header_rec  IN RLM_INTERFACE_HEADERS%ROWTYPE,
7786           x_lines_rec IN OUT NOCOPY RLM_INTERFACE_LINES%ROWTYPE)
7787 IS
7788   v_Progress         VARCHAR(3) := '010';
7789   e_SchedTypeInv     EXCEPTION;
7790 
7791 BEGIN
7792   --
7793   IF (l_debug <> -1) THEN
7794      rlm_core_sv.dpush(C_SDEBUG,'ValidLineScheduleType');
7795   END IF;
7796   --
7797   IF rlm_message_sv.check_dependency('LINE_SCHEDULE_TYPE') THEN
7798     --
7799     IF (l_debug <> -1) THEN
7800        rlm_core_sv.dlog(C_DEBUG,'Schedule_Type',x_header_rec.Schedule_type );
7801     END IF;
7802     --
7803     IF x_lines_rec.Subline_Assigned_Id_Ext IS NOT NULL AND
7804        x_lines_rec.Subline_Config_Code_Ext IS NOT NULL AND
7805        x_lines_rec.Subline_Cust_Item_Ext IS NOT NULL AND
7806        x_lines_rec.Subline_Cust_Item_Id IS NOT NULL AND
7807        x_lines_rec.Subline_Model_Num_Ext IS NOT NULL AND
7808        x_lines_rec.Subline_Quantity IS NOT NULL AND
7809        x_lines_rec.Subline_UOM_CODE IS NOT NULL AND
7810        x_header_rec.Schedule_type <> 'SEQUENCED' THEN
7811           --
7812           raise e_SchedTypeInv;
7813           --
7814     END IF;
7815     --
7816   END IF;
7817   --
7818   IF (l_debug <> -1) THEN
7819      rlm_core_sv.dpop(C_SDEBUG);
7820   END IF;
7821   --
7822 EXCEPTION
7823   --
7824   WHEN e_SchedTypeInv THEN
7825     --
7826     x_lines_rec.process_status := rlm_core_sv.k_PS_ERROR;
7827     rlm_message_sv.app_error(
7828                 x_ExceptionLevel => rlm_message_sv.k_error_level,
7829                 x_MessageName => 'RLM_LINE_SCHEDULE_TYPE_INVALID',
7830                 x_InterfaceHeaderId => x_lines_rec.header_id,
7831                 x_InterfaceLineId => x_lines_rec.line_id,
7832                 x_token1=>'SCHEDULE_TYPE',
7833                 x_value1=>x_header_rec.Schedule_type,
7834                 x_ValidationType => 'LINE_SCHEDULE_TYPE');
7835     --
7836     IF (l_debug <> -1) THEN
7837        rlm_core_sv.dpop(C_SDEBUG,'EXCEPTION:  RLM_LINE_SCHEDULE_TYPE_INVALID');
7838     END IF;
7839     --
7840   WHEN OTHERS THEN
7841     --
7842     x_lines_rec.process_status := rlm_core_sv.k_PS_ERROR;
7843     rlm_message_sv.sql_error('rlm_validateDemand_sv.ValidLineScheduleType: ',
7844                                        v_Progress);
7845     --
7846     IF (l_debug <> -1) THEN
7847        rlm_core_sv.dpop(C_SDEBUG,'EXCEPTION: '||SUBSTR(SQLERRM,1,200));
7848     END IF;
7849     --
7850 END ValidLineScheduleType;
7851 
7852 /*===========================================================================
7853 
7854         PROCEDURE NAME:  UpdateInterfaceLines
7855 
7856 ===========================================================================*/
7857 PROCEDURE UpdateInterfaceLines(x_header_rec IN RLM_INTERFACE_HEADERS%ROWTYPE)
7858 IS
7859   --
7860   v_Progress         VARCHAR(3) := '010';
7861   IsGroupError       BOOLEAN := FALSE;
7862   --
7863   header_id_tab			g_number_tbl_type;
7864   line_id_tab			g_number_tbl_type;
7865   AGREEMENT_ID_TAB              AGREEMENT_ID_T;
7866   ATO_DATA_TYPE_TAB             ATO_DATA_TYPE_T;
7867   BILL_TO_ADDRESS_1_EXT_TAB    BILL_TO_ADDRESS_1_EXT_T;
7868   BILL_TO_ADDRESS_2_EXT_TAB    BILL_TO_ADDRESS_2_EXT_T;
7869   BILL_TO_ADDRESS_3_EXT_TAB    BILL_TO_ADDRESS_3_EXT_T;
7870   BILL_TO_ADDRESS_4_EXT_TAB	    BILL_TO_ADDRESS_4_EXT_T;
7871   BILL_TO_ADDRESS_ID_TAB      BILL_TO_ADDRESS_ID_T;
7872   INVOICE_TO_ORG_ID_TAB       INVOICE_TO_ORG_ID_T;
7873   BILL_TO_CITY_EXT_TAB       BILL_TO_CITY_EXT_T;
7874   BILL_TO_COUNTRY_EXT_TAB    BILL_TO_COUNTRY_EXT_T;
7875   BILL_TO_COUNTY_EXT_TAB     BILL_TO_COUNTY_EXT_T;
7876   BILL_TO_NAME_EXT_TAB       BILL_TO_NAME_EXT_T;
7877   BILL_TO_POSTAL_CD_EXT_TAB    BILL_TO_POSTAL_CD_EXT_T;
7878   BILL_TO_PROVINCE_EXT_TAB    BILL_TO_PROVINCE_EXT_T;
7879   BILL_TO_SITE_USE_ID_TAB     BILL_TO_SITE_USE_ID_T;
7880   BILL_TO_STATE_EXT_TAB       BILL_TO_STATE_EXT_T;
7881   CARRIER_ID_CODE_EXT_TAB     CARRIER_ID_CODE_EXT_T;
7882   CARRIER_QUALIFIER_EXT_TAB    CARRIER_QUALIFIER_EXT_T;
7883   COMMODITY_EXT_TAB           COMMODITY_EXT_T;
7884   COUNTRY_OF_ORIGIN_EXT_TAB    COUNTRY_OF_ORIGIN_EXT_T;
7885   CUST_ASSEMBLY_EXT_TAB        CUST_ASSEMBLY_EXT_T;
7886   CUST_ASSIGNED_ID_EXT_TAB     CUST_ASSIGNED_ID_EXT_T;
7887   CUST_BILL_TO_EXT_TAB         CUST_BILL_TO_EXT_T;
7888   CUST_CONTRACT_NUM_EXT_TAB       CUST_CONTRACT_NUM_EXT_T;
7889   CUSTOMER_DOCK_CODE_TAB          CUSTOMER_DOCK_CODE_T;
7890   CUST_INTRMD_SHIP_TO_EXT_TAB     CUST_INTRMD_SHIP_TO_EXT_T;
7891   CUST_ITEM_PRICE_EXT_TAB         CUST_ITEM_PRICE_EXT_T;
7892   CUST_ITEM_PRICE_UOM_EXT_TAB     CUST_ITEM_PRICE_UOM_EXT_T;
7893   CUSTOMER_ITEM_REVISION_TAB      CUSTOMER_ITEM_REVISION_T;
7894   CUSTOMER_JOB_TAB                CUSTOMER_JOB_T;
7895   CUST_MANUFACTURER_EXT_TAB       CUST_MANUFACTURER_EXT_T;
7896   CUST_MODEL_NUMBER_EXT_TAB       CUST_MODEL_NUMBER_EXT_T;
7897   CUST_MODEL_SERIAL_NUMBER_TAB    CUST_MODEL_SERIAL_NUMBER_T;
7898   CUST_ORDER_NUM_EXT_TAB         CUST_ORDER_NUM_EXT_T;
7899   CUST_PROCESS_NUM_EXT_TAB      CUST_PROCESS_NUM_EXT_T;
7900   CUST_SET_NUM_EXT_TAB             CUST_SET_NUM_EXT_T;
7901   CUST_SHIP_FROM_ORG_EXT_TAB      CUST_SHIP_FROM_ORG_EXT_T;
7902   CUST_SHIP_TO_EXT_TAB            CUST_SHIP_TO_EXT_T;
7903   CUST_UOM_EXT_TAB                CUST_UOM_EXT_T;
7904   CUSTOMER_ITEM_EXT_TAB           CUSTOMER_ITEM_EXT_T;
7905   CUSTOMER_ITEM_ID_TAB            CUSTOMER_ITEM_ID_T;
7906   REQUEST_DATE_TAB                REQUEST_DATE_T;
7907   SCHEDULE_DATE_TAB              SCHEDULE_DATE_T;
7908   DATE_TYPE_CODE_TAB             DATE_TYPE_CODE_T;
7909   DATE_TYPE_CODE_EXT_TAB         DATE_TYPE_CODE_EXT_T;
7910   DELIVERY_LEAD_TIME_TAB         DELIVERY_LEAD_TIME_T;
7911   END_DATE_TIME_TAB	              END_DATE_TIME_T;
7912   EQUIPMENT_CODE_EXT_TAB         EQUIPMENT_CODE_EXT_T;
7913   EQUIPMENT_NUMBER_EXT_TAB       EQUIPMENT_NUMBER_EXT_T;
7914   HANDLING_CODE_EXT_TAB          HANDLING_CODE_EXT_T;
7915   HAZARD_CODE_EXT_TAB            HAZARD_CODE_EXT_T;
7916   HAZARD_CODE_QUAL_EXT_TAB       HAZARD_CODE_QUAL_EXT_T;
7917   HAZARD_DESCRIPTION_EXT_TAB     HAZARD_DESCRIPTION_EXT_T;
7918   IMPORT_LICENSE_DATE_EXT_TAB     IMPORT_LICENSE_DATE_EXT_T;
7919   IMPORT_LICENSE_EXT_TAB          IMPORT_LICENSE_EXT_T;
7920   INDUSTRY_ATTRIBUTE1_TAB         INDUSTRY_ATTRIBUTE1_T;
7921   INDUSTRY_ATTRIBUTE10_TAB        INDUSTRY_ATTRIBUTE10_T;
7922   INDUSTRY_ATTRIBUTE11_TAB        INDUSTRY_ATTRIBUTE11_T;
7923   INDUSTRY_ATTRIBUTE12_TAB        INDUSTRY_ATTRIBUTE12_T;
7924   INDUSTRY_ATTRIBUTE13_TAB        INDUSTRY_ATTRIBUTE13_T;
7925   INDUSTRY_ATTRIBUTE14_TAB        INDUSTRY_ATTRIBUTE14_T;
7926   INDUSTRY_ATTRIBUTE15_TAB        INDUSTRY_ATTRIBUTE15_T;
7927   INDUSTRY_ATTRIBUTE2_TAB         INDUSTRY_ATTRIBUTE2_T;
7928   INDUSTRY_ATTRIBUTE3_TAB         INDUSTRY_ATTRIBUTE3_T;
7929   INDUSTRY_ATTRIBUTE4_TAB         INDUSTRY_ATTRIBUTE4_T;
7930   INDUSTRY_ATTRIBUTE5_TAB         INDUSTRY_ATTRIBUTE5_T;
7931   INDUSTRY_ATTRIBUTE6_TAB         INDUSTRY_ATTRIBUTE6_T;
7932   INDUSTRY_ATTRIBUTE7_TAB         INDUSTRY_ATTRIBUTE7_T;
7933   INDUSTRY_ATTRIBUTE8_TAB         INDUSTRY_ATTRIBUTE8_T;
7934   INDUSTRY_ATTRIBUTE9_TAB         INDUSTRY_ATTRIBUTE9_T;
7935   INDUSTRY_CONTEXT_TAB            INDUSTRY_CONTEXT_T;
7936   INTRMD_SHIP_TO_ID_TAB           INTRMD_SHIP_TO_ID_T;
7937   SHIP_TO_ORG_ID_TAB              SHIP_TO_ORG_ID_T;
7938   INTRMD_ST_ADDRESS_1_EXT_TAB     INTRMD_ST_ADDRESS_1_EXT_T;
7939   INTRMD_ST_ADDRESS_2_EXT_TAB     INTRMD_ST_ADDRESS_2_EXT_T;
7940   INTRMD_ST_ADDRESS_3_EXT_TAB     INTRMD_ST_ADDRESS_3_EXT_T;
7941   INTRMD_ST_ADDRESS_4_EXT_TAB     INTRMD_ST_ADDRESS_4_EXT_T;
7942   INTRMD_ST_CITY_EXT_TAB          INTRMD_ST_CITY_EXT_T;
7943   INTRMD_ST_COUNTRY_EXT_TAB       INTRMD_ST_COUNTRY_EXT_T;
7944   INTRMD_ST_COUNTY_EXT_TAB        INTRMD_ST_COUNTY_EXT_T;
7945   INTRMD_ST_NAME_EXT_TAB          INTRMD_ST_NAME_EXT_T;
7946   INTRMD_ST_POSTAL_CD_EXT_TAB     INTRMD_ST_POSTAL_CD_EXT_T;
7947   INTRMD_ST_PROVINCE_EXT_TAB     INTRMD_ST_PROVINCE_EXT_T;
7948   INTRMD_ST_STATE_EXT_TAB        INTRMD_ST_STATE_EXT_T;
7949   INTRMD_ST_SITE_USE_ID_TAB      INTRMD_ST_SITE_USE_ID_T;
7950   INVENTORY_ITEM_ID_TAB          INVENTORY_ITEM_ID_T;
7951   INVENTORY_ITEM_SEGMENT1_TAB    INVENTORY_ITEM_SEGMENT1_T;
7952   INVENTORY_ITEM_SEGMENT10_TAB      INVENTORY_ITEM_SEGMENT10_T;
7953   INVENTORY_ITEM_SEGMENT11_TAB      INVENTORY_ITEM_SEGMENT11_T;
7954   INVENTORY_ITEM_SEGMENT12_TAB      INVENTORY_ITEM_SEGMENT12_T;
7955   INVENTORY_ITEM_SEGMENT13_TAB      INVENTORY_ITEM_SEGMENT13_T;
7956   INVENTORY_ITEM_SEGMENT14_TAB      INVENTORY_ITEM_SEGMENT14_T;
7957   INVENTORY_ITEM_SEGMENT15_TAB      INVENTORY_ITEM_SEGMENT15_T;
7958   INVENTORY_ITEM_SEGMENT16_TAB      INVENTORY_ITEM_SEGMENT16_T;
7959   INVENTORY_ITEM_SEGMENT17_TAB      INVENTORY_ITEM_SEGMENT17_T;
7960   INVENTORY_ITEM_SEGMENT18_TAB      INVENTORY_ITEM_SEGMENT18_T;
7961   INVENTORY_ITEM_SEGMENT19_TAB      INVENTORY_ITEM_SEGMENT19_T;
7962   INVENTORY_ITEM_SEGMENT2_TAB       INVENTORY_ITEM_SEGMENT2_T;
7963   INVENTORY_ITEM_SEGMENT20_TAB      INVENTORY_ITEM_SEGMENT20_T;
7964   INVENTORY_ITEM_SEGMENT3_TAB      INVENTORY_ITEM_SEGMENT3_T;
7965   INVENTORY_ITEM_SEGMENT4_TAB      INVENTORY_ITEM_SEGMENT4_T;
7966   INVENTORY_ITEM_SEGMENT5_TAB      INVENTORY_ITEM_SEGMENT5_T;
7967   INVENTORY_ITEM_SEGMENT6_TAB      INVENTORY_ITEM_SEGMENT6_T;
7968   INVENTORY_ITEM_SEGMENT7_TAB      INVENTORY_ITEM_SEGMENT7_T;
7969   INVENTORY_ITEM_SEGMENT8_TAB      INVENTORY_ITEM_SEGMENT8_T;
7970   INVENTORY_ITEM_SEGMENT9_TAB      INVENTORY_ITEM_SEGMENT9_T;
7971   ITEM_CONTACT_CODE_1_TAB         ITEM_CONTACT_CODE_1_T;
7972   ITEM_CONTACT_CODE_2_TAB         ITEM_CONTACT_CODE_2_T;
7973   ITEM_CONTACT_VALUE_1_TAB        ITEM_CONTACT_VALUE_1_T;
7974   ITEM_CONTACT_VALUE_2_TAB        ITEM_CONTACT_VALUE_2_T;
7975   ITEM_DESCRIPTION_EXT_TAB        ITEM_DESCRIPTION_EXT_T;
7976   ITEM_DETAIL_QUANTITY_TAB        ITEM_DETAIL_QUANTITY_T;
7977   ITEM_DETAIL_REF_CODE_1_TAB      ITEM_DETAIL_REF_CODE_1_T;
7978   ITEM_DETAIL_REF_CODE_2_TAB      ITEM_DETAIL_REF_CODE_2_T;
7979   ITEM_DETAIL_REF_CODE_3_TAB      ITEM_DETAIL_REF_CODE_3_T;
7980   ITEM_DETAIL_REF_VALUE_1_TAB     ITEM_DETAIL_REF_VALUE_1_T;
7981   ITEM_DETAIL_REF_VALUE_2_TAB     ITEM_DETAIL_REF_VALUE_2_T;
7982   ITEM_DETAIL_REF_VALUE_3_TAB     ITEM_DETAIL_REF_VALUE_3_T;
7983   ITEM_DETAIL_SUBTYPE_TAB         ITEM_DETAIL_SUBTYPE_T;
7984   ITEM_DETAIL_SUBTYPE_EXT_TAB     ITEM_DETAIL_SUBTYPE_EXT_T;
7985   ITEM_DETAIL_TYPE_TAB            ITEM_DETAIL_TYPE_T;
7986   ITEM_DETAIL_TYPE_EXT_TAB        ITEM_DETAIL_TYPE_EXT_T;
7987   ITEM_ENG_CNG_LVL_EXT_TAB        ITEM_ENG_CNG_LVL_EXT_T;
7988   ITEM_MEASUREMENTS_EXT_TAB       ITEM_MEASUREMENTS_EXT_T;
7989   ITEM_NOTE_TEXT_TAB              ITEM_NOTE_TEXT_T;
7990   ITEM_REF_CODE_1_TAB             ITEM_REF_CODE_1_T;
7991   ITEM_REF_CODE_2_TAB            ITEM_REF_CODE_2_T;
7992   ITEM_REF_CODE_3_TAB            ITEM_REF_CODE_3_T;
7993   ITEM_REF_VALUE_1_TAB           ITEM_REF_VALUE_1_T;
7994   ITEM_REF_VALUE_2_TAB           ITEM_REF_VALUE_2_T;
7995   ITEM_REF_VALUE_3_TAB           ITEM_REF_VALUE_3_T;
7996   ITEM_RELEASE_STATUS_EXT_TAB    ITEM_RELEASE_STATUS_EXT_T;
7997   LADING_QUANTITY_EXT_TAB        LADING_QUANTITY_EXT_T;
7998   LETTER_CREDIT_EXPDT_EXT_TAB    LETTER_CREDIT_EXPDT_EXT_T;
7999   LETTER_CREDIT_EXT_TAB          LETTER_CREDIT_EXT_T;
8000   LINE_REFERENCE_TAB             LINE_REFERENCE_T;
8001   LINK_TO_LINE_REF_TAB           LINK_TO_LINE_REF_T;
8002   ORDER_HEADER_ID_TAB            ORDER_HEADER_ID_T;
8003   OTHER_NAME_CODE_1_TAB          OTHER_NAME_CODE_1_T;
8004   OTHER_NAME_CODE_2_TAB          OTHER_NAME_CODE_2_T;
8005   OTHER_NAME_VALUE_1_TAB         OTHER_NAME_VALUE_1_T;
8006   OTHER_NAME_VALUE_2_TAB         OTHER_NAME_VALUE_2_T;
8007   PACK_SIZE_EXT_TAB              PACK_SIZE_EXT_T;
8008   PACK_UNITS_PER_PACK_EXT_TAB    PACK_UNITS_PER_PACK_EXT_T;
8009   PACK_UOM_CODE_EXT_TAB          PACK_UOM_CODE_EXT_T;
8010   PACKAGING_CODE_EXT_TAB         PACKAGING_CODE_EXT_T;
8011   PARENT_LINK_LINE_REF_TAB       PARENT_LINK_LINE_REF_T;
8012   CUST_PRODUCTION_SEQ_NUM_TAB      CUST_PRODUCTION_SEQ_NUM_T;
8013   PRICE_LIST_ID_TAB              PRICE_LIST_ID_T;
8014   PRIMARY_QUANTITY_TAB           PRIMARY_QUANTITY_T;
8015   PRIMARY_UOM_CODE_TAB           PRIMARY_UOM_CODE_T;
8016   PRIME_CONTRCTR_PART_EXT_TAB    PRIME_CONTRCTR_PART_EXT_T;
8017   PROCESS_STATUS_TAB             PROCESS_STATUS_T;
8018   CUST_PO_RELEASE_NUM_TAB        CUST_PO_RELEASE_NUM_T;
8019   CUST_PO_DATE_TAB               CUST_PO_DATE_T;
8020   CUST_PO_LINE_NUM_TAB           CUST_PO_LINE_NUM_T;
8021   CUST_PO_NUMBER_TAB             CUST_PO_NUMBER_T;
8022   QTY_TYPE_CODE_TAB              QTY_TYPE_CODE_T;
8023   QTY_TYPE_CODE_EXT_TAB          QTY_TYPE_CODE_EXT_T;
8024   RETURN_CONTAINER_EXT_TAB       RETURN_CONTAINER_EXT_T;
8025   SCHEDULE_LINE_ID_TAB           SCHEDULE_LINE_ID_T;
8026   ROUTING_DESC_EXT_TAB           ROUTING_DESC_EXT_T;
8027   ROUTING_SEQ_CODE_EXT_TAB       ROUTING_SEQ_CODE_EXT_T;
8028   SCHEDULE_ITEM_NUM_TAB          SCHEDULE_ITEM_NUM_T;
8029   SHIP_DEL_PATTERN_EXT_TAB       SHIP_DEL_PATTERN_EXT_T;
8030   SHIP_DEL_TIME_CODE_EXT_TAB     SHIP_DEL_TIME_CODE_EXT_T;
8031   SHIP_DEL_RULE_NAME_TAB         SHIP_DEL_RULE_NAME_T;
8032   SHIP_FROM_ADDRESS_1_EXT_TAB    SHIP_FROM_ADDRESS_1_EXT_T;
8033   SHIP_FROM_ADDRESS_2_EXT_TAB    SHIP_FROM_ADDRESS_2_EXT_T;
8034   SHIP_FROM_ADDRESS_3_EXT_TAB    SHIP_FROM_ADDRESS_3_EXT_T;
8035   SHIP_FROM_ADDRESS_4_EXT_TAB    SHIP_FROM_ADDRESS_4_EXT_T;
8036   SHIP_FROM_CITY_EXT_TAB         SHIP_FROM_CITY_EXT_T;
8037   SHIP_FROM_COUNTRY_EXT_TAB      SHIP_FROM_COUNTRY_EXT_T;
8038   SHIP_FROM_COUNTY_EXT_TAB       SHIP_FROM_COUNTY_EXT_T;
8039   SHIP_FROM_NAME_EXT_TAB         SHIP_FROM_NAME_EXT_T;
8040   SHIP_FROM_ORG_ID_TAB           SHIP_FROM_ORG_ID_T;
8041   SHIP_FROM_POSTAL_CD_EXT_TAB    SHIP_FROM_POSTAL_CD_EXT_T;
8042   SHIP_FROM_PROVINCE_EXT_TAB     SHIP_FROM_PROVINCE_EXT_T;
8043   SHIP_FROM_STATE_EXT_TAB        SHIP_FROM_STATE_EXT_T;
8044   SHIP_LABEL_INFO_LINE_1_TAB     SHIP_LABEL_INFO_LINE_1_T;
8045   SHIP_LABEL_INFO_LINE_10_TAB    SHIP_LABEL_INFO_LINE_10_T;
8046   SHIP_LABEL_INFO_LINE_2_TAB     SHIP_LABEL_INFO_LINE_2_T;
8047   SHIP_LABEL_INFO_LINE_3_TAB     SHIP_LABEL_INFO_LINE_3_T;
8048   SHIP_LABEL_INFO_LINE_4_TAB     SHIP_LABEL_INFO_LINE_4_T;
8049   SHIP_LABEL_INFO_LINE_5_TAB     SHIP_LABEL_INFO_LINE_5_T;
8050   SHIP_LABEL_INFO_LINE_6_TAB     SHIP_LABEL_INFO_LINE_6_T;
8051   SHIP_LABEL_INFO_LINE_7_TAB     SHIP_LABEL_INFO_LINE_7_T;
8052   SHIP_LABEL_INFO_LINE_8_TAB     SHIP_LABEL_INFO_LINE_8_T;
8053   SHIP_LABEL_INFO_LINE_9_TAB     SHIP_LABEL_INFO_LINE_9_T;
8054   SHIP_TO_ADDRESS_1_EXT_TAB      SHIP_TO_ADDRESS_1_EXT_T;
8055   SHIP_TO_ADDRESS_2_EXT_TAB       SHIP_TO_ADDRESS_2_EXT_T;
8056   SHIP_TO_ADDRESS_3_EXT_TAB       SHIP_TO_ADDRESS_3_EXT_T;
8057   SHIP_TO_ADDRESS_4_EXT_TAB       SHIP_TO_ADDRESS_4_EXT_T;
8058   SHIP_TO_ADDRESS_ID_TAB          SHIP_TO_ADDRESS_ID_T;
8059   DELIVER_TO_ORG_ID_TAB           DELIVER_TO_ORG_ID_T;
8060   SHIP_TO_CITY_EXT_TAB            SHIP_TO_CITY_EXT_T;
8061   SHIP_TO_COUNTRY_EXT_TAB         SHIP_TO_COUNTRY_EXT_T;
8062   SHIP_TO_COUNTY_EXT_TAB          SHIP_TO_COUNTY_EXT_T;
8063   SHIP_TO_NAME_EXT_TAB            SHIP_TO_NAME_EXT_T;
8064   SHIP_TO_POSTAL_CD_EXT_TAB       SHIP_TO_POSTAL_CD_EXT_T;
8065   SHIP_TO_PROVINCE_EXT_TAB        SHIP_TO_PROVINCE_EXT_T;
8066   SHIP_TO_SITE_USE_ID_TAB         SHIP_TO_SITE_USE_ID_T;
8067   SHIP_TO_STATE_EXT_TAB           SHIP_TO_STATE_EXT_T;
8068   START_DATE_TIME_TAB             START_DATE_TIME_T;
8069   SUBLINE_ASSIGNED_ID_EXT_TAB     SUBLINE_ASSIGNED_ID_EXT_T;
8070   SUBLINE_CONFIG_CODE_EXT_TAB     SUBLINE_CONFIG_CODE_EXT_T;
8071   SUBLINE_CUST_ITEM_EXT_TAB       SUBLINE_CUST_ITEM_EXT_T;
8072   SUBLINE_CUST_ITEM_ID_TAB        SUBLINE_CUST_ITEM_ID_T;
8073   SUBLINE_MODEL_NUM_EXT_TAB       SUBLINE_MODEL_NUM_EXT_T;
8074   SUBLINE_QUANTITY_TAB           SUBLINE_QUANTITY_T;
8075   SUBLINE_UOM_CODE_TAB           SUBLINE_UOM_CODE_T;
8076   SUPPLIER_ITEM_EXT_TAB          SUPPLIER_ITEM_EXT_T;
8077   TRANSIT_TIME_EXT_TAB           TRANSIT_TIME_EXT_T;
8078   TRANSIT_TIME_QUAL_EXT_TAB      TRANSIT_TIME_QUAL_EXT_T;
8079   TRANSPORT_LOC_QUAL_EXT_TAB     TRANSPORT_LOC_QUAL_EXT_T;
8080   TRANSPORT_LOCATION_EXT_TAB     TRANSPORT_LOCATION_EXT_T;
8081   TRANSPORT_METHOD_EXT_TAB      TRANSPORT_METHOD_EXT_T;
8082   UOM_CODE_TAB                 UOM_CODE_T;
8083   WEIGHT_EXT_TAB              WEIGHT_EXT_T;
8084   WEIGHT_QUALIFIER_EXT_TAB     WEIGHT_QUALIFIER_EXT_T;
8085   WEIGHT_UOM_EXT_TAB           WEIGHT_UOM_EXT_T;
8086   FBO_CONFIGURATION_KEY_1_TAB     FBO_CONFIGURATION_KEY_1_T;
8087   FBO_CONFIGURATION_KEY_2_TAB    FBO_CONFIGURATION_KEY_2_T;
8088   FBO_CONFIGURATION_KEY_3_TAB    FBO_CONFIGURATION_KEY_3_T;
8089   FBO_CONFIGURATION_KEY_4_TAB    FBO_CONFIGURATION_KEY_4_T;
8090   FBO_CONFIGURATION_KEY_5_TAB    FBO_CONFIGURATION_KEY_5_T;
8091   MATCH_KEY_ACROSS_TAB           MATCH_KEY_ACROSS_T;
8092   MATCH_KEY_WITHIN_TAB           MATCH_KEY_WITHIN_T;
8093   CRITICAL_KEY_ATTRIBUTES_TAB    CRITICAL_KEY_ATTRIBUTES_T;
8094   ATTRIBUTE_CATEGORY_TAB         ATTRIBUTE_CATEGORY_T;
8095   ATTRIBUTE1_TAB                 ATTRIBUTE1_T;
8096   ATTRIBUTE2_TAB                 ATTRIBUTE2_T;
8097   ATTRIBUTE3_TAB                 ATTRIBUTE3_T;
8098   ATTRIBUTE4_TAB                 ATTRIBUTE4_T;
8099   ATTRIBUTE5_TAB                 ATTRIBUTE5_T;
8100   ATTRIBUTE6_TAB                ATTRIBUTE6_T;
8101   ATTRIBUTE7_TAB                ATTRIBUTE7_T;
8102   ATTRIBUTE8_TAB                ATTRIBUTE8_T;
8103   ATTRIBUTE9_TAB                ATTRIBUTE9_T;
8104   ATTRIBUTE10_TAB               ATTRIBUTE10_T;
8105   ATTRIBUTE11_TAB               ATTRIBUTE11_T;
8106   ATTRIBUTE12_TAB               ATTRIBUTE12_T;
8107   ATTRIBUTE13_TAB               ATTRIBUTE13_T;
8108   ATTRIBUTE14_TAB               ATTRIBUTE14_T;
8109   ATTRIBUTE15_TAB               ATTRIBUTE15_T;
8110   BLANKET_NUMBER_TAB	        BLANKET_NUMBER_T;
8111   INTMED_SHIP_TO_ORG_ID_TAB	INTMED_SHIP_TO_ORG_ID_T;
8112   SHIP_TO_CUSTOMER_ID_TAB       SHIP_TO_CUSTOMER_ID_T;
8113   --
8114   v_last_update_date       DATE   := sysdate;
8115   v_last_updated_by        NUMBER := fnd_global.user_id;
8116   v_last_update_login      NUMBER := fnd_global.login_id;
8117   v_request_id             NUMBER := fnd_global.conc_REQUEST_ID;
8118   v_program_application_id NUMBER := fnd_global.PROG_APPL_ID;
8119   v_program_id             NUMBER := fnd_global.conc_program_id;
8120   v_program_update_date    DATE   := sysdate;
8121   --
8122 BEGIN
8123   --
8124   IF (l_debug <> -1) THEN
8125      rlm_core_sv.dpush(C_SDEBUG,'UpdateInterfaceLines');
8126      rlm_core_sv.dlog(C_DEBUG,'Number of Interface lines in g_lines_tab ',g_lines_tab.COUNT);
8127   END IF;
8128   --
8129   g_line_PS := rlm_core_sv.k_PS_AVAILABLE;
8130 
8131   FOR i IN 1..g_lines_tab.COUNT LOOP
8132     --
8133     IF g_lines_tab(i).process_status = rlm_core_sv.k_PS_AVAILABLE THEN
8134        --
8135        IF (l_debug <> -1) THEN
8136           rlm_core_sv.dlog(C_DEBUG,'line_id',g_lines_tab(i).line_id);
8137           rlm_core_sv.dlog(C_DEBUG,'Process Status AVAILABLE ');
8138        END IF;
8139        --
8140     ELSIF g_lines_tab(i).process_status = rlm_core_sv.k_PS_ERROR THEN
8141        --
8142        g_line_PS := rlm_core_sv.k_PS_ERROR;
8143        IsGroupError := TRUE;
8144        --
8145        IF (l_debug <> -1) THEN
8146           rlm_core_sv.dlog(C_DEBUG,'line_id',g_lines_tab(i).line_id);
8147           rlm_core_sv.dlog(C_DEBUG,'Process Status ERROR ');
8148        END IF;
8149        --
8150     END IF;
8151     --
8152     IF (l_debug <> -1) THEN
8153        rlm_core_sv.dlog(C_DEBUG,'customer_item_id ',
8154                                     g_lines_tab(i).customer_item_id);
8155     END IF;
8156     --
8157     -- assign values for industry attribute fields
8158     --
8159     g_lines_tab(i).industry_attribute2 := to_char(g_lines_tab(i).start_date_time,'RRRR/MM/DD HH24:MI:SS');
8160     g_lines_tab(i).industry_attribute3 := g_header_rec.schedule_reference_num;
8161     g_lines_tab(i).industry_attribute15 := g_lines_tab(i).ship_from_org_id;
8162     --
8163     --assign tables to values
8164       header_id_tab(i)		:=      g_lines_tab(i).header_id;
8165       line_id_tab(i)		:=      g_lines_tab(i).line_id;
8166       AGREEMENT_ID_TAB(i)            := g_lines_tab(i).AGREEMENT_ID;
8167       ATO_DATA_TYPE_TAB(i)           := g_lines_tab(i).ATO_DATA_TYPE;
8168       BILL_TO_ADDRESS_1_EXT_TAB(i)   := g_lines_tab(i).BILL_TO_ADDRESS_1_EXT;
8169       BILL_TO_ADDRESS_2_EXT_TAB(i)   := g_lines_tab(i).BILL_TO_ADDRESS_2_EXT;
8170       BILL_TO_ADDRESS_3_EXT_TAB(i)   := g_lines_tab(i).BILL_TO_ADDRESS_3_EXT;
8171       BILL_TO_ADDRESS_4_EXT_TAB(i)	   := g_lines_tab(i).BILL_TO_ADDRESS_4_EXT;
8172       BILL_TO_ADDRESS_ID_TAB(i)     := g_lines_tab(i).BILL_TO_ADDRESS_ID;
8173       INVOICE_TO_ORG_ID_TAB(i)      := g_lines_tab(i).INVOICE_TO_ORG_ID ;
8174       BILL_TO_CITY_EXT_TAB(i)      := g_lines_tab(i).BILL_TO_CITY_EXT;
8175       BILL_TO_COUNTRY_EXT_TAB(i)   := g_lines_tab(i).BILL_TO_COUNTRY_EXT;
8176       BILL_TO_COUNTY_EXT_TAB(i)    := g_lines_tab(i).BILL_TO_COUNTY_EXT;
8177       BILL_TO_NAME_EXT_TAB(i)      := g_lines_tab(i).BILL_TO_NAME_EXT;
8178       BILL_TO_POSTAL_CD_EXT_TAB(i)   := g_lines_tab(i).BILL_TO_POSTAL_CD_EXT;
8179       BILL_TO_PROVINCE_EXT_TAB(i)   := g_lines_tab(i).BILL_TO_PROVINCE_EXT;
8180       BILL_TO_SITE_USE_ID_TAB(i)    := g_lines_tab(i).BILL_TO_SITE_USE_ID;
8181       BILL_TO_STATE_EXT_TAB(i)      := g_lines_tab(i).BILL_TO_STATE_EXT;
8182       CARRIER_ID_CODE_EXT_TAB(i)    := g_lines_tab(i).CARRIER_ID_CODE_EXT;
8183       CARRIER_QUALIFIER_EXT_TAB(i)   := g_lines_tab(i).CARRIER_QUALIFIER_EXT;
8184       COMMODITY_EXT_TAB(i)          := g_lines_tab(i).COMMODITY_EXT;
8185       COUNTRY_OF_ORIGIN_EXT_TAB(i)   := g_lines_tab(i).COUNTRY_OF_ORIGIN_EXT;
8186       CUST_ASSEMBLY_EXT_TAB(i)       := g_lines_tab(i).CUST_ASSEMBLY_EXT;
8187       CUST_ASSIGNED_ID_EXT_TAB(i)    := g_lines_tab(i).CUST_ASSIGNED_ID_EXT;
8188       CUST_BILL_TO_EXT_TAB(i)        := g_lines_tab(i).CUST_BILL_TO_EXT;
8189       CUST_CONTRACT_NUM_EXT_TAB(i)      := g_lines_tab(i).CUST_CONTRACT_NUM_EXT;
8190       CUSTOMER_DOCK_CODE_TAB(i)         := g_lines_tab(i).CUSTOMER_DOCK_CODE;
8191       CUST_INTRMD_SHIP_TO_EXT_TAB(i)    := g_lines_tab(i).CUST_INTRMD_SHIP_TO_EXT;
8192       CUST_ITEM_PRICE_EXT_TAB(i)        := g_lines_tab(i).CUST_ITEM_PRICE_EXT;
8193       CUST_ITEM_PRICE_UOM_EXT_TAB(i)    := g_lines_tab(i).CUST_ITEM_PRICE_UOM_EXT;
8194       CUSTOMER_ITEM_REVISION_TAB(i)     := g_lines_tab(i).CUSTOMER_ITEM_REVISION;
8195       CUSTOMER_JOB_TAB(i)               := g_lines_tab(i).CUSTOMER_JOB;
8196       CUST_MANUFACTURER_EXT_TAB(i)      := g_lines_tab(i).CUST_MANUFACTURER_EXT;
8197       CUST_MODEL_NUMBER_EXT_TAB(i)      := g_lines_tab(i).CUST_MODEL_NUMBER_EXT;
8198       CUST_MODEL_SERIAL_NUMBER_TAB(i)   := g_lines_tab(i).CUST_MODEL_SERIAL_NUMBER;
8199       CUST_ORDER_NUM_EXT_TAB(i)        := g_lines_tab(i).CUST_ORDER_NUM_EXT;
8200       CUST_PROCESS_NUM_EXT_TAB(i)     := g_lines_tab(i).CUST_PROCESS_NUM_EXT;
8201       CUST_SET_NUM_EXT_TAB(i)            := g_lines_tab(i).CUST_SET_NUM_EXT;
8202       CUST_SHIP_FROM_ORG_EXT_TAB(i)     := g_lines_tab(i).CUST_SHIP_FROM_ORG_EXT;
8203       CUST_SHIP_TO_EXT_TAB(i)           := g_lines_tab(i).CUST_SHIP_TO_EXT;
8204       CUST_UOM_EXT_TAB(i)               := g_lines_tab(i).CUST_UOM_EXT;
8205       CUSTOMER_ITEM_EXT_TAB(i)          := g_lines_tab(i).CUSTOMER_ITEM_EXT;
8206       CUSTOMER_ITEM_ID_TAB(i)           := g_lines_tab(i).CUSTOMER_ITEM_ID;
8207       REQUEST_DATE_TAB(i)               := g_lines_tab(i).REQUEST_DATE;
8208       SCHEDULE_DATE_TAB(i)             := g_lines_tab(i).SCHEDULE_DATE;
8209       DATE_TYPE_CODE_TAB(i)            := g_lines_tab(i).DATE_TYPE_CODE;
8210       DATE_TYPE_CODE_EXT_TAB(i)        := g_lines_tab(i).DATE_TYPE_CODE_EXT;
8211       DELIVERY_LEAD_TIME_TAB(i)        := g_lines_tab(i).DELIVERY_LEAD_TIME;
8212       END_DATE_TIME_TAB(i)	             := g_lines_tab(i).END_DATE_TIME;
8213       EQUIPMENT_CODE_EXT_TAB(i)        := g_lines_tab(i).EQUIPMENT_CODE_EXT;
8214       EQUIPMENT_NUMBER_EXT_TAB(i)      := g_lines_tab(i).EQUIPMENT_NUMBER_EXT;
8215       HANDLING_CODE_EXT_TAB(i)         := g_lines_tab(i).HANDLING_CODE_EXT;
8216       HAZARD_CODE_EXT_TAB(i)           := g_lines_tab(i).HAZARD_CODE_EXT;
8217       HAZARD_CODE_QUAL_EXT_TAB(i)      := g_lines_tab(i).HAZARD_CODE_QUAL_EXT;
8218       HAZARD_DESCRIPTION_EXT_TAB(i)    := g_lines_tab(i).HAZARD_DESCRIPTION_EXT;
8219       IMPORT_LICENSE_DATE_EXT_TAB(i)    := g_lines_tab(i).IMPORT_LICENSE_DATE_EXT;
8220       IMPORT_LICENSE_EXT_TAB(i)         := g_lines_tab(i).IMPORT_LICENSE_EXT;
8221       INDUSTRY_ATTRIBUTE1_TAB(i)        := g_lines_tab(i).INDUSTRY_ATTRIBUTE1;
8222       INDUSTRY_ATTRIBUTE10_TAB(i)       := g_lines_tab(i).INDUSTRY_ATTRIBUTE10;
8223       INDUSTRY_ATTRIBUTE11_TAB(i)       := g_lines_tab(i).INDUSTRY_ATTRIBUTE11;
8224       INDUSTRY_ATTRIBUTE12_TAB(i)       := g_lines_tab(i).INDUSTRY_ATTRIBUTE12;
8225       INDUSTRY_ATTRIBUTE13_TAB(i)       := g_lines_tab(i).INDUSTRY_ATTRIBUTE13;
8226       INDUSTRY_ATTRIBUTE14_TAB(i)       := g_lines_tab(i).INDUSTRY_ATTRIBUTE14;
8227       INDUSTRY_ATTRIBUTE15_TAB(i)       := g_lines_tab(i).INDUSTRY_ATTRIBUTE15;
8228       INDUSTRY_ATTRIBUTE2_TAB(i)        := g_lines_tab(i).INDUSTRY_ATTRIBUTE2;
8229       INDUSTRY_ATTRIBUTE3_TAB(i)        := g_lines_tab(i).INDUSTRY_ATTRIBUTE3;
8230       INDUSTRY_ATTRIBUTE4_TAB(i)        := g_lines_tab(i).INDUSTRY_ATTRIBUTE4;
8231       INDUSTRY_ATTRIBUTE5_TAB(i)        := g_lines_tab(i).INDUSTRY_ATTRIBUTE5;
8232       INDUSTRY_ATTRIBUTE6_TAB(i)        := g_lines_tab(i).INDUSTRY_ATTRIBUTE6;
8233       INDUSTRY_ATTRIBUTE7_TAB(i)        := g_lines_tab(i).INDUSTRY_ATTRIBUTE7;
8234       INDUSTRY_ATTRIBUTE8_TAB(i)        := g_lines_tab(i).INDUSTRY_ATTRIBUTE8;
8235       INDUSTRY_ATTRIBUTE9_TAB(i)        := g_lines_tab(i).INDUSTRY_ATTRIBUTE9;
8236       INDUSTRY_CONTEXT_TAB(i)           := g_lines_tab(i).INDUSTRY_CONTEXT;
8237       INTRMD_SHIP_TO_ID_TAB(i)          := g_lines_tab(i).INTRMD_SHIP_TO_ID;
8238       SHIP_TO_ORG_ID_TAB(i)             := g_lines_tab(i).SHIP_TO_ORG_ID   ;
8239       INTRMD_ST_ADDRESS_1_EXT_TAB(i)    := g_lines_tab(i).INTRMD_ST_ADDRESS_1_EXT;
8240       INTRMD_ST_ADDRESS_2_EXT_TAB(i)    := g_lines_tab(i).INTRMD_ST_ADDRESS_2_EXT;
8241       INTRMD_ST_ADDRESS_3_EXT_TAB(i)    := g_lines_tab(i).INTRMD_ST_ADDRESS_3_EXT;
8242       INTRMD_ST_ADDRESS_4_EXT_TAB(i)    := g_lines_tab(i).INTRMD_ST_ADDRESS_4_EXT;
8243       INTRMD_ST_CITY_EXT_TAB(i)         := g_lines_tab(i).INTRMD_ST_CITY_EXT;
8244       INTRMD_ST_COUNTRY_EXT_TAB(i)      := g_lines_tab(i).INTRMD_ST_COUNTRY_EXT;
8245       INTRMD_ST_COUNTY_EXT_TAB(i)       := g_lines_tab(i).INTRMD_ST_COUNTY_EXT;
8246       INTRMD_ST_NAME_EXT_TAB(i)         := g_lines_tab(i).INTRMD_ST_NAME_EXT;
8247       INTRMD_ST_POSTAL_CD_EXT_TAB(i)    := g_lines_tab(i).INTRMD_ST_POSTAL_CD_EXT;
8248       INTRMD_ST_PROVINCE_EXT_TAB(i)    := g_lines_tab(i).INTRMD_ST_PROVINCE_EXT;
8249       INTRMD_ST_STATE_EXT_TAB(i)       := g_lines_tab(i).INTRMD_ST_STATE_EXT;
8250       INTRMD_ST_SITE_USE_ID_TAB(i)     := g_lines_tab(i).INTRMD_ST_SITE_USE_ID;
8251       INVENTORY_ITEM_ID_TAB(i)         := g_lines_tab(i).INVENTORY_ITEM_ID;
8252       INVENTORY_ITEM_SEGMENT1_TAB(i)   := g_lines_tab(i).INVENTORY_ITEM_SEGMENT1;
8253       INVENTORY_ITEM_SEGMENT10_TAB(i)     := g_lines_tab(i).INVENTORY_ITEM_SEGMENT10;
8254       INVENTORY_ITEM_SEGMENT11_TAB(i)     := g_lines_tab(i).INVENTORY_ITEM_SEGMENT11;
8255       INVENTORY_ITEM_SEGMENT12_TAB(i)     := g_lines_tab(i).INVENTORY_ITEM_SEGMENT12;
8256       INVENTORY_ITEM_SEGMENT13_TAB(i)     := g_lines_tab(i).INVENTORY_ITEM_SEGMENT13;
8257       INVENTORY_ITEM_SEGMENT14_TAB(i)     := g_lines_tab(i).INVENTORY_ITEM_SEGMENT14;
8258       INVENTORY_ITEM_SEGMENT15_TAB(i)     := g_lines_tab(i).INVENTORY_ITEM_SEGMENT15;
8259       INVENTORY_ITEM_SEGMENT16_TAB(i)     := g_lines_tab(i).INVENTORY_ITEM_SEGMENT16;
8260       INVENTORY_ITEM_SEGMENT17_TAB(i)     := g_lines_tab(i).INVENTORY_ITEM_SEGMENT17;
8261       INVENTORY_ITEM_SEGMENT18_TAB(i)     := g_lines_tab(i).INVENTORY_ITEM_SEGMENT18;
8262       INVENTORY_ITEM_SEGMENT19_TAB(i)     := g_lines_tab(i).INVENTORY_ITEM_SEGMENT19;
8263       INVENTORY_ITEM_SEGMENT2_TAB(i)      := g_lines_tab(i).INVENTORY_ITEM_SEGMENT2;
8264       INVENTORY_ITEM_SEGMENT20_TAB(i)     := g_lines_tab(i).INVENTORY_ITEM_SEGMENT20;
8265       INVENTORY_ITEM_SEGMENT3_TAB(i)     := g_lines_tab(i).INVENTORY_ITEM_SEGMENT3;
8266       INVENTORY_ITEM_SEGMENT4_TAB(i)     := g_lines_tab(i).INVENTORY_ITEM_SEGMENT4;
8267       INVENTORY_ITEM_SEGMENT5_TAB(i)     := g_lines_tab(i).INVENTORY_ITEM_SEGMENT5;
8268       INVENTORY_ITEM_SEGMENT6_TAB(i)     := g_lines_tab(i).INVENTORY_ITEM_SEGMENT6;
8269       INVENTORY_ITEM_SEGMENT7_TAB(i)     := g_lines_tab(i).INVENTORY_ITEM_SEGMENT7;
8270       INVENTORY_ITEM_SEGMENT8_TAB(i)     := g_lines_tab(i).INVENTORY_ITEM_SEGMENT8;
8271       INVENTORY_ITEM_SEGMENT9_TAB(i)     := g_lines_tab(i).INVENTORY_ITEM_SEGMENT9;
8272       ITEM_CONTACT_CODE_1_TAB(i)        := g_lines_tab(i).ITEM_CONTACT_CODE_1;
8273       ITEM_CONTACT_CODE_2_TAB(i)        := g_lines_tab(i).ITEM_CONTACT_CODE_2;
8274       ITEM_CONTACT_VALUE_1_TAB(i)       := g_lines_tab(i).ITEM_CONTACT_VALUE_1;
8275       ITEM_CONTACT_VALUE_2_TAB(i)       := g_lines_tab(i).ITEM_CONTACT_VALUE_2;
8276       ITEM_DESCRIPTION_EXT_TAB(i)       := g_lines_tab(i).ITEM_DESCRIPTION_EXT;
8277       ITEM_DETAIL_QUANTITY_TAB(i)       := g_lines_tab(i).ITEM_DETAIL_QUANTITY;
8278       ITEM_DETAIL_REF_CODE_1_TAB(i)     := g_lines_tab(i).ITEM_DETAIL_REF_CODE_1;
8279       ITEM_DETAIL_REF_CODE_2_TAB(i)     := g_lines_tab(i).ITEM_DETAIL_REF_CODE_2;
8280       ITEM_DETAIL_REF_CODE_3_TAB(i)     := g_lines_tab(i).ITEM_DETAIL_REF_CODE_3;
8281       ITEM_DETAIL_REF_VALUE_1_TAB(i)    := g_lines_tab(i).ITEM_DETAIL_REF_VALUE_1;
8282       ITEM_DETAIL_REF_VALUE_2_TAB(i)    := g_lines_tab(i).ITEM_DETAIL_REF_VALUE_2;
8283       ITEM_DETAIL_REF_VALUE_3_TAB(i)    := g_lines_tab(i).ITEM_DETAIL_REF_VALUE_3;
8284       ITEM_DETAIL_SUBTYPE_TAB(i)        := g_lines_tab(i).ITEM_DETAIL_SUBTYPE;
8285       ITEM_DETAIL_SUBTYPE_EXT_TAB(i)    := g_lines_tab(i).ITEM_DETAIL_SUBTYPE_EXT;
8286       ITEM_DETAIL_TYPE_TAB(i)           := g_lines_tab(i).ITEM_DETAIL_TYPE;
8287       ITEM_DETAIL_TYPE_EXT_TAB(i)       := g_lines_tab(i).ITEM_DETAIL_TYPE_EXT;
8288       ITEM_ENG_CNG_LVL_EXT_TAB(i)       := g_lines_tab(i).ITEM_ENG_CNG_LVL_EXT;
8289       ITEM_MEASUREMENTS_EXT_TAB(i)      := g_lines_tab(i).ITEM_MEASUREMENTS_EXT;
8290       ITEM_NOTE_TEXT_TAB(i)             := g_lines_tab(i).ITEM_NOTE_TEXT;
8291       ITEM_REF_CODE_1_TAB(i)            := g_lines_tab(i).ITEM_REF_CODE_1;
8292       ITEM_REF_CODE_2_TAB(i)           := g_lines_tab(i).ITEM_REF_CODE_2;
8293       ITEM_REF_CODE_3_TAB(i)           := g_lines_tab(i).ITEM_REF_CODE_3;
8294       ITEM_REF_VALUE_1_TAB(i)          := g_lines_tab(i).ITEM_REF_VALUE_1;
8295       ITEM_REF_VALUE_2_TAB(i)          := g_lines_tab(i).ITEM_REF_VALUE_2;
8296       ITEM_REF_VALUE_3_TAB(i)          := g_lines_tab(i).ITEM_REF_VALUE_3;
8297       ITEM_RELEASE_STATUS_EXT_TAB(i)   := g_lines_tab(i).ITEM_RELEASE_STATUS_EXT;
8298       LADING_QUANTITY_EXT_TAB(i)       := g_lines_tab(i).LADING_QUANTITY_EXT;
8299       LETTER_CREDIT_EXPDT_EXT_TAB(i)   := g_lines_tab(i).LETTER_CREDIT_EXPDT_EXT;
8300       LETTER_CREDIT_EXT_TAB(i)         := g_lines_tab(i).LETTER_CREDIT_EXT;
8301       LINE_REFERENCE_TAB(i)            := g_lines_tab(i).LINE_REFERENCE;
8302       LINK_TO_LINE_REF_TAB(i)          := g_lines_tab(i).LINK_TO_LINE_REF;
8303       ORDER_HEADER_ID_TAB(i)           := g_lines_tab(i).ORDER_HEADER_ID;
8304       OTHER_NAME_CODE_1_TAB(i)         := g_lines_tab(i).OTHER_NAME_CODE_1;
8305       OTHER_NAME_CODE_2_TAB(i)         := g_lines_tab(i).OTHER_NAME_CODE_2;
8306       OTHER_NAME_VALUE_1_TAB(i)        := g_lines_tab(i).OTHER_NAME_VALUE_1;
8307       OTHER_NAME_VALUE_2_TAB(i)        := g_lines_tab(i).OTHER_NAME_VALUE_2;
8308       PACK_SIZE_EXT_TAB(i)             := g_lines_tab(i).PACK_SIZE_EXT;
8309       PACK_UNITS_PER_PACK_EXT_TAB(i)   := g_lines_tab(i).PACK_UNITS_PER_PACK_EXT;
8310       PACK_UOM_CODE_EXT_TAB(i)         := g_lines_tab(i).PACK_UOM_CODE_EXT;
8311       PACKAGING_CODE_EXT_TAB(i)        := g_lines_tab(i).PACKAGING_CODE_EXT;
8312       PARENT_LINK_LINE_REF_TAB(i)      := g_lines_tab(i).PARENT_LINK_LINE_REF;
8313       CUST_PRODUCTION_SEQ_NUM_TAB(i)     := g_lines_tab(i).CUST_PRODUCTION_SEQ_NUM;
8314       PRICE_LIST_ID_TAB(i)             := g_lines_tab(i).PRICE_LIST_ID;
8315       PRIMARY_QUANTITY_TAB(i)          := g_lines_tab(i).PRIMARY_QUANTITY;
8316       PRIMARY_UOM_CODE_TAB(i)          := g_lines_tab(i).PRIMARY_UOM_CODE;
8317       PRIME_CONTRCTR_PART_EXT_TAB(i)   := g_lines_tab(i).PRIME_CONTRCTR_PART_EXT;
8318       PROCESS_STATUS_TAB(i)            := g_lines_tab(i).PROCESS_STATUS;
8319       CUST_PO_RELEASE_NUM_TAB(i)       := g_lines_tab(i).CUST_PO_RELEASE_NUM;
8320       CUST_PO_DATE_TAB(i)              := g_lines_tab(i).CUST_PO_DATE;
8321       CUST_PO_LINE_NUM_TAB(i)          := g_lines_tab(i).CUST_PO_LINE_NUM;
8322       CUST_PO_NUMBER_TAB(i)            := g_lines_tab(i).CUST_PO_NUMBER;
8323       QTY_TYPE_CODE_TAB(i)             := g_lines_tab(i).QTY_TYPE_CODE;
8324       QTY_TYPE_CODE_EXT_TAB(i)         := g_lines_tab(i).QTY_TYPE_CODE_EXT;
8325       RETURN_CONTAINER_EXT_TAB(i)      := g_lines_tab(i).RETURN_CONTAINER_EXT;
8326       SCHEDULE_LINE_ID_TAB(i)          := g_lines_tab(i).SCHEDULE_LINE_ID;
8327       ROUTING_DESC_EXT_TAB(i)          := g_lines_tab(i).ROUTING_DESC_EXT;
8328       ROUTING_SEQ_CODE_EXT_TAB(i)      := g_lines_tab(i).ROUTING_SEQ_CODE_EXT;
8329       SCHEDULE_ITEM_NUM_TAB(i)         := g_lines_tab(i).SCHEDULE_ITEM_NUM;
8330       SHIP_DEL_PATTERN_EXT_TAB(i)      := g_lines_tab(i).SHIP_DEL_PATTERN_EXT;
8331       SHIP_DEL_TIME_CODE_EXT_TAB(i)    := g_lines_tab(i).SHIP_DEL_TIME_CODE_EXT;
8332       SHIP_DEL_RULE_NAME_TAB(i)        := g_lines_tab(i).SHIP_DEL_RULE_NAME;
8333       SHIP_FROM_ADDRESS_1_EXT_TAB(i)   := g_lines_tab(i).SHIP_FROM_ADDRESS_1_EXT;
8334       SHIP_FROM_ADDRESS_2_EXT_TAB(i)   := g_lines_tab(i).SHIP_FROM_ADDRESS_2_EXT;
8335       SHIP_FROM_ADDRESS_3_EXT_TAB(i)   := g_lines_tab(i).SHIP_FROM_ADDRESS_3_EXT;
8336       SHIP_FROM_ADDRESS_4_EXT_TAB(i)   := g_lines_tab(i).SHIP_FROM_ADDRESS_4_EXT;
8337       SHIP_FROM_CITY_EXT_TAB(i)        := g_lines_tab(i).SHIP_FROM_CITY_EXT;
8338       SHIP_FROM_COUNTRY_EXT_TAB(i)     := g_lines_tab(i).SHIP_FROM_COUNTRY_EXT;
8339       SHIP_FROM_COUNTY_EXT_TAB(i)      := g_lines_tab(i).SHIP_FROM_COUNTY_EXT;
8340       SHIP_FROM_NAME_EXT_TAB(i)        := g_lines_tab(i).SHIP_FROM_NAME_EXT;
8341       SHIP_FROM_ORG_ID_TAB(i)          := g_lines_tab(i).SHIP_FROM_ORG_ID;
8342       SHIP_FROM_POSTAL_CD_EXT_TAB(i)   := g_lines_tab(i).SHIP_FROM_POSTAL_CD_EXT;
8343       SHIP_FROM_PROVINCE_EXT_TAB(i)    := g_lines_tab(i).SHIP_FROM_PROVINCE_EXT;
8344       SHIP_FROM_STATE_EXT_TAB(i)       := g_lines_tab(i).SHIP_FROM_STATE_EXT;
8345       SHIP_LABEL_INFO_LINE_1_TAB(i)    := g_lines_tab(i).SHIP_LABEL_INFO_LINE_1;
8346       SHIP_LABEL_INFO_LINE_10_TAB(i)   := g_lines_tab(i).SHIP_LABEL_INFO_LINE_10;
8347       SHIP_LABEL_INFO_LINE_2_TAB(i)    := g_lines_tab(i).SHIP_LABEL_INFO_LINE_2;
8348       SHIP_LABEL_INFO_LINE_3_TAB(i)    := g_lines_tab(i).SHIP_LABEL_INFO_LINE_3;
8349       SHIP_LABEL_INFO_LINE_4_TAB(i)    := g_lines_tab(i).SHIP_LABEL_INFO_LINE_4;
8350       SHIP_LABEL_INFO_LINE_5_TAB(i)    := g_lines_tab(i).SHIP_LABEL_INFO_LINE_5;
8351       SHIP_LABEL_INFO_LINE_6_TAB(i)    := g_lines_tab(i).SHIP_LABEL_INFO_LINE_6;
8352       SHIP_LABEL_INFO_LINE_7_TAB(i)    := g_lines_tab(i).SHIP_LABEL_INFO_LINE_7;
8353       SHIP_LABEL_INFO_LINE_8_TAB(i)    := g_lines_tab(i).SHIP_LABEL_INFO_LINE_8;
8354       SHIP_LABEL_INFO_LINE_9_TAB(i)    := g_lines_tab(i).SHIP_LABEL_INFO_LINE_9;
8355       SHIP_TO_ADDRESS_1_EXT_TAB(i)     := g_lines_tab(i).SHIP_TO_ADDRESS_1_EXT;
8356       SHIP_TO_ADDRESS_2_EXT_TAB(i)      := g_lines_tab(i).SHIP_TO_ADDRESS_2_EXT;
8357       SHIP_TO_ADDRESS_3_EXT_TAB(i)      := g_lines_tab(i).SHIP_TO_ADDRESS_3_EXT;
8358       SHIP_TO_ADDRESS_4_EXT_TAB(i)      := g_lines_tab(i).SHIP_TO_ADDRESS_4_EXT;
8359       SHIP_TO_ADDRESS_ID_TAB(i)         := g_lines_tab(i).SHIP_TO_ADDRESS_ID;
8360       DELIVER_TO_ORG_ID_TAB(i)          := g_lines_tab(i).DELIVER_TO_ORG_ID ;
8361       SHIP_TO_CITY_EXT_TAB(i)           := g_lines_tab(i).SHIP_TO_CITY_EXT;
8362       SHIP_TO_COUNTRY_EXT_TAB(i)        := g_lines_tab(i).SHIP_TO_COUNTRY_EXT;
8363       SHIP_TO_COUNTY_EXT_TAB(i)         := g_lines_tab(i).SHIP_TO_COUNTY_EXT;
8364       SHIP_TO_NAME_EXT_TAB(i)           := g_lines_tab(i).SHIP_TO_NAME_EXT;
8365       SHIP_TO_POSTAL_CD_EXT_TAB(i)      := g_lines_tab(i).SHIP_TO_POSTAL_CD_EXT;
8366       SHIP_TO_PROVINCE_EXT_TAB(i)       := g_lines_tab(i).SHIP_TO_PROVINCE_EXT;
8367       SHIP_TO_SITE_USE_ID_TAB(i)        := g_lines_tab(i).SHIP_TO_SITE_USE_ID;
8368       SHIP_TO_STATE_EXT_TAB(i)          := g_lines_tab(i).SHIP_TO_STATE_EXT;
8369       START_DATE_TIME_TAB(i)            := g_lines_tab(i).START_DATE_TIME;
8370       SUBLINE_ASSIGNED_ID_EXT_TAB(i)    := g_lines_tab(i).SUBLINE_ASSIGNED_ID_EXT;
8371       SUBLINE_CONFIG_CODE_EXT_TAB(i)    := g_lines_tab(i).SUBLINE_CONFIG_CODE_EXT;
8372       SUBLINE_CUST_ITEM_EXT_TAB(i)      := g_lines_tab(i).SUBLINE_CUST_ITEM_EXT;
8373       SUBLINE_CUST_ITEM_ID_TAB(i)       := g_lines_tab(i).SUBLINE_CUST_ITEM_ID;
8374       SUBLINE_MODEL_NUM_EXT_TAB(i)      := g_lines_tab(i).SUBLINE_MODEL_NUM_EXT;
8375       SUBLINE_QUANTITY_TAB(i)          := g_lines_tab(i).SUBLINE_QUANTITY;
8376       SUBLINE_UOM_CODE_TAB(i)          := g_lines_tab(i).SUBLINE_UOM_CODE;
8377       SUPPLIER_ITEM_EXT_TAB(i)         := g_lines_tab(i).SUPPLIER_ITEM_EXT;
8378       TRANSIT_TIME_EXT_TAB(i)          := g_lines_tab(i).TRANSIT_TIME_EXT;
8379       TRANSIT_TIME_QUAL_EXT_TAB(i)     := g_lines_tab(i).TRANSIT_TIME_QUAL_EXT;
8380       TRANSPORT_LOC_QUAL_EXT_TAB(i)    := g_lines_tab(i).TRANSPORT_LOC_QUAL_EXT;
8381       TRANSPORT_LOCATION_EXT_TAB(i)    := g_lines_tab(i).TRANSPORT_LOCATION_EXT;
8382       TRANSPORT_METHOD_EXT_TAB(i)     := g_lines_tab(i).TRANSPORT_METHOD_EXT;
8383       UOM_CODE_TAB(i)                := g_lines_tab(i).UOM_CODE;
8384       WEIGHT_EXT_TAB(i)             := g_lines_tab(i).WEIGHT_EXT;
8385       WEIGHT_QUALIFIER_EXT_TAB(i)    := g_lines_tab(i).WEIGHT_QUALIFIER_EXT;
8386       WEIGHT_UOM_EXT_TAB(i)          := g_lines_tab(i).WEIGHT_UOM_EXT;
8387       FBO_CONFIGURATION_KEY_1_TAB(i)    := g_lines_tab(i).FBO_CONFIGURATION_KEY_1;
8388       FBO_CONFIGURATION_KEY_2_TAB(i)   := g_lines_tab(i).FBO_CONFIGURATION_KEY_2;
8389       FBO_CONFIGURATION_KEY_3_TAB(i)   := g_lines_tab(i).FBO_CONFIGURATION_KEY_3;
8390       FBO_CONFIGURATION_KEY_4_TAB(i)   := g_lines_tab(i).FBO_CONFIGURATION_KEY_4;
8391       FBO_CONFIGURATION_KEY_5_TAB(i)   := g_lines_tab(i).FBO_CONFIGURATION_KEY_5;
8392       MATCH_KEY_ACROSS_TAB(i)          := g_lines_tab(i).MATCH_KEY_ACROSS;
8393       MATCH_KEY_WITHIN_TAB(i)          := g_lines_tab(i).MATCH_KEY_WITHIN;
8394       CRITICAL_KEY_ATTRIBUTES_TAB(i)   := g_lines_tab(i).CRITICAL_KEY_ATTRIBUTES;
8395       ATTRIBUTE_CATEGORY_TAB(i)        := g_lines_tab(i).ATTRIBUTE_CATEGORY;
8396       ATTRIBUTE1_TAB(i)                := g_lines_tab(i).ATTRIBUTE1;
8397       ATTRIBUTE2_TAB(i)                := g_lines_tab(i).ATTRIBUTE2;
8398       ATTRIBUTE3_TAB(i)                := g_lines_tab(i).ATTRIBUTE3;
8399       ATTRIBUTE4_TAB(i)                := g_lines_tab(i).ATTRIBUTE4;
8400       ATTRIBUTE5_TAB(i)                := g_lines_tab(i).ATTRIBUTE5;
8401       ATTRIBUTE6_TAB(i)               := g_lines_tab(i).ATTRIBUTE6;
8402       ATTRIBUTE7_TAB(i)               := g_lines_tab(i).ATTRIBUTE7;
8403       ATTRIBUTE8_TAB(i)               := g_lines_tab(i).ATTRIBUTE8;
8404       ATTRIBUTE9_TAB(i)               := g_lines_tab(i).ATTRIBUTE9;
8405       ATTRIBUTE10_TAB(i)              := g_lines_tab(i).ATTRIBUTE10;
8406       ATTRIBUTE11_TAB(i)              := g_lines_tab(i).ATTRIBUTE11;
8407       ATTRIBUTE12_TAB(i)              := g_lines_tab(i).ATTRIBUTE12;
8408       ATTRIBUTE13_TAB(i)              := g_lines_tab(i).ATTRIBUTE13;
8409       ATTRIBUTE14_TAB(i)              := g_lines_tab(i).ATTRIBUTE14;
8410       ATTRIBUTE15_TAB(i)              := g_lines_tab(i).ATTRIBUTE15;
8411       BLANKET_NUMBER_TAB(i)	      := g_lines_tab(i).BLANKET_NUMBER;
8412       INTMED_SHIP_TO_ORG_ID_TAB(i)    := g_lines_tab(i).INTMED_SHIP_TO_ORG_ID;
8413       SHIP_TO_CUSTOMER_ID_TAB(i)      := g_lines_tab(i).SHIP_TO_CUSTOMER_ID;
8414     --
8415   END LOOP;
8416 
8417   FOR i IN 1..g_lines_tab.COUNT LOOP
8418      --
8419      process_status_tab(i) := 		g_line_PS;
8420      --
8421   END LOOP;
8422 
8423 /* oracle 9i compatible bulk update
8424 FORALL i in 1..g_lines_tab.COUNT
8425 
8426     UPDATE rlm_interface_lines
8427       SET ROW = g_lines_tab(i)
8428     WHERE header_id = header_id_tab(i)
8429     AND   line_id = line_id_tab(i);
8430 
8431 */
8432 
8433   --bulk update
8434   FORALL i in 1..g_lines_tab.COUNT
8435     UPDATE rlm_interface_lines
8436       SET
8437       AGREEMENT_ID           = AGREEMENT_ID_TAB(i),
8438       ATO_DATA_TYPE          = ATO_DATA_TYPE_TAB(i),
8439       BILL_TO_ADDRESS_1_EXT  = BILL_TO_ADDRESS_1_EXT_TAB(i),
8440       BILL_TO_ADDRESS_2_EXT  = BILL_TO_ADDRESS_2_EXT_TAB(i),
8441       BILL_TO_ADDRESS_3_EXT  = BILL_TO_ADDRESS_3_EXT_TAB(i),
8442       BILL_TO_ADDRESS_4_EXT  = BILL_TO_ADDRESS_4_EXT_TAB(i),
8443       BILL_TO_ADDRESS_ID    = BILL_TO_ADDRESS_ID_TAB(i),
8444       INVOICE_TO_ORG_ID     = INVOICE_TO_ORG_ID_TAB(i),
8445       BILL_TO_CITY_EXT     = BILL_TO_CITY_EXT_TAB(i),
8446       BILL_TO_COUNTRY_EXT  = BILL_TO_COUNTRY_EXT_TAB(i),
8447       BILL_TO_COUNTY_EXT   = BILL_TO_COUNTY_EXT_TAB(i),
8448       BILL_TO_NAME_EXT     = BILL_TO_NAME_EXT_TAB(i),
8449       BILL_TO_POSTAL_CD_EXT  = BILL_TO_POSTAL_CD_EXT_TAB(i),
8450       BILL_TO_PROVINCE_EXT  = BILL_TO_PROVINCE_EXT_TAB(i),
8451       BILL_TO_SITE_USE_ID   = BILL_TO_SITE_USE_ID_TAB(i),
8452       BILL_TO_STATE_EXT     = BILL_TO_STATE_EXT_TAB(i),
8453       CARRIER_ID_CODE_EXT   = CARRIER_ID_CODE_EXT_TAB(i),
8454       CARRIER_QUALIFIER_EXT  = CARRIER_QUALIFIER_EXT_TAB(i),
8455       COMMODITY_EXT         = COMMODITY_EXT_TAB(i),
8456       COUNTRY_OF_ORIGIN_EXT  = COUNTRY_OF_ORIGIN_EXT_TAB(i),
8457       CUST_ASSEMBLY_EXT      = CUST_ASSEMBLY_EXT_TAB(i),
8458       CUST_ASSIGNED_ID_EXT   = CUST_ASSIGNED_ID_EXT_TAB(i),
8459       CUST_BILL_TO_EXT       = CUST_BILL_TO_EXT_TAB(i),
8460       CUST_CONTRACT_NUM_EXT     = CUST_CONTRACT_NUM_EXT_TAB(i),
8461       CUSTOMER_DOCK_CODE        = CUSTOMER_DOCK_CODE_TAB(i),
8462       CUST_INTRMD_SHIP_TO_EXT   = CUST_INTRMD_SHIP_TO_EXT_TAB(i),
8463       CUST_ITEM_PRICE_EXT       = CUST_ITEM_PRICE_EXT_TAB(i),
8464       CUST_ITEM_PRICE_UOM_EXT   = CUST_ITEM_PRICE_UOM_EXT_TAB(i),
8465       CUSTOMER_ITEM_REVISION    = CUSTOMER_ITEM_REVISION_TAB(i),
8466       CUSTOMER_JOB              = CUSTOMER_JOB_TAB(i),
8467       CUST_MANUFACTURER_EXT     = CUST_MANUFACTURER_EXT_TAB(i),
8468       CUST_MODEL_NUMBER_EXT     = CUST_MODEL_NUMBER_EXT_TAB(i),
8469       CUST_MODEL_SERIAL_NUMBER  = CUST_MODEL_SERIAL_NUMBER_TAB(i),
8470       CUST_ORDER_NUM_EXT       = CUST_ORDER_NUM_EXT_TAB(i),
8471       CUST_PROCESS_NUM_EXT    = CUST_PROCESS_NUM_EXT_TAB(i),
8472       CUST_SET_NUM_EXT           = CUST_SET_NUM_EXT_TAB(i),
8473       CUST_SHIP_FROM_ORG_EXT    = CUST_SHIP_FROM_ORG_EXT_TAB(i),
8474       CUST_SHIP_TO_EXT          = CUST_SHIP_TO_EXT_TAB(i),
8475       CUST_UOM_EXT              = CUST_UOM_EXT_TAB(i),
8476       CUSTOMER_ITEM_EXT         = CUSTOMER_ITEM_EXT_TAB(i),
8477       CUSTOMER_ITEM_ID          = CUSTOMER_ITEM_ID_TAB(i),
8478       REQUEST_DATE              = REQUEST_DATE_TAB(i),
8479       SCHEDULE_DATE            = SCHEDULE_DATE_TAB(i),
8480       DATE_TYPE_CODE           = DATE_TYPE_CODE_TAB(i),
8481       DATE_TYPE_CODE_EXT       = DATE_TYPE_CODE_EXT_TAB(i),
8482       DELIVERY_LEAD_TIME       = DELIVERY_LEAD_TIME_TAB(i),
8483       END_DATE_TIME	        = END_DATE_TIME_TAB(i),
8484       EQUIPMENT_CODE_EXT       = EQUIPMENT_CODE_EXT_TAB(i),
8485       EQUIPMENT_NUMBER_EXT     = EQUIPMENT_NUMBER_EXT_TAB(i),
8486       HANDLING_CODE_EXT        = HANDLING_CODE_EXT_TAB(i),
8487       HAZARD_CODE_EXT          = HAZARD_CODE_EXT_TAB(i),
8488       HAZARD_CODE_QUAL_EXT     = HAZARD_CODE_QUAL_EXT_TAB(i),
8489       HAZARD_DESCRIPTION_EXT   = HAZARD_DESCRIPTION_EXT_TAB(i),
8490       IMPORT_LICENSE_DATE_EXT   = IMPORT_LICENSE_DATE_EXT_TAB(i),
8491       IMPORT_LICENSE_EXT        = IMPORT_LICENSE_EXT_TAB(i),
8492       INDUSTRY_ATTRIBUTE1       = INDUSTRY_ATTRIBUTE1_TAB(i),
8493       INDUSTRY_ATTRIBUTE10      = INDUSTRY_ATTRIBUTE10_TAB(i),
8494       INDUSTRY_ATTRIBUTE11      = INDUSTRY_ATTRIBUTE11_TAB(i),
8495       INDUSTRY_ATTRIBUTE12      = INDUSTRY_ATTRIBUTE12_TAB(i),
8496       INDUSTRY_ATTRIBUTE13      = INDUSTRY_ATTRIBUTE13_TAB(i),
8497       INDUSTRY_ATTRIBUTE14      = INDUSTRY_ATTRIBUTE14_TAB(i),
8498       INDUSTRY_ATTRIBUTE15      = INDUSTRY_ATTRIBUTE15_TAB(i),
8499       INDUSTRY_ATTRIBUTE2       = INDUSTRY_ATTRIBUTE2_TAB(i),
8500       INDUSTRY_ATTRIBUTE3       = INDUSTRY_ATTRIBUTE3_TAB(i),
8501       INDUSTRY_ATTRIBUTE4       = INDUSTRY_ATTRIBUTE4_TAB(i),
8502       INDUSTRY_ATTRIBUTE5       = INDUSTRY_ATTRIBUTE5_TAB(i),
8503       INDUSTRY_ATTRIBUTE6       = INDUSTRY_ATTRIBUTE6_TAB(i),
8504       INDUSTRY_ATTRIBUTE7       = INDUSTRY_ATTRIBUTE7_TAB(i),
8505       INDUSTRY_ATTRIBUTE8       = INDUSTRY_ATTRIBUTE8_TAB(i),
8506       INDUSTRY_ATTRIBUTE9       = INDUSTRY_ATTRIBUTE9_TAB(i),
8507       INDUSTRY_CONTEXT          = INDUSTRY_CONTEXT_TAB(i),
8508       INTRMD_SHIP_TO_ID         = INTRMD_SHIP_TO_ID_TAB(i),
8509       SHIP_TO_ORG_ID            = SHIP_TO_ORG_ID_TAB(i),
8510       INTRMD_ST_ADDRESS_1_EXT   = INTRMD_ST_ADDRESS_1_EXT_TAB(i),
8511       INTRMD_ST_ADDRESS_2_EXT   = INTRMD_ST_ADDRESS_2_EXT_TAB(i),
8512       INTRMD_ST_ADDRESS_3_EXT   = INTRMD_ST_ADDRESS_3_EXT_TAB(i),
8513       INTRMD_ST_ADDRESS_4_EXT   = INTRMD_ST_ADDRESS_4_EXT_TAB(i),
8514       INTRMD_ST_CITY_EXT        = INTRMD_ST_CITY_EXT_TAB(i),
8515       INTRMD_ST_COUNTRY_EXT     = INTRMD_ST_COUNTRY_EXT_TAB(i),
8516       INTRMD_ST_COUNTY_EXT      = INTRMD_ST_COUNTY_EXT_TAB(i),
8517       INTRMD_ST_NAME_EXT        = INTRMD_ST_NAME_EXT_TAB(i),
8518       INTRMD_ST_POSTAL_CD_EXT   = INTRMD_ST_POSTAL_CD_EXT_TAB(i),
8519       INTRMD_ST_PROVINCE_EXT   = INTRMD_ST_PROVINCE_EXT_TAB(i),
8520       INTRMD_ST_STATE_EXT      = INTRMD_ST_STATE_EXT_TAB(i),
8521       INTRMD_ST_SITE_USE_ID    = INTRMD_ST_SITE_USE_ID_TAB(i),
8522       INVENTORY_ITEM_ID        = INVENTORY_ITEM_ID_TAB(i),
8523       INVENTORY_ITEM_SEGMENT1  = INVENTORY_ITEM_SEGMENT1_TAB(i),
8524       INVENTORY_ITEM_SEGMENT10    = INVENTORY_ITEM_SEGMENT10_TAB(i),
8525       INVENTORY_ITEM_SEGMENT11    = INVENTORY_ITEM_SEGMENT11_TAB(i),
8526       INVENTORY_ITEM_SEGMENT12    = INVENTORY_ITEM_SEGMENT12_TAB(i),
8527       INVENTORY_ITEM_SEGMENT13    = INVENTORY_ITEM_SEGMENT13_TAB(i),
8528       INVENTORY_ITEM_SEGMENT14    = INVENTORY_ITEM_SEGMENT14_TAB(i),
8529       INVENTORY_ITEM_SEGMENT15    = INVENTORY_ITEM_SEGMENT15_TAB(i),
8530       INVENTORY_ITEM_SEGMENT16    = INVENTORY_ITEM_SEGMENT16_TAB(i),
8531       INVENTORY_ITEM_SEGMENT17    = INVENTORY_ITEM_SEGMENT17_TAB(i),
8532       INVENTORY_ITEM_SEGMENT18    = INVENTORY_ITEM_SEGMENT18_TAB(i),
8533       INVENTORY_ITEM_SEGMENT19    = INVENTORY_ITEM_SEGMENT19_TAB(i),
8534       INVENTORY_ITEM_SEGMENT2     = INVENTORY_ITEM_SEGMENT2_TAB(i),
8535       INVENTORY_ITEM_SEGMENT20    = INVENTORY_ITEM_SEGMENT20_TAB(i),
8536       INVENTORY_ITEM_SEGMENT3    = INVENTORY_ITEM_SEGMENT3_TAB(i),
8537       INVENTORY_ITEM_SEGMENT4    = INVENTORY_ITEM_SEGMENT4_TAB(i),
8538       INVENTORY_ITEM_SEGMENT5    = INVENTORY_ITEM_SEGMENT5_TAB(i),
8539       INVENTORY_ITEM_SEGMENT6    = INVENTORY_ITEM_SEGMENT6_TAB(i),
8540       INVENTORY_ITEM_SEGMENT7    = INVENTORY_ITEM_SEGMENT7_TAB(i),
8541       INVENTORY_ITEM_SEGMENT8    = INVENTORY_ITEM_SEGMENT8_TAB(i),
8542       INVENTORY_ITEM_SEGMENT9    = INVENTORY_ITEM_SEGMENT9_TAB(i),
8543       ITEM_CONTACT_CODE_1       = ITEM_CONTACT_CODE_1_TAB(i),
8544       ITEM_CONTACT_CODE_2       = ITEM_CONTACT_CODE_2_TAB(i),
8545       ITEM_CONTACT_VALUE_1      = ITEM_CONTACT_VALUE_1_TAB(i),
8546       ITEM_CONTACT_VALUE_2      = ITEM_CONTACT_VALUE_2_TAB(i),
8547       ITEM_DESCRIPTION_EXT      = ITEM_DESCRIPTION_EXT_TAB(i),
8548       ITEM_DETAIL_QUANTITY      = ITEM_DETAIL_QUANTITY_TAB(i),
8549       ITEM_DETAIL_REF_CODE_1    = ITEM_DETAIL_REF_CODE_1_TAB(i),
8550       ITEM_DETAIL_REF_CODE_2    = ITEM_DETAIL_REF_CODE_2_TAB(i),
8551       ITEM_DETAIL_REF_CODE_3    = ITEM_DETAIL_REF_CODE_3_TAB(i),
8552       ITEM_DETAIL_REF_VALUE_1   = ITEM_DETAIL_REF_VALUE_1_TAB(i),
8553       ITEM_DETAIL_REF_VALUE_2   = ITEM_DETAIL_REF_VALUE_2_TAB(i),
8554       ITEM_DETAIL_REF_VALUE_3   = ITEM_DETAIL_REF_VALUE_3_TAB(i),
8555       ITEM_DETAIL_SUBTYPE       = ITEM_DETAIL_SUBTYPE_TAB(i),
8556       ITEM_DETAIL_SUBTYPE_EXT   = ITEM_DETAIL_SUBTYPE_EXT_TAB(i),
8557       ITEM_DETAIL_TYPE          = ITEM_DETAIL_TYPE_TAB(i),
8558       ITEM_DETAIL_TYPE_EXT      = ITEM_DETAIL_TYPE_EXT_TAB(i),
8559       ITEM_ENG_CNG_LVL_EXT      = ITEM_ENG_CNG_LVL_EXT_TAB(i),
8560       ITEM_MEASUREMENTS_EXT     = ITEM_MEASUREMENTS_EXT_TAB(i),
8561       ITEM_NOTE_TEXT            = ITEM_NOTE_TEXT_TAB(i),
8562       ITEM_REF_CODE_1           = ITEM_REF_CODE_1_TAB(i),
8563       ITEM_REF_CODE_2          = ITEM_REF_CODE_2_TAB(i),
8564       ITEM_REF_CODE_3          = ITEM_REF_CODE_3_TAB(i),
8565       ITEM_REF_VALUE_1         = ITEM_REF_VALUE_1_TAB(i),
8566       ITEM_REF_VALUE_2         = ITEM_REF_VALUE_2_TAB(i),
8567       ITEM_REF_VALUE_3         = ITEM_REF_VALUE_3_TAB(i),
8568       ITEM_RELEASE_STATUS_EXT  = ITEM_RELEASE_STATUS_EXT_TAB(i),
8569       LADING_QUANTITY_EXT      = LADING_QUANTITY_EXT_TAB(i),
8570       LETTER_CREDIT_EXPDT_EXT  = LETTER_CREDIT_EXPDT_EXT_TAB(i),
8571       LETTER_CREDIT_EXT        = LETTER_CREDIT_EXT_TAB(i),
8572       LINE_REFERENCE           = LINE_REFERENCE_TAB(i),
8573       LINK_TO_LINE_REF         = LINK_TO_LINE_REF_TAB(i),
8574       ORDER_HEADER_ID          = ORDER_HEADER_ID_TAB(i),
8575       OTHER_NAME_CODE_1        = OTHER_NAME_CODE_1_TAB(i),
8576       OTHER_NAME_CODE_2        = OTHER_NAME_CODE_2_TAB(i),
8577       OTHER_NAME_VALUE_1       = OTHER_NAME_VALUE_1_TAB(i),
8578       OTHER_NAME_VALUE_2       = OTHER_NAME_VALUE_2_TAB(i),
8579       PACK_SIZE_EXT            = PACK_SIZE_EXT_TAB(i),
8580       PACK_UNITS_PER_PACK_EXT  = PACK_UNITS_PER_PACK_EXT_TAB(i),
8581       PACK_UOM_CODE_EXT        = PACK_UOM_CODE_EXT_TAB(i),
8582       PACKAGING_CODE_EXT       = PACKAGING_CODE_EXT_TAB(i),
8583       PARENT_LINK_LINE_REF     = PARENT_LINK_LINE_REF_TAB(i),
8584       CUST_PRODUCTION_SEQ_NUM    = CUST_PRODUCTION_SEQ_NUM_TAB(i),
8585       PRICE_LIST_ID            = PRICE_LIST_ID_TAB(i),
8586       PRIMARY_QUANTITY         = PRIMARY_QUANTITY_TAB(i),
8587       PRIMARY_UOM_CODE         = PRIMARY_UOM_CODE_TAB(i),
8588       PRIME_CONTRCTR_PART_EXT  = PRIME_CONTRCTR_PART_EXT_TAB(i),
8589       PROCESS_STATUS           = PROCESS_STATUS_TAB(i),
8590       CUST_PO_RELEASE_NUM      = CUST_PO_RELEASE_NUM_TAB(i),
8591       CUST_PO_DATE             = CUST_PO_DATE_TAB(i),
8592       CUST_PO_LINE_NUM         = CUST_PO_LINE_NUM_TAB(i),
8593       CUST_PO_NUMBER           = CUST_PO_NUMBER_TAB(i),
8594       QTY_TYPE_CODE            = QTY_TYPE_CODE_TAB(i),
8595       QTY_TYPE_CODE_EXT        = QTY_TYPE_CODE_EXT_TAB(i),
8596       RETURN_CONTAINER_EXT     = RETURN_CONTAINER_EXT_TAB(i),
8597       SCHEDULE_LINE_ID         = SCHEDULE_LINE_ID_TAB(i),
8598       ROUTING_DESC_EXT         = ROUTING_DESC_EXT_TAB(i),
8599       ROUTING_SEQ_CODE_EXT     = ROUTING_SEQ_CODE_EXT_TAB(i),
8600       SCHEDULE_ITEM_NUM        = SCHEDULE_ITEM_NUM_TAB(i),
8601       SHIP_DEL_PATTERN_EXT     = SHIP_DEL_PATTERN_EXT_TAB(i),
8602       SHIP_DEL_TIME_CODE_EXT   = SHIP_DEL_TIME_CODE_EXT_TAB(i),
8603       SHIP_DEL_RULE_NAME       = SHIP_DEL_RULE_NAME_TAB(i),
8604       SHIP_FROM_ADDRESS_1_EXT  = SHIP_FROM_ADDRESS_1_EXT_TAB(i),
8605       SHIP_FROM_ADDRESS_2_EXT  = SHIP_FROM_ADDRESS_2_EXT_TAB(i),
8606       SHIP_FROM_ADDRESS_3_EXT  = SHIP_FROM_ADDRESS_3_EXT_TAB(i),
8607       SHIP_FROM_ADDRESS_4_EXT  = SHIP_FROM_ADDRESS_4_EXT_TAB(i),
8608       SHIP_FROM_CITY_EXT       = SHIP_FROM_CITY_EXT_TAB(i),
8609       SHIP_FROM_COUNTRY_EXT    = SHIP_FROM_COUNTRY_EXT_TAB(i),
8610       SHIP_FROM_COUNTY_EXT     = SHIP_FROM_COUNTY_EXT_TAB(i),
8611       SHIP_FROM_NAME_EXT       = SHIP_FROM_NAME_EXT_TAB(i),
8612       SHIP_FROM_ORG_ID         = SHIP_FROM_ORG_ID_TAB(i),
8613       SHIP_FROM_POSTAL_CD_EXT  = SHIP_FROM_POSTAL_CD_EXT_TAB(i),
8614       SHIP_FROM_PROVINCE_EXT   = SHIP_FROM_PROVINCE_EXT_TAB(i),
8615       SHIP_FROM_STATE_EXT      = SHIP_FROM_STATE_EXT_TAB(i),
8616       SHIP_LABEL_INFO_LINE_1   = SHIP_LABEL_INFO_LINE_1_TAB(i),
8617       SHIP_LABEL_INFO_LINE_10  = SHIP_LABEL_INFO_LINE_10_TAB(i),
8618       SHIP_LABEL_INFO_LINE_2   = SHIP_LABEL_INFO_LINE_2_TAB(i),
8619       SHIP_LABEL_INFO_LINE_3   = SHIP_LABEL_INFO_LINE_3_TAB(i),
8620       SHIP_LABEL_INFO_LINE_4   = SHIP_LABEL_INFO_LINE_4_TAB(i),
8621       SHIP_LABEL_INFO_LINE_5   = SHIP_LABEL_INFO_LINE_5_TAB(i),
8622       SHIP_LABEL_INFO_LINE_6   = SHIP_LABEL_INFO_LINE_6_TAB(i),
8623       SHIP_LABEL_INFO_LINE_7   = SHIP_LABEL_INFO_LINE_7_TAB(i),
8624       SHIP_LABEL_INFO_LINE_8   = SHIP_LABEL_INFO_LINE_8_TAB(i),
8625       SHIP_LABEL_INFO_LINE_9   = SHIP_LABEL_INFO_LINE_9_TAB(i),
8626       SHIP_TO_ADDRESS_1_EXT    = SHIP_TO_ADDRESS_1_EXT_TAB(i),
8627       SHIP_TO_ADDRESS_2_EXT     = SHIP_TO_ADDRESS_2_EXT_TAB(i),
8628       SHIP_TO_ADDRESS_3_EXT     = SHIP_TO_ADDRESS_3_EXT_TAB(i),
8629       SHIP_TO_ADDRESS_4_EXT     = SHIP_TO_ADDRESS_4_EXT_TAB(i),
8630       SHIP_TO_ADDRESS_ID        = SHIP_TO_ADDRESS_ID_TAB(i),
8631       DELIVER_TO_ORG_ID         = DELIVER_TO_ORG_ID_TAB(i),
8632       SHIP_TO_CITY_EXT          = SHIP_TO_CITY_EXT_TAB(i),
8633       SHIP_TO_COUNTRY_EXT       = SHIP_TO_COUNTRY_EXT_TAB(i),
8634       SHIP_TO_COUNTY_EXT        = SHIP_TO_COUNTY_EXT_TAB(i),
8635       SHIP_TO_NAME_EXT          = SHIP_TO_NAME_EXT_TAB(i),
8636       SHIP_TO_POSTAL_CD_EXT     = SHIP_TO_POSTAL_CD_EXT_TAB(i),
8637       SHIP_TO_PROVINCE_EXT      = SHIP_TO_PROVINCE_EXT_TAB(i),
8638       SHIP_TO_SITE_USE_ID       = SHIP_TO_SITE_USE_ID_TAB(i),
8639       SHIP_TO_STATE_EXT         = SHIP_TO_STATE_EXT_TAB(i),
8640       START_DATE_TIME           = START_DATE_TIME_TAB(i),
8641       SUBLINE_ASSIGNED_ID_EXT   = SUBLINE_ASSIGNED_ID_EXT_TAB(i),
8642       SUBLINE_CONFIG_CODE_EXT   = SUBLINE_CONFIG_CODE_EXT_TAB(i),
8643       SUBLINE_CUST_ITEM_EXT     = SUBLINE_CUST_ITEM_EXT_TAB(i),
8644       SUBLINE_CUST_ITEM_ID      = SUBLINE_CUST_ITEM_ID_TAB(i),
8645       SUBLINE_MODEL_NUM_EXT     = SUBLINE_MODEL_NUM_EXT_TAB(i),
8646       SUBLINE_QUANTITY         = SUBLINE_QUANTITY_TAB(i),
8647       SUBLINE_UOM_CODE         = SUBLINE_UOM_CODE_TAB(i),
8648       SUPPLIER_ITEM_EXT        = SUPPLIER_ITEM_EXT_TAB(i),
8649       TRANSIT_TIME_EXT         = TRANSIT_TIME_EXT_TAB(i),
8650       TRANSIT_TIME_QUAL_EXT    = TRANSIT_TIME_QUAL_EXT_TAB(i),
8651       TRANSPORT_LOC_QUAL_EXT   = TRANSPORT_LOC_QUAL_EXT_TAB(i),
8652       TRANSPORT_LOCATION_EXT   = TRANSPORT_LOCATION_EXT_TAB(i),
8653       TRANSPORT_METHOD_EXT    = TRANSPORT_METHOD_EXT_TAB(i),
8654       UOM_CODE               = UOM_CODE_TAB(i),
8655       WEIGHT_EXT            = WEIGHT_EXT_TAB(i),
8656       WEIGHT_QUALIFIER_EXT   = WEIGHT_QUALIFIER_EXT_TAB(i),
8657       WEIGHT_UOM_EXT         = WEIGHT_UOM_EXT_TAB(i),
8658       FBO_CONFIGURATION_KEY_1   = FBO_CONFIGURATION_KEY_1_TAB(i),
8659       FBO_CONFIGURATION_KEY_2  = FBO_CONFIGURATION_KEY_2_TAB(i),
8660       FBO_CONFIGURATION_KEY_3  = FBO_CONFIGURATION_KEY_3_TAB(i),
8661       FBO_CONFIGURATION_KEY_4  = FBO_CONFIGURATION_KEY_4_TAB(i),
8662       FBO_CONFIGURATION_KEY_5  = FBO_CONFIGURATION_KEY_5_TAB(i),
8663       MATCH_KEY_ACROSS         = MATCH_KEY_ACROSS_TAB(i),
8664       MATCH_KEY_WITHIN         = MATCH_KEY_WITHIN_TAB(i),
8665       CRITICAL_KEY_ATTRIBUTES  = CRITICAL_KEY_ATTRIBUTES_TAB(i),
8666       ATTRIBUTE_CATEGORY       = ATTRIBUTE_CATEGORY_TAB(i),
8667       ATTRIBUTE1               = ATTRIBUTE1_TAB(i),
8668       ATTRIBUTE2               = ATTRIBUTE2_TAB(i),
8669       ATTRIBUTE3               = ATTRIBUTE3_TAB(i),
8670       ATTRIBUTE4               = ATTRIBUTE4_TAB(i),
8671       ATTRIBUTE5               = ATTRIBUTE5_TAB(i),
8672       ATTRIBUTE6              = ATTRIBUTE6_TAB(i),
8673       ATTRIBUTE7              = ATTRIBUTE7_TAB(i),
8674       ATTRIBUTE8              = ATTRIBUTE8_TAB(i),
8675       ATTRIBUTE9              = ATTRIBUTE9_TAB(i),
8676       ATTRIBUTE10             = ATTRIBUTE10_TAB(i),
8677       ATTRIBUTE11             = ATTRIBUTE11_TAB(i),
8678       ATTRIBUTE12             = ATTRIBUTE12_TAB(i),
8679       ATTRIBUTE13             = ATTRIBUTE13_TAB(i),
8680       ATTRIBUTE14             = ATTRIBUTE14_TAB(i),
8681       ATTRIBUTE15             = ATTRIBUTE15_TAB(i),
8682       BLANKET_NUMBER	      = BLANKET_NUMBER_TAB(i),
8683       INTMED_SHIP_TO_ORG_ID   = INTMED_SHIP_TO_ORG_ID_TAB(i),
8684       LAST_UPDATE_DATE          = v_last_update_date,
8685       LAST_UPDATED_BY           = v_last_updated_by,
8686       LAST_UPDATE_LOGIN         = v_last_update_login,
8687       REQUEST_ID                = v_request_id,
8688       PROGRAM_APPLICATION_ID    = v_program_application_id,
8689       PROGRAM_ID                = v_program_id,
8690       PROGRAM_UPDATE_DATE       = v_program_update_date,
8691       SHIP_TO_CUSTOMER_ID       = SHIP_TO_CUSTOMER_ID_TAB(i)
8692     WHERE header_id = header_id_tab(i)
8693     AND   line_id = line_id_tab(i);
8694   -- bulk update
8695   --
8696   IF (l_debug <> -1) THEN
8697     rlm_core_sv.dlog(C_DEBUG,'Number of Interface lines updated',SQL%ROWCOUNT);
8698     rlm_core_sv.dlog(C_DEBUG,'Number of Interface lines in g_lines_tab ',g_lines_tab.COUNT);
8699   END IF;
8700   --
8701   --
8702   IF g_lines_tab.COUNT >= 1 AND IsGroupError THEN
8703      --
8704      IF (l_debug <> -1) THEN
8705         rlm_core_sv.dlog(C_DEBUG,'Current group failed validation');
8706      END IF;
8707      --
8708   END IF;
8709   --
8710   --
8711   IF NOT IsGroupError THEN
8712    --
8713    IF (l_debug <> -1) THEN
8714       rlm_core_sv.dlog('Current group passed validation, so set g_schedule_PS to PS_available');
8715    END IF;
8716    --
8717    g_schedule_PS := rlm_core_sv.k_PS_AVAILABLE;
8718    --
8719   END IF;
8720   --
8721   IF (l_debug <> -1) THEN
8722      rlm_core_sv.dpop(C_SDEBUG);
8723   END IF;
8724   --
8725 EXCEPTION
8726   --
8727   WHEN OTHERS THEN
8728     --
8729     rlm_message_sv.sql_error('rlm_validateDemand_sv.UpdateInterfaceLines',
8730                                       v_Progress);
8731     --
8732     IF (l_debug <> -1) THEN
8733        rlm_core_sv.dlog(C_DEBUG,'progress',v_Progress);
8734        rlm_core_sv.dpop(C_SDEBUG,'EXCEPTION: '||SUBSTR(SQLERRM,1,200));
8735     END IF;
8736     raise;
8737     --
8738 END UpdateInterfaceLines;
8739 
8740 /*===========================================================================
8741 
8742         PROCEDURE NAME:  UpdateInterfaceHeaders
8743 
8744 ===========================================================================*/
8745 PROCEDURE UpdateInterfaceHeaders
8746 IS
8747   v_Progress         VARCHAR(3) := '010';
8748 
8749 BEGIN
8750     --
8751     IF (l_debug <> -1) THEN
8752        rlm_core_sv.dpush(C_SDEBUG,'UpdateInterfaceHeaders');
8753        rlm_core_sv.dlog(C_DEBUG, 'g_schedule_PS', g_schedule_PS);
8754        rlm_core_sv.dlog(C_DEBUG, 'g_line_PS', g_line_PS);
8755     END IF;
8756     --
8757     IF (g_schedule_PS = rlm_core_sv.k_PS_AVAILABLE
8758        AND g_line_PS = rlm_core_sv.k_PS_ERROR ) THEN
8759        --
8760        g_schedule_PS := rlm_core_sv.k_PS_PARTIAL_PROCESSED;
8761        --
8762        IF (l_debug <> -1) THEN
8763           rlm_core_sv.dlog(C_DEBUG,'Process Status PARTIAL_PROCESSED');
8764        END IF;
8765        --
8766     ELSIF (g_schedule_PS = rlm_core_sv.k_PS_ERROR
8767        AND g_line_PS = rlm_core_sv.k_PS_ERROR ) THEN
8768        --
8769        g_schedule_PS := rlm_core_sv.k_PS_ERROR;
8770        --
8771        IF (l_debug <> -1) THEN
8772           rlm_core_sv.dlog(C_DEBUG,'Process Status ERROR');
8773        END IF;
8774        --
8775     ELSIF (g_schedule_PS = rlm_core_sv.k_PS_AVAILABLE
8776        AND g_line_PS = rlm_core_sv.k_PS_AVAILABLE ) THEN
8777        --
8778        g_schedule_PS := rlm_core_sv.k_PS_AVAILABLE;
8779        --
8780        IF (l_debug <> -1) THEN
8781           rlm_core_sv.dlog(C_DEBUG,'Process Status AVAILABLE');
8782        END IF;
8783        --
8784     END IF;
8785 
8786     UPDATE rlm_interface_headers SET
8787       CUST_ADDRESS_1_EXT    =   g_header_rec.CUST_ADDRESS_1_EXT ,
8788       CUST_ADDRESS_2_EXT    =  g_header_rec. CUST_ADDRESS_2_EXT ,
8789       CUST_ADDRESS_3_EXT    =    g_header_rec.CUST_ADDRESS_3_EXT ,
8790       CUST_ADDRESS_4_EXT    =    g_header_rec.CUST_ADDRESS_4_EXT ,
8791       CUST_CITY_EXT         =  g_header_rec.CUST_CITY_EXT ,
8792       CUST_COUNTRY_EXT      =  g_header_rec.CUST_COUNTRY_EXT ,
8793       CUST_COUNTY_EXT       =  g_header_rec.CUST_COUNTY_EXT ,
8794       CUSTOMER_EXT          =  g_header_rec.CUSTOMER_EXT ,
8795       CUST_NAME_EXT         =  g_header_rec.CUST_NAME_EXT ,
8796       CUST_POSTAL_CD_EXT    =  g_header_rec.CUST_POSTAL_CD_EXT ,
8797       CUST_PROVINCE_EXT     =  g_header_rec.CUST_PROVINCE_EXT ,
8798       CUST_STATE_EXT        =  g_header_rec.CUST_STATE_EXT ,
8799       CUSTOMER_ID           =  g_header_rec.CUSTOMER_ID ,
8800       ECE_PRIMARY_ADDRESS_ID =  g_header_rec.ECE_PRIMARY_ADDRESS_ID ,
8801       ECE_TP_LOCATION_CODE_EXT =  g_header_rec.ECE_TP_LOCATION_CODE_EXT ,
8802       ECE_TP_TRANSLATOR_CODE   =  g_header_rec.ECE_TP_TRANSLATOR_CODE ,
8803       EDI_CONTROL_NUM_1        =  g_header_rec.EDI_CONTROL_NUM_1 ,
8804       EDI_CONTROL_NUM_2        =  g_header_rec.EDI_CONTROL_NUM_2 ,
8805       EDI_CONTROL_NUM_3        =  g_header_rec.EDI_CONTROL_NUM_3 ,
8806       EDI_TEST_INDICATOR       =  g_header_rec.EDI_TEST_INDICATOR ,
8807       HEADER_CONTACT_CODE_1    =  g_header_rec.HEADER_CONTACT_CODE_1 ,
8808       HEADER_CONTACT_CODE_2    =  g_header_rec.HEADER_CONTACT_CODE_2 ,
8809       HEADER_CONTACT_VALUE_1   =  g_header_rec.HEADER_CONTACT_VALUE_1 ,
8810       HEADER_CONTACT_VALUE_2   =  g_header_rec.HEADER_CONTACT_VALUE_2 ,
8811       HEADER_NOTE_TEXT         =  g_header_rec.HEADER_NOTE_TEXT ,
8812       HEADER_REF_CODE_1        =  g_header_rec.HEADER_REF_CODE_1 ,
8813       HEADER_REF_CODE_2        =  g_header_rec.HEADER_REF_CODE_2 ,
8814       HEADER_REF_CODE_3        =  g_header_rec.HEADER_REF_CODE_3 ,
8815       HEADER_REF_VALUE_1       =  g_header_rec.HEADER_REF_VALUE_1 ,
8816       HEADER_REF_VALUE_2       =  g_header_rec.HEADER_REF_VALUE_2 ,
8817       HEADER_REF_VALUE_3       =  g_header_rec.HEADER_REF_VALUE_3 ,
8818       PROCESS_STATUS           =  g_schedule_PS,
8819       SCHEDULE_HEADER_ID       =  g_header_rec.SCHEDULE_HEADER_ID ,
8820       SCHEDULE_TYPE            =  g_header_rec.SCHEDULE_TYPE ,
8821       SCHEDULE_TYPE_EXT        =  g_header_rec.SCHEDULE_TYPE_EXT ,
8822       SCHED_GENERATION_DATE    =  g_header_rec.SCHED_GENERATION_DATE ,
8823       SCHED_HORIZON_END_DATE   =  g_header_rec.SCHED_HORIZON_END_DATE ,
8824       SCHED_HORIZON_START_DATE =  g_header_rec.SCHED_HORIZON_START_DATE ,
8825       SCHEDULE_PURPOSE         =  g_header_rec.SCHEDULE_PURPOSE ,
8826       SCHEDULE_PURPOSE_EXT     =  g_header_rec.SCHEDULE_PURPOSE_EXT ,
8827       SCHEDULE_REFERENCE_NUM   =  g_header_rec.SCHEDULE_REFERENCE_NUM ,
8828       SCHEDULE_SOURCE          =  g_header_rec.SCHEDULE_SOURCE ,
8829       LAST_UPDATE_DATE         =  sysdate,
8830       LAST_UPDATED_BY          =  fnd_global.user_id ,
8831       CREATION_DATE            =  g_header_rec.CREATION_DATE ,
8832       CREATED_BY               =  g_header_rec.CREATED_BY ,
8833       ATTRIBUTE_CATEGORY       =  g_header_rec.ATTRIBUTE_CATEGORY ,
8834       ATTRIBUTE1               =  g_header_rec.ATTRIBUTE1 ,
8835       ATTRIBUTE2               =  g_header_rec.ATTRIBUTE2 ,
8836       ATTRIBUTE3               =  g_header_rec.ATTRIBUTE3 ,
8837       ATTRIBUTE4               =  g_header_rec.ATTRIBUTE4 ,
8838       ATTRIBUTE5               =  g_header_rec.ATTRIBUTE5 ,
8839       ATTRIBUTE6               =  g_header_rec.ATTRIBUTE6 ,
8840       ATTRIBUTE7               =  g_header_rec.ATTRIBUTE7 ,
8841       ATTRIBUTE8               =  g_header_rec.ATTRIBUTE8 ,
8842       ATTRIBUTE9               =  g_header_rec.ATTRIBUTE9 ,
8843       ATTRIBUTE10              =  g_header_rec.ATTRIBUTE10 ,
8844       ATTRIBUTE11              =  g_header_rec.ATTRIBUTE11 ,
8845       ATTRIBUTE12              =  g_header_rec.ATTRIBUTE12 ,
8846       ATTRIBUTE13              =  g_header_rec.ATTRIBUTE13 ,
8847       ATTRIBUTE14              =  g_header_rec.ATTRIBUTE14 ,
8848       ATTRIBUTE15              =  g_header_rec.ATTRIBUTE15 ,
8849       LAST_UPDATE_LOGIN        =  fnd_global.login_id ,
8850       REQUEST_ID               =  fnd_global.conc_REQUEST_ID ,
8851       PROGRAM_APPLICATION_ID   =  fnd_global.PROG_APPL_ID ,
8852       PROGRAM_ID               =  fnd_global.conc_PROGRAM_ID ,
8853       PROGRAM_UPDATE_DATE      =  sysdate
8854     WHERE header_id = g_header_rec.header_id;
8855 
8856   --
8857   IF (l_debug <> -1) THEN
8858      rlm_core_sv.dlog(C_DEBUG,'Number of Interface header updated',SQL%ROWCOUNT);
8859      rlm_core_sv.dpop(C_SDEBUG);
8860   END IF;
8861 
8862 EXCEPTION
8863   WHEN OTHERS THEN
8864     --
8865     rollback;
8866     rlm_message_sv.sql_error('rlm_validateDemand_sv.UpdateInterfaceHeaders: ',
8867                                v_Progress);
8868     --
8869     IF (l_debug <> -1) THEN
8870        rlm_core_sv.dpop(C_SDEBUG,'EXCEPTION: '||SUBSTR(SQLERRM,1,200));
8871     END IF;
8872     raise;
8873     --
8874 END UpdateInterfaceHeaders;
8875 
8876 /*===========================================================================
8877 
8878         FUNCTION NAME:  PostValidation
8879 
8880 ===========================================================================*/
8881 PROCEDURE PostValidation
8882 IS
8883   v_Status             BOOLEAN := TRUE;
8884   v_Progress           VARCHAR(3) := '010';
8885   e_ArchiveAPIFailed   EXCEPTION;
8886 
8887 BEGIN
8888   --
8889   IF (l_debug <> -1) THEN
8890      rlm_core_sv.dpush(C_SDEBUG,'PostValidation');
8891      rlm_core_sv.dlog(C_DEBUG,'Header_id',g_Header_Rec.header_id);
8892   END IF;
8893   --
8894   v_Status := rlm_ad_sv.Archive_Demand(g_Header_Rec.header_id);
8895   --
8896   v_Progress := '020';
8897   --
8898   IF NOT v_Status THEN
8899      raise e_ArchiveAPIFailed;
8900   END IF;
8901   --
8902   IF (l_debug <> -1) THEN
8903      rlm_core_sv.dlog(C_DEBUG,'progress',v_Progress);
8904      rlm_core_sv.dpop(C_SDEBUG);
8905   END IF;
8906   --
8907 EXCEPTION
8908   WHEN e_ArchiveAPIFailed THEN
8909     --
8910     g_header_rec.process_status := rlm_core_sv.k_PS_ERROR;
8911     rlm_message_sv.app_error(
8912                 x_ExceptionLevel => rlm_message_sv.k_error_level,
8913                 x_MessageName => 'RLM_ARCHIVE_API_ERROR',
8914                 x_InterfaceHeaderId => g_Header_Rec.header_id,
8915                 x_Token1 => 'ERROR',
8916                 x_value1 => sqlerrm,
8917                 x_ValidationType => 'ARCHIVE');
8918     --
8919     IF (l_debug <> -1) THEN
8920        rlm_core_sv.dlog(C_DEBUG,'EXCEPTION: RLM_ARCHIVE_API_ERROR ',v_Progress);
8921        rlm_core_sv.dpop(C_SDEBUG);
8922     END IF;
8923     --
8924   WHEN OTHERS THEN
8925     --
8926     g_header_rec.process_status := rlm_core_sv.k_PS_ERROR;
8927     rlm_message_sv.sql_error('rlm_validateDemand_sv.PostValidation: ',
8928                                  v_Progress);
8929     --
8930     IF (l_debug <> -1) THEN
8931        rlm_core_sv.dpop(C_SDEBUG,'EXCEPTION: '||SUBSTR(SQLERRM,1,200));
8932     END IF;
8933     raise;
8934     --
8935 END PostValidation;
8936 
8937 /*===========================================================================
8938 
8939   PROCEDURE CallSetups
8940 
8941 ===========================================================================*/
8942 FUNCTION CallSetups( x_Group_rec IN OUT NOCOPY t_Group_rec,
8943                      x_header_rec IN rlm_interface_headers%ROWTYPE,
8944                      x_lines_rec IN rlm_interface_lines%ROWTYPE)
8945 RETURN BOOLEAN
8946 IS
8947 
8948   v_SetupTerms_rec    rlm_setup_terms_sv.setup_terms_rec_typ;
8949   v_TermsLevel        VARCHAR2(30) := NULL;
8950   v_ReturnStatus      BOOLEAN;
8951   v_ReturnMsg         VARCHAR2(3000);
8952   e_NoSetupTerms      EXCEPTION;
8953   e_skip_callsetup    EXCEPTION;
8954 
8955 BEGIN
8956   --
8957   IF (l_debug <> -1) THEN
8958      rlm_core_sv.dpush(C_SDEBUG,'CallSetups');
8959      rlm_core_sv.dlog(C_DEBUG,'x_lines_rec.ship_from_org_id',
8960                               x_lines_rec.ship_from_org_id);
8961      rlm_core_sv.dlog(C_DEBUG,'x_lines_rec.cust_ship_from_org_ext',
8962                               x_lines_rec.cust_ship_from_org_ext);
8963      rlm_core_sv.dlog(C_DEBUG,'x_header_rec.customer_id',
8964                               x_header_rec.customer_id);
8965      rlm_core_sv.dlog(C_DEBUG,'x_lines_rec.ship_to_address_id',
8966                               x_lines_rec.ship_to_address_id);
8967      rlm_core_sv.dlog(C_DEBUG,'x_lines_rec.customer_item_id',
8968                               x_lines_rec.customer_item_id);
8969   END IF;
8970   --
8971 -- NOTE: call setupAPI to poulate setup info in the group rec:
8972 -- schedule precedence,match within/across strings
8973 -- firm disposition code and offset days, order header id
8974   --
8975   -- Bug 5098241
8976   -- For ATP item we expect the ship_from_org_id and
8977   -- cust_ship_from_org_ext to be null. If ship_from_org_id is null
8978   -- and cust_ship_from_org_ext is not null, then this means that for
8979   -- a non-ATP item, we have failed to derive the ship_from_org_id
8980   -- and for this reason we won't be able to get the setup terms.
8981   --
8982   IF (x_lines_rec.cust_ship_from_org_ext IS NOT NULL)
8983     AND (x_lines_rec.ship_from_org_id IS NULL)
8984   THEN
8985     RAISE e_skip_callsetup;
8986   END IF;
8987 
8988   RLM_TPA_SV.get_setup_terms(x_lines_rec.ship_from_org_id,
8989                                      x_header_rec.customer_id,
8990                                      x_lines_rec.ship_to_address_id,
8991                                      x_lines_rec.customer_item_id,
8992                                      v_TermsLevel,
8993                                      v_SetupTerms_rec,
8994                                      v_ReturnMsg, -- For Patch for Nov17 freeze
8995                                      v_ReturnStatus);
8996   --
8997   IF (l_debug <> -1) THEN
8998      rlm_core_sv.dlog(C_DEBUG, 'v_TermsLevel', v_TermsLevel);
8999      rlm_core_sv.dlog(C_DEBUG, 'v_ReturnStatus', v_ReturnStatus);
9000      rlm_core_sv.dlog(C_DEBUG,'v_SetupTerms_rec.schedule_hierarchy_code',
9001                    v_SetupTerms_rec.schedule_hierarchy_code);
9002      rlm_core_sv.dlog(C_DEBUG,'v_SetupTerms_rec.header_id',
9003                    v_SetupTerms_rec.header_id);
9004      rlm_core_sv.dlog(C_DEBUG, 'v_SetupTerms_rec.blanket_number',
9005 		   v_SetupTerms_rec.blanket_number);
9006   END IF;
9007   --
9008   IF v_ReturnStatus THEN
9009     --
9010     x_Group_rec.setup_terms_rec := v_SetupTerms_rec;
9011     --
9012   ELSE
9013     --
9014     IF (l_debug <> -1) THEN
9015        rlm_core_sv.dlog(C_DEBUG,'setups failed');
9016     END IF;
9017     --
9018     RAISE e_NoSetupTerms;
9019     --
9020   END IF;
9021   --
9022   IF (l_debug <> -1) THEN
9023      rlm_core_sv.dpop(C_SDEBUG);
9024   END IF;
9025   --
9026   RETURN TRUE;
9027   --
9028 EXCEPTION
9029   --
9030   -- bug 5098241
9031   WHEN e_skip_callsetup THEN
9032    --
9033 
9034   IF (l_debug <> -1) THEN
9035       rlm_core_sv.dlog(C_SDEBUG,'SetupAPI failed');
9036      rlm_core_sv.dpop(C_SDEBUG,'EXCEPTION: e_skip_callsetup');
9037   END IF;
9038   --
9039   RETURN FALSE;
9040   --
9041   WHEN e_NoSetupTerms THEN
9042    --
9043    --g_header_rec.process_status := rlm_core_sv.k_PS_ERROR;
9044    IF(v_SetupTerms_rec.msg_name = 'RLM_SETUP_CUST_INACTIVE_RECORD') THEN
9045      --
9046      rlm_message_sv.get_msg_text(
9047                   x_message_name => v_SetupTerms_rec.msg_name,
9048                   x_text => v_ReturnMsg,
9049                   x_token1 => 'CUSTOMER',
9050                   x_value1 => rlm_core_sv.get_customer_name(x_header_rec.customer_id),
9051                   x_token2 => 'SHIPFROM',
9052                   x_value2 => rlm_core_sv.get_ship_from(x_lines_rec.ship_from_org_id),
9053                   x_token3 => 'SHIPTO',
9054                   x_value3 => RLM_CORE_SV.get_ship_to(x_lines_rec.ship_to_address_id),
9055                   x_token4 => 'ITEM',
9056                   x_value4 => RLM_CORE_SV.get_item_number(x_lines_rec.customer_item_id)
9057                   );
9058      --
9059    END IF;
9060 
9061    rlm_message_sv.app_error(
9062            x_ExceptionLevel    => rlm_message_sv.k_error_level,
9063            x_MessageName       => 'RLM_SETUPAPI_FAILED',
9064            x_ChildMessageName  => v_SetupTerms_rec.msg_name,
9065            x_InterfaceHeaderId => x_lines_rec.header_id,
9066            x_InterfaceLineId   => x_lines_rec.line_id,
9067            x_Token1            => 'ERROR',
9068            x_value1            => v_ReturnMsg,
9069            x_ValidationType => 'SETUPS');
9070   --
9071   IF (l_debug <> -1) THEN
9072       rlm_core_sv.dlog(C_SDEBUG,'SetupAPI failed');
9073      rlm_core_sv.dpop(C_SDEBUG,'EXCEPTION: RLM_SETUPAPI_FAILED');
9074   END IF;
9075   --
9076   RETURN FALSE;
9077   --
9078  WHEN OTHERS THEN
9079   --
9080   --g_header_rec.process_status := rlm_core_sv.k_PS_ERROR;
9081   --
9082   IF (l_debug <> -1) THEN
9083      rlm_core_sv.dpop(C_SDEBUG,'EXCEPTION: '||SUBSTR(SQLERRM,1,200));
9084   END IF;
9085   --
9086   raise; /* should we do a raise here */
9087   --
9088 END CallSetups;
9089 
9090 /*=============================================================================
9091    PROCEDURE NAME:      ValidForecastDesig
9092 
9093 ==============================================================================*/
9094 PROCEDURE ValidForecastDesig(
9095                x_setup_terms_rec  IN RLM_SETUP_TERMS_SV.setup_terms_rec_typ,
9096                x_header_rec IN RLM_INTERFACE_HEADERS%ROWTYPE,
9097                x_lines_rec IN OUT NOCOPY RLM_INTERFACE_LINES%ROWTYPE,
9098                x_ForecastDesignator IN OUT NOCOPY VARCHAR2)
9099 IS
9100   --
9101   v_progress            VARCHAR2(3) := '010';
9102   IsMRPForecastFence    BOOLEAN := FALSE;
9103   v_mrp_cnt             NUMBER  := 0;
9104   --
9105 BEGIN
9106   --
9107   IF (l_debug <> -1) THEN
9108      rlm_core_sv.dpush(C_SDEBUG, 'ValidForecastDesig');
9109      rlm_core_sv.dlog(C_DEBUG, 'schedule type',x_header_rec.schedule_type);
9110      rlm_core_sv.dlog(C_DEBUG, 'pln_mrp_forecast_day_from',
9111                             x_setup_terms_rec.pln_mrp_forecast_day_from);
9112      rlm_core_sv.dlog(C_DEBUG, 'shp_mrp_forecast_day_from',
9113                             x_setup_terms_rec.shp_mrp_forecast_day_from);
9114      rlm_core_sv.dlog(C_DEBUG, 'seq_mrp_forecast_day_from',
9115                             x_setup_terms_rec.seq_mrp_forecast_day_from);
9116   END IF;
9117   --
9118   IF rlm_message_sv.check_dependency('FORECASTDESIGNATOR') THEN
9119      --
9120      IF x_header_rec.schedule_type = k_PLANNING AND
9121        (x_setup_terms_rec.pln_mrp_forecast_day_from IS NOT NULL AND
9122         x_setup_terms_rec.pln_mrp_forecast_day_from <> 0)  THEN
9123         --
9124         IsMRPForecastFence := TRUE;
9125         --
9126      ELSIF x_header_rec.schedule_type = k_SHIPPING AND
9127        (x_setup_terms_rec.shp_mrp_forecast_day_from IS NOT NULL AND
9128         x_setup_terms_rec.shp_mrp_forecast_day_from <> 0)  THEN
9129         --
9130         IsMRPForecastFence := TRUE;
9131         --
9132      ELSIF x_header_rec.schedule_type = k_SEQUENCED AND
9133        (x_setup_terms_rec.seq_mrp_forecast_day_from IS NOT NULL AND
9134         x_setup_terms_rec.seq_mrp_forecast_day_from <> 0)  THEN
9135         --
9136         IsMRPForecastFence := TRUE;
9137         --
9138      END IF;
9139 
9140      IF NOT IsMRPForecastFence THEN
9141         --
9142         -- We need to check whether any lines have been interfaced with the item detail
9143         -- type 6 since the forecast designator needs to be validated even in that instance
9144         --
9145         SELECT COUNT(*)
9146         INTO  v_mrp_cnt
9147         FROM  rlm_interface_lines
9148         WHERE item_detail_type = '6'
9149         AND   header_id = x_header_rec.header_id
9150         AND   line_id  = x_lines_rec.line_id;
9151         --
9152   	IF (l_debug <> -1) THEN
9153            rlm_core_sv.dlog(C_DEBUG,'number of lines interfaced as MRP forecast ',v_mrp_cnt);
9154         END IF;
9155         --
9156         IF v_mrp_cnt > 0 THEN
9157           --
9158           IsMRPForecastFence := TRUE;
9159           --
9160         END IF;
9161         --
9162      END IF;
9163      --
9164      IF IsMRPForecastFence THEN
9165         --
9166         rlm_tpa_sv.GetDesignator(
9167                    NULL,
9168                    NULL,
9169                    x_header_rec.Customer_id,
9170                    x_lines_rec.Ship_From_Org_Id,
9171                    x_lines_rec.ship_to_site_use_id ,
9172                    x_lines_rec.bill_to_site_use_id,
9173                    x_lines_rec.bill_to_address_Id,
9174                    x_ForecastDesignator);
9175 	--
9176   	IF (l_debug <> -1) THEN
9177            rlm_core_sv.dlog(C_DEBUG,'x_ForecastDesignator',x_ForecastDesignator);
9178         END IF;
9179         --
9180         IF x_ForecastDesignator is NULL THEN
9181            --
9182             x_lines_rec.process_status := rlm_core_sv.k_PS_ERROR;
9183             rlm_message_sv.app_error(
9184                         x_ExceptionLevel => rlm_message_sv.k_error_level,
9185                         x_MessageName => 'RLM_NO_FORECAST_DESIG',
9186                         x_InterfaceHeaderId => x_lines_rec.header_id,
9187                         x_InterfaceLineId => x_lines_rec.line_id,
9188                         x_token1=>'CUST',
9189                         x_value1=>
9190                         rlm_core_sv.get_customer_name(x_header_rec.customer_id),
9191                         x_ValidationType => 'FORECASTDESIGNATOR');
9192             --
9193          END IF;
9194          --
9195      END IF;
9196      --
9197   END IF;
9198   --
9199   IF (l_debug <> -1) THEN
9200      rlm_core_sv.dpop(C_SDEBUG);
9201   END IF;
9202   --
9203 EXCEPTION
9204   --
9205   WHEN OTHERS THEN
9206     --
9207     IF (l_debug <> -1) THEN
9208        rlm_core_sv.dpop(C_SDEBUG,'EXCEPTION: '||SUBSTR(SQLERRM,1,200));
9209     END IF;
9210     --
9211     raise;
9212 END ValidForecastDesig;
9213 
9214 /*===========================================================================
9215 
9216         FUNCTION NAME:  PrintTable
9217 
9218 ===========================================================================*/
9219 PROCEDURE PrintTable(v_LinesTab IN t_Lines_Tab,
9220                      i IN NUMBER)
9221 IS
9222 BEGIN
9223   --
9224   IF (l_debug <> -1) THEN
9225      rlm_core_sv.dpush(C_SDEBUG,'PrintTable');
9226      rlm_core_sv.dlog(C_DEBUG,'v_LinesTab.COUNT',v_LinesTab.COUNT);
9227   END IF;
9228   --
9229   IF i is not NULL THEN
9230      --
9231      IF (l_debug <> -1) THEN
9232         rlm_core_sv.dlog(C_DEBUG,'process_status',v_LinesTab(i).process_status);
9233         rlm_core_sv.dlog(C_DEBUG,'cust_ship_from_org_ext',v_LinesTab(i).cust_ship_from_org_ext);
9234         rlm_core_sv.dlog(C_DEBUG,'ship_from_org_id',v_LinesTab(i).ship_from_org_id);
9235         rlm_core_sv.dlog(C_DEBUG,'cust_ship_to_ext',v_LinesTab(i).cust_ship_to_ext);
9236         rlm_core_sv.dlog(C_DEBUG,'ship_to_address_id',v_LinesTab(i).ship_to_address_id);
9237         rlm_core_sv.dlog(C_DEBUG,'supplier_item_ext',v_LinesTab(i).supplier_item_ext);
9238         rlm_core_sv.dlog(C_DEBUG,'Customer_Item_Ext',v_LinesTab(i).Customer_Item_Ext);
9239         rlm_core_sv.dlog(C_DEBUG,'Customer_Item_Id',v_LinesTab(i).Customer_Item_Id);
9240         rlm_core_sv.dlog(C_DEBUG,'INVENTORY_ITEM_ID',v_LinesTab(i).INVENTORY_ITEM_ID);
9241         rlm_core_sv.dlog(C_DEBUG,'CUST_BILL_TO_EXT',v_LinesTab(i).CUST_BILL_TO_EXT);
9242         rlm_core_sv.dlog(C_DEBUG,'BILL_TO_ADDRESS_ID',v_LinesTab(i).BILL_TO_ADDRESS_ID);
9243         rlm_core_sv.dlog(C_DEBUG,'CUST_INTRMD_SHIP_TO_EXT',v_LinesTab(i).CUST_INTRMD_SHIP_TO_EXT);
9244         rlm_core_sv.dlog(C_DEBUG,'INTRMD_SHIP_TO_ID',v_LinesTab(i).INTRMD_SHIP_TO_ID);
9245         rlm_core_sv.dlog(C_DEBUG,'ITEM_DETAIL_TYPE',v_LinesTab(i).ITEM_DETAIL_TYPE);
9246         rlm_core_sv.dlog(C_DEBUG,'ITEM_DETAIL_SUBTYPE',v_LinesTab(i).ITEM_DETAIL_SUBTYPE);
9247         rlm_core_sv.dlog(C_DEBUG,'order_header_id',v_LinesTab(i).order_header_id);
9248         rlm_core_sv.dlog(C_DEBUG,'ship_del_rule_name',v_LinesTab(i).ship_del_rule_name);
9249      END IF;
9250      --
9251   ELSE
9252     --
9253     For i IN 1..v_LinesTab.COUNT LOOP
9254        --
9255        IF (l_debug <> -1) THEN
9256          rlm_core_sv.dlog(C_DEBUG,'process_status',v_LinesTab(i).process_status);
9257          rlm_core_sv.dlog(C_DEBUG,'cust_ship_from_org_ext',v_LinesTab(i).cust_ship_from_org_ext);
9258          rlm_core_sv.dlog(C_DEBUG,'ship_from_org_id',v_LinesTab(i).ship_from_org_id);
9259          rlm_core_sv.dlog(C_DEBUG,'cust_ship_to_ext',v_LinesTab(i).cust_ship_to_ext);
9260          rlm_core_sv.dlog(C_DEBUG,'ship_to_address_id',v_LinesTab(i).ship_to_address_id);
9261          rlm_core_sv.dlog(C_DEBUG,'supplier_item_ext',v_LinesTab(i).supplier_item_ext);
9262          rlm_core_sv.dlog(C_DEBUG,'Customer_Item_Ext',v_LinesTab(i).Customer_Item_Ext);
9263          rlm_core_sv.dlog(C_DEBUG,'Customer_Item_Id',v_LinesTab(i).Customer_Item_Id);
9264          rlm_core_sv.dlog(C_DEBUG,'INVENTORY_ITEM_ID',v_LinesTab(i).INVENTORY_ITEM_ID);
9265          rlm_core_sv.dlog(C_DEBUG,'CUST_BILL_TO_EXT',v_LinesTab(i).CUST_BILL_TO_EXT);
9266          rlm_core_sv.dlog(C_DEBUG,'BILL_TO_ADDRESS_ID',v_LinesTab(i).BILL_TO_ADDRESS_ID);
9267          rlm_core_sv.dlog(C_DEBUG,'CUST_INTRMD_SHIP_TO_EXT',v_LinesTab(i).CUST_INTRMD_SHIP_TO_EXT);
9268          rlm_core_sv.dlog(C_DEBUG,'INTRMD_SHIP_TO_ID',v_LinesTab(i).INTRMD_SHIP_TO_ID);
9269          rlm_core_sv.dlog(C_DEBUG,'ITEM_DETAIL_TYPE',v_LinesTab(i).ITEM_DETAIL_TYPE);
9270          rlm_core_sv.dlog(C_DEBUG,'ITEM_DETAIL_SUBTYPE',v_LinesTab(i).ITEM_DETAIL_SUBTYPE);
9271          rlm_core_sv.dlog(C_DEBUG,'order_header_id',v_LinesTab(i).order_header_id);
9272          rlm_core_sv.dlog(C_DEBUG,'ship_del_rule_name',v_LinesTab(i).ship_del_rule_name);
9273       END IF;
9274       --
9275     END LOOP;
9276     --
9277   END IF;
9278   --
9279   IF (l_debug <> -1) THEN
9280      rlm_core_sv.dpop(C_SDEBUG);
9281   END IF;
9282   --
9283 EXCEPTION
9284   WHEN OTHERS THEN
9285     --
9286     IF (l_debug <> -1) THEN
9287        rlm_core_sv.dpop(C_SDEBUG,'EXCEPTION: '||SUBSTR(SQLERRM,1,200));
9288     END IF;
9289     --
9290     raise;
9291 END PrintTable;
9292 
9293 
9294 /*===========================================================================
9295 
9296         FUNCTION NAME:  GetTPContext
9297 
9298 ===========================================================================*/
9299 PROCEDURE GetTPContext(x_header_rec IN RLM_INTERFACE_HEADERS%ROWTYPE,
9300                        x_lines_rec IN RLM_INTERFACE_LINES%ROWTYPE,
9301                        x_customer_number OUT NOCOPY VARCHAR2,
9302                        x_ship_to_ece_locn_code OUT NOCOPY VARCHAR2,
9303                        x_bill_to_ece_locn_code OUT NOCOPY VARCHAR2,
9304                        x_inter_ship_to_ece_locn_code OUT NOCOPY VARCHAR2,
9305                        x_tp_group_code OUT NOCOPY VARCHAR2)
9306 IS
9307    v_Progress VARCHAR2(3) := '010';
9308 
9309 BEGIN
9310    --
9311    IF (l_debug <> -1) THEN
9312       rlm_core_sv.dpush(C_SDEBUG,'GetTPContext');
9313    END IF;
9314    --
9315    IF x_header_rec.ECE_TP_LOCATION_CODE_EXT is NOT NULL THEN
9316         -- Following query is changed as per TCA obsolescence project.
9317 	SELECT	ETG.TP_GROUP_CODE
9318 	INTO	x_tp_group_code
9319 	FROM	ECE_TP_GROUP ETG,
9320 		ECE_TP_HEADERS ETH,
9321 		HZ_CUST_ACCT_SITES ACCT_SITE
9322 	WHERE	ETG.TP_GROUP_ID = ETH.TP_GROUP_ID
9323 	and	ETH.TP_HEADER_ID = ACCT_SITE.TP_HEADER_ID
9324 	and	ACCT_SITE.CUST_ACCOUNT_ID = x_header_rec.CUSTOMER_ID
9325 	and	ACCT_SITE.ECE_TP_LOCATION_CODE = x_header_rec.ECE_TP_LOCATION_CODE_EXT;
9326    ELSE
9327       x_tp_group_code := x_header_rec.ECE_TP_TRANSLATOR_CODE;
9328    END IF;
9329    --
9330    x_ship_to_ece_locn_code := x_header_rec.ECE_TP_LOCATION_CODE_EXT;
9331 
9332    IF x_ship_to_ece_locn_code is NULL THEN
9333        x_ship_to_ece_locn_code := x_lines_rec.cust_ship_to_ext;
9334    END IF;
9335 
9336    x_bill_to_ece_locn_code := x_lines_rec.cust_bill_to_ext;
9337    x_inter_ship_to_ece_locn_code := x_lines_rec.cust_intrmd_ship_to_ext;
9338 
9339    IF x_header_rec.customer_id is NOT NULL THEN
9340       -- Following query is changed as per TCA obsolescence project.
9341       SELECT 	ACCOUNT_NUMBER
9342       INTO   	x_customer_number
9343       FROM   	HZ_CUST_ACCOUNTS CUST_ACCT
9344       WHERE 	CUST_ACCT.CUST_ACCOUNT_ID = x_header_rec.Customer_Id;
9345    END IF;
9346    --
9347    IF (l_debug <> -1) THEN
9348       rlm_core_sv.dlog(C_DEBUG,'customer_id', x_customer_number);
9349       rlm_core_sv.dlog(C_DEBUG,'x_ship_to_ece_locn_code', x_ship_to_ece_locn_code);
9350       rlm_core_sv.dlog(C_DEBUG,'x_inter_ship_to_ece_locn_code', x_inter_ship_to_ece_locn_code);
9351       rlm_core_sv.dlog(C_DEBUG,'x_bill_to_ece_loc_code', x_bill_to_ece_locn_code);
9352       rlm_core_sv.dlog(C_DEBUG,'x_tp_group_code', x_tp_group_code);
9353       rlm_core_sv.dpop(C_SDEBUG);
9354    END IF;
9355    --
9356 EXCEPTION
9357    WHEN NO_DATA_FOUND THEN
9358       --
9359       x_customer_number := NULL;
9360       --
9361       IF (l_debug <> -1) THEN
9362          rlm_core_sv.dlog(C_DEBUG, 'No data found for' , x_header_rec.customer_id);
9363          rlm_core_sv.dpop(C_SDEBUG);
9364       END IF;
9365 
9366    WHEN OTHERS THEN
9367       rlm_message_sv.sql_error('rlm_validatedemand_sv.GetTPContext', v_Progress);
9368       --
9369       IF (l_debug <> -1) THEN
9370          rlm_core_sv.dpop(C_SDEBUG,'EXCEPTION: '||SUBSTR(SQLERRM,1,200));
9371       END IF;
9372       --
9373       raise;
9374 
9375 END GetTPContext;
9376 
9377 /*===========================================================================
9378 
9379         FUNCTION NAME:  GetHdrTPContext
9380 
9381 ===========================================================================*/
9382 PROCEDURE GetHdrTPContext(x_header_rec IN RLM_INTERFACE_HEADERS%ROWTYPE,
9383                           x_customer_number OUT NOCOPY VARCHAR2,
9384                           x_ship_to_ece_locn_code OUT NOCOPY VARCHAR2,
9385                           x_bill_to_ece_locn_code OUT NOCOPY VARCHAR2,
9386                           x_inter_ship_to_ece_locn_code OUT NOCOPY VARCHAR2,
9387                           x_tp_group_code OUT NOCOPY VARCHAR2)
9388 IS
9389    v_Progress VARCHAR2(3) := '010';
9390 
9391 BEGIN
9392    --
9393    IF (l_debug <> -1) THEN
9394       rlm_core_sv.dpush(C_SDEBUG,'GetHdrTPContext');
9395    END IF;
9396    --
9397    IF x_header_rec.ECE_TP_LOCATION_CODE_EXT is NOT NULL THEN
9398         -- Following query is changed as per TCA obsolescence project.
9399 	SELECT	ETG.TP_GROUP_CODE
9400 	INTO	x_tp_group_code
9401 	FROM	ECE_TP_GROUP ETG,
9402 		ECE_TP_HEADERS ETH,
9403 		HZ_CUST_ACCT_SITES ACCT_SITE
9404 	WHERE  	ETG.TP_GROUP_ID = ETH.TP_GROUP_ID
9405 	and	ETH.TP_HEADER_ID = ACCT_SITE.TP_HEADER_ID
9406 	and	ACCT_SITE.ECE_TP_LOCATION_CODE = x_header_rec.ECE_TP_LOCATION_CODE_EXT;
9407    ELSE
9408       x_tp_group_code := x_header_rec.ECE_TP_TRANSLATOR_CODE;
9409    END IF;
9410    --
9411 
9412    x_ship_to_ece_locn_code := x_header_rec.ECE_TP_LOCATION_CODE_EXT;
9413    x_bill_to_ece_locn_code := NULL;
9414    x_inter_ship_to_ece_locn_code := NULL;
9415 
9416    IF x_header_rec.customer_id is NOT NULL THEN
9417       -- Following query is changed as per TCA obsolescence project.
9418       SELECT 	ACCOUNT_NUMBER
9419       INTO   	x_customer_number
9420       FROM   	HZ_CUST_ACCOUNTS CUST_ACCT
9421       WHERE 	CUST_ACCT.CUST_ACCOUNT_ID = x_header_rec.Customer_Id;
9422    END IF;
9423    --
9424    IF (l_debug <> -1) THEN
9425       rlm_core_sv.dlog(C_DEBUG,'customer_id', x_customer_number);
9426       rlm_core_sv.dlog(C_DEBUG,'x_ship_to_ece_locn_code', x_ship_to_ece_locn_code);
9427       rlm_core_sv.dlog(C_DEBUG,'x_inter_ship_to_ece_locn_code', x_inter_ship_to_ece_locn_code);
9428       rlm_core_sv.dlog(C_DEBUG,'x_bill_to_ece_loc_code', x_bill_to_ece_locn_code);
9429       rlm_core_sv.dlog(C_DEBUG,'x_tp_group_code', x_tp_group_code);
9430       rlm_core_sv.dpop(C_SDEBUG);
9431    END IF;
9432    --
9433 EXCEPTION
9434    WHEN NO_DATA_FOUND THEN
9435       --
9436       x_customer_number := NULL;
9437       --
9438       IF (l_debug <> -1) THEN
9439          rlm_core_sv.dlog(C_DEBUG, 'No data found for' , x_header_rec.customer_id);
9440          rlm_core_sv.dpop(C_SDEBUG);
9441       END IF;
9442 
9443    WHEN OTHERS THEN
9444       rlm_message_sv.sql_error('rlm_validatedemand_sv.GetHdrTPContext', v_Progress);
9445       --
9446       IF (l_debug <> -1) THEN
9447          rlm_core_sv.dpop(C_SDEBUG,'EXCEPTION: '||SUBSTR(SQLERRM,1,200));
9448       END IF;
9449       --
9450       raise;
9451 
9452 END GetHdrTPContext;
9453 
9454 /*=============================================================================
9455   PROCEDURE NAME: SetTPAttCategory
9456 ==============================================================================*/
9457 PROCEDURE SetTPAttCategory (
9458   		x_header_rec IN OUT NOCOPY RLM_INTERFACE_HEADERS%ROWTYPE,
9459                 x_lines_rec  IN OUT NOCOPY RLM_INTERFACE_LINES%ROWTYPE,
9460                 x_group_rec  IN OUT NOCOPY RLM_VALIDATEDEMAND_SV.t_Group_rec) IS
9461 BEGIN
9462   --
9463   IF (l_debug <> -1) THEN
9464    rlm_core_sv.dpush(C_SDEBUG,'SetTPAttCategory');
9465   END IF;
9466   --
9467   x_header_rec.tp_attribute_category := x_header_rec.ece_tp_translator_code;
9468   x_lines_rec.tp_attribute_category := x_header_rec.ece_tp_translator_code;
9469   --
9470   IF (l_debug <> -1) THEN
9471    rlm_core_sv.dpop(C_SDEBUG);
9472   END IF;
9473   --
9474 EXCEPTION
9475      WHEN OTHERS THEN
9476         --
9477         IF (l_debug <> -1) THEN
9478    	  rlm_core_sv.dpop(C_SDEBUG,'EXCEPTION: '||SUBSTR(SQLERRM,1,200));
9479 	END IF;
9480         --
9481 END SetTPAttCategory;
9482 
9483 /*=============================================================================
9484   PROCEDURE NAME: SetHdrTPAttCategory
9485 ==============================================================================*/
9486 PROCEDURE SetHdrTPAttCategory (
9487   		x_header_rec IN OUT NOCOPY RLM_INTERFACE_HEADERS%ROWTYPE) IS
9488 BEGIN
9489   --
9490   IF (l_debug <> -1) THEN
9491    rlm_core_sv.dpush(C_SDEBUG,'SetHdrTPAttCategory');
9492   END IF;
9493   --
9494   --x_header_rec.tp_attribute_category := NVL(x_header_rec.ece_tp_translator_code, x_header_rec.customer_ext);
9495   --
9496   IF (l_debug <> -1) THEN
9497    rlm_core_sv.dpop(C_SDEBUG);
9498   END IF;
9499   --
9500 EXCEPTION
9501      WHEN OTHERS THEN
9502         --
9503         IF (l_debug <> -1) THEN
9504    	  rlm_core_sv.dpop(C_SDEBUG,'EXCEPTION: '||SUBSTR(SQLERRM,1,200));
9505 	END IF;
9506 
9507 END SetHdrTPAttCategory;
9508 
9509 /*=============================================================================
9510   PROCEDURE NAME: SetLineTPAttCategory
9511 ==============================================================================*/
9512 PROCEDURE SetLineTPAttCategory (
9513   		x_header_rec IN OUT NOCOPY RLM_INTERFACE_HEADERS%ROWTYPE,
9514                 x_lines_rec  IN OUT NOCOPY RLM_INTERFACE_LINES%ROWTYPE,
9515                 x_group_rec  IN OUT NOCOPY RLM_VALIDATEDEMAND_SV.t_Group_rec) IS
9516 BEGIN
9517   --
9518   IF (l_debug <> -1) THEN
9519    rlm_core_sv.dpush(C_SDEBUG,'SetLineTPAttCategory');
9520   END IF;
9521   --
9522   --x_header_rec.tp_attribute_category := NVL(x_header_rec.ece_tp_translator_code, x_header_rec.customer_ext);
9523   --x_lines_rec.tp_attribute_category := NVL(x_header_rec.ece_tp_translator_code, x_header_rec.customer_ext);
9524   --
9525   IF (l_debug <> -1) THEN
9526    rlm_core_sv.dpop(C_SDEBUG);
9527   END IF;
9528   --
9529 EXCEPTION
9530      WHEN OTHERS THEN
9531         --
9532         IF (l_debug <> -1) THEN
9533    	  rlm_core_sv.dpop(C_SDEBUG,'EXCEPTION: '||SUBSTR(SQLERRM,1,200));
9534 	END IF;
9535 
9536 END SetLineTPAttCategory;
9537 
9538 /*===========================================================================
9539         FUNCTION NAME:  CustomerRelationship
9540 ===========================================================================*/
9541 
9542 FUNCTION CustomerRelationship(x_RelatedCustomerId IN NUMBER,
9543                               x_customer_id IN NUMBER,
9544                               x_header_id     IN NUMBER,
9545                               x_site_use_code IN VARCHAR2 DEFAULT 'BILL_TO')
9546 RETURN BOOLEAN
9547 IS
9548 
9549   v_Progress                    VARCHAR2(3) := '010';
9550   v_Temp                        VARCHAR2(10);
9551   v_parameter                   VARCHAR2(1);
9552   e_no_om_cr                    EXCEPTION;
9553 
9554 BEGIN
9555   IF (l_debug <> -1) THEN
9556      rlm_core_sv.dpush(C_SDEBUG,'CustomerRelationship');
9557      rlm_core_sv.dlog(C_DEBUG,'x_RelatedCustomerId',x_RelatedCustomerId);
9558      rlm_core_sv.dlog(C_DEBUG,'x_customer_id',x_customer_id);
9559      rlm_core_sv.dlog(C_DEBUG,'x_site_use_code',x_site_use_code);
9560   END IF;
9561   --
9562 
9563   IF x_RelatedCustomerId <> x_customer_id THEN
9564      --
9565      IF x_site_use_code = 'BILL_TO' THEN
9566        --
9567        rlm_core_sv.dlog(C_DEBUG,'x_site_use_code',x_site_use_code);
9568        --
9569        SELECT      'exists'
9570        INTO        v_Temp
9571        FROM        HZ_CUST_ACCT_RELATE
9572        WHERE       cust_account_id = x_customer_id
9573        AND         related_cust_account_id = x_RelatedCustomerId
9574        AND         bill_to_flag = 'Y'
9575        AND         status='A';
9576        --
9577      ELSE
9578        --
9579        SELECT      'exists'
9580        INTO        v_Temp
9581        FROM        HZ_CUST_ACCT_RELATE
9582        WHERE       cust_account_id = x_customer_id
9583        AND         related_cust_account_id = x_RelatedCustomerId
9584        AND         ship_to_flag = 'Y'
9585        AND         status='A';
9586        --
9587      END IF;
9588      --
9589      -- Use Customer relationship only if the OM profile option is set.
9590      --
9591      v_parameter := OE_Sys_Parameters.value('CUSTOMER_RELATIONSHIPS_FLAG',
9592                                               MO_GLOBAL.get_current_org_id);
9593      --
9594      IF (l_debug <> -1) THEN
9595            rlm_core_sv.dlog(C_DEBUG,'v_parameter',v_parameter);
9596      END IF;
9597      --
9598      IF NVL(v_parameter,'N') NOT IN ('Y','A')  THEN
9599         --
9600         raise e_no_om_cr;
9601         --
9602      END IF;
9603      --
9604   END IF;
9605   --
9606   IF (l_debug <> -1) THEN
9607      rlm_core_sv.dpop(C_SDEBUG);
9608   END IF;
9609   --
9610   RETURN(TRUE);
9611 
9612 EXCEPTION
9613   --
9614   WHEN NO_DATA_FOUND THEN
9615     --
9616     IF (l_debug <> -1) THEN
9617        rlm_core_sv.dlog(C_DEBUG,'NO_DATA_FOUND');
9618     END IF;
9619     --
9620     rlm_message_sv.app_error(
9621                               x_ExceptionLevel => rlm_message_sv.k_error_level,
9622                               x_MessageName => 'RLM_CUSTOMER_RELATIONSHIP',
9623                               x_InterfaceHeaderId => x_header_id,
9624                               x_token1=>'CUSTOMER1',
9625                               x_value1 => rlm_core_sv.get_customer_name(x_RelatedCustomerId),
9626                               x_token2=>'CUSTOMER2',
9627                               x_value2 => rlm_core_sv.get_customer_name(x_customer_id)
9628                              );
9629     --
9630     IF (l_debug <> -1) THEN
9631        rlm_core_sv.dpop(C_SDEBUG,'EXCEPTION: RLM_CUSTOMER_RELATIONSHIP');
9632     END IF;
9633     --
9634     RETURN(FALSE);
9635     --
9636   WHEN e_no_om_cr THEN
9637     --
9638     rlm_message_sv.app_error(x_ExceptionLevel => rlm_message_sv.k_error_level,
9639                              x_MessageName => 'RLM_OM_CUSTOMER_RELATIONSHIP',
9640                              x_InterfaceHeaderId => x_header_id);
9641     --
9642     IF (l_debug <> -1) THEN
9643       rlm_core_sv.dlog(C_DEBUG,'e_no_om_cr');
9644        rlm_core_sv.dpop(C_SDEBUG,'EXCEPTION: RLM_OM_CUSTOMER_RELATIONSHIP');
9645     END IF;
9646     --
9647     RETURN(FALSE);
9648     --
9649   WHEN OTHERS THEN
9650     --
9651     rlm_message_sv.sql_error('RLM_VALIDATEDEMAND_SV.CustomerRelationship',
9652                              v_Progress);
9653     --
9654     IF (l_debug <> -1) THEN
9655        rlm_core_sv.dlog (C_DEBUG,'SQL Error: ',substr(sqlerrm,1,300));
9656        rlm_core_sv.dlog(C_DEBUG,'progress',v_Progress);
9657        rlm_core_sv.dpop(C_SDEBUG,'EXCEPTION: OTHER - sql error');
9658     END IF;
9659     --
9660     raise;
9661     --
9662 END CustomerRelationship;
9663 
9664 
9665 /*===========================================================================
9666 
9667         PROCEDURE NAME:  ValidateDateTypeATP
9668 
9669 ===========================================================================*/
9670 PROCEDURE ValidateDateTypeATP(
9671           x_line      IN RLM_INTERFACE_LINES%ROWTYPE)
9672 IS
9673  --global_atp
9674  v_order_date_type_code    VARCHAR2(30);
9675  v_order_number            NUMBER;
9676 BEGIN
9677  --
9678  IF (l_debug <> -1) THEN
9679     rlm_core_sv.dpush(C_SDEBUG, 'ValidateDateTypeATP');
9680  END IF;
9681  --
9682  IF RLM_MANAGE_DEMAND_SV.IsATPItem(x_line.ship_from_org_id,
9683                                    x_line.inventory_item_id) THEN
9684 
9685    IF x_line.item_detail_type IN ('0','1','2') THEN
9686       --
9687       BEGIN
9688         SELECT DECODE(order_date_type_code, 'ARRIVAL', 'DELIVER', 'SHIP'),
9689                order_number
9690         INTO   v_order_date_type_code, v_order_number
9691         FROM   oe_order_headers_all
9692         WHERE  header_id = x_line.order_header_id;
9693       EXCEPTION
9694         WHEN NO_DATA_FOUND THEN
9695           RAISE;
9696         WHEN OTHERS THEN
9697           RAISE;
9698       END;
9699       --
9700       IF (l_debug <> -1) THEN
9701          rlm_core_sv.dlog(C_DEBUG, 'OM Date Type', v_order_date_type_code);
9702          rlm_core_sv.dlog(C_DEBUG, 'RLM Date Type', x_line.date_type_code);
9703       END IF;
9704       --
9705       IF v_order_date_type_code <> x_line.date_type_code THEN
9706         --
9707         IF (l_debug <> -1) THEN
9708            rlm_core_sv.dlog(C_DEBUG, 'RLM line date type does not match OM date type');
9709         END IF;
9710         --
9711         rlm_message_sv.app_error(
9712                 x_ExceptionLevel => rlm_message_sv.k_warn_level,
9713                 x_MessageName => 'RLM_MISMATCH_DATE_TYPE',
9714                 x_InterfaceHeaderId => x_line.header_id,
9715                 x_InterfaceLineId => x_line.line_id,
9716                 x_token1=> 'RLM_DATE_TYPE',
9717                 x_value1=> rlm_core_sv.get_lookup_meaning(
9718                              'RLM_DATE_TYPE_CODE',
9719                              x_line.date_type_code),
9720                 x_token2=> 'OM_DATE_TYPE',
9721                 x_value2=> OE_Id_To_Value.Order_Date_Type(v_order_date_type_code),
9722                 x_token3=> 'ORDER',
9723                 x_value3=> TO_CHAR(v_order_number),
9724                 x_token4=> 'SF',
9725                 x_value4=> rlm_core_sv.get_ship_from(x_line.ship_from_org_id),
9726                 x_token5=> 'ST',
9727                 x_value5=> rlm_core_sv.get_ship_to(x_line.ship_to_address_id),
9728                 x_token6=> 'CI',
9729                 x_value6=> rlm_core_sv.get_item_number(x_line.customer_item_id));
9730 
9731                 g_warned := TRUE;
9732           --
9733       END IF;
9734       --
9735    END IF;
9736    --
9737  END IF;
9738  --
9739  IF (l_debug <> -1) THEN
9740     rlm_core_sv.dpop(C_SDEBUG);
9741  END IF;
9742  --
9743 EXCEPTION
9744   WHEN NO_DATA_FOUND THEN
9745      --
9746      IF (l_debug <> -1) THEN
9747         rlm_core_sv.dpop(C_SDEBUG, 'No sales order found');
9748      END IF;
9749 
9750   WHEN OTHERS THEN
9751      --
9752      IF (l_debug <> -1) THEN
9753         rlm_core_sv.dpop(C_SDEBUG,'EXCEPTION: '||SUBSTR(SQLERRM,1,200));
9754      END IF;
9755 
9756 END ValidateDateTypeATP;
9757 
9758 
9759 --
9760 -- Blanket Order Procedures
9761 --
9762 /*=======================================================================================
9763 
9764   PROCEDURE DeriveBlanketPO
9765 
9766 ========================================================================================*/
9767 PROCEDURE DeriveBlanketPO(x_cust_po_num	    IN RLM_INTERFACE_LINES.cust_po_number%TYPE,
9768 			  x_Group_rec       IN t_Group_rec,
9769 			  x_header_id	    IN RLM_INTERFACE_HEADERS.HEADER_ID%TYPE)
9770 IS
9771  --
9772  v_blanket_po	VARCHAR2(240);
9773  v_blanket_num   NUMBER;
9774  e_POMisMatch	EXCEPTION;
9775  --
9776 BEGIN
9777   --
9778   IF (l_debug <> -1) THEN
9779     rlm_core_sv.dpush(C_SDEBUG, 'DeriveBlanketPO');
9780   END IF;
9781   --
9782   SELECT cust_po_number
9783   INTO v_blanket_po
9784   FROM oe_blanket_headers
9785   WHERE order_number = x_Group_rec.setup_terms_rec.blanket_number;
9786   --
9787   IF (l_debug <> -1) THEN
9788     rlm_core_sv.dlog(C_DEBUG, 'Blanket Number', x_Group_rec.setup_terms_rec.blanket_number);
9789     rlm_core_sv.dlog(C_DEBUG, 'Blanket PO number', v_blanket_po);
9790     rlm_core_sv.dlog(C_DEBUG, 'Schedule PO', x_cust_po_num);
9791   END IF;
9792   --
9793   IF (x_cust_po_num IS NOT NULL AND v_blanket_po IS NOT NULL) THEN
9794    --
9795     IF (v_blanket_po <> x_cust_po_num) THEN
9796      --
9797      RAISE e_POMisMatch;
9798      --
9799     END IF;
9800     --
9801   END IF;
9802   --
9803   IF (l_debug <> -1) THEN
9804     rlm_core_sv.dpop(C_SDEBUG);
9805   END IF;
9806   --
9807   EXCEPTION
9808    --
9809    WHEN e_POMisMatch THEN
9810     --
9811     rlm_message_sv.app_error(
9812            x_ExceptionLevel => rlm_message_sv.k_warn_level,
9813            x_MessageName => 'RLM_BLKT_PO_MISMATCH',
9814            x_InterfaceHeaderId => x_header_id,
9815            x_token1=>'SCHED_PO',
9816            x_value1=>x_cust_po_num,
9817            x_token2=>'BLKT_PO',
9818            x_value2=>v_blanket_po,
9819            x_ValidationType => 'PURCHASE_ORDER');
9820     --
9821     IF (l_debug <> -1) THEN
9822       rlm_core_sv.dlog(C_DEBUG, 'WARNING: Mismatch between PO on schedule and blanket order');
9823       rlm_core_sv.dpop(C_SDEBUG, 'RLM_BLKT_PO_MISMATCH');
9824     END IF;
9825     --
9826    WHEN NO_DATA_FOUND THEN
9827     --
9828     rlm_message_sv.app_error(
9829            x_ExceptionLevel => rlm_message_sv.k_warn_level,
9830            x_MessageName => 'RLM_BLANKET_UNDEFINED',
9831            x_InterfaceHeaderId => x_header_id,
9832            x_token1=>'BLANKET_NUM',
9833            x_value1=>x_Group_rec.setup_terms_rec.blanket_number,
9834            x_ValidationType => 'PURCHASE_ORDER');
9835     --
9836     IF (l_debug <> -1) THEN
9837       rlm_core_sv.dlog(C_DEBUG, 'Blanket Order not defined');
9838       rlm_core_sv.dpop(C_SDEBUG, 'RLM_BLANKET_UNDEFINED');
9839     END IF;
9840     --
9841    WHEN OTHERS THEN
9842     --
9843     IF (l_debug <> -1) THEN
9844       rlm_core_sv.dlog(C_DEBUG, 'when others of DeriveBlanketPO');
9845       rlm_core_sv.dpop(C_SDEBUG, 'EXCEPTION: '||SUBSTR(SQLERRM,1,200));
9846     END IF;
9847     --
9848     RAISE;
9849     --
9850 END DeriveBlanketPO;
9851 
9852 
9853 /*===========================================================================
9854 
9855   FUNCTION ValidateBlanket
9856 
9857 ===========================================================================*/
9858 FUNCTION ValidateBlanket(x_Group_rec IN t_Group_rec,
9859 			 x_Sched_rec IN RLM_INTERFACE_HEADERS%ROWTYPE)
9860 RETURN BOOLEAN
9861 IS
9862   --
9863   l_reqdate		DATE;
9864   h_reqdate		DATE;
9865   v_startdate		DATE;
9866   v_enddate		DATE;
9867   v_onholdflag    	VARCHAR2(1);
9868   e_BlktStartDate	EXCEPTION;
9869   e_BlktEndDate		EXCEPTION;
9870   e_BlktOnHold		EXCEPTION;
9871   --
9872 BEGIN
9873   --
9874   IF (l_debug <> -1) THEN
9875     rlm_core_sv.dpush(C_SDEBUG, 'ValidateBlanket');
9876     rlm_core_sv.dlog(C_DEBUG, 'Header_id', x_Sched_rec.header_id);
9877     rlm_core_sv.dlog(C_DEBUG, 'Schedule source', x_Sched_rec.schedule_source);
9878     rlm_core_sv.dlog(C_DEBUG, 'Schedule Type', x_Sched_rec.schedule_type);
9879   END IF;
9880   --
9881   IF x_Sched_rec.schedule_type <> 'SEQUENCED' THEN
9882    --
9883    IF (l_debug <> -1) THEN
9884     rlm_core_sv.dlog(C_DEBUG, 'Non-sequenced schedule');
9885     rlm_core_sv.dlog(C_DEBUG, 'Schedule Item Number', x_Group_rec.schedule_item_num);
9886    END IF;
9887    --
9888    SELECT MIN(start_date_time), MAX(start_date_time)
9889    INTO l_reqdate, h_reqdate
9890    FROM rlm_interface_lines
9891    WHERE header_id = x_Sched_rec.header_id AND
9892    schedule_item_num = x_Group_rec.schedule_item_num AND
9893    item_detail_type IN (k_FIRM, k_FORECAST, k_PAST_DUE_FIRM);
9894    --
9895   ELSE
9896    --
9897    IF x_Sched_rec.schedule_source <> 'MANUAL' THEN
9898     --
9899     IF (l_debug <> -1) THEN
9900      rlm_core_sv.dlog(C_DEBUG, 'EDI Sequenced Schedule');
9901      rlm_core_sv.dlog(C_DEBUG, 'x_Group_rec.cust_ship_from_org_ext', x_Group_rec.cust_ship_from_org_ext);
9902      rlm_core_sv.dlog(C_DEBUG, 'x_Group_rec.cust_ship_to_ext', x_Group_rec.cust_ship_to_ext);
9903      rlm_core_sv.dlog(C_DEBUG, 'x_Group_rec.customer_item_ext', x_Group_rec.customer_item_ext);
9904     END IF;
9905     --
9906     SELECT MIN(start_date_time), MAX(start_date_time)
9907     INTO l_reqdate, h_reqdate
9908     FROM rlm_interface_lines
9909     WHERE header_id = x_Sched_rec.header_id AND
9910     cust_ship_from_org_ext = x_Group_rec.cust_ship_from_org_ext AND
9911     cust_ship_to_ext = x_Group_rec.cust_ship_to_ext AND
9912     customer_item_ext = x_Group_rec.customer_item_ext AND
9913     item_detail_type IN (k_FIRM, k_FORECAST, k_PAST_DUE_FIRM);
9914     --
9915    ELSE
9916     --
9917     IF (l_debug <> -1) THEN
9918      rlm_core_sv.dlog(C_DEBUG, 'Manual Sequenced Schedule');
9919      rlm_core_sv.dlog(C_DEBUG, 'x_Group_rec.ship_from_org_id', x_Group_rec.ship_from_org_id);
9920      rlm_core_sv.dlog(C_DEBUG, 'x_Group_rec.ship_to_address_id', x_Group_rec.ship_to_address_id);
9921      rlm_core_sv.dlog(C_DEBUG, 'x_Group_rec.customer_item_id', x_Group_rec.customer_item_id);
9922     END IF;
9923     --
9924     SELECT MIN(start_date_time), MAX(start_date_time)
9925     INTO l_reqdate, h_reqdate
9926     FROM rlm_interface_lines
9927     WHERE header_id = x_Sched_rec.header_id AND
9928     ship_from_org_id = x_Group_rec.ship_from_org_id AND
9929     ship_to_address_id = x_Group_rec.ship_to_address_id AND
9930     customer_item_id = x_Group_rec.customer_item_id AND
9931     item_detail_type IN (k_FIRM, k_FORECAST, k_PAST_DUE_FIRM);
9932     --
9933     END IF;
9934     --
9935   END IF;
9936   --
9937   IF (l_debug <> -1) THEN
9938     rlm_core_sv.dlog(C_DEBUG, 'Lowest request date in current group',  l_reqdate);
9939     rlm_core_sv.dlog(C_DEBUG, 'Highest request date in current group', h_reqdate);
9940   END IF;
9941   --
9942   SELECT start_date_active, end_date_active, on_hold_flag
9943   INTO v_startdate, v_enddate, v_onholdflag
9944   FROM oe_blanket_headers_ext
9945   WHERE order_number = x_Group_rec.setup_terms_rec.blanket_number;
9946   --
9947   IF (l_debug <> -1) THEN
9948     rlm_core_sv.dlog(C_DEBUG, 'Blanket Number',x_Group_rec.setup_terms_rec.blanket_number);
9949     rlm_core_sv.dlog(C_DEBUG, 'Blanket Effectivity Start Date', v_startdate);
9950     rlm_core_sv.dlog(C_DEBUG, 'Blanket Effectivity End Date', v_enddate);
9951     rlm_core_sv.dlog(C_DEBUG, 'On Hold Flag', v_onholdflag);
9952   END IF;
9953   --
9954   IF v_onholdflag = 'Y' THEN
9955    --
9956    RAISE e_BlktOnHold;
9957    --
9958   END IF;
9959   --
9960   IF (l_reqdate < v_startdate) THEN
9961    --
9962    RAISE e_BlktStartDate;
9963    --
9964   END IF;
9965   --
9966   IF (v_enddate is NOT NULL)  THEN
9967    --
9968    IF (h_reqdate > v_enddate) THEN
9969     --
9970     RAISE e_BlktEndDate;
9971     --
9972    END IF;
9973    --
9974   END IF;
9975   --
9976   IF (l_debug <> -1) THEN
9977     rlm_core_sv.dpop(C_SDEBUG, 'TRUE');
9978   END IF;
9979   --
9980   RETURN TRUE;
9981   --
9982   EXCEPTION
9983    --
9984    WHEN e_BlktOnHold THEN
9985     --
9986     rlm_message_sv.app_error(
9987            x_ExceptionLevel => rlm_message_sv.k_error_level,
9988            x_MessageName => 'RLM_BLANKET_ON_HOLD',
9989            x_InterfaceHeaderId => x_Sched_rec.header_id,
9990            x_InterfaceLineId => NULL,
9991 	   x_token1=>'BLANKET_NUMBER',
9992 	   x_value1=>x_Group_rec.setup_terms_rec.blanket_number);
9993      --
9994      IF (l_debug <> -1) THEN
9995        rlm_core_sv.dlog(C_DEBUG, 'Blanket Order on hold');
9996        rlm_core_sv.dpop(C_SDEBUG, 'FALSE');
9997      END IF;
9998      --
9999      RETURN FALSE;
10000      --
10001    WHEN e_BlktStartDate THEN
10002     --
10003     rlm_message_sv.app_error(
10004            x_ExceptionLevel => rlm_message_sv.k_error_level,
10005            x_MessageName => 'RLM_STARTDATE_BEFORE_BLANKET',
10006            x_InterfaceHeaderId => x_Sched_rec.header_id,
10007            x_InterfaceLineId => NULL,
10008            x_token1=>'REQDATE',
10009            x_value1=>to_char(l_reqdate, 'MM/DD/YYYY HH24:MI:SS'),
10010            x_token2=>'BLKT_START_DATE',
10011            x_value2=>to_char(v_startdate, 'MM/DD/YYYY HH24:MI:SS'),
10012 	   x_token3=>'BLANKET_NUM',
10013 	   x_value3=>x_Group_rec.setup_terms_rec.blanket_number);
10014      --
10015      IF (l_debug <> -1) THEN
10016        rlm_core_sv.dlog(C_DEBUG, 'Lowest request date before effectivity start');
10017        rlm_core_sv.dpop(C_SDEBUG, 'FALSE');
10018      END IF;
10019      --
10020      RETURN FALSE;
10021      --
10022    WHEN e_BlktEndDate   THEN
10023     --
10024     rlm_message_sv.app_error(
10025            x_ExceptionLevel => rlm_message_sv.k_error_level,
10026            x_MessageName => 'RLM_ENDDATE_AFTER_BLANKET',
10027            x_InterfaceHeaderId => x_Sched_rec.header_id,
10028            x_InterfaceLineId => NULL,
10029            x_token1=>'REQDATE',
10030            x_value1=>to_char(h_reqdate, 'MM/DD/YYYY HH24:MI:SS'),
10031            x_token2=>'BLKT_END_DATE',
10032            x_value2=>to_char(v_enddate, 'MM/DD/YYYY HH24:MI:SS'),
10033 	   x_token3=>'BLANKET_NUM',
10034 	   x_value3=>x_Group_rec.setup_terms_rec.blanket_number);
10035      --
10036      IF (l_debug <> -1) THEN
10037        rlm_core_sv.dlog(C_DEBUG, 'Highest request date after effectivity start');
10038        rlm_core_sv.dpop(C_SDEBUG, 'FALSE');
10039      END IF;
10040      --
10041      RETURN FALSE;
10042      --
10043    WHEN NO_DATA_FOUND THEN
10044     --
10045     rlm_message_sv.app_error(
10046            x_ExceptionLevel => rlm_message_sv.k_warn_level,
10047            x_MessageName => 'RLM_BLANKET_UNDEFINED',
10048            x_InterfaceHeaderId => x_Sched_rec.header_id,
10049            x_token1=>'BLANKET_NUM',
10050            x_value1=>x_Group_rec.setup_terms_rec.blanket_number);
10051     --
10052     IF (l_debug <> -1) THEN
10053       rlm_core_sv.dlog(C_DEBUG, 'Blanket Order not defined');
10054       rlm_core_sv.dpop(C_SDEBUG, 'FALSE');
10055     END IF;
10056     --
10057     RETURN FALSE;
10058     --
10059  WHEN OTHERS THEN
10060    --
10061    IF (l_debug <> -1) THEN
10062      rlm_core_sv.dlog(C_DEBUG, 'When others of ValidateBlanket');
10063      rlm_core_sv.dlog(C_DEBUG, 'EXCEPTION: '||SUBSTR(SQLERRM,1,200));
10064      rlm_core_sv.dpop(C_SDEBUG, 'FALSE');
10065    END IF;
10066    --
10067    RETURN FALSE;
10068 
10069 END ValidateBlanket;
10070 
10071 -- End of package
10072 END RLM_VALIDATEDEMAND_SV;