DBA Data[Home] [Help]

PACKAGE BODY: APPS.RLM_VALIDATEDEMAND_SV

Source


1 PACKAGE BODY RLM_VALIDATEDEMAND_SV as
2 /* $Header: RLMDPVDB.pls 120.15.12010000.3 2009/08/07 09:27:30 sunilku 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        CURSOR c_IntrmdShipToID_ext IS  --Added cursor as part of Bugfix 8672453
6021          SELECT ACCT_SITE.CUST_ACCT_SITE_ID,
6022                 ACCT_SITE.STATUS, SITE_USES.STATUS,
6023                 SITE_USES.site_use_id
6024          FROM   HZ_CUST_ACCT_SITES	ACCT_SITE,
6025                 HZ_CUST_SITE_USES_ALL    SITE_USES
6026          WHERE  acct_site.ece_tp_location_code =
6027                 x_lines_rec.cust_intrmd_ship_to_ext
6028          AND    acct_site.cust_acct_site_id = site_uses.cust_acct_site_id
6029          AND    site_uses.site_use_code = 'SHIP_TO'
6030          AND    acct_site.org_id = site_uses.org_id
6031          AND    cust_account_id IN
6032                  (SELECT to_number(x_header_rec.customer_id) from dual
6033                  UNION
6034                  SELECT cust_account_id
6035                  FROM hz_cust_acct_relate_all
6036                  WHERE related_cust_account_id = x_header_rec.customer_id
6037                  AND ship_to_flag = 'Y'
6038                  AND status = 'A'
6039                  AND org_id = x_header_rec.org_id
6040                  AND oe_sys_parameters.value('CUSTOMER_RELATIONSHIPS_FLAG') IN ('Y', 'A'))
6041         ORDER BY site_uses.status; --To query first Active and then Inactive records
6042 
6043        CURSOR c_IntrmdShipToID IS  --Added cursor as part of Bugfix 8672453
6044          SELECT hcas.status, cust_account_id, hcsu.status,
6045                  hcsu.site_use_id
6046           FROM   hz_cust_acct_sites_all hcas, hz_cust_site_uses_all hcsu
6047           WHERE  hcas.cust_acct_site_id = x_lines_rec.intrmd_ship_to_id
6048           AND    hcas.cust_acct_site_id = hcsu.cust_acct_site_id
6049           AND    hcsu.site_use_code = 'SHIP_TO'
6050           AND    hcas.org_id = hcsu.org_id
6051         ORDER BY hcsu.status; --To query first Active and then Inactive records
6052 
6053   v_progress            VARCHAR2(3) := '010';
6054   v_int_shp_to_cust_id     NUMBER;
6055   e_InvalidIntmdShipTo     EXCEPTION;
6056   e_invalidIntmdShiptoId   EXCEPTION;
6057   e_InactiveIntmdShipTo    EXCEPTION;
6058   e_IntrmdSiteUseInv       EXCEPTION;
6059   e_InactiveIntShipSiteUse EXCEPTION;
6060   e_InactiveIntShipTo      EXCEPTION;
6061   v_addStatus              VARCHAR2(1) := 'I';
6062   v_siteUseStatus          VARCHAR2(1) := 'I';
6063   --
6064 BEGIN
6065   --
6066   IF (l_debug <> -1) THEN
6067      rlm_core_sv.dpush(C_SDEBUG,'DeriveIntrmdShipToID');
6068      rlm_core_sv.dlog(C_DEBUG,'Cust_Intrmd_Ship_To_Ext',
6069                                         x_lines_rec.cust_intrmd_ship_to_ext);
6070      rlm_core_sv.dlog(C_DEBUG,'IntrmdShipToID',x_lines_rec.intrmd_ship_to_id);
6071   END IF;
6072   --
6073 --  IF rlm_message_sv.check_dependency('SHIPTO') THEN
6074     --
6075     IF x_lines_rec.intrmd_ship_to_id IS NULL AND
6076        x_lines_rec.cust_intrmd_ship_to_ext IS NOT NULL THEN
6077        --{
6078        v_progress := '020';
6079        --
6080        IF (l_debug <> -1) THEN
6081           rlm_core_sv.dlog(C_DEBUG,'cust_intrmd_ship_to_ext ',
6082                  x_lines_rec.cust_intrmd_ship_to_ext);
6083        END IF;
6084        --
6085        BEGIN
6086        --
6087        -- Following query is changed as per TCA obsolescence project.
6088        -- R12 Perf Bug 4129291 : Use HCSU also in query below
6089        --Bugfix 8672453 Start
6090         OPEN c_IntrmdShipToID_ext;
6091         --
6092         FETCH c_IntrmdShipToID_ext INTO x_lines_rec.intrmd_ship_to_id,
6093                                         v_addStatus,v_siteUseStatus,
6094                                         x_lines_rec.intrmd_st_site_use_id;
6095         --
6096         IF c_IntrmdShipToID_ext%NOTFOUND THEN
6097           --
6098           IF (l_debug <> -1) THEN
6099              rlm_core_sv.dlog(C_DEBUG,'No Intermediate ShipTo Locations found');
6100           END IF;
6101           raise NO_DATA_FOUND;
6102           --
6103         END IF;
6104         --
6105         CLOSE c_IntrmdShipToID_ext;
6106         --Bugfix 8672453 End
6107         --
6108         IF (l_debug <> -1) THEN
6109            rlm_core_sv.dlog(C_DEBUG, 'intrmd_ship_to_id ', x_lines_rec.intrmd_ship_to_id);
6110            rlm_core_sv.dlog(C_DEBUG, 'Intrmd ST Site Use ID', x_lines_rec.intrmd_st_site_use_id);
6111            rlm_core_sv.dlog(C_DEBUG, 'Address Status', v_addStatus);
6112            rlm_core_sv.dlog(C_DEBUG, 'Site Use Status', v_siteUseStatus);
6113         END IF;
6114         --
6115        END;
6116        --
6117        IF v_addStatus = 'I' THEN
6118          raise e_InactiveIntShipTo;
6119        END IF;
6120        --
6121        IF v_siteUseStatus = 'I' THEN
6122          RAISE e_InactiveIntShipSiteUse;
6123        END IF;
6124        --}
6125     ELSIF x_lines_rec.intrmd_ship_to_id IS NOT NULL THEN
6126        --intrmd_ship_to_address_id is not null
6127        --{
6128        BEGIN
6129           --
6130           -- Following query is changed as per TCA obsolescence project.
6131           -- R12 Perf. Bug 4129291 : Use HCSU in query below
6132           --
6133         --Bugfix 8672453 Start
6134         OPEN c_IntrmdShipToID;
6135         --
6136         FETCH c_IntrmdShipToID INTO v_addStatus,
6137                                     v_int_shp_to_cust_id, v_siteUseStatus,
6138                                     x_lines_rec.intrmd_st_site_use_id;
6139         --
6140         IF c_IntrmdShipToID%NOTFOUND THEN
6141           --
6142           IF (l_debug <> -1) THEN
6143              rlm_core_sv.dlog(C_DEBUG,'Invalid Intermediate ShipTo Location');
6144           END IF;
6145           raise e_InvalidIntmdShipto;
6146           --
6147         END IF;
6148         --
6149         CLOSE c_IntrmdShipToID;
6150         --Bugfix 8672453 End
6151 
6152         --
6153         IF (l_debug <> -1) THEN
6154            rlm_core_sv.dlog(C_DEBUG, 'intermdiate ship-to customer id', v_int_shp_to_cust_id);
6155            rlm_core_sv.dlog(C_DEBUG,'customer_id', x_header_rec.customer_id);
6156            rlm_core_sv.dlog(C_DEBUG, 'Intrmd ST Site Use ID', x_lines_rec.intrmd_st_site_use_id);
6157            rlm_core_sv.dlog(C_DEBUG, 'Address Status', v_addStatus);
6158            rlm_core_sv.dlog(C_DEBUG, 'Site Use Status', v_siteUseStatus);
6159         END IF;
6160         --
6161         IF v_addStatus = 'I' THEN
6162            raise e_InactiveIntmdShipTo;
6163         END IF;
6164         --
6165         IF v_siteUseStatus = 'I' THEN
6166            RAISE e_InactiveIntShipSiteUse;
6167         END IF;
6168         --
6169         IF NOT CustomerRelationship(x_header_rec.customer_id,
6170                                     v_int_shp_to_cust_id,
6171                                     x_header_rec.header_id,
6172                                     'SHIP_TO') THEN
6173             --
6174             IF (l_debug <> -1) THEN
6175                rlm_core_sv.dlog(C_DEBUG,'Invalid customer relationship');
6176             END IF;
6177             --
6178             raise e_invalidIntmdShiptoId;
6179             --
6180         END IF;
6181         --
6182        END;
6183        --}
6184     END IF;
6185     --
6186     x_lines_rec.INTMED_SHIP_TO_ORG_ID := x_lines_rec.intrmd_st_site_use_id;
6187     --
6188     /*
6189      * R12 Perf Bug 4129291
6190      * We do not need this segment of code below since the status
6191      * of site use record is included in queries above
6192      *
6193     IF x_lines_rec.intrmd_ship_to_id IS NOT NULL THEN
6194       --{
6195       BEGIN
6196          --
6197          -- Following query is changed as per TCA obsolescence project.
6198          SELECT site_use_id ,
6199                 status
6200          INTO   x_lines_rec.intrmd_st_site_use_id,
6201                 v_status
6202          FROM   HZ_CUST_SITE_USES
6203          WHERE  CUST_ACCT_SITE_ID = x_lines_rec.INTRMD_SHIP_TO_ID
6204          AND    site_use_code = 'SHIP_TO';
6205          --
6206   	 IF (l_debug <> -1) THEN
6207             rlm_core_sv.dlog(C_DEBUG,'intrmd_st_site_use_id ',
6208                                 x_lines_rec.intrmd_st_site_use_id);
6209             rlm_core_sv.dlog(C_DEBUG,'intrmd_site_use_id status', v_status);
6210          END IF;
6211          --
6212          x_lines_rec.INTMED_SHIP_TO_ORG_ID := x_lines_rec.intrmd_st_site_use_id;
6213          v_progress := '030';
6214          --
6215          IF v_status = 'I' THEN
6216             raise e_InactiveIntShipSiteUse;
6217          END IF;
6218          --
6219       EXCEPTION
6220          --
6221          WHEN NO_DATA_FOUND THEN
6222             raise e_IntrmdSiteUseInv;
6223       END;
6224       --}
6225     END IF;
6226     */
6227     --
6228 --  END IF;
6229   --
6230   IF (l_debug <> -1) THEN
6231      rlm_core_sv.dpop(C_SDEBUG);
6232   END IF;
6233   --
6234 EXCEPTION
6235   --
6236   WHEN NO_DATA_FOUND THEN
6237     --
6238     x_lines_rec.process_status := rlm_core_sv.k_PS_ERROR;
6239     rlm_message_sv.app_error(
6240                 x_ExceptionLevel => rlm_message_sv.k_error_level,
6241                 x_MessageName => 'RLM_INTRMD_SHIPTO_ID_INVALID',
6242                 x_InterfaceHeaderId => x_lines_rec.header_id,
6243                 x_InterfaceLineId => x_lines_rec.line_id,
6244                 x_token1=>'INTRMD_SHIP_TO_EXT',
6245                 x_value1=>x_lines_rec.cust_intrmd_ship_to_ext,
6246                 x_ValidationType => 'INTRMD_SHIP_TO');
6247     --
6248     IF (l_debug <> -1) THEN
6249        rlm_core_sv.dlog(C_DEBUG,'progress',v_Progress);
6250        rlm_core_sv.dpop(C_SDEBUG,'EXCEPTION: RLM_INTRMD_SHIPTO_ID_INVALID');
6251     END IF;
6252     --
6253   WHEN e_invalidIntmdShiptoId THEN
6254     --
6255     x_lines_rec.process_status := rlm_core_sv.k_PS_ERROR;
6256     --
6257     IF (l_debug <> -1) THEN
6258        rlm_core_sv.dlog(C_DEBUG,'progress',v_Progress);
6259        rlm_core_sv.dpop(C_SDEBUG,'EXCEPTION: RLM_INTRMD_SHIP_TO_ID_RELATED');
6260     END IF;
6261     --
6262   WHEN e_IntrmdSiteUseInv THEN
6263     -- Warning
6264     rlm_message_sv.app_error(
6265                 x_ExceptionLevel => rlm_message_sv.k_warn_level,
6266                 x_MessageName => 'RLM_INTRMD_SHIPTO_SITEUSE',
6267                 x_InterfaceHeaderId => x_lines_rec.header_id,
6268                 x_InterfaceLineId => x_lines_rec.line_id,
6269                 x_token1=>'INTRMD_SHIP_TO_EXT',
6270                 x_value1=>x_lines_rec.cust_intrmd_ship_to_ext,
6271                 x_ValidationType => 'INTRMD_SHIP_TO');
6272     --
6273     IF (l_debug <> -1) THEN
6274        rlm_core_sv.dlog(C_DEBUG,'progress',v_Progress);
6275        rlm_core_sv.dpop(C_SDEBUG,'WARNING: RLM_INTRMD_SHIPTO_SITEUSE');
6276     END IF;
6277     --
6278   WHEN e_InactiveIntShipTo THEN
6279     -- Warning
6280     rlm_message_sv.app_error(
6281             x_ExceptionLevel => rlm_message_sv.k_warn_level,
6282             x_MessageName => 'RLM_INTSHIP_INACTIVE',
6283             x_InterfaceHeaderId => x_lines_rec.header_id,
6284             x_InterfaceLineId => x_lines_rec.line_id,
6285             x_token1=>'INTRMD_SHIP_TO_EXT',
6286             x_value1=>x_lines_rec.cust_intrmd_ship_to_ext,
6287             x_ValidationType => 'INTRMD_SHIP_TO');
6288     --
6289     IF (l_debug <> -1) THEN
6290        rlm_core_sv.dlog(C_DEBUG,'progress',v_Progress);
6291        rlm_core_sv.dpop(C_SDEBUG,'WARNING: RLM_INTSHIP_INACTIVE');
6292     END IF;
6293     --
6294   WHEN e_InactiveIntShipSiteUse THEN
6295     -- Warning
6296     rlm_message_sv.app_error(
6297             x_ExceptionLevel => rlm_message_sv.k_warn_level,
6298             x_MessageName => 'RLM_INTSHIP_SITE_USE_INACTIVE',
6299             x_InterfaceHeaderId => x_lines_rec.header_id,
6300             x_InterfaceLineId => x_lines_rec.line_id,
6301             x_token1=>'INTRMD_SHIP_TO_EXT',
6302             x_value1=>x_lines_rec.cust_intrmd_ship_to_ext,
6303             x_ValidationType => 'INTRMD_SHIP_TO');
6304     --
6305     IF (l_debug <> -1) THEN
6306        rlm_core_sv.dlog(C_DEBUG,'progress',v_Progress);
6307        rlm_core_sv.dpop(C_SDEBUG,'WARNING: RLM_INTSHIP_SITE_USE_INACTIVE');
6308     END IF;
6309     --
6310   WHEN OTHERS THEN
6311     --
6312     x_lines_rec.process_status := rlm_core_sv.k_PS_ERROR;
6313     rlm_message_sv.sql_error('rlm_validatedemand_sv.DeriveIntrmdShipToID',
6314                                                              v_Progress);
6315     --
6316     IF (l_debug <> -1) THEN
6317        rlm_core_sv.dpop(C_SDEBUG,'EXCEPTION: '||SUBSTR(SQLERRM,1,200));
6318     END IF;
6319     --
6320     raise;
6321     --
6322 END DeriveIntrmdShipToID;
6323 
6324 /*===========================================================================
6325 
6326 	PROCEDURE NAME:  DeriveBillToID
6327 
6328 ===========================================================================*/
6329 PROCEDURE DeriveBillToID(x_header_rec IN RLM_INTERFACE_HEADERS%ROWTYPE,
6330                          x_lines_rec IN OUT NOCOPY RLM_INTERFACE_LINES%ROWTYPE,
6331                          x_cum_org_level_code IN rlm_cust_shipto_terms.cum_org_level_code%TYPE)
6332 IS
6333   --
6334        CURSOR c_BillToID_ext IS  --Added cursor as part of Bugfix 8672453
6335            SELECT    ACCT_SITE.CUST_ACCT_SITE_ID,
6336                      ACCT_SITE.STATUS, SITE_USE.STATUS,
6337                      SITE_USE.site_use_id
6338            FROM      HZ_CUST_ACCT_SITES ACCT_SITE, HZ_CUST_SITE_USES_ALL SITE_USE
6339            WHERE     acct_site.ece_tp_location_code = x_lines_rec.cust_bill_to_ext
6340            AND       ACCT_SITE.CUST_ACCOUNT_ID = x_header_rec.customer_id
6341            AND       site_use_code = 'BILL_TO'
6342            AND       ACCT_SITE.cust_acct_site_id = SITE_USE.cust_acct_site_id
6343            AND       ACCT_SITE.org_id = SITE_USE.org_id
6344            ORDER BY  SITE_USE.status; --To query first Active and then Inactive records
6345 
6346        CURSOR c_BillToID_cust_rel IS  --Added cursor as part of Bugfix 8672453
6347            SELECT ACCT_SITE.CUST_ACCT_SITE_ID,
6348                   ACCT_SITE.status,
6349                   ACCT_SITE.CUST_ACCOUNT_ID, SITE_USE.STATUS,
6350                   SITE_USE.site_use_id
6351            FROM   HZ_CUST_ACCT_SITES  ACCT_SITE, HZ_CUST_SITE_USES_ALL SITE_USE
6352            WHERE  ACCT_SITE.ece_tp_location_code 	= x_lines_rec.cust_bill_to_ext
6353            AND    ACCT_SITE.cust_acct_site_id = SITE_USE.cust_acct_site_id
6354            AND    SITE_USE.site_use_code = 'BILL_TO'
6355            AND    ACCT_SITE.org_id = SITE_USE.org_id
6356            AND    ACCT_SITE.CUST_ACCOUNT_ID in
6357                   (SELECT DISTINCT cust_account_id
6358                    FROM HZ_CUST_ACCT_RELATE_ALL
6359                   WHERE related_cust_account_id = x_header_rec.customer_id
6360                     AND status='A'
6361                     AND bill_to_flag = 'Y'
6362                     AND oe_sys_parameters.value('CUSTOMER_RELATIONSHIPS_FLAG', x_header_rec.org_id) IN ('Y', 'A')
6363                     AND org_id = x_header_rec.org_id)
6364          ORDER BY SITE_USE.status; --To query first Active and then Inactive records
6365 
6366        CURSOR c_BillToID_org_level IS  --Added cursor as part of Bugfix 8672453
6367            SELECT site_use_id, status
6368            FROM   HZ_CUST_SITE_USES
6369            WHERE  CUST_ACCT_SITE_ID = x_lines_rec.ship_to_address_id
6370            AND    site_use_code = 'SHIP_TO'
6371          ORDER BY status; --To query first Active and then Inactive records
6372 
6373        CURSOR c_BillToID IS  --Added cursor as part of Bugfix 8672453
6374            SELECT    ACCT_SITE.STATUS, ACCT_SITE.CUST_ACCOUNT_ID,
6375                      SITE_USE.STATUS, SITE_USE.site_use_id
6376            FROM      HZ_CUST_ACCT_SITES  ACCT_SITE, HZ_CUST_SITE_USES_ALL SITE_USE
6377            WHERE     ACCT_SITE.CUST_ACCT_SITE_ID = x_lines_rec.bill_to_address_id
6378            AND       ACCT_SITE.cust_acct_site_id = SITE_USE.cust_acct_site_id
6379            AND       SITE_USE.site_use_code = 'BILL_TO'
6380            AND       ACCT_SITE.org_id = SITE_USE.org_id
6381            ORDER BY  SITE_USE.status; --To query first Active and then Inactive records
6382 
6383   v_progress             VARCHAR2(3) := '010';
6384   v_count                NUMBER;
6385   v_status               VARCHAR2(1) := 'I';
6386   v_bill_to_customer_id  NUMBER DEFAULT NULL;
6387   v_ship_to_customer_id  NUMBER;
6388   v_tp_loc               VARCHAR2(30);
6389   e_InvalidBillTo        EXCEPTION;
6390   e_InvalidBillToID      EXCEPTION;
6391   e_InactiveBillTo       EXCEPTION;
6392   e_NoBillTo             EXCEPTION;
6393   e_BillToSiteUseInv     EXCEPTION;
6394   e_InactiveBillSiteUse  EXCEPTION;
6395   e_bad_location         EXCEPTION;
6396   e_related_cust         EXCEPTION;
6397   v_addStatus            VARCHAR2(1) := 'I';
6398   v_siteUseStatus        VARCHAR2(1) := 'I';
6399   --
6400 BEGIN
6401   --
6402   IF (l_debug <> -1) THEN
6403      rlm_core_sv.dpush(C_SDEBUG,'DeriveBillToID');
6404      rlm_core_sv.dlog(C_DEBUG, 'x_lines_rec.bill_to_address_id',
6405                       x_lines_rec.bill_to_address_id);
6406      rlm_core_sv.dlog(C_DEBUG,'x_cum_org_level_code',
6407                             x_cum_org_level_code);
6408   END IF;
6409   --
6410   -- R12 Perf Bug 4129291 : Modified queries to use both hz_cust_acct_sites and
6411   -- hz_cust_site_uses, so DSP determines the status of address record and site use
6412   -- record in one DB query.
6413   --
6414   IF rlm_message_sv.check_dependency('BILL_TO') THEN
6415     --
6416     IF x_lines_rec.bill_to_address_id IS NULL THEN
6417        --{
6418        IF x_lines_rec.cust_bill_to_ext IS NOT NULL THEN
6419          --{
6420          BEGIN
6421            --{
6422            v_progress := '030';
6423            --
6424            IF (l_debug <> -1) THEN
6425               rlm_core_sv.dlog(C_DEBUG,'cust_bill_to_ext ', x_lines_rec.cust_bill_to_ext);
6426            END IF;
6427            --
6428            --if the bill_to does not exist for the customer, try customer
6429            -- relationship
6430            --
6431            BEGIN
6432              --{
6433              -- Following query is changed as per TCA obsolescence project.
6434              --Bugfix 8672453 Start
6435              OPEN c_BillToID_ext;
6436              --
6437              FETCH c_BillToID_ext INTO x_lines_rec.intrmd_ship_to_id,
6438                                        v_addStatus,v_siteUseStatus,
6439                                        x_lines_rec.intrmd_st_site_use_id;
6440              --
6441              IF c_BillToID_ext%NOTFOUND THEN
6442                --
6443                IF (l_debug <> -1) THEN
6444                  rlm_core_sv.dlog(C_DEBUG,'No BillTo Locations found');
6445                  rlm_core_sv.dlog(C_DEBUG,'e_related_cust');
6446                END IF;
6447                --
6448                OPEN c_BillToID_cust_rel;
6449                --
6450                FETCH c_BillToID_cust_rel INTO x_lines_rec.bill_to_address_id,
6451                                               v_addStatus,
6452                                               v_bill_to_customer_id, v_siteUseStatus,
6453                                               x_lines_rec.bill_to_site_use_id;
6454                --
6455                IF c_BillToID_cust_rel%NOTFOUND THEN
6456                  --
6457                  IF (l_debug <> -1) THEN
6458                    rlm_core_sv.dlog(C_DEBUG,'No Customer Relation record found');
6459                  END IF;
6460                  raise NO_DATA_FOUND;
6461                  --
6462                END IF;
6463                --
6464                IF (l_debug <> -1) THEN
6465                    rlm_core_sv.dlog(C_DEBUG,'bill_to_address_id ', x_lines_rec.bill_to_address_id);
6466                    rlm_core_sv.dlog(C_DEBUG,'bill to Address status ', v_addStatus);
6467                    rlm_core_sv.dlog(C_DEBUG, 'Site Use Status', v_siteUseStatus);
6468                    rlm_core_sv.dlog(C_DEBUG,'v_bill_to_customer_id', v_bill_to_customer_id);
6469                END IF;
6470                --
6471                IF v_addStatus = 'I' THEN
6472                   raise e_InactiveBillTo;
6473                END IF;
6474                --
6475                IF v_siteUseStatus = 'I' THEN
6476                   RAISE e_InactiveBillSiteUse;
6477                END IF;
6478                --
6479                CLOSE c_BillToID_cust_rel;
6480                --
6481              END IF;
6482              --
6483              IF (l_debug <> -1) THEN
6484                 rlm_core_sv.dlog(C_DEBUG,'bill_to_address_id ', x_lines_rec.bill_to_address_id);
6485                 rlm_core_sv.dlog(C_DEBUG, 'bill_to_site_use_id', x_lines_rec.bill_to_site_use_id);
6486                 rlm_core_sv.dlog(C_DEBUG,'bill to Address status ', v_addStatus);
6487                 rlm_core_sv.dlog(C_DEBUG, 'Site Use Status', v_siteUseStatus);
6488              END IF;
6489              --
6490              IF v_addStatus = 'I' THEN
6491                 raise e_InactiveBillTo;
6492              END IF;
6493              --
6494              IF v_siteUseStatus = 'I' THEN
6495                 RAISE e_InactiveBillSiteUse;
6496              END IF;
6497              --
6498              CLOSE c_BillToID_ext;
6499              --Bugfix 8672453 End
6500 
6501            END;
6502              --}
6503          END;
6504            --
6505            x_lines_rec.invoice_to_org_id := x_lines_rec.bill_to_site_use_id;
6506            --
6507          --}
6508       ELSE -- CUST_BILL_TO_EXT is null
6509          --{
6510          IF x_cum_org_level_code = 'BILL_TO_SHIP_FROM' THEN
6511            --{
6512            v_progress := '040';
6513 	   --
6514   	   IF (l_debug <> -1) THEN
6515               rlm_core_sv.dlog(C_DEBUG,'ship_to_address_id ',
6516                                   x_lines_rec.ship_to_address_id);
6517            END IF;
6518            --
6519            -- If the bill_to_ext is null then we use the bill_to
6520            -- defined in HZ_CUST_ACCT_SITES for the SHIP_TO
6521            -- the bill_To_site_use as from the HZ_CUST_ACCT_SITES where
6522            -- address_useage is ship to
6523            --
6524            -- Following query is changed as per TCA obsolescence project.
6525            BEGIN
6526            --Bugfix 8672453 Start
6527            OPEN c_BillToID_org_level;
6528            --
6529            FETCH c_BillToID_org_level INTO x_lines_rec.bill_to_site_use_id, v_status;
6530            --
6531            IF c_BillToID_org_level%NOTFOUND THEN
6532              --
6533              IF (l_debug <> -1) THEN
6534                rlm_core_sv.dlog(C_DEBUG,'Invalid BillTo Location(Org level)');
6535              END IF;
6536              raise e_InvalidBillTo;
6537              --
6538            END IF;
6539            --
6540            CLOSE c_BillToID_org_level;
6541            --Bugfix 8672453 End
6542 
6543            IF (l_debug <> -1) THEN
6544                  rlm_core_sv.dlog(C_DEBUG,'bill site use status ', v_siteUseStatus );
6545                  rlm_core_sv.dlog(C_DEBUG,'bill site use id ', x_lines_rec.bill_to_site_use_id );
6546            END IF;
6547 	       --
6548                x_lines_rec.invoice_to_org_id := x_lines_rec.bill_to_site_use_id;
6549 	       --
6550            IF (l_debug <> -1) THEN
6551                  rlm_core_sv.dlog(C_DEBUG,'invoice_to_org_id ', x_lines_rec.invoice_to_org_id );
6552            END IF;
6553            --
6554            IF x_lines_rec.bill_to_site_use_id is NOT NULL AND v_status = 'A'THEN
6555                  --
6556                  -- Following query is changed as per TCA obsolescence project.
6557                  SELECT CUST_ACCT_SITE_ID, status
6558                  INTO   x_lines_rec.bill_to_address_id, v_status
6559                  FROM   HZ_CUST_SITE_USES_ALL
6560                  WHERE  SITE_USE_ID =  x_lines_rec.bill_to_site_use_id;
6561                  --
6562            ELSE
6563                  --
6564                  IF x_lines_rec.bill_to_site_use_id is NULL THEN
6565                     raise e_NoBillTo;
6566                  ELSIF v_status = 'I' THEN
6567                     raise e_InactiveBillSiteUse;
6568                  END IF;
6569                  --
6570            END IF;
6571            --
6572            EXCEPTION
6573              --
6574              WHEN e_NoBillTo THEN
6575                raise e_InvalidBillTo;
6576             --}
6577            END;
6578            --
6579            IF (l_debug <> -1) THEN
6580               rlm_core_sv.dlog(C_DEBUG,'bill_to_address_id ', x_lines_rec.bill_to_address_id);
6581            END IF;
6582            --}
6583         END IF;
6584         --}
6585       END IF;
6586       --}
6587     ELSE
6588        --{
6589        -- x_lines_rec.bill_to_address_id is NOT NULL
6590        --
6591        BEGIN
6592           --{
6593           -- Following query is changed as per TCA obsolescence project.
6594           --Bugfix 8672453 Start
6595           OPEN c_BillToID;
6596           --
6597           FETCH c_BillToID INTO v_addStatus, v_bill_to_customer_id,
6598                                 v_siteUseStatus, x_lines_rec.bill_to_site_use_id;
6599           --
6600           IF c_BillToID%NOTFOUND THEN
6601             --
6602             IF (l_debug <> -1) THEN
6603                rlm_core_sv.dlog(C_DEBUG,'Invalid BillTo Location');
6604             END IF;
6605             raise NO_DATA_FOUND;
6606             --
6607           END IF;
6608           --
6609           CLOSE c_BillToID;
6610           --Bugfix 8672453 End
6611           --
6612           IF (l_debug <> -1) THEN
6613               rlm_core_sv.dlog(C_DEBUG,'bill_to_address_id', x_lines_rec.bill_to_address_id);
6614               rlm_core_sv.dlog(C_DEBUG,'v_bill_to_customer_id',v_bill_to_customer_id);
6615               rlm_core_sv.dlog(C_DEBUG, 'Address Status', v_addStatus);
6616               rlm_core_sv.dlog(C_DEBUG, 'Site Use Status', v_siteUseStatus);
6617               rlm_core_sv.dlog(C_DEBUG, 'Site Use ID', x_lines_rec.bill_to_site_use_id);
6618           END IF;
6619           --
6620           IF v_addStatus = 'I' THEN
6621              raise e_InactiveBillTo;
6622           END IF;
6623           --
6624           IF v_siteUseStatus = 'I' THEN
6625              RAISE e_InactiveBillSiteUse;
6626           END IF;
6627           --
6628           IF NOT CustomerRelationship(x_header_rec.customer_id,
6629                                       v_bill_to_customer_id,
6630                                       x_header_rec.header_id,
6631                                       'BILL_TO') THEN
6632              --
6633              raise e_InvalidBillToId;
6634              --
6635           END IF;
6636           --
6637           x_lines_rec.invoice_to_org_id := x_lines_rec.bill_to_site_use_id;
6638           --
6639           IF (l_debug <> -1) THEN
6640            rlm_core_sv.dlog(C_DEBUG, 'Invoice To Org ID', x_lines_rec.invoice_to_org_id);
6641           END IF;
6642           --}
6643        END;
6644        --}
6645     END IF;
6646     --}
6647   END IF;
6648   --
6649   IF (l_debug <> -1) THEN
6650      rlm_core_sv.dpop(C_SDEBUG);
6651   END IF;
6652   --
6653 EXCEPTION
6654   --
6655   WHEN NO_DATA_FOUND THEN
6656     --
6657     x_lines_rec.process_status := rlm_core_sv.k_PS_ERROR;
6658     rlm_message_sv.app_error(
6659                 x_ExceptionLevel => rlm_message_sv.k_error_level,
6660                 x_MessageName => 'RLM_BILLTO_INVALID',
6661                 x_InterfaceHeaderId => x_lines_rec.header_id,
6662                 x_InterfaceLineId => x_lines_rec.line_id,
6663                 x_token1=>'BILL_TO_EXT',
6664                 x_value1=> nvl(x_lines_rec.cust_bill_to_ext,
6665                                x_header_rec.ece_tp_location_code_ext),
6666                 x_ValidationType => 'BILL_TO');
6667     --
6668     IF (l_debug <> -1) THEN
6669        rlm_core_sv.dlog(C_DEBUG,'progress',v_Progress);
6670        rlm_core_sv.dpop(C_SDEBUG,'EXCEPTION: RLM_BILLTO_INVALID');
6671     END IF;
6672     --
6673   WHEN e_BillToSiteUseInv THEN
6674     --
6675     x_lines_rec.process_status := rlm_core_sv.k_PS_ERROR;
6676     rlm_message_sv.app_error(
6677                 x_ExceptionLevel => rlm_message_sv.k_error_level,
6678                 x_MessageName => 'RLM_BILLTO_SITEUSE',
6679                 x_InterfaceHeaderId => x_lines_rec.header_id,
6680                 x_InterfaceLineId => x_lines_rec.line_id,
6681                 x_token1=>'BILL_TO_EXT',
6682                 x_value1=> nvl(x_lines_rec.cust_bill_to_ext,
6683                                x_header_rec.ece_tp_location_code_ext),
6684                 x_ValidationType => 'BILL_TO');
6685     --
6686     IF (l_debug <> -1) THEN
6687        rlm_core_sv.dlog(C_DEBUG,'progress',v_Progress);
6688        rlm_core_sv.dpop(C_SDEBUG,'EXCEPTION: RLM_BILLTO_SITEUSE');
6689     END IF;
6690     --
6691   WHEN e_InvalidBillTo THEN
6692     --
6693     x_lines_rec.process_status := rlm_core_sv.k_PS_ERROR;
6694     rlm_message_sv.app_error(
6695                 x_MessageName => 'RLM_BILLTO_ID_NOT_DERIVED',
6696                 x_InterfaceHeaderId => x_lines_rec.header_id,
6697                 x_InterfaceLineId => x_lines_rec.line_id,
6698                 x_token1=>'TP_LOCATION',
6699                 x_value1=> nvl(x_lines_rec.cust_bill_to_ext,
6700                                x_header_rec.ece_tp_location_code_ext),
6701                 x_ValidationType => 'BILL_TO');
6702     --
6703     IF (l_debug <> -1) THEN
6704        rlm_core_sv.dlog(C_DEBUG,'progress',v_Progress);
6705        rlm_core_sv.dpop(C_SDEBUG,'EXCEPTION: RLM_BILLTO_ID_NOT_DERIVED');
6706     END IF;
6707     --
6708   WHEN e_bad_location THEN
6709     --
6710     x_lines_rec.process_status := rlm_core_sv.k_PS_ERROR;
6711     rlm_message_sv.app_error(
6712                 x_MessageName => 'RLM_BILLTO_ID_NOT_DERIVED',
6713                 x_InterfaceHeaderId => x_lines_rec.header_id,
6714                 x_InterfaceLineId => x_lines_rec.line_id,
6715                 x_token1=>'TP_LOCATION',
6716                 x_value1=> nvl(x_lines_rec.cust_bill_to_ext,
6717                                x_header_rec.ece_tp_location_code_ext),
6718                 x_ValidationType => 'BILL_TO');
6719     --
6720     IF (l_debug <> -1) THEN
6721        rlm_core_sv.dlog(C_DEBUG,'progress',v_Progress);
6722        rlm_core_sv.dpop(C_SDEBUG,'EXCEPTION: RLM_BILLTO_ID_NOT_DERIVED');
6723     END IF;
6724     --
6725   WHEN e_InactiveBillTo THEN
6726     --
6727     x_lines_rec.process_status := rlm_core_sv.k_PS_ERROR;
6728     --
6729     rlm_message_sv.app_error(
6730                 x_ExceptionLevel => rlm_message_sv.k_error_level,
6731                 x_MessageName => 'RLM_BILLTO_INACTIVE',
6732                 x_InterfaceHeaderId => x_lines_rec.header_id,
6733                 x_InterfaceLineId => x_lines_rec.line_id,
6734                 x_token1=>'TP_LOCATION',
6735                 x_value1=> nvl(x_lines_rec.cust_bill_to_ext,
6736                                x_header_rec.ece_tp_location_code_ext),
6737                 x_ValidationType => 'BILL_TO');
6738     --
6739     IF (l_debug <> -1) THEN
6740        rlm_core_sv.dlog(C_DEBUG,'progress',v_Progress);
6741        rlm_core_sv.dpop(C_SDEBUG,'EXCEPTION: RLM_BILLTO_ID_NOT_ACTIVE');
6742     END IF;
6743     --
6744   WHEN e_InvalidBilltoId THEN
6745     --
6746     x_lines_rec.process_status := rlm_core_sv.k_PS_ERROR;
6747     --
6748     rlm_message_sv.app_error(
6749                 x_ExceptionLevel => rlm_message_sv.k_error_level,
6750                 x_MessageName => 'RLM_BILL_TO_ID_NO_RELATED',
6751                 x_InterfaceHeaderId => x_lines_rec.header_id,
6752                 x_InterfaceLineId => x_lines_rec.line_id,
6753                 x_token1=>'CUSTOMER',
6754                 x_value1=> nvl(x_lines_rec.cust_bill_to_ext,
6755                                x_header_rec.ece_tp_location_code_ext),
6756                 x_ValidationType => 'BILL_TO');
6757     --
6758     IF (l_debug <> -1) THEN
6759        rlm_core_sv.dlog(C_DEBUG,'progress',v_Progress);
6760        rlm_core_sv.dlog(C_DEBUG,'Customer Relationships: Bill to address id passed does not belong to the Customer nor its related customers');
6761        rlm_core_sv.dpop(C_SDEBUG,'EXCEPTION: RLM_BILLTO_ID_NOT_RELATED');
6762     END IF;
6763     --
6764   WHEN e_InactiveBillSiteUse THEN
6765     --
6766     x_lines_rec.process_status := rlm_core_sv.k_PS_ERROR;
6767     rlm_message_sv.app_error(
6768             x_ExceptionLevel => rlm_message_sv.k_error_level,
6769             x_MessageName => 'RLM_BILLTO_SITE_USE_INACTIVE',
6770             x_InterfaceHeaderId => x_lines_rec.header_id,
6771             x_InterfaceLineId => x_lines_rec.line_id,
6772             x_token1=>'TP_LOCATION',
6773             x_value1=> nvl(x_lines_rec.cust_bill_to_ext,
6774                            x_header_rec.ece_tp_location_code_ext),
6775             x_ValidationType => 'BILL_TO');
6776     --
6777     IF (l_debug <> -1) THEN
6778        rlm_core_sv.dlog(C_DEBUG,'progress',v_Progress);
6779        rlm_core_sv.dpop(C_SDEBUG,'EXCEPTION: RLM_BILLTO_SITE_USE_INACTIVE');
6780     END IF;
6781     --
6782   WHEN OTHERS THEN
6783     --
6784     x_lines_rec.process_status := rlm_core_sv.k_PS_ERROR;
6785     rlm_message_sv.sql_error('rlm_validatedemand_sv.DeriveBillToID',v_Progress);
6786     --
6787     IF (l_debug <> -1) THEN
6788        rlm_core_sv.dpop(C_SDEBUG,'EXCEPTION: '||SUBSTR(SQLERRM,1,200));
6789     END IF;
6790     --
6791     raise;
6792     --
6793 END DeriveBillToID;
6794 
6795 /*===========================================================================
6796 
6797         PROCEDURE NAME:  DeriveShipToID
6798 
6799 ===========================================================================*/
6800 PROCEDURE DeriveShipToID(x_header_rec IN OUT NOCOPY RLM_INTERFACE_HEADERS%ROWTYPE,
6801                          x_lines_rec IN OUT NOCOPY RLM_INTERFACE_LINES%ROWTYPE)
6802 IS
6803   --
6804      CURSOR c_ShipToID_line_ext IS --Added cursor as part of Bugfix 8672453
6805          SELECT hz.cust_acct_site_id, hz.status, cust_account_id,
6806                 hcsu.status, site_use_id
6807          FROM   hz_cust_acct_sites hz, hz_cust_site_uses_all hcsu
6808          WHERE  hz.ece_tp_location_code = x_lines_rec.cust_ship_to_ext
6809          AND    hz.cust_acct_site_id    = hcsu.cust_acct_site_id
6810          AND    site_use_code           = 'SHIP_TO'
6811          AND    hz.org_id               = hcsu.org_id
6812          AND    hz.cust_account_id IN
6813                 (SELECT to_number(x_header_rec.customer_id) from dual
6814                  UNION
6815                  SELECT cust_account_id
6816                  FROM hz_cust_acct_relate_all
6817                  WHERE related_cust_account_id = x_header_rec.customer_id
6818                  AND ship_to_flag = 'Y'
6819                  AND status = 'A'
6820                  AND org_id = x_header_rec.org_id
6821                  AND oe_sys_parameters.value('CUSTOMER_RELATIONSHIPS_FLAG')
6822                      IN ('Y', 'A'))
6823        ORDER BY hcsu.status; --To query first Active and then Inactive records
6824 
6825      CURSOR c_ShipToID_header_ext IS --Added cursor as part of Bugfix 8672453
6826          SELECT hcas.cust_acct_site_id,  hcas.status, hcsu.status,
6827                 hcsu.site_use_id
6828          FROM   hz_cust_acct_sites hcas, hz_cust_site_uses_all hcsu
6829          WHERE  ece_tp_location_code = x_header_rec.ece_tp_location_code_ext
6830          AND    hcas.cust_account_id = x_header_rec.customer_id
6831          AND    hcas.cust_acct_site_id = hcsu.cust_acct_site_id
6832          AND    site_use_code          = 'SHIP_TO'
6833          AND    hcas.org_id            = hcsu.org_id
6834        ORDER BY hcsu.status; --To query first Active and then Inactive records
6835 
6836      CURSOR c_ShipToID IS --Added cursor as part of Bugfix 8672453
6837          SELECT hcas.status, cust_account_id, hcsu.status, hcsu.site_use_id
6838          FROM   hz_cust_acct_sites_all hcas, hz_cust_site_uses_all hcsu
6839          WHERE  hcas.cust_acct_site_id = x_lines_rec.ship_to_address_id
6840          AND    hcas.cust_acct_site_id = hcsu.cust_acct_site_id
6841          AND    hcsu.site_use_code     = 'SHIP_TO'
6842          AND    hcas.org_id = hcsu.org_id
6843        ORDER BY hcsu.status; --To query first Active and then Inactive records
6844 
6845   v_progress            VARCHAR2(3) := '010';
6846   v_addStatus           VARCHAR2(1);
6847   v_siteUseStatus       VARCHAR2(1);
6848   v_ship_to_customer_id NUMBER;
6849   e_InvalidShipTo       EXCEPTION;
6850   e_InvalidShipToId       EXCEPTION;
6851   e_InactiveShipTo      EXCEPTION;
6852   e_ShipToSiteUseInv    EXCEPTION;
6853   e_InactiveShipSiteUse EXCEPTION;
6854   e_InvalidCustomerId   EXCEPTION;
6855   --
6856 BEGIN
6857   --
6858   IF (l_debug <> -1) THEN
6859      rlm_core_sv.dpush(C_SDEBUG, 'DeriveShipToID');
6860      rlm_core_sv.dlog(C_DEBUG, 'ship_to_address_id ',
6861                           x_lines_rec.ship_to_address_id);
6862      rlm_core_sv.dlog(C_DEBUG, 'ece_tp_location_code_ext',
6863                           x_header_rec.ece_tp_location_code_ext);
6864      rlm_core_sv.dlog(C_DEBUG, 'cust_ship_to_ext',
6865                           x_lines_rec.cust_ship_to_ext);
6866      rlm_core_sv.dlog(C_DEBUG, 'ece_primary_address_id',
6867                           x_header_rec.ece_primary_address_id);
6868 
6869   END IF;
6870   --
6871   IF rlm_message_sv.check_dependency('SHIPTO') THEN
6872     --
6873     IF x_lines_rec.ship_to_address_id IS NULL THEN
6874        --{
6875        IF x_lines_rec.cust_ship_to_ext IS NOT NULL THEN
6876          --{
6877          v_progress := '030';
6878 	 --
6879   	 IF (l_debug <> -1) THEN
6880             rlm_core_sv.dlog(C_DEBUG,'Using Ship-To-Ext to derive Id ',
6881                    x_lines_rec.cust_ship_to_ext);
6882          END IF;
6883          --
6884          -- Following query is changed as per TCA obsolescence project.
6885          -- CR Changes
6886          -- R12 Perf. Bug 4129291 : Use HCSU also in query below
6887          --
6888        --Bugfix 8672453 Start
6889         OPEN c_ShipToID_line_ext;
6890         --
6891         FETCH c_ShipToID_line_ext INTO x_lines_rec.ship_to_address_id, v_addStatus,
6892                                        x_lines_rec.ship_to_customer_id, v_siteUseStatus,
6893                                        x_lines_rec.ship_to_site_use_id;
6894         --
6895         IF c_ShipToID_line_ext%NOTFOUND THEN
6896           --
6897           IF (l_debug <> -1) THEN
6898              rlm_core_sv.dlog(C_DEBUG,'No ShipTo Locations found');
6899           END IF;
6900           raise NO_DATA_FOUND;
6901           --
6902         END IF;
6903         --
6904         CLOSE c_ShipToID_line_ext;
6905         --Bugfix 8672453 End
6906         --
6907         IF (l_debug <> -1) THEN
6908            rlm_core_sv.dlog(C_DEBUG,'ship_to_address_id ', x_lines_rec.ship_to_address_id);
6909            rlm_core_sv.dlog(C_DEBUG,'x_lines_rec.ship_to_customer_id ', x_lines_rec.ship_to_customer_id);
6910            rlm_core_sv.dlog(C_DEBUG,'customer_id ', x_header_rec.customer_id);
6911            rlm_core_sv.dlog(C_DEBUG, 'x_lines_rec.ship_to_site_use_id', x_lines_rec.ship_to_site_use_id);
6912            rlm_core_sv.dlog(C_DEBUG, 'Address Status', v_addStatus);
6913            rlm_core_sv.dlog(C_DEBUG, 'Site Use Status', v_siteUseStatus);
6914         END IF;
6915         --
6916         IF v_addStatus = 'I' THEN
6917          raise e_InactiveShipTo;
6918         END IF;
6919         --
6920         IF v_siteUseStatus = 'I' THEN
6921          RAISE e_InactiveShipSiteUse;
6922         END IF;
6923         --
6924          /* IF x_header_rec.customer_id <> x_lines_rec.ship_to_customer_id
6925             AND g_LineLevelShipTo THEN
6926             --
6927             IF (l_debug <> -1) THEN
6928               rlm_core_sv.dlog(C_DEBUG,'ship to customer id <> header customer id');
6929             END IF;
6930             --
6931             raise e_InvalidCustomerId;
6932             --
6933          END IF;  */
6934          --}
6935        --performance
6936 
6937        ELSIF x_header_rec.ece_tp_location_code_ext IS NOT NULL THEN
6938          --{
6939          v_progress := '035';
6940 	 --
6941   	 IF (l_debug <> -1) THEN
6942             rlm_core_sv.dlog(C_DEBUG,'Using TP Location Code to derive ID ',
6943                    x_header_rec.ece_tp_location_code_ext);
6944          END IF;
6945          --
6946          BEGIN
6947           --
6948           -- Following query is changed as per TCA obsolescence project.
6949           -- R12 Perf Bug 4129291 : Use HCSU in query below
6950           --
6951           --Bugfix 8672453 Start
6952           OPEN c_ShipToID_header_ext;
6953           --
6954           FETCH c_ShipToID_header_ext INTO x_lines_rec.ship_to_address_id, v_addStatus, v_siteUseStatus,
6955                                            x_lines_rec.ship_to_site_use_id;
6956           --
6957           IF c_ShipToID_header_ext%NOTFOUND THEN
6958             --
6959             IF (l_debug <> -1) THEN
6960                rlm_core_sv.dlog(C_DEBUG,'Invalid ShipTo Location(Header)');
6961             END IF;
6962             raise e_InvalidShipTo;
6963             --
6964           END IF;
6965           --
6966           CLOSE c_ShipToID_header_ext;
6967           --Bugfix 8672453 End
6968           --
6969           IF (l_debug <> -1) THEN
6970              rlm_core_sv.dlog(C_DEBUG,'ship_to_address_id ', x_lines_rec.ship_to_address_id);
6971              rlm_core_sv.dlog(C_DEBUG,'ship_to_site_use_id', x_lines_rec.ship_to_site_use_id);
6972              rlm_core_sv.dlog(C_DEBUG, 'Address Status', v_addStatus);
6973              rlm_core_sv.dlog(C_DEBUG, 'Site Use Status', v_siteUseStatus);
6974           END IF;
6975           --
6976           IF v_addStatus = 'I' THEN
6977            raise e_InactiveShipTo;
6978           END IF;
6979           --
6980           IF v_siteUseStatus = 'I' THEN
6981            RAISE e_InactiveShipSiteUse;
6982           END IF;
6983           --
6984          END;
6985          --}
6986        ELSE
6987         --{
6988         v_progress := '040';
6989         --
6990         IF (x_header_rec.customer_id IS NOT NULL AND
6991             x_header_rec.ece_primary_address_id IS NULL) THEN
6992          --{
6993          -- Following query is changed as per TCA obsolescence project.
6994          SELECT rasu.cust_acct_site_id, rad.status, rasu.status,
6995                 rasu.site_use_id
6996          INTO   x_header_rec.ece_primary_address_id, v_addStatus, v_siteUseStatus,
6997                 x_lines_rec.ship_to_site_use_id
6998          FROM   hz_cust_acct_sites     rad,
6999                 hz_cust_site_uses_all  rasu
7000          WHERE  rad.cust_acct_site_id = rasu.cust_acct_site_id
7001          AND    rasu.site_use_code = 'SHIP_TO'
7002          AND    rasu.primary_flag = 'Y'
7003          AND    rad.cust_account_id = x_header_rec.customer_id
7004          AND    rad.status = 'A'
7005          AND    rad.org_id = rasu.org_id;
7006          --
7007          IF (l_debug <> -1) THEN
7008           rlm_core_sv.dlog(C_DEBUG,'customer_id ',x_header_rec.customer_id);
7009           rlm_core_sv.dlog(C_DEBUG,'ece_primary_address_id ',
7010                                  x_header_rec.ece_primary_address_id);
7011          END IF;
7012          --}
7013         END IF;
7014         --
7015         x_lines_rec.ship_to_address_id := x_header_rec.ece_primary_address_id;
7016         --
7017         IF (l_debug <> -1) THEN
7018            rlm_core_sv.dlog(C_DEBUG, 'Using ECE primary address as ship-to');
7019            rlm_core_sv.dlog(C_DEBUG,'ship_to_address_id ',
7020                    x_lines_rec.ship_to_address_id);
7021            rlm_core_sv.dlog(C_DEBUG, 'Address Status', v_addStatus);
7022            rlm_core_sv.dlog(C_DEBUG, 'Site Use Status', v_siteUseStatus);
7023         END IF;
7024         --}
7025        END IF;
7026        --
7027        IF v_addStatus = 'I' THEN
7028         raise e_InactiveShipTo;
7029        END IF;
7030        --
7031        IF v_siteUseStatus = 'I' THEN
7032         RAISE e_InactiveShipSiteUse;
7033        END IF;
7034        --
7035        --}
7036     ELSE    --ship_to_address_id is not null
7037        --{
7038        /* check if the address_id is inactive */
7039        BEGIN
7040           --
7041           --Bugfix 8672453 Start
7042           OPEN c_ShipToID;
7043           --
7044           FETCH c_ShipToID INTO v_addStatus, x_lines_rec.ship_to_customer_id, v_siteUseStatus,
7045                                 x_lines_rec.ship_to_site_use_id;
7046           --
7047           IF c_ShipToID%NOTFOUND THEN
7048             --
7049             IF (l_debug <> -1) THEN
7050                rlm_core_sv.dlog(C_DEBUG,'Invalid ShipTo Location');
7051             END IF;
7052             raise e_InvalidShipto;
7053             --
7054           END IF;
7055           --
7056           CLOSE c_ShipToID;
7057           --Bugfix 8672453 End
7058 
7059           -- Following query is changed as per TCA obsolescence project.
7060           --
7061           IF (l_debug <> -1) THEN
7062              rlm_core_sv.dlog(C_DEBUG, 'ship-to customer id',
7063                               x_lines_rec.ship_to_customer_id);
7064              rlm_core_sv.dlog(C_DEBUG, 'Ship To Site Use ID',
7065                               x_lines_rec.ship_to_site_use_id);
7066              rlm_core_sv.dlog(C_DEBUG, 'Address Status', v_addStatus);
7067              rlm_core_sv.dlog(C_DEBUG, 'Site Use Status', v_siteUseStatus);
7068           END IF;
7069           --
7070           IF v_addStatus = 'I' THEN
7071              raise e_InactiveShipTo;
7072           END IF;
7073           --
7074           IF v_siteUseStatus = 'I' THEN
7075             RAISE e_InactiveShipSiteUse;
7076           END IF;
7077           --
7078           IF (l_debug <> -1) THEN
7079              rlm_core_sv.dlog(C_DEBUG,'x_lines_rec.ship_to_customer_id', x_lines_rec.ship_to_customer_id);
7080           END IF;
7081           --
7082           IF NOT CustomerRelationship(x_header_rec.customer_id,
7083                                 x_lines_rec.ship_to_customer_id,
7084                                 x_header_rec.header_id,
7085                                 'SHIP_TO') THEN
7086             --
7087             IF (l_debug <> -1) THEN
7088                rlm_core_sv.dlog(C_DEBUG,'Invalid customer relationship');
7089             END IF;
7090             --
7091             raise e_InvalidShipToID;
7092             --
7093           END IF;
7094           --
7095        END;
7096        --}
7097     END IF;
7098     --
7099     x_lines_rec.ship_to_org_id := x_lines_rec.ship_to_site_use_id;
7100     --
7101     /*
7102      * R12 Perf Bug 4129291
7103      * This segment of code is not required any longer, since the check on status
7104      * of site use record has been included in queries above
7105      *
7106     BEGIN
7107       --{
7108       v_progress := '050';
7109       --
7110       -- Following query is changed as per TCA obsolescence project.
7111          SELECT site_use_id , status
7112          INTO   x_lines_rec.ship_to_site_use_id, v_status
7113          FROM   HZ_CUST_SITE_USES
7114          WHERE  CUST_ACCT_SITE_ID = x_lines_rec.ship_to_address_id
7115          AND    site_use_code = 'SHIP_TO';
7116       --
7117       x_lines_rec.ship_to_org_id := x_lines_rec.ship_to_site_use_id;
7118       --
7119       IF (l_debug <> -1) THEN
7120          rlm_core_sv.dlog(C_DEBUG,'site use id status ', v_status );
7121          rlm_core_sv.dlog(C_DEBUG,'ship_to_site_use_id ',
7122                                  x_lines_rec.ship_to_site_use_id);
7123       END IF;
7124       --
7125       IF v_status = 'I' THEN
7126          --
7127          raise e_InactiveShipSiteUse;
7128          --
7129       END IF;
7130       --
7131       EXCEPTION
7132         --
7133         WHEN NO_DATA_FOUND THEN
7134             raise e_ShipToSiteUseInv;
7135      --}
7136     END; */
7137     --}
7138   END IF;
7139   --
7140   IF (l_debug <> -1) THEN
7141      rlm_core_sv.dpop(C_SDEBUG);
7142   END IF;
7143   --
7144  EXCEPTION
7145   --
7146   WHEN NO_DATA_FOUND THEN
7147     --
7148     x_lines_rec.process_status := rlm_core_sv.k_PS_ERROR;
7149     --
7150     rlm_message_sv.app_error(
7151             x_ExceptionLevel => rlm_message_sv.k_error_level,
7152             x_MessageName => 'RLM_SHIPTO_ID_NOT_DERIVED',
7153             x_InterfaceHeaderId => x_lines_rec.header_id,
7154             x_InterfaceLineId => x_lines_rec.line_id,
7155             x_token1=>'TP_LOCATION',
7156             x_value1=> nvl(x_lines_rec.cust_ship_to_ext,
7157                            x_header_rec.ece_tp_location_code_ext),
7158             x_ValidationType => 'SHIP_TO');
7159     --
7160     IF (l_debug <> -1) THEN
7161        rlm_core_sv.dlog(C_DEBUG,'progress',v_Progress);
7162        rlm_core_sv.dpop(C_SDEBUG,'EXCEPTION: RLM_SHIPTO_NOT_DERIVED');
7163     END IF;
7164     --
7165   WHEN e_ShipToSiteUseInv THEN
7166     --
7167     x_lines_rec.process_status := rlm_core_sv.k_PS_ERROR;
7168     rlm_message_sv.app_error(
7169             x_ExceptionLevel => rlm_message_sv.k_error_level,
7170             x_MessageName => 'RLM_SHIPTO_SITEUSE',
7171             x_InterfaceHeaderId => x_lines_rec.header_id,
7172             x_InterfaceLineId => x_lines_rec.line_id,
7173             x_token1=>'SHIP_TO_EXT',
7174             x_value1=> nvl(x_lines_rec.cust_ship_to_ext,
7175                            x_header_rec.ece_tp_location_code_ext),
7176             x_ValidationType => 'SHIP_TO');
7177     --
7178     IF (l_debug <> -1) THEN
7179        rlm_core_sv.dlog(C_DEBUG,'progress',v_Progress);
7180        rlm_core_sv.dpop(C_SDEBUG,'EXCEPTION: RLM_SHIPTO_SITEUSE');
7181     END IF;
7182     --
7183   WHEN e_InvalidShipTo THEN
7184     --
7185     x_lines_rec.process_status := rlm_core_sv.k_PS_ERROR;
7186     --
7187     rlm_message_sv.app_error(
7188             x_ExceptionLevel => rlm_message_sv.k_error_level,
7189             x_MessageName => 'RLM_SHIPTO_ID_NOT_DERIVED',
7190             x_InterfaceHeaderId => x_lines_rec.header_id,
7191             x_InterfaceLineId => x_lines_rec.line_id,
7192             x_token1=>'TP_LOCATION',
7193             x_value1=> nvl(x_lines_rec.cust_ship_to_ext,
7194                            x_header_rec.ece_tp_location_code_ext),
7195             x_ValidationType => 'SHIP_TO');
7196     --
7197     IF (l_debug <> -1) THEN
7198        rlm_core_sv.dlog(C_DEBUG,'progress',v_Progress);
7199        rlm_core_sv.dpop(C_SDEBUG,'EXCEPTION: RLM_SHIPTO_ID_NOT_DERIVED');
7200     END IF;
7201     --
7202   WHEN e_InvalidShipToID THEN
7203     --
7204     x_lines_rec.process_status := rlm_core_sv.k_PS_ERROR;
7205     --
7206     IF (l_debug <> -1) THEN
7207        rlm_core_sv.dlog(C_DEBUG,'progress',v_Progress);
7208        rlm_core_sv.dpop(C_SDEBUG,'EXCEPTION: RLM_SHIP_TO_ID_NOT_RELATED');
7209     END IF;
7210     --
7211   WHEN e_InactiveShipTo THEN
7212     --
7213     x_lines_rec.process_status := rlm_core_sv.k_PS_ERROR;
7214     --
7215     rlm_message_sv.app_error(
7216             x_ExceptionLevel => rlm_message_sv.k_error_level,
7217             x_MessageName => 'RLM_SHIPTO_INACTIVE',
7218             x_InterfaceHeaderId => x_lines_rec.header_id,
7219             x_InterfaceLineId => x_lines_rec.line_id,
7220             x_token1=>'TP_LOCATION',
7221             x_value1=> nvl(x_lines_rec.cust_ship_to_ext,
7222                            x_header_rec.ece_tp_location_code_ext),
7223             x_ValidationType => 'SHIP_TO');
7224     --
7225     IF (l_debug <> -1) THEN
7226        rlm_core_sv.dlog(C_DEBUG,'progress',v_Progress);
7227        rlm_core_sv.dpop(C_SDEBUG,'EXCEPTION: RLM_SHIPTO_INACTIVE');
7228     END IF;
7229     --
7230   WHEN e_InactiveShipSiteUse THEN
7231     --
7232     x_lines_rec.process_status := rlm_core_sv.k_PS_ERROR;
7233     --
7234     rlm_message_sv.app_error(
7235             x_ExceptionLevel => rlm_message_sv.k_error_level,
7236             x_MessageName => 'RLM_SHIPTO_SITE_USE_INACTIVE',
7237             x_InterfaceHeaderId => x_lines_rec.header_id,
7238             x_InterfaceLineId => x_lines_rec.line_id,
7239             x_token1=>'TP_LOCATION',
7240             x_value1=>x_header_rec.ece_tp_location_code_ext,
7241             x_ValidationType => 'SHIP_TO');
7242     --
7243     IF (l_debug <> -1) THEN
7244        rlm_core_sv.dlog(C_DEBUG,'progress',v_Progress);
7245        rlm_core_sv.dpop(C_SDEBUG,'EXCEPTION: RLM_SHIPTO_SITE_USE_INACTIVE');
7246     END IF;
7247     --
7248   WHEN e_InvalidCustomerId THEN
7249     --
7250     x_lines_rec.process_status := rlm_core_sv.k_PS_ERROR;
7251     --
7252     rlm_message_sv.app_error(
7253             x_ExceptionLevel => rlm_message_sv.k_error_level,
7254             x_MessageName => 'RLM_INVALID_CUSTOMER',
7255             x_InterfaceHeaderId => x_lines_rec.header_id,
7256             x_InterfaceLineId => x_lines_rec.line_id,
7257             x_token1=>'TP_LOCATION',
7258             x_value1=>x_header_rec.ece_tp_location_code_ext,
7259             x_ValidationType => 'SHIP_TO');
7260     --
7261     IF (l_debug <> -1) THEN
7262        rlm_core_sv.dlog(C_DEBUG,'progress',v_Progress);
7263        rlm_core_sv.dpop(C_SDEBUG,'EXCEPTION: RLM_INVALID_CUSTOMER');
7264     END IF;
7265     --
7266   WHEN OTHERS THEN
7267     --
7268     x_lines_rec.process_status := rlm_core_sv.k_PS_ERROR;
7269     rlm_message_sv.sql_error('rlm_validatedemand_sv.DeriveShipToID',
7270                                                             v_Progress);
7271     --
7272     IF (l_debug <> -1) THEN
7273        rlm_core_sv.dpop(C_SDEBUG,'EXCEPTION: '||SUBSTR(SQLERRM,1,200));
7274     END IF;
7275     raise;
7276     --
7277 END DeriveShipToID;
7278 
7279 /*====================================================================
7280 
7281         PROCEDURE validateWithCumRec
7282 
7283 ====================================================================*/
7284 PROCEDURE validateWithCumRec(
7285           x_cum_key_record   IN rlm_cum_sv.cum_key_attrib_rec_type,
7286           x_group_rec        IN t_group_rec,
7287           x_lines_rec        IN OUT NOCOPY RLM_INTERFACE_LINES%ROWTYPE)
7288 IS
7289 
7290   e_CumRecYearMissing  EXCEPTION;
7291   e_CumKeyPOMissing    EXCEPTION;
7292   e_NoCumRec           EXCEPTION;                         -- 4307505
7293   v_cum_key_record     rlm_cum_sv.cum_key_attrib_rec_type;
7294   v_cum_record         RLM_CUM_SV.cum_rec_type;           -- 4307505
7295 
7296 BEGIN
7297  --
7298  IF (l_debug <> -1) THEN
7299     rlm_core_sv.dpush(C_SDEBUG,'validateWithCumRec');
7300  END IF;
7301  --
7302  IF (x_lines_rec.cust_po_number IS NULL) AND
7303      x_Group_rec.setup_terms_rec.CUM_CONTROL_CODE IN
7304                 ('CUM_BY_PO_ONLY','CUM_BY_DATE_PO') THEN
7305    --
7306    raise e_CumKeyPOMissing;
7307    --
7308  END IF;
7309  --
7310  IF (x_lines_rec.industry_attribute1 IS NULL) AND
7311      x_Group_rec.setup_terms_rec.CUM_CONTROL_CODE = 'CUM_BY_DATE_RECORD_YEAR'
7312  THEN
7313    --
7314    raise e_CumRecYearMissing;
7315    --
7316  END IF;
7317  --
7318  -- 4307505 [  done only if the Intrasit calc basis is customer cum
7319  IF (x_Group_rec.setup_terms_rec.intransit_calc_basis = 'CUSTOMER_CUM' ) THEN
7320  --{ it.basis cust.cum
7321  --
7322   v_cum_record.cum_key_id := NULL;
7323   v_cum_key_record := x_cum_key_record;
7324  --
7325  IF (l_debug <> -1) THEN
7326     rlm_core_sv.dlog(C_DEBUG,'customer_item_id',
7327                            v_cum_key_record.customer_item_id);
7328     rlm_core_sv.dlog(C_DEBUG,'ship_from_org_id',
7329                            v_cum_key_record.ship_from_org_id);
7330     rlm_core_sv.dlog(C_DEBUG,'ship_to_address_id',
7331                          v_cum_key_record.ship_to_address_id);
7332  END IF;
7333   --
7334   v_cum_key_record.create_cum_key_flag := 'N';
7335   RLM_TPA_SV.CalculateCUMKey(v_cum_key_record, v_cum_record);
7336   --
7337   IF v_cum_record.cum_key_id IS NULL THEN
7338    --
7339    IF (l_debug <> -1) THEN
7340       rlm_core_sv.dlog(C_DEBUG,'error: rlm_nocum_rec');
7341    END IF;
7342    --
7343    raise e_NoCumRec;
7344    --
7345   END IF;
7346   --
7347  END IF;
7348  -- }  end.if. it.basis cust.cum
7349  --
7350  IF (l_debug <> -1) THEN
7351     rlm_core_sv.dpop(C_SDEBUG,'validateWithCumRec');
7352  END IF;
7353  --
7354 EXCEPTION
7355   WHEN e_CumRecYearMissing THEN
7356     --
7357     x_lines_rec.process_status := rlm_core_sv.k_PS_ERROR;
7358     rlm_message_sv.app_error(
7359                 x_ExceptionLevel => rlm_message_sv.k_error_level,
7360                 x_MessageName => 'RLM_CUM_RECORD_YEAR_MISSING',
7361                 x_InterfaceHeaderId => x_lines_rec.header_id,
7362                 x_InterfaceLineId => x_lines_rec.line_id,
7363                 x_ValidationType => 'CUM_KEY_PO');
7364     --
7365     IF (l_debug <> -1) THEN
7366        rlm_core_sv.dpop(C_SDEBUG,'EXCEPTION: RLM_CUM_RECORD_YEAR_MISSING');
7367     END IF;
7368     --
7369   WHEN e_CumKeyPOMissing THEN
7370     --
7371     x_lines_rec.process_status := rlm_core_sv.k_PS_ERROR;
7372     rlm_message_sv.app_error(
7373                 x_ExceptionLevel => rlm_message_sv.k_error_level,
7374                 x_MessageName => 'RLM_CUM_KEY_PO_MISSING',
7375                 x_InterfaceHeaderId => x_lines_rec.header_id,
7376                 x_InterfaceLineId => x_lines_rec.line_id,
7377                 x_ValidationType => 'CUM_KEY_PO');
7378     --
7379     IF (l_debug <> -1) THEN
7380        rlm_core_sv.dpop(C_SDEBUG,'EXCEPTION: RLM_CUM_KEY_PO_MISSING');
7381     END IF;
7382     --
7383   -- 4307505
7384   WHEN e_NoCumRec THEN
7385     x_lines_rec.process_status := rlm_core_sv.k_PS_ERROR;
7386     rlm_message_sv.app_error(
7387                 x_ExceptionLevel => rlm_message_sv.k_error_level,
7388                 x_MessageName => 'RLM_NOACT_CUMKEY_CSTCUM_INTRST',
7389                 x_InterfaceHeaderId => x_lines_rec.header_id,
7390                 x_InterfaceLineId => x_lines_rec.line_id,
7391                 x_Token1 => 'SHIP_TO',
7392                 x_Value1 =>
7393                        rlm_core_sv.get_ship_to(x_lines_rec.ship_to_address_id),
7394                 x_Token2 => 'CITEM',
7395                 x_Value2 =>
7396                     rlm_core_sv.get_item_number(x_lines_rec.customer_item_id));
7397     --
7398     IF (l_debug <> -1) THEN
7399        rlm_core_sv.dpop(C_SDEBUG,'EXCEPTION: RLM_NOACT_CUMKEY_CSTCUM_INTRST');
7400     END IF;
7401     --
7402 END validateWithCumRec;
7403 
7404 /*===============================================================
7405 
7406        PROCEDURE validateWithoutCumRec
7407 
7408 ===============================================================*/
7409 
7410 PROCEDURE validateWithoutCumRec(
7411           x_customer_id   IN NUMBER,
7412           x_group_rec     IN t_group_rec,
7413           x_lines_rec     IN OUT NOCOPY RLM_INTERFACE_LINES%ROWTYPE)
7414 
7415 IS
7416 
7417   v_cum_record         RLM_CUM_SV.cum_rec_type;
7418   v_cum_key_record      rlm_cum_sv.cum_key_attrib_rec_type;
7419   e_NoCumRec           EXCEPTION;
7420   e_NoPoCumRec         EXCEPTION;
7421 
7422 BEGIN
7423  --
7424  IF (l_debug <> -1) THEN
7425     rlm_core_sv.dpush(C_SDEBUG,'validateWithoutCumRec');
7426  END IF;
7427  --
7428  IF x_Group_rec.setup_terms_rec.cum_control_code = 'CUM_BY_PO_ONLY' THEN
7429     --bug 4307505
7430      rlm_message_sv.app_error(
7431         x_ExceptionLevel => rlm_message_sv.k_warn_level,
7432         x_MessageName => 'RLM_CUMPO_STUP_NO_RECORD',
7433         x_InterfaceHeaderId => x_lines_rec.header_id,
7434         x_InterfaceLineId => x_lines_rec.line_id);
7435     --
7436  END IF;
7437  --
7438  --give a warning
7439  --
7440  IF (l_debug <> -1) THEN
7441     rlm_core_sv.dlog(C_DEBUG,'warning: RLM_CUM_STUP_NO_RECORD');
7442  END IF;
7443  --
7444  rlm_message_sv.app_error(
7445         x_ExceptionLevel => rlm_message_sv.k_warn_level,
7446         x_MessageName => 'RLM_CUM_STUP_NO_RECORD',
7447         x_InterfaceHeaderId => x_lines_rec.header_id,
7448         x_InterfaceLineId => x_lines_rec.line_id);
7449  --
7450  v_cum_key_record.customer_id := x_customer_id;
7451  --
7452  v_cum_key_record.customer_item_id := x_lines_rec.customer_item_id;
7453  --
7454  v_cum_key_record.ship_from_org_id := x_lines_rec.ship_from_org_id;
7455  --
7456  v_cum_key_record.intrmd_ship_to_address_id :=
7457                                     x_lines_rec.intrmd_ship_to_id;
7458  --
7459  v_cum_key_record.ship_to_address_id := x_lines_rec.ship_to_address_id ;
7460  --
7461  v_cum_key_record.bill_to_address_id := x_lines_rec.bill_to_address_id ;
7462  --
7463  v_cum_key_record.purchase_order_number :=
7464                                    x_lines_rec.cust_po_number;
7465  --
7466  v_cum_key_record.cust_record_year := x_lines_rec.industry_attribute1;
7467  --
7468  IF (l_debug <> -1) THEN
7469     rlm_core_sv.dlog(C_DEBUG,'customer_item_id',
7470                            v_cum_key_record.customer_item_id);
7471     rlm_core_sv.dlog(C_DEBUG,'ship_from_org_id',
7472                            v_cum_key_record.ship_from_org_id);
7473     rlm_core_sv.dlog(C_DEBUG,'ship_to_address_id',
7474                          v_cum_key_record.ship_to_address_id);
7475  END IF;
7476  --
7477  v_cum_record.cum_key_id := NULL;
7478  v_cum_record.msg_name := NULL;
7479  --
7480  rlm_cum_sv.GetLatestCum(v_cum_key_record,
7481                            x_Group_rec.setup_terms_rec,
7482                            v_cum_record,
7483                            rlm_cum_sv.k_CalledByVD);
7484  --
7485  IF v_cum_record.cum_key_id IS NULL THEN
7486    --
7487    IF (l_debug <> -1) THEN
7488       rlm_core_sv.dlog(C_DEBUG,'error: rlm_nocum_rec');
7489    END IF;
7490    --
7491    raise e_NoCumRec;
7492    --
7493  ELSE
7494    --
7495    IF v_cum_record.msg_name = 'RLM_CUM_START_FUTURE' THEN
7496      --
7497      rlm_message_sv.app_error(
7498         x_ExceptionLevel => rlm_message_sv.k_warn_level,
7499         x_MessageName => 'RLM_CUM_START_FUTURE',
7500         x_InterfaceHeaderId => x_lines_rec.header_id,
7501         x_InterfaceLineId => x_lines_rec.line_id,
7502         x_token1=>'ITEM',
7503         x_value1=>
7504           rlm_core_sv.get_item_number(x_lines_rec.customer_item_id),
7505         x_token2=>'SDATE',
7506         x_value2=>v_cum_record.cum_start_date);
7507       --
7508    END IF;
7509    --
7510  END IF;
7511  --
7512  IF (l_debug <> -1) THEN
7513     rlm_core_sv.dpop(C_SDEBUG,'validateWithoutCumRec');
7514  END IF;
7515  --
7516 EXCEPTION
7517 
7518   WHEN e_NoCumRec THEN
7519     --
7520     x_lines_rec.process_status := rlm_core_sv.k_PS_ERROR;
7521     rlm_message_sv.app_error(
7522                 x_ExceptionLevel => rlm_message_sv.k_error_level,
7523                 x_MessageName => 'RLM_NO_ACTIVE_CUM',
7524                 x_InterfaceHeaderId => x_lines_rec.header_id,
7525                 x_InterfaceLineId => x_lines_rec.line_id);
7526     --
7527     IF (l_debug <> -1) THEN
7528        rlm_core_sv.dpop(C_SDEBUG,'EXCEPTION: RLM_NO_ACTIVE_CUM');
7529     END IF;
7530     --
7531  END validateWithoutCumRec;
7532 
7533 
7534 /*===========================================================================
7535 
7536    PROCEDURE NAME:  CheckCUMKeyPO
7537 
7538 ===========================================================================*/
7539 
7540 PROCEDURE CheckCUMKeyPO(
7541           x_group_rec      IN RLM_VALIDATEDEMAND_SV.t_group_rec,
7542           x_header_rec     IN RLM_INTERFACE_HEADERS%ROWTYPE,
7543           x_lines_rec IN OUT NOCOPY RLM_INTERFACE_LINES%ROWTYPE)
7544 IS
7545   --
7546   v_Progress           VARCHAR2(3) := '010';
7547   x_Success            NUMBER := 0;
7548   v_cum_record         RLM_CUM_SV.cum_rec_type;
7549   v_exist              VARCHAR2(30);
7550   v_cum_key_record     rlm_cum_sv.cum_key_attrib_rec_type;
7551 
7552   CURSOR c_cum
7553   IS
7554     SELECT  nvl(customer_item_id,   x_lines_rec.customer_item_id),
7555             nvl(inventory_item_id,  x_lines_rec.inventory_item_id),
7556             nvl(ship_from_org_id,   x_lines_rec.ship_from_org_id),
7557             nvl(intrmd_ship_to_id,  x_lines_rec.intrmd_ship_to_id),
7558             nvl(ship_to_address_id, x_lines_rec.ship_to_address_id),
7559             nvl(bill_to_address_id, x_lines_rec.bill_to_address_id),
7560             cust_po_number ,
7561             start_date_time,
7562             industry_attribute1                   -- cust_record_year
7563     FROM    rlm_interface_lines
7564     WHERE   header_id = x_header_rec.header_id
7565     AND     schedule_item_num = x_group_rec.schedule_item_num
7566     AND     item_detail_type = '4'
7567     AND     item_detail_subtype = 'CUM';
7568 
7569 
7570 BEGIN
7571   --
7572   IF (l_debug <> -1) THEN
7573      rlm_core_sv.dpush(C_SDEBUG,'CheckCUMKeyPO');
7574      rlm_core_sv.dlog(C_DEBUG,'calc_cum_flag',
7575                                 x_Group_rec.setup_terms_rec.calc_cum_flag);
7576      rlm_core_sv.dlog(C_DEBUG,'intransit calc basis',x_Group_rec.setup_terms_rec.intransit_calc_basis);
7577   END IF;
7578   --
7579   IF rlm_message_sv.check_dependency('CUM_KEY_PO') THEN
7580     --
7581     IF x_Group_rec.setup_terms_rec.calc_cum_flag = 'Y' THEN
7582 
7583        --calc_cum_flag = Y does not mean cum processing
7584        --find out if there are any cum info provided
7585        --
7586        IF NVL(x_Group_rec.setup_terms_rec.cum_control_code,'NO_CUM') IN
7587           ('CUM_BY_DATE_PO','CUM_BY_DATE_RECORD_YEAR'
7588             ,'CUM_BY_DATE_ONLY','CUM_BY_PO_ONLY')
7589        THEN --{
7590          --
7591   	 IF (l_debug <> -1) THEN
7592             rlm_core_sv.dlog(C_DEBUG,'schedule_item_num',
7593                                              x_group_rec.schedule_item_num );
7594          END IF;
7595          --
7596          v_Progress := 20;
7597          --
7598          --for each group find out if there is a cum info line (item detail
7599          -- type 4).  If there are no cum line sent, verify that there is
7600          -- a cum_key defined
7601          --
7602          BEGIN
7603 
7604            OPEN c_cum;
7605 
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            -- 4307505 : passing customer id in addition
7624            v_cum_key_record.customer_id := x_header_rec.customer_id;
7625            validateWithCumRec( v_cum_key_record, x_group_rec  , x_lines_rec );
7626            --
7627          EXCEPTION
7628            WHEN NO_DATA_FOUND THEN
7629              --
7630              validateWithoutCumRec(x_header_rec.customer_id,
7631                                   x_group_rec ,
7632                                   x_lines_rec);
7633            WHEN TOO_MANY_ROWS THEN
7634              --
7635   	     IF (l_debug <> -1) THEN
7636                 rlm_core_sv.dlog(C_DEBUG,'error:RLM_MULTIPLE_ITM_CUM_DTL_FOUND') ;
7637              END IF;
7638 	     --
7639              x_lines_rec.process_status := rlm_core_sv.k_PS_ERROR;
7640              rlm_message_sv.app_error(
7641                  x_ExceptionLevel => rlm_message_sv.k_error_level,
7642                  x_MessageName => 'RLM_MULTIPLE_ITM_CUM_DTL_FOUND',
7643                  x_InterfaceHeaderId => x_lines_rec.header_id,
7644                  x_InterfaceLineId => x_lines_rec.line_id,
7645                  x_Token1 => 'SHIP_FROM',
7646                  x_Value1 =>
7647                        rlm_core_sv.get_ship_from(x_lines_rec.ship_from_org_id),
7648                  x_Token2 => 'SHIP_TO',
7649                  x_Value2 =>
7650                        rlm_core_sv.get_ship_to(x_lines_rec.ship_to_address_id),
7651                  x_Token3 => 'CITEM',
7652                  x_Value3 =>
7653                     rlm_core_sv.get_item_number(x_lines_rec.customer_item_id));
7654              --
7655   	     IF (l_debug <> -1) THEN
7656                 rlm_core_sv.dlog(C_DEBUG,'progress',v_Progress);
7657                 rlm_core_sv.dlog(C_DEBUG,'EXCEPTION: e_TooManyRows');
7658              END IF;
7659              --
7660          END;
7661          --
7662        END IF;--}
7663        --
7664     END IF;
7665 
7666     IF x_Group_rec.setup_terms_rec.intransit_calc_basis= 'CUSTOMER_CUM' THEN         --
7667       BEGIN
7668         --
7669         IF c_cum%ISOPEN THEN
7670           --
7671           IF c_cum%NOTFOUND THEN
7672             --
7673             raise no_data_found;
7674             --
7675           END IF;
7676           --
7677         ELSE
7678           --
7679           OPEN c_cum;
7680           FETCH c_cum into
7681             v_cum_key_record.customer_item_id,
7682             v_cum_key_record.inventory_item_id,
7683             v_cum_key_record.ship_from_org_id,
7684             v_cum_key_record.intrmd_ship_to_address_id,
7685             v_cum_key_record.ship_to_address_id,
7686             v_cum_key_record.bill_to_address_id,
7687             v_cum_key_record.purchase_order_number,
7688             v_cum_key_record.cum_start_date,
7689             v_cum_key_record.cust_record_year;
7690 
7691           IF c_cum%NOTFOUND THEN
7692             --
7693             raise no_data_found;
7694             --
7695           END IF;
7696           --
7697         END IF;
7698         --
7699       EXCEPTION
7700        --
7701        When NO_DATA_FOUND then
7702          --
7703          -- 4307505 : changed this from Error to Warning
7704          rlm_message_sv.app_error(
7705                  x_ExceptionLevel => rlm_message_sv.k_warn_level,     -- 4307505
7706                  x_MessageName => 'RLM_NO_CUM_INTRST_CUST_CUM',
7707                  x_InterfaceHeaderId => x_lines_rec.header_id,
7708                  x_InterfaceLineId => x_lines_rec.line_id,
7709                  x_Token1 => 'SHIP_TO',
7710                  x_Value1 =>
7711                        rlm_core_sv.get_ship_to(x_lines_rec.ship_to_address_id),
7712                  x_Token2 => 'CITEM',
7713                  x_Value2 =>
7714                     rlm_core_sv.get_item_number(x_lines_rec.customer_item_id));
7715          --
7716   	 IF (l_debug <> -1) THEN
7717            rlm_core_sv.dlog(C_DEBUG,'progress',v_Progress);
7718            rlm_core_sv.dlog(C_DEBUG,'EXCEPTION: No CUM Line for Intransit Basis Customer CUM');
7719          END IF;
7720        --
7721       END;
7722       --
7723     END IF;
7724     --
7725   END IF;
7726   --
7727   IF c_cum%ISOPEN THEN
7728      CLOSE c_cum; --bug 4570658
7729   END IF;
7730 
7731   IF (l_debug <> -1) THEN
7732      rlm_core_sv.dpop(C_SDEBUG);
7733   END IF;
7734   --
7735 EXCEPTION
7736   --
7737   WHEN OTHERS THEN
7738     --
7739     IF c_cum%ISOPEN THEN
7740        CLOSE c_cum; --bug 4570658
7741     END IF;
7742 
7743     x_lines_rec.process_status := rlm_core_sv.k_PS_ERROR;
7744     rlm_message_sv.sql_error('rlm_validateDemand_sv.CheckCUMKeyPO', v_Progress);
7745     --
7746     IF (l_debug <> -1) THEN
7747        rlm_core_sv.dlog(C_DEBUG,'progress',v_Progress);
7748        rlm_core_sv.dpop(C_SDEBUG,'EXCEPTION: '||SUBSTR(SQLERRM,1,200));
7749     END IF;
7750     --
7751     raise;
7752     --
7753 END CheckCUMKeyPO;
7754 
7755 
7756 /*===========================================================================
7757 
7758         PROCEDURE NAME:  ValidPlanningProdSeqNum
7759 
7760 ===========================================================================*/
7761 PROCEDURE ValidPlanningProdSeqNum(
7762                  x_setup_terms_rec  IN rlm_setup_terms_sv.setup_terms_rec_typ,
7763                  x_header_rec IN RLM_INTERFACE_HEADERS%ROWTYPE,
7764                  x_lines_rec IN OUT NOCOPY RLM_INTERFACE_LINES%ROWTYPE)
7765 IS
7766   v_Progress         VARCHAR(3) := '010';
7767   e_ProdSeqMissing   EXCEPTION;
7768   e_MatchProdSeq     EXCEPTION;
7769 
7770 BEGIN
7771   --
7772   IF (l_debug <> -1) THEN
7773      rlm_core_sv.dpush(C_SDEBUG,'ValidPlanningProdSeqNum');
7774   END IF;
7775   --
7776   IF rlm_message_sv.check_dependency('PROD_SEQ_NUM') THEN
7777     --
7778     IF (l_debug <> -1) THEN
7779        rlm_core_sv.dlog(C_DEBUG,'ScheduleType',x_header_rec.schedule_type);
7780        rlm_core_sv.dlog(C_DEBUG,'Planning_Prod_Seq',
7781                                   x_lines_rec.CUST_PRODUCTION_SEQ_NUM);
7782     END IF;
7783     --
7784     IF (x_header_rec.schedule_type = 'SEQUENCED') THEN
7785        --
7786        IF (x_lines_rec.CUST_PRODUCTION_SEQ_NUM IS NULL AND
7787            x_lines_rec.item_detail_type IN ('0', '1', '2', '6')) THEN
7788           --
7789           raise e_ProdSeqMissing;
7790           --
7791        ELSE
7792           --
7793           IF INSTR(x_setup_terms_rec.match_within_key,'$') = 0 THEN
7794              /* Mandatory to set match within in case of a sequenced schedule*/
7795              raise e_MatchProdSeq;
7796           END IF ;
7797           --
7798        END IF;
7799        --
7800     END IF;
7801     --
7802   END IF;
7803   --
7804   IF (l_debug <> -1) THEN
7805      rlm_core_sv.dpop(C_SDEBUG);
7806   END IF;
7807   --
7808 EXCEPTION
7809   --
7810   WHEN e_ProdSeqMissing THEN
7811     --
7812     x_lines_rec.process_status := rlm_core_sv.k_PS_ERROR;
7813     --
7814     rlm_message_sv.app_error(
7815                 x_ExceptionLevel => rlm_message_sv.k_error_level,
7816                 x_MessageName => 'RLM_PLANNING_PROD_SEQ_MISSING',
7817                 x_InterfaceHeaderId => x_lines_rec.header_id,
7818                 x_InterfaceLineId => x_lines_rec.line_id,
7819                 x_ValidationType => 'PROD_SEQ_NUM');
7820     --
7821     IF (l_debug <> -1) THEN
7822        rlm_core_sv.dpop(C_SDEBUG,'EXCEPTION:  RLM_PLANNING_PROD_SEQ_MISSING');
7823     END IF;
7824     --
7825   WHEN e_MatchProdSeq THEN
7826     --
7827     x_lines_rec.process_status := rlm_core_sv.k_PS_ERROR;
7828     --
7829     rlm_message_sv.app_error(
7830                 x_ExceptionLevel => rlm_message_sv.k_error_level,
7831                 x_MessageName => 'RLM_MATCH_WITHIN_PLN_PROD_SEQ',
7832                 x_InterfaceHeaderId => x_lines_rec.header_id,
7833                 x_InterfaceLineId => x_lines_rec.line_id,
7834                 x_ValidationType => 'PROD_SEQ_NUM');
7835     --
7836     IF (l_debug <> -1) THEN
7837        rlm_core_sv.dpop(C_SDEBUG,'EXCEPTION:  RLM_MATCH_WITHIN_PLN_PROD_SEQ');
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.ValidPlanningProdSeqNum',
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     raise;
7851     --
7852 END ValidPlanningProdSeqNum;
7853 
7854 /*===========================================================================
7855 
7856         PROCEDURE NAME:  ValidLineScheduleType
7857 
7858 ===========================================================================*/
7859 PROCEDURE ValidLineScheduleType(x_header_rec  IN RLM_INTERFACE_HEADERS%ROWTYPE,
7860           x_lines_rec IN OUT NOCOPY RLM_INTERFACE_LINES%ROWTYPE)
7861 IS
7862   v_Progress         VARCHAR(3) := '010';
7863   e_SchedTypeInv     EXCEPTION;
7864 
7865 BEGIN
7866   --
7867   IF (l_debug <> -1) THEN
7868      rlm_core_sv.dpush(C_SDEBUG,'ValidLineScheduleType');
7869   END IF;
7870   --
7871   IF rlm_message_sv.check_dependency('LINE_SCHEDULE_TYPE') THEN
7872     --
7873     IF (l_debug <> -1) THEN
7874        rlm_core_sv.dlog(C_DEBUG,'Schedule_Type',x_header_rec.Schedule_type );
7875     END IF;
7876     --
7877     IF x_lines_rec.Subline_Assigned_Id_Ext IS NOT NULL AND
7878        x_lines_rec.Subline_Config_Code_Ext IS NOT NULL AND
7879        x_lines_rec.Subline_Cust_Item_Ext IS NOT NULL AND
7880        x_lines_rec.Subline_Cust_Item_Id IS NOT NULL AND
7881        x_lines_rec.Subline_Model_Num_Ext IS NOT NULL AND
7882        x_lines_rec.Subline_Quantity IS NOT NULL AND
7883        x_lines_rec.Subline_UOM_CODE IS NOT NULL AND
7884        x_header_rec.Schedule_type <> 'SEQUENCED' THEN
7885           --
7886           raise e_SchedTypeInv;
7887           --
7888     END IF;
7889     --
7890   END IF;
7891   --
7892   IF (l_debug <> -1) THEN
7893      rlm_core_sv.dpop(C_SDEBUG);
7894   END IF;
7895   --
7896 EXCEPTION
7897   --
7898   WHEN e_SchedTypeInv THEN
7899     --
7900     x_lines_rec.process_status := rlm_core_sv.k_PS_ERROR;
7901     rlm_message_sv.app_error(
7902                 x_ExceptionLevel => rlm_message_sv.k_error_level,
7903                 x_MessageName => 'RLM_LINE_SCHEDULE_TYPE_INVALID',
7904                 x_InterfaceHeaderId => x_lines_rec.header_id,
7905                 x_InterfaceLineId => x_lines_rec.line_id,
7906                 x_token1=>'SCHEDULE_TYPE',
7907                 x_value1=>x_header_rec.Schedule_type,
7908                 x_ValidationType => 'LINE_SCHEDULE_TYPE');
7909     --
7910     IF (l_debug <> -1) THEN
7911        rlm_core_sv.dpop(C_SDEBUG,'EXCEPTION:  RLM_LINE_SCHEDULE_TYPE_INVALID');
7912     END IF;
7913     --
7914   WHEN OTHERS THEN
7915     --
7916     x_lines_rec.process_status := rlm_core_sv.k_PS_ERROR;
7917     rlm_message_sv.sql_error('rlm_validateDemand_sv.ValidLineScheduleType: ',
7918                                        v_Progress);
7919     --
7920     IF (l_debug <> -1) THEN
7921        rlm_core_sv.dpop(C_SDEBUG,'EXCEPTION: '||SUBSTR(SQLERRM,1,200));
7922     END IF;
7923     --
7924 END ValidLineScheduleType;
7925 
7926 /*===========================================================================
7927 
7928         PROCEDURE NAME:  UpdateInterfaceLines
7929 
7930 ===========================================================================*/
7931 PROCEDURE UpdateInterfaceLines(x_header_rec IN RLM_INTERFACE_HEADERS%ROWTYPE)
7932 IS
7933   --
7934   v_Progress         VARCHAR(3) := '010';
7935   IsGroupError       BOOLEAN := FALSE;
7936   --
7937   header_id_tab			g_number_tbl_type;
7938   line_id_tab			g_number_tbl_type;
7939   AGREEMENT_ID_TAB              AGREEMENT_ID_T;
7940   ATO_DATA_TYPE_TAB             ATO_DATA_TYPE_T;
7941   BILL_TO_ADDRESS_1_EXT_TAB    BILL_TO_ADDRESS_1_EXT_T;
7942   BILL_TO_ADDRESS_2_EXT_TAB    BILL_TO_ADDRESS_2_EXT_T;
7943   BILL_TO_ADDRESS_3_EXT_TAB    BILL_TO_ADDRESS_3_EXT_T;
7944   BILL_TO_ADDRESS_4_EXT_TAB	    BILL_TO_ADDRESS_4_EXT_T;
7945   BILL_TO_ADDRESS_ID_TAB      BILL_TO_ADDRESS_ID_T;
7946   INVOICE_TO_ORG_ID_TAB       INVOICE_TO_ORG_ID_T;
7947   BILL_TO_CITY_EXT_TAB       BILL_TO_CITY_EXT_T;
7948   BILL_TO_COUNTRY_EXT_TAB    BILL_TO_COUNTRY_EXT_T;
7949   BILL_TO_COUNTY_EXT_TAB     BILL_TO_COUNTY_EXT_T;
7950   BILL_TO_NAME_EXT_TAB       BILL_TO_NAME_EXT_T;
7951   BILL_TO_POSTAL_CD_EXT_TAB    BILL_TO_POSTAL_CD_EXT_T;
7952   BILL_TO_PROVINCE_EXT_TAB    BILL_TO_PROVINCE_EXT_T;
7953   BILL_TO_SITE_USE_ID_TAB     BILL_TO_SITE_USE_ID_T;
7954   BILL_TO_STATE_EXT_TAB       BILL_TO_STATE_EXT_T;
7955   CARRIER_ID_CODE_EXT_TAB     CARRIER_ID_CODE_EXT_T;
7956   CARRIER_QUALIFIER_EXT_TAB    CARRIER_QUALIFIER_EXT_T;
7957   COMMODITY_EXT_TAB           COMMODITY_EXT_T;
7958   COUNTRY_OF_ORIGIN_EXT_TAB    COUNTRY_OF_ORIGIN_EXT_T;
7959   CUST_ASSEMBLY_EXT_TAB        CUST_ASSEMBLY_EXT_T;
7960   CUST_ASSIGNED_ID_EXT_TAB     CUST_ASSIGNED_ID_EXT_T;
7961   CUST_BILL_TO_EXT_TAB         CUST_BILL_TO_EXT_T;
7962   CUST_CONTRACT_NUM_EXT_TAB       CUST_CONTRACT_NUM_EXT_T;
7963   CUSTOMER_DOCK_CODE_TAB          CUSTOMER_DOCK_CODE_T;
7964   CUST_INTRMD_SHIP_TO_EXT_TAB     CUST_INTRMD_SHIP_TO_EXT_T;
7965   CUST_ITEM_PRICE_EXT_TAB         CUST_ITEM_PRICE_EXT_T;
7966   CUST_ITEM_PRICE_UOM_EXT_TAB     CUST_ITEM_PRICE_UOM_EXT_T;
7967   CUSTOMER_ITEM_REVISION_TAB      CUSTOMER_ITEM_REVISION_T;
7968   CUSTOMER_JOB_TAB                CUSTOMER_JOB_T;
7969   CUST_MANUFACTURER_EXT_TAB       CUST_MANUFACTURER_EXT_T;
7970   CUST_MODEL_NUMBER_EXT_TAB       CUST_MODEL_NUMBER_EXT_T;
7971   CUST_MODEL_SERIAL_NUMBER_TAB    CUST_MODEL_SERIAL_NUMBER_T;
7972   CUST_ORDER_NUM_EXT_TAB         CUST_ORDER_NUM_EXT_T;
7973   CUST_PROCESS_NUM_EXT_TAB      CUST_PROCESS_NUM_EXT_T;
7974   CUST_SET_NUM_EXT_TAB             CUST_SET_NUM_EXT_T;
7975   CUST_SHIP_FROM_ORG_EXT_TAB      CUST_SHIP_FROM_ORG_EXT_T;
7976   CUST_SHIP_TO_EXT_TAB            CUST_SHIP_TO_EXT_T;
7977   CUST_UOM_EXT_TAB                CUST_UOM_EXT_T;
7978   CUSTOMER_ITEM_EXT_TAB           CUSTOMER_ITEM_EXT_T;
7979   CUSTOMER_ITEM_ID_TAB            CUSTOMER_ITEM_ID_T;
7980   REQUEST_DATE_TAB                REQUEST_DATE_T;
7981   SCHEDULE_DATE_TAB              SCHEDULE_DATE_T;
7982   DATE_TYPE_CODE_TAB             DATE_TYPE_CODE_T;
7983   DATE_TYPE_CODE_EXT_TAB         DATE_TYPE_CODE_EXT_T;
7984   DELIVERY_LEAD_TIME_TAB         DELIVERY_LEAD_TIME_T;
7985   END_DATE_TIME_TAB	              END_DATE_TIME_T;
7986   EQUIPMENT_CODE_EXT_TAB         EQUIPMENT_CODE_EXT_T;
7987   EQUIPMENT_NUMBER_EXT_TAB       EQUIPMENT_NUMBER_EXT_T;
7988   HANDLING_CODE_EXT_TAB          HANDLING_CODE_EXT_T;
7989   HAZARD_CODE_EXT_TAB            HAZARD_CODE_EXT_T;
7990   HAZARD_CODE_QUAL_EXT_TAB       HAZARD_CODE_QUAL_EXT_T;
7991   HAZARD_DESCRIPTION_EXT_TAB     HAZARD_DESCRIPTION_EXT_T;
7992   IMPORT_LICENSE_DATE_EXT_TAB     IMPORT_LICENSE_DATE_EXT_T;
7993   IMPORT_LICENSE_EXT_TAB          IMPORT_LICENSE_EXT_T;
7994   INDUSTRY_ATTRIBUTE1_TAB         INDUSTRY_ATTRIBUTE1_T;
7995   INDUSTRY_ATTRIBUTE10_TAB        INDUSTRY_ATTRIBUTE10_T;
7996   INDUSTRY_ATTRIBUTE11_TAB        INDUSTRY_ATTRIBUTE11_T;
7997   INDUSTRY_ATTRIBUTE12_TAB        INDUSTRY_ATTRIBUTE12_T;
7998   INDUSTRY_ATTRIBUTE13_TAB        INDUSTRY_ATTRIBUTE13_T;
7999   INDUSTRY_ATTRIBUTE14_TAB        INDUSTRY_ATTRIBUTE14_T;
8000   INDUSTRY_ATTRIBUTE15_TAB        INDUSTRY_ATTRIBUTE15_T;
8001   INDUSTRY_ATTRIBUTE2_TAB         INDUSTRY_ATTRIBUTE2_T;
8002   INDUSTRY_ATTRIBUTE3_TAB         INDUSTRY_ATTRIBUTE3_T;
8003   INDUSTRY_ATTRIBUTE4_TAB         INDUSTRY_ATTRIBUTE4_T;
8004   INDUSTRY_ATTRIBUTE5_TAB         INDUSTRY_ATTRIBUTE5_T;
8005   INDUSTRY_ATTRIBUTE6_TAB         INDUSTRY_ATTRIBUTE6_T;
8006   INDUSTRY_ATTRIBUTE7_TAB         INDUSTRY_ATTRIBUTE7_T;
8007   INDUSTRY_ATTRIBUTE8_TAB         INDUSTRY_ATTRIBUTE8_T;
8008   INDUSTRY_ATTRIBUTE9_TAB         INDUSTRY_ATTRIBUTE9_T;
8009   INDUSTRY_CONTEXT_TAB            INDUSTRY_CONTEXT_T;
8010   INTRMD_SHIP_TO_ID_TAB           INTRMD_SHIP_TO_ID_T;
8011   SHIP_TO_ORG_ID_TAB              SHIP_TO_ORG_ID_T;
8012   INTRMD_ST_ADDRESS_1_EXT_TAB     INTRMD_ST_ADDRESS_1_EXT_T;
8013   INTRMD_ST_ADDRESS_2_EXT_TAB     INTRMD_ST_ADDRESS_2_EXT_T;
8014   INTRMD_ST_ADDRESS_3_EXT_TAB     INTRMD_ST_ADDRESS_3_EXT_T;
8015   INTRMD_ST_ADDRESS_4_EXT_TAB     INTRMD_ST_ADDRESS_4_EXT_T;
8016   INTRMD_ST_CITY_EXT_TAB          INTRMD_ST_CITY_EXT_T;
8017   INTRMD_ST_COUNTRY_EXT_TAB       INTRMD_ST_COUNTRY_EXT_T;
8018   INTRMD_ST_COUNTY_EXT_TAB        INTRMD_ST_COUNTY_EXT_T;
8019   INTRMD_ST_NAME_EXT_TAB          INTRMD_ST_NAME_EXT_T;
8020   INTRMD_ST_POSTAL_CD_EXT_TAB     INTRMD_ST_POSTAL_CD_EXT_T;
8021   INTRMD_ST_PROVINCE_EXT_TAB     INTRMD_ST_PROVINCE_EXT_T;
8022   INTRMD_ST_STATE_EXT_TAB        INTRMD_ST_STATE_EXT_T;
8023   INTRMD_ST_SITE_USE_ID_TAB      INTRMD_ST_SITE_USE_ID_T;
8024   INVENTORY_ITEM_ID_TAB          INVENTORY_ITEM_ID_T;
8025   INVENTORY_ITEM_SEGMENT1_TAB    INVENTORY_ITEM_SEGMENT1_T;
8026   INVENTORY_ITEM_SEGMENT10_TAB      INVENTORY_ITEM_SEGMENT10_T;
8027   INVENTORY_ITEM_SEGMENT11_TAB      INVENTORY_ITEM_SEGMENT11_T;
8028   INVENTORY_ITEM_SEGMENT12_TAB      INVENTORY_ITEM_SEGMENT12_T;
8029   INVENTORY_ITEM_SEGMENT13_TAB      INVENTORY_ITEM_SEGMENT13_T;
8030   INVENTORY_ITEM_SEGMENT14_TAB      INVENTORY_ITEM_SEGMENT14_T;
8031   INVENTORY_ITEM_SEGMENT15_TAB      INVENTORY_ITEM_SEGMENT15_T;
8032   INVENTORY_ITEM_SEGMENT16_TAB      INVENTORY_ITEM_SEGMENT16_T;
8033   INVENTORY_ITEM_SEGMENT17_TAB      INVENTORY_ITEM_SEGMENT17_T;
8034   INVENTORY_ITEM_SEGMENT18_TAB      INVENTORY_ITEM_SEGMENT18_T;
8035   INVENTORY_ITEM_SEGMENT19_TAB      INVENTORY_ITEM_SEGMENT19_T;
8036   INVENTORY_ITEM_SEGMENT2_TAB       INVENTORY_ITEM_SEGMENT2_T;
8037   INVENTORY_ITEM_SEGMENT20_TAB      INVENTORY_ITEM_SEGMENT20_T;
8038   INVENTORY_ITEM_SEGMENT3_TAB      INVENTORY_ITEM_SEGMENT3_T;
8039   INVENTORY_ITEM_SEGMENT4_TAB      INVENTORY_ITEM_SEGMENT4_T;
8040   INVENTORY_ITEM_SEGMENT5_TAB      INVENTORY_ITEM_SEGMENT5_T;
8041   INVENTORY_ITEM_SEGMENT6_TAB      INVENTORY_ITEM_SEGMENT6_T;
8042   INVENTORY_ITEM_SEGMENT7_TAB      INVENTORY_ITEM_SEGMENT7_T;
8043   INVENTORY_ITEM_SEGMENT8_TAB      INVENTORY_ITEM_SEGMENT8_T;
8044   INVENTORY_ITEM_SEGMENT9_TAB      INVENTORY_ITEM_SEGMENT9_T;
8045   ITEM_CONTACT_CODE_1_TAB         ITEM_CONTACT_CODE_1_T;
8046   ITEM_CONTACT_CODE_2_TAB         ITEM_CONTACT_CODE_2_T;
8047   ITEM_CONTACT_VALUE_1_TAB        ITEM_CONTACT_VALUE_1_T;
8048   ITEM_CONTACT_VALUE_2_TAB        ITEM_CONTACT_VALUE_2_T;
8049   ITEM_DESCRIPTION_EXT_TAB        ITEM_DESCRIPTION_EXT_T;
8050   ITEM_DETAIL_QUANTITY_TAB        ITEM_DETAIL_QUANTITY_T;
8051   ITEM_DETAIL_REF_CODE_1_TAB      ITEM_DETAIL_REF_CODE_1_T;
8052   ITEM_DETAIL_REF_CODE_2_TAB      ITEM_DETAIL_REF_CODE_2_T;
8053   ITEM_DETAIL_REF_CODE_3_TAB      ITEM_DETAIL_REF_CODE_3_T;
8054   ITEM_DETAIL_REF_VALUE_1_TAB     ITEM_DETAIL_REF_VALUE_1_T;
8055   ITEM_DETAIL_REF_VALUE_2_TAB     ITEM_DETAIL_REF_VALUE_2_T;
8056   ITEM_DETAIL_REF_VALUE_3_TAB     ITEM_DETAIL_REF_VALUE_3_T;
8057   ITEM_DETAIL_SUBTYPE_TAB         ITEM_DETAIL_SUBTYPE_T;
8058   ITEM_DETAIL_SUBTYPE_EXT_TAB     ITEM_DETAIL_SUBTYPE_EXT_T;
8059   ITEM_DETAIL_TYPE_TAB            ITEM_DETAIL_TYPE_T;
8060   ITEM_DETAIL_TYPE_EXT_TAB        ITEM_DETAIL_TYPE_EXT_T;
8061   ITEM_ENG_CNG_LVL_EXT_TAB        ITEM_ENG_CNG_LVL_EXT_T;
8062   ITEM_MEASUREMENTS_EXT_TAB       ITEM_MEASUREMENTS_EXT_T;
8063   ITEM_NOTE_TEXT_TAB              ITEM_NOTE_TEXT_T;
8064   ITEM_REF_CODE_1_TAB             ITEM_REF_CODE_1_T;
8065   ITEM_REF_CODE_2_TAB            ITEM_REF_CODE_2_T;
8066   ITEM_REF_CODE_3_TAB            ITEM_REF_CODE_3_T;
8067   ITEM_REF_VALUE_1_TAB           ITEM_REF_VALUE_1_T;
8068   ITEM_REF_VALUE_2_TAB           ITEM_REF_VALUE_2_T;
8069   ITEM_REF_VALUE_3_TAB           ITEM_REF_VALUE_3_T;
8070   ITEM_RELEASE_STATUS_EXT_TAB    ITEM_RELEASE_STATUS_EXT_T;
8071   LADING_QUANTITY_EXT_TAB        LADING_QUANTITY_EXT_T;
8072   LETTER_CREDIT_EXPDT_EXT_TAB    LETTER_CREDIT_EXPDT_EXT_T;
8073   LETTER_CREDIT_EXT_TAB          LETTER_CREDIT_EXT_T;
8074   LINE_REFERENCE_TAB             LINE_REFERENCE_T;
8075   LINK_TO_LINE_REF_TAB           LINK_TO_LINE_REF_T;
8076   ORDER_HEADER_ID_TAB            ORDER_HEADER_ID_T;
8077   OTHER_NAME_CODE_1_TAB          OTHER_NAME_CODE_1_T;
8078   OTHER_NAME_CODE_2_TAB          OTHER_NAME_CODE_2_T;
8079   OTHER_NAME_VALUE_1_TAB         OTHER_NAME_VALUE_1_T;
8080   OTHER_NAME_VALUE_2_TAB         OTHER_NAME_VALUE_2_T;
8081   PACK_SIZE_EXT_TAB              PACK_SIZE_EXT_T;
8082   PACK_UNITS_PER_PACK_EXT_TAB    PACK_UNITS_PER_PACK_EXT_T;
8083   PACK_UOM_CODE_EXT_TAB          PACK_UOM_CODE_EXT_T;
8084   PACKAGING_CODE_EXT_TAB         PACKAGING_CODE_EXT_T;
8085   PARENT_LINK_LINE_REF_TAB       PARENT_LINK_LINE_REF_T;
8086   CUST_PRODUCTION_SEQ_NUM_TAB      CUST_PRODUCTION_SEQ_NUM_T;
8087   PRICE_LIST_ID_TAB              PRICE_LIST_ID_T;
8088   PRIMARY_QUANTITY_TAB           PRIMARY_QUANTITY_T;
8089   PRIMARY_UOM_CODE_TAB           PRIMARY_UOM_CODE_T;
8090   PRIME_CONTRCTR_PART_EXT_TAB    PRIME_CONTRCTR_PART_EXT_T;
8091   PROCESS_STATUS_TAB             PROCESS_STATUS_T;
8092   CUST_PO_RELEASE_NUM_TAB        CUST_PO_RELEASE_NUM_T;
8093   CUST_PO_DATE_TAB               CUST_PO_DATE_T;
8094   CUST_PO_LINE_NUM_TAB           CUST_PO_LINE_NUM_T;
8095   CUST_PO_NUMBER_TAB             CUST_PO_NUMBER_T;
8096   QTY_TYPE_CODE_TAB              QTY_TYPE_CODE_T;
8097   QTY_TYPE_CODE_EXT_TAB          QTY_TYPE_CODE_EXT_T;
8098   RETURN_CONTAINER_EXT_TAB       RETURN_CONTAINER_EXT_T;
8099   SCHEDULE_LINE_ID_TAB           SCHEDULE_LINE_ID_T;
8100   ROUTING_DESC_EXT_TAB           ROUTING_DESC_EXT_T;
8101   ROUTING_SEQ_CODE_EXT_TAB       ROUTING_SEQ_CODE_EXT_T;
8102   SCHEDULE_ITEM_NUM_TAB          SCHEDULE_ITEM_NUM_T;
8103   SHIP_DEL_PATTERN_EXT_TAB       SHIP_DEL_PATTERN_EXT_T;
8104   SHIP_DEL_TIME_CODE_EXT_TAB     SHIP_DEL_TIME_CODE_EXT_T;
8105   SHIP_DEL_RULE_NAME_TAB         SHIP_DEL_RULE_NAME_T;
8106   SHIP_FROM_ADDRESS_1_EXT_TAB    SHIP_FROM_ADDRESS_1_EXT_T;
8107   SHIP_FROM_ADDRESS_2_EXT_TAB    SHIP_FROM_ADDRESS_2_EXT_T;
8108   SHIP_FROM_ADDRESS_3_EXT_TAB    SHIP_FROM_ADDRESS_3_EXT_T;
8109   SHIP_FROM_ADDRESS_4_EXT_TAB    SHIP_FROM_ADDRESS_4_EXT_T;
8110   SHIP_FROM_CITY_EXT_TAB         SHIP_FROM_CITY_EXT_T;
8111   SHIP_FROM_COUNTRY_EXT_TAB      SHIP_FROM_COUNTRY_EXT_T;
8112   SHIP_FROM_COUNTY_EXT_TAB       SHIP_FROM_COUNTY_EXT_T;
8113   SHIP_FROM_NAME_EXT_TAB         SHIP_FROM_NAME_EXT_T;
8114   SHIP_FROM_ORG_ID_TAB           SHIP_FROM_ORG_ID_T;
8115   SHIP_FROM_POSTAL_CD_EXT_TAB    SHIP_FROM_POSTAL_CD_EXT_T;
8116   SHIP_FROM_PROVINCE_EXT_TAB     SHIP_FROM_PROVINCE_EXT_T;
8117   SHIP_FROM_STATE_EXT_TAB        SHIP_FROM_STATE_EXT_T;
8118   SHIP_LABEL_INFO_LINE_1_TAB     SHIP_LABEL_INFO_LINE_1_T;
8119   SHIP_LABEL_INFO_LINE_10_TAB    SHIP_LABEL_INFO_LINE_10_T;
8120   SHIP_LABEL_INFO_LINE_2_TAB     SHIP_LABEL_INFO_LINE_2_T;
8121   SHIP_LABEL_INFO_LINE_3_TAB     SHIP_LABEL_INFO_LINE_3_T;
8122   SHIP_LABEL_INFO_LINE_4_TAB     SHIP_LABEL_INFO_LINE_4_T;
8123   SHIP_LABEL_INFO_LINE_5_TAB     SHIP_LABEL_INFO_LINE_5_T;
8124   SHIP_LABEL_INFO_LINE_6_TAB     SHIP_LABEL_INFO_LINE_6_T;
8125   SHIP_LABEL_INFO_LINE_7_TAB     SHIP_LABEL_INFO_LINE_7_T;
8126   SHIP_LABEL_INFO_LINE_8_TAB     SHIP_LABEL_INFO_LINE_8_T;
8127   SHIP_LABEL_INFO_LINE_9_TAB     SHIP_LABEL_INFO_LINE_9_T;
8128   SHIP_TO_ADDRESS_1_EXT_TAB      SHIP_TO_ADDRESS_1_EXT_T;
8129   SHIP_TO_ADDRESS_2_EXT_TAB       SHIP_TO_ADDRESS_2_EXT_T;
8130   SHIP_TO_ADDRESS_3_EXT_TAB       SHIP_TO_ADDRESS_3_EXT_T;
8131   SHIP_TO_ADDRESS_4_EXT_TAB       SHIP_TO_ADDRESS_4_EXT_T;
8132   SHIP_TO_ADDRESS_ID_TAB          SHIP_TO_ADDRESS_ID_T;
8133   DELIVER_TO_ORG_ID_TAB           DELIVER_TO_ORG_ID_T;
8134   SHIP_TO_CITY_EXT_TAB            SHIP_TO_CITY_EXT_T;
8135   SHIP_TO_COUNTRY_EXT_TAB         SHIP_TO_COUNTRY_EXT_T;
8136   SHIP_TO_COUNTY_EXT_TAB          SHIP_TO_COUNTY_EXT_T;
8137   SHIP_TO_NAME_EXT_TAB            SHIP_TO_NAME_EXT_T;
8138   SHIP_TO_POSTAL_CD_EXT_TAB       SHIP_TO_POSTAL_CD_EXT_T;
8139   SHIP_TO_PROVINCE_EXT_TAB        SHIP_TO_PROVINCE_EXT_T;
8140   SHIP_TO_SITE_USE_ID_TAB         SHIP_TO_SITE_USE_ID_T;
8141   SHIP_TO_STATE_EXT_TAB           SHIP_TO_STATE_EXT_T;
8142   START_DATE_TIME_TAB             START_DATE_TIME_T;
8143   SUBLINE_ASSIGNED_ID_EXT_TAB     SUBLINE_ASSIGNED_ID_EXT_T;
8144   SUBLINE_CONFIG_CODE_EXT_TAB     SUBLINE_CONFIG_CODE_EXT_T;
8145   SUBLINE_CUST_ITEM_EXT_TAB       SUBLINE_CUST_ITEM_EXT_T;
8146   SUBLINE_CUST_ITEM_ID_TAB        SUBLINE_CUST_ITEM_ID_T;
8147   SUBLINE_MODEL_NUM_EXT_TAB       SUBLINE_MODEL_NUM_EXT_T;
8148   SUBLINE_QUANTITY_TAB           SUBLINE_QUANTITY_T;
8149   SUBLINE_UOM_CODE_TAB           SUBLINE_UOM_CODE_T;
8150   SUPPLIER_ITEM_EXT_TAB          SUPPLIER_ITEM_EXT_T;
8151   TRANSIT_TIME_EXT_TAB           TRANSIT_TIME_EXT_T;
8152   TRANSIT_TIME_QUAL_EXT_TAB      TRANSIT_TIME_QUAL_EXT_T;
8153   TRANSPORT_LOC_QUAL_EXT_TAB     TRANSPORT_LOC_QUAL_EXT_T;
8154   TRANSPORT_LOCATION_EXT_TAB     TRANSPORT_LOCATION_EXT_T;
8155   TRANSPORT_METHOD_EXT_TAB      TRANSPORT_METHOD_EXT_T;
8156   UOM_CODE_TAB                 UOM_CODE_T;
8157   WEIGHT_EXT_TAB              WEIGHT_EXT_T;
8158   WEIGHT_QUALIFIER_EXT_TAB     WEIGHT_QUALIFIER_EXT_T;
8159   WEIGHT_UOM_EXT_TAB           WEIGHT_UOM_EXT_T;
8160   FBO_CONFIGURATION_KEY_1_TAB     FBO_CONFIGURATION_KEY_1_T;
8161   FBO_CONFIGURATION_KEY_2_TAB    FBO_CONFIGURATION_KEY_2_T;
8162   FBO_CONFIGURATION_KEY_3_TAB    FBO_CONFIGURATION_KEY_3_T;
8163   FBO_CONFIGURATION_KEY_4_TAB    FBO_CONFIGURATION_KEY_4_T;
8164   FBO_CONFIGURATION_KEY_5_TAB    FBO_CONFIGURATION_KEY_5_T;
8165   MATCH_KEY_ACROSS_TAB           MATCH_KEY_ACROSS_T;
8166   MATCH_KEY_WITHIN_TAB           MATCH_KEY_WITHIN_T;
8167   CRITICAL_KEY_ATTRIBUTES_TAB    CRITICAL_KEY_ATTRIBUTES_T;
8168   ATTRIBUTE_CATEGORY_TAB         ATTRIBUTE_CATEGORY_T;
8169   ATTRIBUTE1_TAB                 ATTRIBUTE1_T;
8170   ATTRIBUTE2_TAB                 ATTRIBUTE2_T;
8171   ATTRIBUTE3_TAB                 ATTRIBUTE3_T;
8172   ATTRIBUTE4_TAB                 ATTRIBUTE4_T;
8173   ATTRIBUTE5_TAB                 ATTRIBUTE5_T;
8174   ATTRIBUTE6_TAB                ATTRIBUTE6_T;
8175   ATTRIBUTE7_TAB                ATTRIBUTE7_T;
8176   ATTRIBUTE8_TAB                ATTRIBUTE8_T;
8177   ATTRIBUTE9_TAB                ATTRIBUTE9_T;
8178   ATTRIBUTE10_TAB               ATTRIBUTE10_T;
8179   ATTRIBUTE11_TAB               ATTRIBUTE11_T;
8180   ATTRIBUTE12_TAB               ATTRIBUTE12_T;
8181   ATTRIBUTE13_TAB               ATTRIBUTE13_T;
8182   ATTRIBUTE14_TAB               ATTRIBUTE14_T;
8183   ATTRIBUTE15_TAB               ATTRIBUTE15_T;
8184   BLANKET_NUMBER_TAB	        BLANKET_NUMBER_T;
8185   INTMED_SHIP_TO_ORG_ID_TAB	INTMED_SHIP_TO_ORG_ID_T;
8186   SHIP_TO_CUSTOMER_ID_TAB       SHIP_TO_CUSTOMER_ID_T;
8187   --
8188   v_last_update_date       DATE   := sysdate;
8189   v_last_updated_by        NUMBER := fnd_global.user_id;
8190   v_last_update_login      NUMBER := fnd_global.login_id;
8191   v_request_id             NUMBER := fnd_global.conc_REQUEST_ID;
8192   v_program_application_id NUMBER := fnd_global.PROG_APPL_ID;
8193   v_program_id             NUMBER := fnd_global.conc_program_id;
8194   v_program_update_date    DATE   := sysdate;
8195   --
8196 BEGIN
8197   --
8198   IF (l_debug <> -1) THEN
8199      rlm_core_sv.dpush(C_SDEBUG,'UpdateInterfaceLines');
8200      rlm_core_sv.dlog(C_DEBUG,'Number of Interface lines in g_lines_tab ',g_lines_tab.COUNT);
8201   END IF;
8202   --
8203   g_line_PS := rlm_core_sv.k_PS_AVAILABLE;
8204 
8205   FOR i IN 1..g_lines_tab.COUNT LOOP
8206     --
8207     IF g_lines_tab(i).process_status = rlm_core_sv.k_PS_AVAILABLE THEN
8208        --
8209        IF (l_debug <> -1) THEN
8210           rlm_core_sv.dlog(C_DEBUG,'line_id',g_lines_tab(i).line_id);
8211           rlm_core_sv.dlog(C_DEBUG,'Process Status AVAILABLE ');
8212        END IF;
8213        --
8214     ELSIF g_lines_tab(i).process_status = rlm_core_sv.k_PS_ERROR THEN
8215        --
8216        g_line_PS := rlm_core_sv.k_PS_ERROR;
8217        IsGroupError := TRUE;
8218        --
8219        IF (l_debug <> -1) THEN
8220           rlm_core_sv.dlog(C_DEBUG,'line_id',g_lines_tab(i).line_id);
8221           rlm_core_sv.dlog(C_DEBUG,'Process Status ERROR ');
8222        END IF;
8223        --
8224     END IF;
8225     --
8226     IF (l_debug <> -1) THEN
8227        rlm_core_sv.dlog(C_DEBUG,'customer_item_id ',
8228                                     g_lines_tab(i).customer_item_id);
8229     END IF;
8230     --
8231     -- assign values for industry attribute fields
8232     --
8233     g_lines_tab(i).industry_attribute2 := to_char(g_lines_tab(i).start_date_time,'RRRR/MM/DD HH24:MI:SS');
8234     g_lines_tab(i).industry_attribute3 := g_header_rec.schedule_reference_num;
8235     g_lines_tab(i).industry_attribute15 := g_lines_tab(i).ship_from_org_id;
8236     --
8237     --assign tables to values
8238       header_id_tab(i)		:=      g_lines_tab(i).header_id;
8239       line_id_tab(i)		:=      g_lines_tab(i).line_id;
8240       AGREEMENT_ID_TAB(i)            := g_lines_tab(i).AGREEMENT_ID;
8241       ATO_DATA_TYPE_TAB(i)           := g_lines_tab(i).ATO_DATA_TYPE;
8242       BILL_TO_ADDRESS_1_EXT_TAB(i)   := g_lines_tab(i).BILL_TO_ADDRESS_1_EXT;
8243       BILL_TO_ADDRESS_2_EXT_TAB(i)   := g_lines_tab(i).BILL_TO_ADDRESS_2_EXT;
8244       BILL_TO_ADDRESS_3_EXT_TAB(i)   := g_lines_tab(i).BILL_TO_ADDRESS_3_EXT;
8245       BILL_TO_ADDRESS_4_EXT_TAB(i)	   := g_lines_tab(i).BILL_TO_ADDRESS_4_EXT;
8246       BILL_TO_ADDRESS_ID_TAB(i)     := g_lines_tab(i).BILL_TO_ADDRESS_ID;
8247       INVOICE_TO_ORG_ID_TAB(i)      := g_lines_tab(i).INVOICE_TO_ORG_ID ;
8248       BILL_TO_CITY_EXT_TAB(i)      := g_lines_tab(i).BILL_TO_CITY_EXT;
8249       BILL_TO_COUNTRY_EXT_TAB(i)   := g_lines_tab(i).BILL_TO_COUNTRY_EXT;
8250       BILL_TO_COUNTY_EXT_TAB(i)    := g_lines_tab(i).BILL_TO_COUNTY_EXT;
8251       BILL_TO_NAME_EXT_TAB(i)      := g_lines_tab(i).BILL_TO_NAME_EXT;
8252       BILL_TO_POSTAL_CD_EXT_TAB(i)   := g_lines_tab(i).BILL_TO_POSTAL_CD_EXT;
8253       BILL_TO_PROVINCE_EXT_TAB(i)   := g_lines_tab(i).BILL_TO_PROVINCE_EXT;
8254       BILL_TO_SITE_USE_ID_TAB(i)    := g_lines_tab(i).BILL_TO_SITE_USE_ID;
8255       BILL_TO_STATE_EXT_TAB(i)      := g_lines_tab(i).BILL_TO_STATE_EXT;
8256       CARRIER_ID_CODE_EXT_TAB(i)    := g_lines_tab(i).CARRIER_ID_CODE_EXT;
8257       CARRIER_QUALIFIER_EXT_TAB(i)   := g_lines_tab(i).CARRIER_QUALIFIER_EXT;
8258       COMMODITY_EXT_TAB(i)          := g_lines_tab(i).COMMODITY_EXT;
8259       COUNTRY_OF_ORIGIN_EXT_TAB(i)   := g_lines_tab(i).COUNTRY_OF_ORIGIN_EXT;
8260       CUST_ASSEMBLY_EXT_TAB(i)       := g_lines_tab(i).CUST_ASSEMBLY_EXT;
8261       CUST_ASSIGNED_ID_EXT_TAB(i)    := g_lines_tab(i).CUST_ASSIGNED_ID_EXT;
8262       CUST_BILL_TO_EXT_TAB(i)        := g_lines_tab(i).CUST_BILL_TO_EXT;
8263       CUST_CONTRACT_NUM_EXT_TAB(i)      := g_lines_tab(i).CUST_CONTRACT_NUM_EXT;
8264       CUSTOMER_DOCK_CODE_TAB(i)         := g_lines_tab(i).CUSTOMER_DOCK_CODE;
8265       CUST_INTRMD_SHIP_TO_EXT_TAB(i)    := g_lines_tab(i).CUST_INTRMD_SHIP_TO_EXT;
8266       CUST_ITEM_PRICE_EXT_TAB(i)        := g_lines_tab(i).CUST_ITEM_PRICE_EXT;
8267       CUST_ITEM_PRICE_UOM_EXT_TAB(i)    := g_lines_tab(i).CUST_ITEM_PRICE_UOM_EXT;
8268       CUSTOMER_ITEM_REVISION_TAB(i)     := g_lines_tab(i).CUSTOMER_ITEM_REVISION;
8269       CUSTOMER_JOB_TAB(i)               := g_lines_tab(i).CUSTOMER_JOB;
8270       CUST_MANUFACTURER_EXT_TAB(i)      := g_lines_tab(i).CUST_MANUFACTURER_EXT;
8271       CUST_MODEL_NUMBER_EXT_TAB(i)      := g_lines_tab(i).CUST_MODEL_NUMBER_EXT;
8272       CUST_MODEL_SERIAL_NUMBER_TAB(i)   := g_lines_tab(i).CUST_MODEL_SERIAL_NUMBER;
8273       CUST_ORDER_NUM_EXT_TAB(i)        := g_lines_tab(i).CUST_ORDER_NUM_EXT;
8274       CUST_PROCESS_NUM_EXT_TAB(i)     := g_lines_tab(i).CUST_PROCESS_NUM_EXT;
8275       CUST_SET_NUM_EXT_TAB(i)            := g_lines_tab(i).CUST_SET_NUM_EXT;
8276       CUST_SHIP_FROM_ORG_EXT_TAB(i)     := g_lines_tab(i).CUST_SHIP_FROM_ORG_EXT;
8277       CUST_SHIP_TO_EXT_TAB(i)           := g_lines_tab(i).CUST_SHIP_TO_EXT;
8278       CUST_UOM_EXT_TAB(i)               := g_lines_tab(i).CUST_UOM_EXT;
8279       CUSTOMER_ITEM_EXT_TAB(i)          := g_lines_tab(i).CUSTOMER_ITEM_EXT;
8280       CUSTOMER_ITEM_ID_TAB(i)           := g_lines_tab(i).CUSTOMER_ITEM_ID;
8281       REQUEST_DATE_TAB(i)               := g_lines_tab(i).REQUEST_DATE;
8282       SCHEDULE_DATE_TAB(i)             := g_lines_tab(i).SCHEDULE_DATE;
8283       DATE_TYPE_CODE_TAB(i)            := g_lines_tab(i).DATE_TYPE_CODE;
8284       DATE_TYPE_CODE_EXT_TAB(i)        := g_lines_tab(i).DATE_TYPE_CODE_EXT;
8285       DELIVERY_LEAD_TIME_TAB(i)        := g_lines_tab(i).DELIVERY_LEAD_TIME;
8286       END_DATE_TIME_TAB(i)	             := g_lines_tab(i).END_DATE_TIME;
8287       EQUIPMENT_CODE_EXT_TAB(i)        := g_lines_tab(i).EQUIPMENT_CODE_EXT;
8288       EQUIPMENT_NUMBER_EXT_TAB(i)      := g_lines_tab(i).EQUIPMENT_NUMBER_EXT;
8289       HANDLING_CODE_EXT_TAB(i)         := g_lines_tab(i).HANDLING_CODE_EXT;
8290       HAZARD_CODE_EXT_TAB(i)           := g_lines_tab(i).HAZARD_CODE_EXT;
8291       HAZARD_CODE_QUAL_EXT_TAB(i)      := g_lines_tab(i).HAZARD_CODE_QUAL_EXT;
8292       HAZARD_DESCRIPTION_EXT_TAB(i)    := g_lines_tab(i).HAZARD_DESCRIPTION_EXT;
8293       IMPORT_LICENSE_DATE_EXT_TAB(i)    := g_lines_tab(i).IMPORT_LICENSE_DATE_EXT;
8294       IMPORT_LICENSE_EXT_TAB(i)         := g_lines_tab(i).IMPORT_LICENSE_EXT;
8295       INDUSTRY_ATTRIBUTE1_TAB(i)        := g_lines_tab(i).INDUSTRY_ATTRIBUTE1;
8296       INDUSTRY_ATTRIBUTE10_TAB(i)       := g_lines_tab(i).INDUSTRY_ATTRIBUTE10;
8297       INDUSTRY_ATTRIBUTE11_TAB(i)       := g_lines_tab(i).INDUSTRY_ATTRIBUTE11;
8298       INDUSTRY_ATTRIBUTE12_TAB(i)       := g_lines_tab(i).INDUSTRY_ATTRIBUTE12;
8299       INDUSTRY_ATTRIBUTE13_TAB(i)       := g_lines_tab(i).INDUSTRY_ATTRIBUTE13;
8300       INDUSTRY_ATTRIBUTE14_TAB(i)       := g_lines_tab(i).INDUSTRY_ATTRIBUTE14;
8301       INDUSTRY_ATTRIBUTE15_TAB(i)       := g_lines_tab(i).INDUSTRY_ATTRIBUTE15;
8302       INDUSTRY_ATTRIBUTE2_TAB(i)        := g_lines_tab(i).INDUSTRY_ATTRIBUTE2;
8303       INDUSTRY_ATTRIBUTE3_TAB(i)        := g_lines_tab(i).INDUSTRY_ATTRIBUTE3;
8304       INDUSTRY_ATTRIBUTE4_TAB(i)        := g_lines_tab(i).INDUSTRY_ATTRIBUTE4;
8305       INDUSTRY_ATTRIBUTE5_TAB(i)        := g_lines_tab(i).INDUSTRY_ATTRIBUTE5;
8306       INDUSTRY_ATTRIBUTE6_TAB(i)        := g_lines_tab(i).INDUSTRY_ATTRIBUTE6;
8307       INDUSTRY_ATTRIBUTE7_TAB(i)        := g_lines_tab(i).INDUSTRY_ATTRIBUTE7;
8308       INDUSTRY_ATTRIBUTE8_TAB(i)        := g_lines_tab(i).INDUSTRY_ATTRIBUTE8;
8309       INDUSTRY_ATTRIBUTE9_TAB(i)        := g_lines_tab(i).INDUSTRY_ATTRIBUTE9;
8310       INDUSTRY_CONTEXT_TAB(i)           := g_lines_tab(i).INDUSTRY_CONTEXT;
8311       INTRMD_SHIP_TO_ID_TAB(i)          := g_lines_tab(i).INTRMD_SHIP_TO_ID;
8312       SHIP_TO_ORG_ID_TAB(i)             := g_lines_tab(i).SHIP_TO_ORG_ID   ;
8313       INTRMD_ST_ADDRESS_1_EXT_TAB(i)    := g_lines_tab(i).INTRMD_ST_ADDRESS_1_EXT;
8314       INTRMD_ST_ADDRESS_2_EXT_TAB(i)    := g_lines_tab(i).INTRMD_ST_ADDRESS_2_EXT;
8315       INTRMD_ST_ADDRESS_3_EXT_TAB(i)    := g_lines_tab(i).INTRMD_ST_ADDRESS_3_EXT;
8316       INTRMD_ST_ADDRESS_4_EXT_TAB(i)    := g_lines_tab(i).INTRMD_ST_ADDRESS_4_EXT;
8317       INTRMD_ST_CITY_EXT_TAB(i)         := g_lines_tab(i).INTRMD_ST_CITY_EXT;
8318       INTRMD_ST_COUNTRY_EXT_TAB(i)      := g_lines_tab(i).INTRMD_ST_COUNTRY_EXT;
8319       INTRMD_ST_COUNTY_EXT_TAB(i)       := g_lines_tab(i).INTRMD_ST_COUNTY_EXT;
8320       INTRMD_ST_NAME_EXT_TAB(i)         := g_lines_tab(i).INTRMD_ST_NAME_EXT;
8321       INTRMD_ST_POSTAL_CD_EXT_TAB(i)    := g_lines_tab(i).INTRMD_ST_POSTAL_CD_EXT;
8322       INTRMD_ST_PROVINCE_EXT_TAB(i)    := g_lines_tab(i).INTRMD_ST_PROVINCE_EXT;
8323       INTRMD_ST_STATE_EXT_TAB(i)       := g_lines_tab(i).INTRMD_ST_STATE_EXT;
8324       INTRMD_ST_SITE_USE_ID_TAB(i)     := g_lines_tab(i).INTRMD_ST_SITE_USE_ID;
8325       INVENTORY_ITEM_ID_TAB(i)         := g_lines_tab(i).INVENTORY_ITEM_ID;
8326       INVENTORY_ITEM_SEGMENT1_TAB(i)   := g_lines_tab(i).INVENTORY_ITEM_SEGMENT1;
8327       INVENTORY_ITEM_SEGMENT10_TAB(i)     := g_lines_tab(i).INVENTORY_ITEM_SEGMENT10;
8328       INVENTORY_ITEM_SEGMENT11_TAB(i)     := g_lines_tab(i).INVENTORY_ITEM_SEGMENT11;
8329       INVENTORY_ITEM_SEGMENT12_TAB(i)     := g_lines_tab(i).INVENTORY_ITEM_SEGMENT12;
8330       INVENTORY_ITEM_SEGMENT13_TAB(i)     := g_lines_tab(i).INVENTORY_ITEM_SEGMENT13;
8331       INVENTORY_ITEM_SEGMENT14_TAB(i)     := g_lines_tab(i).INVENTORY_ITEM_SEGMENT14;
8332       INVENTORY_ITEM_SEGMENT15_TAB(i)     := g_lines_tab(i).INVENTORY_ITEM_SEGMENT15;
8333       INVENTORY_ITEM_SEGMENT16_TAB(i)     := g_lines_tab(i).INVENTORY_ITEM_SEGMENT16;
8334       INVENTORY_ITEM_SEGMENT17_TAB(i)     := g_lines_tab(i).INVENTORY_ITEM_SEGMENT17;
8335       INVENTORY_ITEM_SEGMENT18_TAB(i)     := g_lines_tab(i).INVENTORY_ITEM_SEGMENT18;
8336       INVENTORY_ITEM_SEGMENT19_TAB(i)     := g_lines_tab(i).INVENTORY_ITEM_SEGMENT19;
8337       INVENTORY_ITEM_SEGMENT2_TAB(i)      := g_lines_tab(i).INVENTORY_ITEM_SEGMENT2;
8338       INVENTORY_ITEM_SEGMENT20_TAB(i)     := g_lines_tab(i).INVENTORY_ITEM_SEGMENT20;
8339       INVENTORY_ITEM_SEGMENT3_TAB(i)     := g_lines_tab(i).INVENTORY_ITEM_SEGMENT3;
8340       INVENTORY_ITEM_SEGMENT4_TAB(i)     := g_lines_tab(i).INVENTORY_ITEM_SEGMENT4;
8341       INVENTORY_ITEM_SEGMENT5_TAB(i)     := g_lines_tab(i).INVENTORY_ITEM_SEGMENT5;
8342       INVENTORY_ITEM_SEGMENT6_TAB(i)     := g_lines_tab(i).INVENTORY_ITEM_SEGMENT6;
8343       INVENTORY_ITEM_SEGMENT7_TAB(i)     := g_lines_tab(i).INVENTORY_ITEM_SEGMENT7;
8344       INVENTORY_ITEM_SEGMENT8_TAB(i)     := g_lines_tab(i).INVENTORY_ITEM_SEGMENT8;
8345       INVENTORY_ITEM_SEGMENT9_TAB(i)     := g_lines_tab(i).INVENTORY_ITEM_SEGMENT9;
8346       ITEM_CONTACT_CODE_1_TAB(i)        := g_lines_tab(i).ITEM_CONTACT_CODE_1;
8347       ITEM_CONTACT_CODE_2_TAB(i)        := g_lines_tab(i).ITEM_CONTACT_CODE_2;
8348       ITEM_CONTACT_VALUE_1_TAB(i)       := g_lines_tab(i).ITEM_CONTACT_VALUE_1;
8349       ITEM_CONTACT_VALUE_2_TAB(i)       := g_lines_tab(i).ITEM_CONTACT_VALUE_2;
8350       ITEM_DESCRIPTION_EXT_TAB(i)       := g_lines_tab(i).ITEM_DESCRIPTION_EXT;
8351       ITEM_DETAIL_QUANTITY_TAB(i)       := g_lines_tab(i).ITEM_DETAIL_QUANTITY;
8352       ITEM_DETAIL_REF_CODE_1_TAB(i)     := g_lines_tab(i).ITEM_DETAIL_REF_CODE_1;
8353       ITEM_DETAIL_REF_CODE_2_TAB(i)     := g_lines_tab(i).ITEM_DETAIL_REF_CODE_2;
8354       ITEM_DETAIL_REF_CODE_3_TAB(i)     := g_lines_tab(i).ITEM_DETAIL_REF_CODE_3;
8355       ITEM_DETAIL_REF_VALUE_1_TAB(i)    := g_lines_tab(i).ITEM_DETAIL_REF_VALUE_1;
8356       ITEM_DETAIL_REF_VALUE_2_TAB(i)    := g_lines_tab(i).ITEM_DETAIL_REF_VALUE_2;
8357       ITEM_DETAIL_REF_VALUE_3_TAB(i)    := g_lines_tab(i).ITEM_DETAIL_REF_VALUE_3;
8358       ITEM_DETAIL_SUBTYPE_TAB(i)        := g_lines_tab(i).ITEM_DETAIL_SUBTYPE;
8359       ITEM_DETAIL_SUBTYPE_EXT_TAB(i)    := g_lines_tab(i).ITEM_DETAIL_SUBTYPE_EXT;
8360       ITEM_DETAIL_TYPE_TAB(i)           := g_lines_tab(i).ITEM_DETAIL_TYPE;
8361       ITEM_DETAIL_TYPE_EXT_TAB(i)       := g_lines_tab(i).ITEM_DETAIL_TYPE_EXT;
8362       ITEM_ENG_CNG_LVL_EXT_TAB(i)       := g_lines_tab(i).ITEM_ENG_CNG_LVL_EXT;
8363       ITEM_MEASUREMENTS_EXT_TAB(i)      := g_lines_tab(i).ITEM_MEASUREMENTS_EXT;
8364       ITEM_NOTE_TEXT_TAB(i)             := g_lines_tab(i).ITEM_NOTE_TEXT;
8365       ITEM_REF_CODE_1_TAB(i)            := g_lines_tab(i).ITEM_REF_CODE_1;
8366       ITEM_REF_CODE_2_TAB(i)           := g_lines_tab(i).ITEM_REF_CODE_2;
8367       ITEM_REF_CODE_3_TAB(i)           := g_lines_tab(i).ITEM_REF_CODE_3;
8368       ITEM_REF_VALUE_1_TAB(i)          := g_lines_tab(i).ITEM_REF_VALUE_1;
8369       ITEM_REF_VALUE_2_TAB(i)          := g_lines_tab(i).ITEM_REF_VALUE_2;
8370       ITEM_REF_VALUE_3_TAB(i)          := g_lines_tab(i).ITEM_REF_VALUE_3;
8371       ITEM_RELEASE_STATUS_EXT_TAB(i)   := g_lines_tab(i).ITEM_RELEASE_STATUS_EXT;
8372       LADING_QUANTITY_EXT_TAB(i)       := g_lines_tab(i).LADING_QUANTITY_EXT;
8373       LETTER_CREDIT_EXPDT_EXT_TAB(i)   := g_lines_tab(i).LETTER_CREDIT_EXPDT_EXT;
8374       LETTER_CREDIT_EXT_TAB(i)         := g_lines_tab(i).LETTER_CREDIT_EXT;
8375       LINE_REFERENCE_TAB(i)            := g_lines_tab(i).LINE_REFERENCE;
8376       LINK_TO_LINE_REF_TAB(i)          := g_lines_tab(i).LINK_TO_LINE_REF;
8377       ORDER_HEADER_ID_TAB(i)           := g_lines_tab(i).ORDER_HEADER_ID;
8378       OTHER_NAME_CODE_1_TAB(i)         := g_lines_tab(i).OTHER_NAME_CODE_1;
8379       OTHER_NAME_CODE_2_TAB(i)         := g_lines_tab(i).OTHER_NAME_CODE_2;
8380       OTHER_NAME_VALUE_1_TAB(i)        := g_lines_tab(i).OTHER_NAME_VALUE_1;
8381       OTHER_NAME_VALUE_2_TAB(i)        := g_lines_tab(i).OTHER_NAME_VALUE_2;
8382       PACK_SIZE_EXT_TAB(i)             := g_lines_tab(i).PACK_SIZE_EXT;
8383       PACK_UNITS_PER_PACK_EXT_TAB(i)   := g_lines_tab(i).PACK_UNITS_PER_PACK_EXT;
8384       PACK_UOM_CODE_EXT_TAB(i)         := g_lines_tab(i).PACK_UOM_CODE_EXT;
8385       PACKAGING_CODE_EXT_TAB(i)        := g_lines_tab(i).PACKAGING_CODE_EXT;
8386       PARENT_LINK_LINE_REF_TAB(i)      := g_lines_tab(i).PARENT_LINK_LINE_REF;
8387       CUST_PRODUCTION_SEQ_NUM_TAB(i)     := g_lines_tab(i).CUST_PRODUCTION_SEQ_NUM;
8388       PRICE_LIST_ID_TAB(i)             := g_lines_tab(i).PRICE_LIST_ID;
8389       PRIMARY_QUANTITY_TAB(i)          := g_lines_tab(i).PRIMARY_QUANTITY;
8390       PRIMARY_UOM_CODE_TAB(i)          := g_lines_tab(i).PRIMARY_UOM_CODE;
8391       PRIME_CONTRCTR_PART_EXT_TAB(i)   := g_lines_tab(i).PRIME_CONTRCTR_PART_EXT;
8392       PROCESS_STATUS_TAB(i)            := g_lines_tab(i).PROCESS_STATUS;
8393       CUST_PO_RELEASE_NUM_TAB(i)       := g_lines_tab(i).CUST_PO_RELEASE_NUM;
8394       CUST_PO_DATE_TAB(i)              := g_lines_tab(i).CUST_PO_DATE;
8395       CUST_PO_LINE_NUM_TAB(i)          := g_lines_tab(i).CUST_PO_LINE_NUM;
8396       CUST_PO_NUMBER_TAB(i)            := g_lines_tab(i).CUST_PO_NUMBER;
8397       QTY_TYPE_CODE_TAB(i)             := g_lines_tab(i).QTY_TYPE_CODE;
8398       QTY_TYPE_CODE_EXT_TAB(i)         := g_lines_tab(i).QTY_TYPE_CODE_EXT;
8399       RETURN_CONTAINER_EXT_TAB(i)      := g_lines_tab(i).RETURN_CONTAINER_EXT;
8400       SCHEDULE_LINE_ID_TAB(i)          := g_lines_tab(i).SCHEDULE_LINE_ID;
8401       ROUTING_DESC_EXT_TAB(i)          := g_lines_tab(i).ROUTING_DESC_EXT;
8402       ROUTING_SEQ_CODE_EXT_TAB(i)      := g_lines_tab(i).ROUTING_SEQ_CODE_EXT;
8403       SCHEDULE_ITEM_NUM_TAB(i)         := g_lines_tab(i).SCHEDULE_ITEM_NUM;
8404       SHIP_DEL_PATTERN_EXT_TAB(i)      := g_lines_tab(i).SHIP_DEL_PATTERN_EXT;
8405       SHIP_DEL_TIME_CODE_EXT_TAB(i)    := g_lines_tab(i).SHIP_DEL_TIME_CODE_EXT;
8406       SHIP_DEL_RULE_NAME_TAB(i)        := g_lines_tab(i).SHIP_DEL_RULE_NAME;
8407       SHIP_FROM_ADDRESS_1_EXT_TAB(i)   := g_lines_tab(i).SHIP_FROM_ADDRESS_1_EXT;
8408       SHIP_FROM_ADDRESS_2_EXT_TAB(i)   := g_lines_tab(i).SHIP_FROM_ADDRESS_2_EXT;
8409       SHIP_FROM_ADDRESS_3_EXT_TAB(i)   := g_lines_tab(i).SHIP_FROM_ADDRESS_3_EXT;
8410       SHIP_FROM_ADDRESS_4_EXT_TAB(i)   := g_lines_tab(i).SHIP_FROM_ADDRESS_4_EXT;
8411       SHIP_FROM_CITY_EXT_TAB(i)        := g_lines_tab(i).SHIP_FROM_CITY_EXT;
8412       SHIP_FROM_COUNTRY_EXT_TAB(i)     := g_lines_tab(i).SHIP_FROM_COUNTRY_EXT;
8413       SHIP_FROM_COUNTY_EXT_TAB(i)      := g_lines_tab(i).SHIP_FROM_COUNTY_EXT;
8414       SHIP_FROM_NAME_EXT_TAB(i)        := g_lines_tab(i).SHIP_FROM_NAME_EXT;
8415       SHIP_FROM_ORG_ID_TAB(i)          := g_lines_tab(i).SHIP_FROM_ORG_ID;
8416       SHIP_FROM_POSTAL_CD_EXT_TAB(i)   := g_lines_tab(i).SHIP_FROM_POSTAL_CD_EXT;
8417       SHIP_FROM_PROVINCE_EXT_TAB(i)    := g_lines_tab(i).SHIP_FROM_PROVINCE_EXT;
8418       SHIP_FROM_STATE_EXT_TAB(i)       := g_lines_tab(i).SHIP_FROM_STATE_EXT;
8419       SHIP_LABEL_INFO_LINE_1_TAB(i)    := g_lines_tab(i).SHIP_LABEL_INFO_LINE_1;
8420       SHIP_LABEL_INFO_LINE_10_TAB(i)   := g_lines_tab(i).SHIP_LABEL_INFO_LINE_10;
8421       SHIP_LABEL_INFO_LINE_2_TAB(i)    := g_lines_tab(i).SHIP_LABEL_INFO_LINE_2;
8422       SHIP_LABEL_INFO_LINE_3_TAB(i)    := g_lines_tab(i).SHIP_LABEL_INFO_LINE_3;
8423       SHIP_LABEL_INFO_LINE_4_TAB(i)    := g_lines_tab(i).SHIP_LABEL_INFO_LINE_4;
8424       SHIP_LABEL_INFO_LINE_5_TAB(i)    := g_lines_tab(i).SHIP_LABEL_INFO_LINE_5;
8425       SHIP_LABEL_INFO_LINE_6_TAB(i)    := g_lines_tab(i).SHIP_LABEL_INFO_LINE_6;
8426       SHIP_LABEL_INFO_LINE_7_TAB(i)    := g_lines_tab(i).SHIP_LABEL_INFO_LINE_7;
8427       SHIP_LABEL_INFO_LINE_8_TAB(i)    := g_lines_tab(i).SHIP_LABEL_INFO_LINE_8;
8428       SHIP_LABEL_INFO_LINE_9_TAB(i)    := g_lines_tab(i).SHIP_LABEL_INFO_LINE_9;
8429       SHIP_TO_ADDRESS_1_EXT_TAB(i)     := g_lines_tab(i).SHIP_TO_ADDRESS_1_EXT;
8430       SHIP_TO_ADDRESS_2_EXT_TAB(i)      := g_lines_tab(i).SHIP_TO_ADDRESS_2_EXT;
8431       SHIP_TO_ADDRESS_3_EXT_TAB(i)      := g_lines_tab(i).SHIP_TO_ADDRESS_3_EXT;
8432       SHIP_TO_ADDRESS_4_EXT_TAB(i)      := g_lines_tab(i).SHIP_TO_ADDRESS_4_EXT;
8433       SHIP_TO_ADDRESS_ID_TAB(i)         := g_lines_tab(i).SHIP_TO_ADDRESS_ID;
8434       DELIVER_TO_ORG_ID_TAB(i)          := g_lines_tab(i).DELIVER_TO_ORG_ID ;
8435       SHIP_TO_CITY_EXT_TAB(i)           := g_lines_tab(i).SHIP_TO_CITY_EXT;
8436       SHIP_TO_COUNTRY_EXT_TAB(i)        := g_lines_tab(i).SHIP_TO_COUNTRY_EXT;
8437       SHIP_TO_COUNTY_EXT_TAB(i)         := g_lines_tab(i).SHIP_TO_COUNTY_EXT;
8438       SHIP_TO_NAME_EXT_TAB(i)           := g_lines_tab(i).SHIP_TO_NAME_EXT;
8439       SHIP_TO_POSTAL_CD_EXT_TAB(i)      := g_lines_tab(i).SHIP_TO_POSTAL_CD_EXT;
8440       SHIP_TO_PROVINCE_EXT_TAB(i)       := g_lines_tab(i).SHIP_TO_PROVINCE_EXT;
8441       SHIP_TO_SITE_USE_ID_TAB(i)        := g_lines_tab(i).SHIP_TO_SITE_USE_ID;
8442       SHIP_TO_STATE_EXT_TAB(i)          := g_lines_tab(i).SHIP_TO_STATE_EXT;
8443       START_DATE_TIME_TAB(i)            := g_lines_tab(i).START_DATE_TIME;
8444       SUBLINE_ASSIGNED_ID_EXT_TAB(i)    := g_lines_tab(i).SUBLINE_ASSIGNED_ID_EXT;
8445       SUBLINE_CONFIG_CODE_EXT_TAB(i)    := g_lines_tab(i).SUBLINE_CONFIG_CODE_EXT;
8446       SUBLINE_CUST_ITEM_EXT_TAB(i)      := g_lines_tab(i).SUBLINE_CUST_ITEM_EXT;
8447       SUBLINE_CUST_ITEM_ID_TAB(i)       := g_lines_tab(i).SUBLINE_CUST_ITEM_ID;
8448       SUBLINE_MODEL_NUM_EXT_TAB(i)      := g_lines_tab(i).SUBLINE_MODEL_NUM_EXT;
8449       SUBLINE_QUANTITY_TAB(i)          := g_lines_tab(i).SUBLINE_QUANTITY;
8450       SUBLINE_UOM_CODE_TAB(i)          := g_lines_tab(i).SUBLINE_UOM_CODE;
8451       SUPPLIER_ITEM_EXT_TAB(i)         := g_lines_tab(i).SUPPLIER_ITEM_EXT;
8452       TRANSIT_TIME_EXT_TAB(i)          := g_lines_tab(i).TRANSIT_TIME_EXT;
8453       TRANSIT_TIME_QUAL_EXT_TAB(i)     := g_lines_tab(i).TRANSIT_TIME_QUAL_EXT;
8454       TRANSPORT_LOC_QUAL_EXT_TAB(i)    := g_lines_tab(i).TRANSPORT_LOC_QUAL_EXT;
8455       TRANSPORT_LOCATION_EXT_TAB(i)    := g_lines_tab(i).TRANSPORT_LOCATION_EXT;
8456       TRANSPORT_METHOD_EXT_TAB(i)     := g_lines_tab(i).TRANSPORT_METHOD_EXT;
8457       UOM_CODE_TAB(i)                := g_lines_tab(i).UOM_CODE;
8458       WEIGHT_EXT_TAB(i)             := g_lines_tab(i).WEIGHT_EXT;
8459       WEIGHT_QUALIFIER_EXT_TAB(i)    := g_lines_tab(i).WEIGHT_QUALIFIER_EXT;
8460       WEIGHT_UOM_EXT_TAB(i)          := g_lines_tab(i).WEIGHT_UOM_EXT;
8461       FBO_CONFIGURATION_KEY_1_TAB(i)    := g_lines_tab(i).FBO_CONFIGURATION_KEY_1;
8462       FBO_CONFIGURATION_KEY_2_TAB(i)   := g_lines_tab(i).FBO_CONFIGURATION_KEY_2;
8463       FBO_CONFIGURATION_KEY_3_TAB(i)   := g_lines_tab(i).FBO_CONFIGURATION_KEY_3;
8464       FBO_CONFIGURATION_KEY_4_TAB(i)   := g_lines_tab(i).FBO_CONFIGURATION_KEY_4;
8465       FBO_CONFIGURATION_KEY_5_TAB(i)   := g_lines_tab(i).FBO_CONFIGURATION_KEY_5;
8466       MATCH_KEY_ACROSS_TAB(i)          := g_lines_tab(i).MATCH_KEY_ACROSS;
8467       MATCH_KEY_WITHIN_TAB(i)          := g_lines_tab(i).MATCH_KEY_WITHIN;
8468       CRITICAL_KEY_ATTRIBUTES_TAB(i)   := g_lines_tab(i).CRITICAL_KEY_ATTRIBUTES;
8469       ATTRIBUTE_CATEGORY_TAB(i)        := g_lines_tab(i).ATTRIBUTE_CATEGORY;
8470       ATTRIBUTE1_TAB(i)                := g_lines_tab(i).ATTRIBUTE1;
8471       ATTRIBUTE2_TAB(i)                := g_lines_tab(i).ATTRIBUTE2;
8472       ATTRIBUTE3_TAB(i)                := g_lines_tab(i).ATTRIBUTE3;
8473       ATTRIBUTE4_TAB(i)                := g_lines_tab(i).ATTRIBUTE4;
8474       ATTRIBUTE5_TAB(i)                := g_lines_tab(i).ATTRIBUTE5;
8475       ATTRIBUTE6_TAB(i)               := g_lines_tab(i).ATTRIBUTE6;
8476       ATTRIBUTE7_TAB(i)               := g_lines_tab(i).ATTRIBUTE7;
8477       ATTRIBUTE8_TAB(i)               := g_lines_tab(i).ATTRIBUTE8;
8478       ATTRIBUTE9_TAB(i)               := g_lines_tab(i).ATTRIBUTE9;
8479       ATTRIBUTE10_TAB(i)              := g_lines_tab(i).ATTRIBUTE10;
8480       ATTRIBUTE11_TAB(i)              := g_lines_tab(i).ATTRIBUTE11;
8481       ATTRIBUTE12_TAB(i)              := g_lines_tab(i).ATTRIBUTE12;
8482       ATTRIBUTE13_TAB(i)              := g_lines_tab(i).ATTRIBUTE13;
8483       ATTRIBUTE14_TAB(i)              := g_lines_tab(i).ATTRIBUTE14;
8484       ATTRIBUTE15_TAB(i)              := g_lines_tab(i).ATTRIBUTE15;
8485       BLANKET_NUMBER_TAB(i)	      := g_lines_tab(i).BLANKET_NUMBER;
8486       INTMED_SHIP_TO_ORG_ID_TAB(i)    := g_lines_tab(i).INTMED_SHIP_TO_ORG_ID;
8487       SHIP_TO_CUSTOMER_ID_TAB(i)      := g_lines_tab(i).SHIP_TO_CUSTOMER_ID;
8488     --
8489   END LOOP;
8490 
8491   FOR i IN 1..g_lines_tab.COUNT LOOP
8492      --
8493      process_status_tab(i) := 		g_line_PS;
8494      --
8495   END LOOP;
8496 
8497 /* oracle 9i compatible bulk update
8498 FORALL i in 1..g_lines_tab.COUNT
8499 
8500     UPDATE rlm_interface_lines
8501       SET ROW = g_lines_tab(i)
8502     WHERE header_id = header_id_tab(i)
8503     AND   line_id = line_id_tab(i);
8504 
8505 */
8506 
8507   --bulk update
8508   FORALL i in 1..g_lines_tab.COUNT
8509     UPDATE rlm_interface_lines
8510       SET
8511       AGREEMENT_ID           = AGREEMENT_ID_TAB(i),
8512       ATO_DATA_TYPE          = ATO_DATA_TYPE_TAB(i),
8513       BILL_TO_ADDRESS_1_EXT  = BILL_TO_ADDRESS_1_EXT_TAB(i),
8514       BILL_TO_ADDRESS_2_EXT  = BILL_TO_ADDRESS_2_EXT_TAB(i),
8515       BILL_TO_ADDRESS_3_EXT  = BILL_TO_ADDRESS_3_EXT_TAB(i),
8516       BILL_TO_ADDRESS_4_EXT  = BILL_TO_ADDRESS_4_EXT_TAB(i),
8517       BILL_TO_ADDRESS_ID    = BILL_TO_ADDRESS_ID_TAB(i),
8518       INVOICE_TO_ORG_ID     = INVOICE_TO_ORG_ID_TAB(i),
8519       BILL_TO_CITY_EXT     = BILL_TO_CITY_EXT_TAB(i),
8520       BILL_TO_COUNTRY_EXT  = BILL_TO_COUNTRY_EXT_TAB(i),
8521       BILL_TO_COUNTY_EXT   = BILL_TO_COUNTY_EXT_TAB(i),
8522       BILL_TO_NAME_EXT     = BILL_TO_NAME_EXT_TAB(i),
8523       BILL_TO_POSTAL_CD_EXT  = BILL_TO_POSTAL_CD_EXT_TAB(i),
8524       BILL_TO_PROVINCE_EXT  = BILL_TO_PROVINCE_EXT_TAB(i),
8525       BILL_TO_SITE_USE_ID   = BILL_TO_SITE_USE_ID_TAB(i),
8526       BILL_TO_STATE_EXT     = BILL_TO_STATE_EXT_TAB(i),
8527       CARRIER_ID_CODE_EXT   = CARRIER_ID_CODE_EXT_TAB(i),
8528       CARRIER_QUALIFIER_EXT  = CARRIER_QUALIFIER_EXT_TAB(i),
8529       COMMODITY_EXT         = COMMODITY_EXT_TAB(i),
8530       COUNTRY_OF_ORIGIN_EXT  = COUNTRY_OF_ORIGIN_EXT_TAB(i),
8531       CUST_ASSEMBLY_EXT      = CUST_ASSEMBLY_EXT_TAB(i),
8532       CUST_ASSIGNED_ID_EXT   = CUST_ASSIGNED_ID_EXT_TAB(i),
8533       CUST_BILL_TO_EXT       = CUST_BILL_TO_EXT_TAB(i),
8534       CUST_CONTRACT_NUM_EXT     = CUST_CONTRACT_NUM_EXT_TAB(i),
8535       CUSTOMER_DOCK_CODE        = CUSTOMER_DOCK_CODE_TAB(i),
8536       CUST_INTRMD_SHIP_TO_EXT   = CUST_INTRMD_SHIP_TO_EXT_TAB(i),
8537       CUST_ITEM_PRICE_EXT       = CUST_ITEM_PRICE_EXT_TAB(i),
8538       CUST_ITEM_PRICE_UOM_EXT   = CUST_ITEM_PRICE_UOM_EXT_TAB(i),
8539       CUSTOMER_ITEM_REVISION    = CUSTOMER_ITEM_REVISION_TAB(i),
8540       CUSTOMER_JOB              = CUSTOMER_JOB_TAB(i),
8541       CUST_MANUFACTURER_EXT     = CUST_MANUFACTURER_EXT_TAB(i),
8542       CUST_MODEL_NUMBER_EXT     = CUST_MODEL_NUMBER_EXT_TAB(i),
8543       CUST_MODEL_SERIAL_NUMBER  = CUST_MODEL_SERIAL_NUMBER_TAB(i),
8544       CUST_ORDER_NUM_EXT       = CUST_ORDER_NUM_EXT_TAB(i),
8545       CUST_PROCESS_NUM_EXT    = CUST_PROCESS_NUM_EXT_TAB(i),
8546       CUST_SET_NUM_EXT           = CUST_SET_NUM_EXT_TAB(i),
8547       CUST_SHIP_FROM_ORG_EXT    = CUST_SHIP_FROM_ORG_EXT_TAB(i),
8548       CUST_SHIP_TO_EXT          = CUST_SHIP_TO_EXT_TAB(i),
8549       CUST_UOM_EXT              = CUST_UOM_EXT_TAB(i),
8550       CUSTOMER_ITEM_EXT         = CUSTOMER_ITEM_EXT_TAB(i),
8551       CUSTOMER_ITEM_ID          = CUSTOMER_ITEM_ID_TAB(i),
8552       REQUEST_DATE              = REQUEST_DATE_TAB(i),
8553       SCHEDULE_DATE            = SCHEDULE_DATE_TAB(i),
8554       DATE_TYPE_CODE           = DATE_TYPE_CODE_TAB(i),
8555       DATE_TYPE_CODE_EXT       = DATE_TYPE_CODE_EXT_TAB(i),
8556       DELIVERY_LEAD_TIME       = DELIVERY_LEAD_TIME_TAB(i),
8557       END_DATE_TIME	        = END_DATE_TIME_TAB(i),
8558       EQUIPMENT_CODE_EXT       = EQUIPMENT_CODE_EXT_TAB(i),
8559       EQUIPMENT_NUMBER_EXT     = EQUIPMENT_NUMBER_EXT_TAB(i),
8560       HANDLING_CODE_EXT        = HANDLING_CODE_EXT_TAB(i),
8561       HAZARD_CODE_EXT          = HAZARD_CODE_EXT_TAB(i),
8562       HAZARD_CODE_QUAL_EXT     = HAZARD_CODE_QUAL_EXT_TAB(i),
8563       HAZARD_DESCRIPTION_EXT   = HAZARD_DESCRIPTION_EXT_TAB(i),
8564       IMPORT_LICENSE_DATE_EXT   = IMPORT_LICENSE_DATE_EXT_TAB(i),
8565       IMPORT_LICENSE_EXT        = IMPORT_LICENSE_EXT_TAB(i),
8566       INDUSTRY_ATTRIBUTE1       = INDUSTRY_ATTRIBUTE1_TAB(i),
8567       INDUSTRY_ATTRIBUTE10      = INDUSTRY_ATTRIBUTE10_TAB(i),
8568       INDUSTRY_ATTRIBUTE11      = INDUSTRY_ATTRIBUTE11_TAB(i),
8569       INDUSTRY_ATTRIBUTE12      = INDUSTRY_ATTRIBUTE12_TAB(i),
8570       INDUSTRY_ATTRIBUTE13      = INDUSTRY_ATTRIBUTE13_TAB(i),
8571       INDUSTRY_ATTRIBUTE14      = INDUSTRY_ATTRIBUTE14_TAB(i),
8572       INDUSTRY_ATTRIBUTE15      = INDUSTRY_ATTRIBUTE15_TAB(i),
8573       INDUSTRY_ATTRIBUTE2       = INDUSTRY_ATTRIBUTE2_TAB(i),
8574       INDUSTRY_ATTRIBUTE3       = INDUSTRY_ATTRIBUTE3_TAB(i),
8575       INDUSTRY_ATTRIBUTE4       = INDUSTRY_ATTRIBUTE4_TAB(i),
8576       INDUSTRY_ATTRIBUTE5       = INDUSTRY_ATTRIBUTE5_TAB(i),
8577       INDUSTRY_ATTRIBUTE6       = INDUSTRY_ATTRIBUTE6_TAB(i),
8578       INDUSTRY_ATTRIBUTE7       = INDUSTRY_ATTRIBUTE7_TAB(i),
8579       INDUSTRY_ATTRIBUTE8       = INDUSTRY_ATTRIBUTE8_TAB(i),
8580       INDUSTRY_ATTRIBUTE9       = INDUSTRY_ATTRIBUTE9_TAB(i),
8581       INDUSTRY_CONTEXT          = INDUSTRY_CONTEXT_TAB(i),
8582       INTRMD_SHIP_TO_ID         = INTRMD_SHIP_TO_ID_TAB(i),
8583       SHIP_TO_ORG_ID            = SHIP_TO_ORG_ID_TAB(i),
8584       INTRMD_ST_ADDRESS_1_EXT   = INTRMD_ST_ADDRESS_1_EXT_TAB(i),
8585       INTRMD_ST_ADDRESS_2_EXT   = INTRMD_ST_ADDRESS_2_EXT_TAB(i),
8586       INTRMD_ST_ADDRESS_3_EXT   = INTRMD_ST_ADDRESS_3_EXT_TAB(i),
8587       INTRMD_ST_ADDRESS_4_EXT   = INTRMD_ST_ADDRESS_4_EXT_TAB(i),
8588       INTRMD_ST_CITY_EXT        = INTRMD_ST_CITY_EXT_TAB(i),
8589       INTRMD_ST_COUNTRY_EXT     = INTRMD_ST_COUNTRY_EXT_TAB(i),
8590       INTRMD_ST_COUNTY_EXT      = INTRMD_ST_COUNTY_EXT_TAB(i),
8591       INTRMD_ST_NAME_EXT        = INTRMD_ST_NAME_EXT_TAB(i),
8592       INTRMD_ST_POSTAL_CD_EXT   = INTRMD_ST_POSTAL_CD_EXT_TAB(i),
8593       INTRMD_ST_PROVINCE_EXT   = INTRMD_ST_PROVINCE_EXT_TAB(i),
8594       INTRMD_ST_STATE_EXT      = INTRMD_ST_STATE_EXT_TAB(i),
8595       INTRMD_ST_SITE_USE_ID    = INTRMD_ST_SITE_USE_ID_TAB(i),
8596       INVENTORY_ITEM_ID        = INVENTORY_ITEM_ID_TAB(i),
8597       INVENTORY_ITEM_SEGMENT1  = INVENTORY_ITEM_SEGMENT1_TAB(i),
8598       INVENTORY_ITEM_SEGMENT10    = INVENTORY_ITEM_SEGMENT10_TAB(i),
8599       INVENTORY_ITEM_SEGMENT11    = INVENTORY_ITEM_SEGMENT11_TAB(i),
8600       INVENTORY_ITEM_SEGMENT12    = INVENTORY_ITEM_SEGMENT12_TAB(i),
8601       INVENTORY_ITEM_SEGMENT13    = INVENTORY_ITEM_SEGMENT13_TAB(i),
8602       INVENTORY_ITEM_SEGMENT14    = INVENTORY_ITEM_SEGMENT14_TAB(i),
8603       INVENTORY_ITEM_SEGMENT15    = INVENTORY_ITEM_SEGMENT15_TAB(i),
8604       INVENTORY_ITEM_SEGMENT16    = INVENTORY_ITEM_SEGMENT16_TAB(i),
8605       INVENTORY_ITEM_SEGMENT17    = INVENTORY_ITEM_SEGMENT17_TAB(i),
8606       INVENTORY_ITEM_SEGMENT18    = INVENTORY_ITEM_SEGMENT18_TAB(i),
8607       INVENTORY_ITEM_SEGMENT19    = INVENTORY_ITEM_SEGMENT19_TAB(i),
8608       INVENTORY_ITEM_SEGMENT2     = INVENTORY_ITEM_SEGMENT2_TAB(i),
8609       INVENTORY_ITEM_SEGMENT20    = INVENTORY_ITEM_SEGMENT20_TAB(i),
8610       INVENTORY_ITEM_SEGMENT3    = INVENTORY_ITEM_SEGMENT3_TAB(i),
8611       INVENTORY_ITEM_SEGMENT4    = INVENTORY_ITEM_SEGMENT4_TAB(i),
8612       INVENTORY_ITEM_SEGMENT5    = INVENTORY_ITEM_SEGMENT5_TAB(i),
8613       INVENTORY_ITEM_SEGMENT6    = INVENTORY_ITEM_SEGMENT6_TAB(i),
8614       INVENTORY_ITEM_SEGMENT7    = INVENTORY_ITEM_SEGMENT7_TAB(i),
8615       INVENTORY_ITEM_SEGMENT8    = INVENTORY_ITEM_SEGMENT8_TAB(i),
8616       INVENTORY_ITEM_SEGMENT9    = INVENTORY_ITEM_SEGMENT9_TAB(i),
8617       ITEM_CONTACT_CODE_1       = ITEM_CONTACT_CODE_1_TAB(i),
8618       ITEM_CONTACT_CODE_2       = ITEM_CONTACT_CODE_2_TAB(i),
8619       ITEM_CONTACT_VALUE_1      = ITEM_CONTACT_VALUE_1_TAB(i),
8620       ITEM_CONTACT_VALUE_2      = ITEM_CONTACT_VALUE_2_TAB(i),
8621       ITEM_DESCRIPTION_EXT      = ITEM_DESCRIPTION_EXT_TAB(i),
8622       ITEM_DETAIL_QUANTITY      = ITEM_DETAIL_QUANTITY_TAB(i),
8623       ITEM_DETAIL_REF_CODE_1    = ITEM_DETAIL_REF_CODE_1_TAB(i),
8624       ITEM_DETAIL_REF_CODE_2    = ITEM_DETAIL_REF_CODE_2_TAB(i),
8625       ITEM_DETAIL_REF_CODE_3    = ITEM_DETAIL_REF_CODE_3_TAB(i),
8626       ITEM_DETAIL_REF_VALUE_1   = ITEM_DETAIL_REF_VALUE_1_TAB(i),
8627       ITEM_DETAIL_REF_VALUE_2   = ITEM_DETAIL_REF_VALUE_2_TAB(i),
8628       ITEM_DETAIL_REF_VALUE_3   = ITEM_DETAIL_REF_VALUE_3_TAB(i),
8629       ITEM_DETAIL_SUBTYPE       = ITEM_DETAIL_SUBTYPE_TAB(i),
8630       ITEM_DETAIL_SUBTYPE_EXT   = ITEM_DETAIL_SUBTYPE_EXT_TAB(i),
8631       ITEM_DETAIL_TYPE          = ITEM_DETAIL_TYPE_TAB(i),
8632       ITEM_DETAIL_TYPE_EXT      = ITEM_DETAIL_TYPE_EXT_TAB(i),
8633       ITEM_ENG_CNG_LVL_EXT      = ITEM_ENG_CNG_LVL_EXT_TAB(i),
8634       ITEM_MEASUREMENTS_EXT     = ITEM_MEASUREMENTS_EXT_TAB(i),
8635       ITEM_NOTE_TEXT            = ITEM_NOTE_TEXT_TAB(i),
8636       ITEM_REF_CODE_1           = ITEM_REF_CODE_1_TAB(i),
8637       ITEM_REF_CODE_2          = ITEM_REF_CODE_2_TAB(i),
8638       ITEM_REF_CODE_3          = ITEM_REF_CODE_3_TAB(i),
8639       ITEM_REF_VALUE_1         = ITEM_REF_VALUE_1_TAB(i),
8640       ITEM_REF_VALUE_2         = ITEM_REF_VALUE_2_TAB(i),
8641       ITEM_REF_VALUE_3         = ITEM_REF_VALUE_3_TAB(i),
8642       ITEM_RELEASE_STATUS_EXT  = ITEM_RELEASE_STATUS_EXT_TAB(i),
8643       LADING_QUANTITY_EXT      = LADING_QUANTITY_EXT_TAB(i),
8644       LETTER_CREDIT_EXPDT_EXT  = LETTER_CREDIT_EXPDT_EXT_TAB(i),
8645       LETTER_CREDIT_EXT        = LETTER_CREDIT_EXT_TAB(i),
8646       LINE_REFERENCE           = LINE_REFERENCE_TAB(i),
8647       LINK_TO_LINE_REF         = LINK_TO_LINE_REF_TAB(i),
8648       ORDER_HEADER_ID          = ORDER_HEADER_ID_TAB(i),
8649       OTHER_NAME_CODE_1        = OTHER_NAME_CODE_1_TAB(i),
8650       OTHER_NAME_CODE_2        = OTHER_NAME_CODE_2_TAB(i),
8651       OTHER_NAME_VALUE_1       = OTHER_NAME_VALUE_1_TAB(i),
8652       OTHER_NAME_VALUE_2       = OTHER_NAME_VALUE_2_TAB(i),
8653       PACK_SIZE_EXT            = PACK_SIZE_EXT_TAB(i),
8654       PACK_UNITS_PER_PACK_EXT  = PACK_UNITS_PER_PACK_EXT_TAB(i),
8655       PACK_UOM_CODE_EXT        = PACK_UOM_CODE_EXT_TAB(i),
8656       PACKAGING_CODE_EXT       = PACKAGING_CODE_EXT_TAB(i),
8657       PARENT_LINK_LINE_REF     = PARENT_LINK_LINE_REF_TAB(i),
8658       CUST_PRODUCTION_SEQ_NUM    = CUST_PRODUCTION_SEQ_NUM_TAB(i),
8659       PRICE_LIST_ID            = PRICE_LIST_ID_TAB(i),
8660       PRIMARY_QUANTITY         = PRIMARY_QUANTITY_TAB(i),
8661       PRIMARY_UOM_CODE         = PRIMARY_UOM_CODE_TAB(i),
8662       PRIME_CONTRCTR_PART_EXT  = PRIME_CONTRCTR_PART_EXT_TAB(i),
8663       PROCESS_STATUS           = PROCESS_STATUS_TAB(i),
8664       CUST_PO_RELEASE_NUM      = CUST_PO_RELEASE_NUM_TAB(i),
8665       CUST_PO_DATE             = CUST_PO_DATE_TAB(i),
8666       CUST_PO_LINE_NUM         = CUST_PO_LINE_NUM_TAB(i),
8667       CUST_PO_NUMBER           = CUST_PO_NUMBER_TAB(i),
8668       QTY_TYPE_CODE            = QTY_TYPE_CODE_TAB(i),
8669       QTY_TYPE_CODE_EXT        = QTY_TYPE_CODE_EXT_TAB(i),
8670       RETURN_CONTAINER_EXT     = RETURN_CONTAINER_EXT_TAB(i),
8671       SCHEDULE_LINE_ID         = SCHEDULE_LINE_ID_TAB(i),
8672       ROUTING_DESC_EXT         = ROUTING_DESC_EXT_TAB(i),
8673       ROUTING_SEQ_CODE_EXT     = ROUTING_SEQ_CODE_EXT_TAB(i),
8674       SCHEDULE_ITEM_NUM        = SCHEDULE_ITEM_NUM_TAB(i),
8675       SHIP_DEL_PATTERN_EXT     = SHIP_DEL_PATTERN_EXT_TAB(i),
8676       SHIP_DEL_TIME_CODE_EXT   = SHIP_DEL_TIME_CODE_EXT_TAB(i),
8677       SHIP_DEL_RULE_NAME       = SHIP_DEL_RULE_NAME_TAB(i),
8678       SHIP_FROM_ADDRESS_1_EXT  = SHIP_FROM_ADDRESS_1_EXT_TAB(i),
8679       SHIP_FROM_ADDRESS_2_EXT  = SHIP_FROM_ADDRESS_2_EXT_TAB(i),
8680       SHIP_FROM_ADDRESS_3_EXT  = SHIP_FROM_ADDRESS_3_EXT_TAB(i),
8681       SHIP_FROM_ADDRESS_4_EXT  = SHIP_FROM_ADDRESS_4_EXT_TAB(i),
8682       SHIP_FROM_CITY_EXT       = SHIP_FROM_CITY_EXT_TAB(i),
8683       SHIP_FROM_COUNTRY_EXT    = SHIP_FROM_COUNTRY_EXT_TAB(i),
8684       SHIP_FROM_COUNTY_EXT     = SHIP_FROM_COUNTY_EXT_TAB(i),
8685       SHIP_FROM_NAME_EXT       = SHIP_FROM_NAME_EXT_TAB(i),
8686       SHIP_FROM_ORG_ID         = SHIP_FROM_ORG_ID_TAB(i),
8687       SHIP_FROM_POSTAL_CD_EXT  = SHIP_FROM_POSTAL_CD_EXT_TAB(i),
8688       SHIP_FROM_PROVINCE_EXT   = SHIP_FROM_PROVINCE_EXT_TAB(i),
8689       SHIP_FROM_STATE_EXT      = SHIP_FROM_STATE_EXT_TAB(i),
8690       SHIP_LABEL_INFO_LINE_1   = SHIP_LABEL_INFO_LINE_1_TAB(i),
8691       SHIP_LABEL_INFO_LINE_10  = SHIP_LABEL_INFO_LINE_10_TAB(i),
8692       SHIP_LABEL_INFO_LINE_2   = SHIP_LABEL_INFO_LINE_2_TAB(i),
8693       SHIP_LABEL_INFO_LINE_3   = SHIP_LABEL_INFO_LINE_3_TAB(i),
8694       SHIP_LABEL_INFO_LINE_4   = SHIP_LABEL_INFO_LINE_4_TAB(i),
8695       SHIP_LABEL_INFO_LINE_5   = SHIP_LABEL_INFO_LINE_5_TAB(i),
8696       SHIP_LABEL_INFO_LINE_6   = SHIP_LABEL_INFO_LINE_6_TAB(i),
8697       SHIP_LABEL_INFO_LINE_7   = SHIP_LABEL_INFO_LINE_7_TAB(i),
8698       SHIP_LABEL_INFO_LINE_8   = SHIP_LABEL_INFO_LINE_8_TAB(i),
8699       SHIP_LABEL_INFO_LINE_9   = SHIP_LABEL_INFO_LINE_9_TAB(i),
8700       SHIP_TO_ADDRESS_1_EXT    = SHIP_TO_ADDRESS_1_EXT_TAB(i),
8701       SHIP_TO_ADDRESS_2_EXT     = SHIP_TO_ADDRESS_2_EXT_TAB(i),
8702       SHIP_TO_ADDRESS_3_EXT     = SHIP_TO_ADDRESS_3_EXT_TAB(i),
8703       SHIP_TO_ADDRESS_4_EXT     = SHIP_TO_ADDRESS_4_EXT_TAB(i),
8704       SHIP_TO_ADDRESS_ID        = SHIP_TO_ADDRESS_ID_TAB(i),
8705       DELIVER_TO_ORG_ID         = DELIVER_TO_ORG_ID_TAB(i),
8706       SHIP_TO_CITY_EXT          = SHIP_TO_CITY_EXT_TAB(i),
8707       SHIP_TO_COUNTRY_EXT       = SHIP_TO_COUNTRY_EXT_TAB(i),
8708       SHIP_TO_COUNTY_EXT        = SHIP_TO_COUNTY_EXT_TAB(i),
8709       SHIP_TO_NAME_EXT          = SHIP_TO_NAME_EXT_TAB(i),
8710       SHIP_TO_POSTAL_CD_EXT     = SHIP_TO_POSTAL_CD_EXT_TAB(i),
8711       SHIP_TO_PROVINCE_EXT      = SHIP_TO_PROVINCE_EXT_TAB(i),
8712       SHIP_TO_SITE_USE_ID       = SHIP_TO_SITE_USE_ID_TAB(i),
8713       SHIP_TO_STATE_EXT         = SHIP_TO_STATE_EXT_TAB(i),
8714       START_DATE_TIME           = START_DATE_TIME_TAB(i),
8715       SUBLINE_ASSIGNED_ID_EXT   = SUBLINE_ASSIGNED_ID_EXT_TAB(i),
8716       SUBLINE_CONFIG_CODE_EXT   = SUBLINE_CONFIG_CODE_EXT_TAB(i),
8717       SUBLINE_CUST_ITEM_EXT     = SUBLINE_CUST_ITEM_EXT_TAB(i),
8718       SUBLINE_CUST_ITEM_ID      = SUBLINE_CUST_ITEM_ID_TAB(i),
8719       SUBLINE_MODEL_NUM_EXT     = SUBLINE_MODEL_NUM_EXT_TAB(i),
8720       SUBLINE_QUANTITY         = SUBLINE_QUANTITY_TAB(i),
8721       SUBLINE_UOM_CODE         = SUBLINE_UOM_CODE_TAB(i),
8722       SUPPLIER_ITEM_EXT        = SUPPLIER_ITEM_EXT_TAB(i),
8723       TRANSIT_TIME_EXT         = TRANSIT_TIME_EXT_TAB(i),
8724       TRANSIT_TIME_QUAL_EXT    = TRANSIT_TIME_QUAL_EXT_TAB(i),
8725       TRANSPORT_LOC_QUAL_EXT   = TRANSPORT_LOC_QUAL_EXT_TAB(i),
8726       TRANSPORT_LOCATION_EXT   = TRANSPORT_LOCATION_EXT_TAB(i),
8727       TRANSPORT_METHOD_EXT    = TRANSPORT_METHOD_EXT_TAB(i),
8728       UOM_CODE               = UOM_CODE_TAB(i),
8729       WEIGHT_EXT            = WEIGHT_EXT_TAB(i),
8730       WEIGHT_QUALIFIER_EXT   = WEIGHT_QUALIFIER_EXT_TAB(i),
8731       WEIGHT_UOM_EXT         = WEIGHT_UOM_EXT_TAB(i),
8732       FBO_CONFIGURATION_KEY_1   = FBO_CONFIGURATION_KEY_1_TAB(i),
8733       FBO_CONFIGURATION_KEY_2  = FBO_CONFIGURATION_KEY_2_TAB(i),
8734       FBO_CONFIGURATION_KEY_3  = FBO_CONFIGURATION_KEY_3_TAB(i),
8735       FBO_CONFIGURATION_KEY_4  = FBO_CONFIGURATION_KEY_4_TAB(i),
8736       FBO_CONFIGURATION_KEY_5  = FBO_CONFIGURATION_KEY_5_TAB(i),
8737       MATCH_KEY_ACROSS         = MATCH_KEY_ACROSS_TAB(i),
8738       MATCH_KEY_WITHIN         = MATCH_KEY_WITHIN_TAB(i),
8739       CRITICAL_KEY_ATTRIBUTES  = CRITICAL_KEY_ATTRIBUTES_TAB(i),
8740       ATTRIBUTE_CATEGORY       = ATTRIBUTE_CATEGORY_TAB(i),
8741       ATTRIBUTE1               = ATTRIBUTE1_TAB(i),
8742       ATTRIBUTE2               = ATTRIBUTE2_TAB(i),
8743       ATTRIBUTE3               = ATTRIBUTE3_TAB(i),
8744       ATTRIBUTE4               = ATTRIBUTE4_TAB(i),
8745       ATTRIBUTE5               = ATTRIBUTE5_TAB(i),
8746       ATTRIBUTE6              = ATTRIBUTE6_TAB(i),
8747       ATTRIBUTE7              = ATTRIBUTE7_TAB(i),
8748       ATTRIBUTE8              = ATTRIBUTE8_TAB(i),
8749       ATTRIBUTE9              = ATTRIBUTE9_TAB(i),
8750       ATTRIBUTE10             = ATTRIBUTE10_TAB(i),
8751       ATTRIBUTE11             = ATTRIBUTE11_TAB(i),
8752       ATTRIBUTE12             = ATTRIBUTE12_TAB(i),
8753       ATTRIBUTE13             = ATTRIBUTE13_TAB(i),
8754       ATTRIBUTE14             = ATTRIBUTE14_TAB(i),
8755       ATTRIBUTE15             = ATTRIBUTE15_TAB(i),
8756       BLANKET_NUMBER	      = BLANKET_NUMBER_TAB(i),
8757       INTMED_SHIP_TO_ORG_ID   = INTMED_SHIP_TO_ORG_ID_TAB(i),
8758       LAST_UPDATE_DATE          = v_last_update_date,
8759       LAST_UPDATED_BY           = v_last_updated_by,
8760       LAST_UPDATE_LOGIN         = v_last_update_login,
8761       REQUEST_ID                = v_request_id,
8762       PROGRAM_APPLICATION_ID    = v_program_application_id,
8763       PROGRAM_ID                = v_program_id,
8764       PROGRAM_UPDATE_DATE       = v_program_update_date,
8765       SHIP_TO_CUSTOMER_ID       = SHIP_TO_CUSTOMER_ID_TAB(i)
8766     WHERE header_id = header_id_tab(i)
8767     AND   line_id = line_id_tab(i);
8768   -- bulk update
8769   --
8770   IF (l_debug <> -1) THEN
8771     rlm_core_sv.dlog(C_DEBUG,'Number of Interface lines updated',SQL%ROWCOUNT);
8772     rlm_core_sv.dlog(C_DEBUG,'Number of Interface lines in g_lines_tab ',g_lines_tab.COUNT);
8773   END IF;
8774   --
8775   --
8776   IF g_lines_tab.COUNT >= 1 AND IsGroupError THEN
8777      --
8778      IF (l_debug <> -1) THEN
8779         rlm_core_sv.dlog(C_DEBUG,'Current group failed validation');
8780      END IF;
8781      --
8782   END IF;
8783   --
8784   --
8785   IF NOT IsGroupError THEN
8786    --
8787    IF (l_debug <> -1) THEN
8788       rlm_core_sv.dlog('Current group passed validation, so set g_schedule_PS to PS_available');
8789    END IF;
8790    --
8791    g_schedule_PS := rlm_core_sv.k_PS_AVAILABLE;
8792    --
8793   END IF;
8794   --
8795   IF (l_debug <> -1) THEN
8796      rlm_core_sv.dpop(C_SDEBUG);
8797   END IF;
8798   --
8799 EXCEPTION
8800   --
8801   WHEN OTHERS THEN
8802     --
8803     rlm_message_sv.sql_error('rlm_validateDemand_sv.UpdateInterfaceLines',
8804                                       v_Progress);
8805     --
8806     IF (l_debug <> -1) THEN
8807        rlm_core_sv.dlog(C_DEBUG,'progress',v_Progress);
8808        rlm_core_sv.dpop(C_SDEBUG,'EXCEPTION: '||SUBSTR(SQLERRM,1,200));
8809     END IF;
8810     raise;
8811     --
8812 END UpdateInterfaceLines;
8813 
8814 /*===========================================================================
8815 
8816         PROCEDURE NAME:  UpdateInterfaceHeaders
8817 
8818 ===========================================================================*/
8819 PROCEDURE UpdateInterfaceHeaders
8820 IS
8821   v_Progress         VARCHAR(3) := '010';
8822 
8823 BEGIN
8824     --
8825     IF (l_debug <> -1) THEN
8826        rlm_core_sv.dpush(C_SDEBUG,'UpdateInterfaceHeaders');
8827        rlm_core_sv.dlog(C_DEBUG, 'g_schedule_PS', g_schedule_PS);
8828        rlm_core_sv.dlog(C_DEBUG, 'g_line_PS', g_line_PS);
8829     END IF;
8830     --
8831     IF (g_schedule_PS = rlm_core_sv.k_PS_AVAILABLE
8832        AND g_line_PS = rlm_core_sv.k_PS_ERROR ) THEN
8833        --
8834        g_schedule_PS := rlm_core_sv.k_PS_PARTIAL_PROCESSED;
8835        --
8836        IF (l_debug <> -1) THEN
8837           rlm_core_sv.dlog(C_DEBUG,'Process Status PARTIAL_PROCESSED');
8838        END IF;
8839        --
8840     ELSIF (g_schedule_PS = rlm_core_sv.k_PS_ERROR
8841        AND g_line_PS = rlm_core_sv.k_PS_ERROR ) THEN
8842        --
8843        g_schedule_PS := rlm_core_sv.k_PS_ERROR;
8844        --
8845        IF (l_debug <> -1) THEN
8846           rlm_core_sv.dlog(C_DEBUG,'Process Status ERROR');
8847        END IF;
8848        --
8849     ELSIF (g_schedule_PS = rlm_core_sv.k_PS_AVAILABLE
8850        AND g_line_PS = rlm_core_sv.k_PS_AVAILABLE ) THEN
8851        --
8852        g_schedule_PS := rlm_core_sv.k_PS_AVAILABLE;
8853        --
8854        IF (l_debug <> -1) THEN
8855           rlm_core_sv.dlog(C_DEBUG,'Process Status AVAILABLE');
8856        END IF;
8857        --
8858     END IF;
8859 
8860     UPDATE rlm_interface_headers SET
8861       CUST_ADDRESS_1_EXT    =   g_header_rec.CUST_ADDRESS_1_EXT ,
8862       CUST_ADDRESS_2_EXT    =  g_header_rec. CUST_ADDRESS_2_EXT ,
8863       CUST_ADDRESS_3_EXT    =    g_header_rec.CUST_ADDRESS_3_EXT ,
8864       CUST_ADDRESS_4_EXT    =    g_header_rec.CUST_ADDRESS_4_EXT ,
8865       CUST_CITY_EXT         =  g_header_rec.CUST_CITY_EXT ,
8866       CUST_COUNTRY_EXT      =  g_header_rec.CUST_COUNTRY_EXT ,
8867       CUST_COUNTY_EXT       =  g_header_rec.CUST_COUNTY_EXT ,
8868       CUSTOMER_EXT          =  g_header_rec.CUSTOMER_EXT ,
8869       CUST_NAME_EXT         =  g_header_rec.CUST_NAME_EXT ,
8870       CUST_POSTAL_CD_EXT    =  g_header_rec.CUST_POSTAL_CD_EXT ,
8871       CUST_PROVINCE_EXT     =  g_header_rec.CUST_PROVINCE_EXT ,
8872       CUST_STATE_EXT        =  g_header_rec.CUST_STATE_EXT ,
8873       CUSTOMER_ID           =  g_header_rec.CUSTOMER_ID ,
8874       ECE_PRIMARY_ADDRESS_ID =  g_header_rec.ECE_PRIMARY_ADDRESS_ID ,
8875       ECE_TP_LOCATION_CODE_EXT =  g_header_rec.ECE_TP_LOCATION_CODE_EXT ,
8876       ECE_TP_TRANSLATOR_CODE   =  g_header_rec.ECE_TP_TRANSLATOR_CODE ,
8877       EDI_CONTROL_NUM_1        =  g_header_rec.EDI_CONTROL_NUM_1 ,
8878       EDI_CONTROL_NUM_2        =  g_header_rec.EDI_CONTROL_NUM_2 ,
8879       EDI_CONTROL_NUM_3        =  g_header_rec.EDI_CONTROL_NUM_3 ,
8880       EDI_TEST_INDICATOR       =  g_header_rec.EDI_TEST_INDICATOR ,
8881       HEADER_CONTACT_CODE_1    =  g_header_rec.HEADER_CONTACT_CODE_1 ,
8882       HEADER_CONTACT_CODE_2    =  g_header_rec.HEADER_CONTACT_CODE_2 ,
8883       HEADER_CONTACT_VALUE_1   =  g_header_rec.HEADER_CONTACT_VALUE_1 ,
8884       HEADER_CONTACT_VALUE_2   =  g_header_rec.HEADER_CONTACT_VALUE_2 ,
8885       HEADER_NOTE_TEXT         =  g_header_rec.HEADER_NOTE_TEXT ,
8886       HEADER_REF_CODE_1        =  g_header_rec.HEADER_REF_CODE_1 ,
8887       HEADER_REF_CODE_2        =  g_header_rec.HEADER_REF_CODE_2 ,
8888       HEADER_REF_CODE_3        =  g_header_rec.HEADER_REF_CODE_3 ,
8889       HEADER_REF_VALUE_1       =  g_header_rec.HEADER_REF_VALUE_1 ,
8890       HEADER_REF_VALUE_2       =  g_header_rec.HEADER_REF_VALUE_2 ,
8891       HEADER_REF_VALUE_3       =  g_header_rec.HEADER_REF_VALUE_3 ,
8892       PROCESS_STATUS           =  g_schedule_PS,
8893       SCHEDULE_HEADER_ID       =  g_header_rec.SCHEDULE_HEADER_ID ,
8894       SCHEDULE_TYPE            =  g_header_rec.SCHEDULE_TYPE ,
8895       SCHEDULE_TYPE_EXT        =  g_header_rec.SCHEDULE_TYPE_EXT ,
8896       SCHED_GENERATION_DATE    =  g_header_rec.SCHED_GENERATION_DATE ,
8897       SCHED_HORIZON_END_DATE   =  g_header_rec.SCHED_HORIZON_END_DATE ,
8898       SCHED_HORIZON_START_DATE =  g_header_rec.SCHED_HORIZON_START_DATE ,
8899       SCHEDULE_PURPOSE         =  g_header_rec.SCHEDULE_PURPOSE ,
8900       SCHEDULE_PURPOSE_EXT     =  g_header_rec.SCHEDULE_PURPOSE_EXT ,
8901       SCHEDULE_REFERENCE_NUM   =  g_header_rec.SCHEDULE_REFERENCE_NUM ,
8902       SCHEDULE_SOURCE          =  g_header_rec.SCHEDULE_SOURCE ,
8903       LAST_UPDATE_DATE         =  sysdate,
8904       LAST_UPDATED_BY          =  fnd_global.user_id ,
8905       CREATION_DATE            =  g_header_rec.CREATION_DATE ,
8906       CREATED_BY               =  g_header_rec.CREATED_BY ,
8907       ATTRIBUTE_CATEGORY       =  g_header_rec.ATTRIBUTE_CATEGORY ,
8908       ATTRIBUTE1               =  g_header_rec.ATTRIBUTE1 ,
8909       ATTRIBUTE2               =  g_header_rec.ATTRIBUTE2 ,
8910       ATTRIBUTE3               =  g_header_rec.ATTRIBUTE3 ,
8911       ATTRIBUTE4               =  g_header_rec.ATTRIBUTE4 ,
8912       ATTRIBUTE5               =  g_header_rec.ATTRIBUTE5 ,
8913       ATTRIBUTE6               =  g_header_rec.ATTRIBUTE6 ,
8914       ATTRIBUTE7               =  g_header_rec.ATTRIBUTE7 ,
8915       ATTRIBUTE8               =  g_header_rec.ATTRIBUTE8 ,
8916       ATTRIBUTE9               =  g_header_rec.ATTRIBUTE9 ,
8917       ATTRIBUTE10              =  g_header_rec.ATTRIBUTE10 ,
8918       ATTRIBUTE11              =  g_header_rec.ATTRIBUTE11 ,
8919       ATTRIBUTE12              =  g_header_rec.ATTRIBUTE12 ,
8920       ATTRIBUTE13              =  g_header_rec.ATTRIBUTE13 ,
8921       ATTRIBUTE14              =  g_header_rec.ATTRIBUTE14 ,
8922       ATTRIBUTE15              =  g_header_rec.ATTRIBUTE15 ,
8923       LAST_UPDATE_LOGIN        =  fnd_global.login_id ,
8924       REQUEST_ID               =  fnd_global.conc_REQUEST_ID ,
8925       PROGRAM_APPLICATION_ID   =  fnd_global.PROG_APPL_ID ,
8926       PROGRAM_ID               =  fnd_global.conc_PROGRAM_ID ,
8927       PROGRAM_UPDATE_DATE      =  sysdate
8928     WHERE header_id = g_header_rec.header_id;
8929 
8930   --
8931   IF (l_debug <> -1) THEN
8932      rlm_core_sv.dlog(C_DEBUG,'Number of Interface header updated',SQL%ROWCOUNT);
8933      rlm_core_sv.dpop(C_SDEBUG);
8934   END IF;
8935 
8936 EXCEPTION
8937   WHEN OTHERS THEN
8938     --
8939     rollback;
8940     rlm_message_sv.sql_error('rlm_validateDemand_sv.UpdateInterfaceHeaders: ',
8941                                v_Progress);
8942     --
8943     IF (l_debug <> -1) THEN
8944        rlm_core_sv.dpop(C_SDEBUG,'EXCEPTION: '||SUBSTR(SQLERRM,1,200));
8945     END IF;
8946     raise;
8947     --
8948 END UpdateInterfaceHeaders;
8949 
8950 /*===========================================================================
8951 
8952         FUNCTION NAME:  PostValidation
8953 
8954 ===========================================================================*/
8955 PROCEDURE PostValidation
8956 IS
8957   v_Status             BOOLEAN := TRUE;
8958   v_Progress           VARCHAR(3) := '010';
8959   e_ArchiveAPIFailed   EXCEPTION;
8960 
8961 BEGIN
8962   --
8963   IF (l_debug <> -1) THEN
8964      rlm_core_sv.dpush(C_SDEBUG,'PostValidation');
8965      rlm_core_sv.dlog(C_DEBUG,'Header_id',g_Header_Rec.header_id);
8966   END IF;
8967   --
8968   v_Status := rlm_ad_sv.Archive_Demand(g_Header_Rec.header_id);
8969   --
8970   v_Progress := '020';
8971   --
8972   IF NOT v_Status THEN
8973      raise e_ArchiveAPIFailed;
8974   END IF;
8975   --
8976   IF (l_debug <> -1) THEN
8977      rlm_core_sv.dlog(C_DEBUG,'progress',v_Progress);
8978      rlm_core_sv.dpop(C_SDEBUG);
8979   END IF;
8980   --
8981 EXCEPTION
8982   WHEN e_ArchiveAPIFailed THEN
8983     --
8984     g_header_rec.process_status := rlm_core_sv.k_PS_ERROR;
8985     rlm_message_sv.app_error(
8986                 x_ExceptionLevel => rlm_message_sv.k_error_level,
8987                 x_MessageName => 'RLM_ARCHIVE_API_ERROR',
8988                 x_InterfaceHeaderId => g_Header_Rec.header_id,
8989                 x_Token1 => 'ERROR',
8990                 x_value1 => sqlerrm,
8991                 x_ValidationType => 'ARCHIVE');
8992     --
8993     IF (l_debug <> -1) THEN
8994        rlm_core_sv.dlog(C_DEBUG,'EXCEPTION: RLM_ARCHIVE_API_ERROR ',v_Progress);
8995        rlm_core_sv.dpop(C_SDEBUG);
8996     END IF;
8997     --
8998   WHEN OTHERS THEN
8999     --
9000     g_header_rec.process_status := rlm_core_sv.k_PS_ERROR;
9001     rlm_message_sv.sql_error('rlm_validateDemand_sv.PostValidation: ',
9002                                  v_Progress);
9003     --
9004     IF (l_debug <> -1) THEN
9005        rlm_core_sv.dpop(C_SDEBUG,'EXCEPTION: '||SUBSTR(SQLERRM,1,200));
9006     END IF;
9007     raise;
9008     --
9009 END PostValidation;
9010 
9011 /*===========================================================================
9012 
9013   PROCEDURE CallSetups
9014 
9015 ===========================================================================*/
9016 FUNCTION CallSetups( x_Group_rec IN OUT NOCOPY t_Group_rec,
9017                      x_header_rec IN rlm_interface_headers%ROWTYPE,
9018                      x_lines_rec IN rlm_interface_lines%ROWTYPE)
9019 RETURN BOOLEAN
9020 IS
9021 
9022   v_SetupTerms_rec    rlm_setup_terms_sv.setup_terms_rec_typ;
9023   v_TermsLevel        VARCHAR2(30) := NULL;
9024   v_ReturnStatus      BOOLEAN;
9025   v_ReturnMsg         VARCHAR2(3000);
9026   e_NoSetupTerms      EXCEPTION;
9027   --e_skip_callsetup    EXCEPTION; --Commented as part of Bugfix 8693697
9028 
9029 BEGIN
9030   --
9031   IF (l_debug <> -1) THEN
9032      rlm_core_sv.dpush(C_SDEBUG,'CallSetups');
9033      rlm_core_sv.dlog(C_DEBUG,'x_lines_rec.ship_from_org_id',
9034                               x_lines_rec.ship_from_org_id);
9035      rlm_core_sv.dlog(C_DEBUG,'x_lines_rec.cust_ship_from_org_ext',
9036                               x_lines_rec.cust_ship_from_org_ext);
9037      rlm_core_sv.dlog(C_DEBUG,'x_header_rec.customer_id',
9038                               x_header_rec.customer_id);
9039      rlm_core_sv.dlog(C_DEBUG,'x_lines_rec.ship_to_address_id',
9040                               x_lines_rec.ship_to_address_id);
9041      rlm_core_sv.dlog(C_DEBUG,'x_lines_rec.customer_item_id',
9042                               x_lines_rec.customer_item_id);
9043   END IF;
9044   --
9045 -- NOTE: call setupAPI to poulate setup info in the group rec:
9046 -- schedule precedence,match within/across strings
9047 -- firm disposition code and offset days, order header id
9048   --
9049   -- Bug 5098241
9050   -- For ATP item we expect the ship_from_org_id and
9051   -- cust_ship_from_org_ext to be null. If ship_from_org_id is null
9052   -- and cust_ship_from_org_ext is not null, then this means that for
9053   -- a non-ATP item, we have failed to derive the ship_from_org_id
9054   -- and for this reason we won't be able to get the setup terms.
9055   --
9056 --Commented as part of Bugfix 8693697
9057 /*  IF (x_lines_rec.cust_ship_from_org_ext IS NOT NULL)
9058     AND (x_lines_rec.ship_from_org_id IS NULL)
9059   THEN
9060     RAISE e_skip_callsetup;
9061   END IF;*/ --Bugfix 8693697 End
9062 
9063   RLM_TPA_SV.get_setup_terms(x_lines_rec.ship_from_org_id,
9064                                      x_header_rec.customer_id,
9065                                      x_lines_rec.ship_to_address_id,
9066                                      x_lines_rec.customer_item_id,
9067                                      v_TermsLevel,
9068                                      v_SetupTerms_rec,
9069                                      v_ReturnMsg, -- For Patch for Nov17 freeze
9070                                      v_ReturnStatus);
9071   --
9072   IF (l_debug <> -1) THEN
9073      rlm_core_sv.dlog(C_DEBUG, 'v_TermsLevel', v_TermsLevel);
9074      rlm_core_sv.dlog(C_DEBUG, 'v_ReturnStatus', v_ReturnStatus);
9075      rlm_core_sv.dlog(C_DEBUG,'v_SetupTerms_rec.schedule_hierarchy_code',
9076                    v_SetupTerms_rec.schedule_hierarchy_code);
9077      rlm_core_sv.dlog(C_DEBUG,'v_SetupTerms_rec.header_id',
9078                    v_SetupTerms_rec.header_id);
9079      rlm_core_sv.dlog(C_DEBUG, 'v_SetupTerms_rec.blanket_number',
9080 		   v_SetupTerms_rec.blanket_number);
9081   END IF;
9082   --
9083   IF v_ReturnStatus THEN
9084     --
9085     x_Group_rec.setup_terms_rec := v_SetupTerms_rec;
9086     --
9087   ELSE
9088     --
9089     IF (l_debug <> -1) THEN
9090        rlm_core_sv.dlog(C_DEBUG,'setups failed');
9091     END IF;
9092     --
9093     RAISE e_NoSetupTerms;
9094     --
9095   END IF;
9096   --
9097   IF (l_debug <> -1) THEN
9098      rlm_core_sv.dpop(C_SDEBUG);
9099   END IF;
9100   --
9101   RETURN TRUE;
9102   --
9103 EXCEPTION
9104   --
9105   -- bug 5098241
9106   --Commented as part of Bugfix 8693697
9107 /*  WHEN e_skip_callsetup THEN
9108    --
9109 
9110   IF (l_debug <> -1) THEN
9111       rlm_core_sv.dlog(C_SDEBUG,'SetupAPI failed');
9112      rlm_core_sv.dpop(C_SDEBUG,'EXCEPTION: e_skip_callsetup');
9113   END IF;
9114   --
9115   RETURN FALSE;*/ --Bugfix 8693697 End
9116   --
9117   WHEN e_NoSetupTerms THEN
9118    --
9119    --g_header_rec.process_status := rlm_core_sv.k_PS_ERROR;
9120    IF(v_SetupTerms_rec.msg_name = 'RLM_SETUP_CUST_INACTIVE_RECORD') THEN
9121      --
9122      rlm_message_sv.get_msg_text(
9123                   x_message_name => v_SetupTerms_rec.msg_name,
9124                   x_text => v_ReturnMsg,
9125                   x_token1 => 'CUSTOMER',
9126                   x_value1 => rlm_core_sv.get_customer_name(x_header_rec.customer_id),
9127                   x_token2 => 'SHIPFROM',
9128                   x_value2 => rlm_core_sv.get_ship_from(x_lines_rec.ship_from_org_id),
9129                   x_token3 => 'SHIPTO',
9130                   x_value3 => RLM_CORE_SV.get_ship_to(x_lines_rec.ship_to_address_id),
9131                   x_token4 => 'ITEM',
9132                   x_value4 => RLM_CORE_SV.get_item_number(x_lines_rec.customer_item_id)
9133                   );
9134      --
9135    END IF;
9136 
9137    rlm_message_sv.app_error(
9138            x_ExceptionLevel    => rlm_message_sv.k_error_level,
9139            x_MessageName       => 'RLM_SETUPAPI_FAILED',
9140            x_ChildMessageName  => v_SetupTerms_rec.msg_name,
9141            x_InterfaceHeaderId => x_lines_rec.header_id,
9142            x_InterfaceLineId   => x_lines_rec.line_id,
9143            x_Token1            => 'ERROR',
9144            x_value1            => v_ReturnMsg,
9145            x_ValidationType => 'SETUPS');
9146   --
9147   IF (l_debug <> -1) THEN
9148       rlm_core_sv.dlog(C_SDEBUG,'SetupAPI failed');
9149      rlm_core_sv.dpop(C_SDEBUG,'EXCEPTION: RLM_SETUPAPI_FAILED');
9150   END IF;
9151   --
9152   RETURN FALSE;
9153   --
9154  WHEN OTHERS THEN
9155   --
9156   --g_header_rec.process_status := rlm_core_sv.k_PS_ERROR;
9157   --
9158   IF (l_debug <> -1) THEN
9159      rlm_core_sv.dpop(C_SDEBUG,'EXCEPTION: '||SUBSTR(SQLERRM,1,200));
9160   END IF;
9161   --
9162   raise; /* should we do a raise here */
9163   --
9164 END CallSetups;
9165 
9166 /*=============================================================================
9167    PROCEDURE NAME:      ValidForecastDesig
9168 
9169 ==============================================================================*/
9170 PROCEDURE ValidForecastDesig(
9171                x_setup_terms_rec  IN RLM_SETUP_TERMS_SV.setup_terms_rec_typ,
9172                x_header_rec IN RLM_INTERFACE_HEADERS%ROWTYPE,
9173                x_lines_rec IN OUT NOCOPY RLM_INTERFACE_LINES%ROWTYPE,
9174                x_ForecastDesignator IN OUT NOCOPY VARCHAR2)
9175 IS
9176   --
9177   v_progress            VARCHAR2(3) := '010';
9178   IsMRPForecastFence    BOOLEAN := FALSE;
9179   v_mrp_cnt             NUMBER  := 0;
9180   --
9181 BEGIN
9182   --
9183   IF (l_debug <> -1) THEN
9184      rlm_core_sv.dpush(C_SDEBUG, 'ValidForecastDesig');
9185      rlm_core_sv.dlog(C_DEBUG, 'schedule type',x_header_rec.schedule_type);
9186      rlm_core_sv.dlog(C_DEBUG, 'pln_mrp_forecast_day_from',
9187                             x_setup_terms_rec.pln_mrp_forecast_day_from);
9188      rlm_core_sv.dlog(C_DEBUG, 'shp_mrp_forecast_day_from',
9189                             x_setup_terms_rec.shp_mrp_forecast_day_from);
9190      rlm_core_sv.dlog(C_DEBUG, 'seq_mrp_forecast_day_from',
9191                             x_setup_terms_rec.seq_mrp_forecast_day_from);
9192   END IF;
9193   --
9194   IF rlm_message_sv.check_dependency('FORECASTDESIGNATOR') THEN
9195      --
9196      IF x_header_rec.schedule_type = k_PLANNING AND
9197        (x_setup_terms_rec.pln_mrp_forecast_day_from IS NOT NULL AND
9198         x_setup_terms_rec.pln_mrp_forecast_day_from <> 0)  THEN
9199         --
9200         IsMRPForecastFence := TRUE;
9201         --
9202      ELSIF x_header_rec.schedule_type = k_SHIPPING AND
9203        (x_setup_terms_rec.shp_mrp_forecast_day_from IS NOT NULL AND
9204         x_setup_terms_rec.shp_mrp_forecast_day_from <> 0)  THEN
9205         --
9206         IsMRPForecastFence := TRUE;
9207         --
9208      ELSIF x_header_rec.schedule_type = k_SEQUENCED AND
9209        (x_setup_terms_rec.seq_mrp_forecast_day_from IS NOT NULL AND
9210         x_setup_terms_rec.seq_mrp_forecast_day_from <> 0)  THEN
9211         --
9212         IsMRPForecastFence := TRUE;
9213         --
9214      END IF;
9215 
9216      IF NOT IsMRPForecastFence THEN
9217         --
9218         -- We need to check whether any lines have been interfaced with the item detail
9219         -- type 6 since the forecast designator needs to be validated even in that instance
9220         --
9221         SELECT COUNT(*)
9222         INTO  v_mrp_cnt
9223         FROM  rlm_interface_lines
9224         WHERE item_detail_type = '6'
9225         AND   header_id = x_header_rec.header_id
9226         AND   line_id  = x_lines_rec.line_id;
9227         --
9228   	IF (l_debug <> -1) THEN
9229            rlm_core_sv.dlog(C_DEBUG,'number of lines interfaced as MRP forecast ',v_mrp_cnt);
9230         END IF;
9231         --
9232         IF v_mrp_cnt > 0 THEN
9233           --
9234           IsMRPForecastFence := TRUE;
9235           --
9236         END IF;
9237         --
9238      END IF;
9239      --
9240      IF IsMRPForecastFence THEN
9241         --
9242         rlm_tpa_sv.GetDesignator(
9243                    NULL,
9244                    NULL,
9245                    x_header_rec.Customer_id,
9246                    x_lines_rec.Ship_From_Org_Id,
9247                    x_lines_rec.ship_to_site_use_id ,
9248                    x_lines_rec.bill_to_site_use_id,
9249                    x_lines_rec.bill_to_address_Id,
9250                    x_ForecastDesignator);
9251 	--
9252   	IF (l_debug <> -1) THEN
9253            rlm_core_sv.dlog(C_DEBUG,'x_ForecastDesignator',x_ForecastDesignator);
9254         END IF;
9255         --
9256         IF x_ForecastDesignator is NULL THEN
9257            --
9258             x_lines_rec.process_status := rlm_core_sv.k_PS_ERROR;
9259             rlm_message_sv.app_error(
9260                         x_ExceptionLevel => rlm_message_sv.k_error_level,
9261                         x_MessageName => 'RLM_NO_FORECAST_DESIG',
9262                         x_InterfaceHeaderId => x_lines_rec.header_id,
9263                         x_InterfaceLineId => x_lines_rec.line_id,
9264                         x_token1=>'CUST',
9265                         x_value1=>
9266                         rlm_core_sv.get_customer_name(x_header_rec.customer_id),
9267                         x_ValidationType => 'FORECASTDESIGNATOR');
9268             --
9269          END IF;
9270          --
9271      END IF;
9272      --
9273   END IF;
9274   --
9275   IF (l_debug <> -1) THEN
9276      rlm_core_sv.dpop(C_SDEBUG);
9277   END IF;
9278   --
9279 EXCEPTION
9280   --
9281   WHEN OTHERS THEN
9282     --
9283     IF (l_debug <> -1) THEN
9284        rlm_core_sv.dpop(C_SDEBUG,'EXCEPTION: '||SUBSTR(SQLERRM,1,200));
9285     END IF;
9286     --
9287     raise;
9288 END ValidForecastDesig;
9289 
9290 /*===========================================================================
9291 
9292         FUNCTION NAME:  PrintTable
9293 
9294 ===========================================================================*/
9295 PROCEDURE PrintTable(v_LinesTab IN t_Lines_Tab,
9296                      i IN NUMBER)
9297 IS
9298 BEGIN
9299   --
9300   IF (l_debug <> -1) THEN
9301      rlm_core_sv.dpush(C_SDEBUG,'PrintTable');
9302      rlm_core_sv.dlog(C_DEBUG,'v_LinesTab.COUNT',v_LinesTab.COUNT);
9303   END IF;
9304   --
9305   IF i is not NULL THEN
9306      --
9307      IF (l_debug <> -1) THEN
9308         rlm_core_sv.dlog(C_DEBUG,'process_status',v_LinesTab(i).process_status);
9309         rlm_core_sv.dlog(C_DEBUG,'cust_ship_from_org_ext',v_LinesTab(i).cust_ship_from_org_ext);
9310         rlm_core_sv.dlog(C_DEBUG,'ship_from_org_id',v_LinesTab(i).ship_from_org_id);
9311         rlm_core_sv.dlog(C_DEBUG,'cust_ship_to_ext',v_LinesTab(i).cust_ship_to_ext);
9312         rlm_core_sv.dlog(C_DEBUG,'ship_to_address_id',v_LinesTab(i).ship_to_address_id);
9313         rlm_core_sv.dlog(C_DEBUG,'supplier_item_ext',v_LinesTab(i).supplier_item_ext);
9314         rlm_core_sv.dlog(C_DEBUG,'Customer_Item_Ext',v_LinesTab(i).Customer_Item_Ext);
9315         rlm_core_sv.dlog(C_DEBUG,'Customer_Item_Id',v_LinesTab(i).Customer_Item_Id);
9316         rlm_core_sv.dlog(C_DEBUG,'INVENTORY_ITEM_ID',v_LinesTab(i).INVENTORY_ITEM_ID);
9317         rlm_core_sv.dlog(C_DEBUG,'CUST_BILL_TO_EXT',v_LinesTab(i).CUST_BILL_TO_EXT);
9318         rlm_core_sv.dlog(C_DEBUG,'BILL_TO_ADDRESS_ID',v_LinesTab(i).BILL_TO_ADDRESS_ID);
9319         rlm_core_sv.dlog(C_DEBUG,'CUST_INTRMD_SHIP_TO_EXT',v_LinesTab(i).CUST_INTRMD_SHIP_TO_EXT);
9320         rlm_core_sv.dlog(C_DEBUG,'INTRMD_SHIP_TO_ID',v_LinesTab(i).INTRMD_SHIP_TO_ID);
9321         rlm_core_sv.dlog(C_DEBUG,'ITEM_DETAIL_TYPE',v_LinesTab(i).ITEM_DETAIL_TYPE);
9322         rlm_core_sv.dlog(C_DEBUG,'ITEM_DETAIL_SUBTYPE',v_LinesTab(i).ITEM_DETAIL_SUBTYPE);
9323         rlm_core_sv.dlog(C_DEBUG,'order_header_id',v_LinesTab(i).order_header_id);
9324         rlm_core_sv.dlog(C_DEBUG,'ship_del_rule_name',v_LinesTab(i).ship_del_rule_name);
9325      END IF;
9326      --
9327   ELSE
9328     --
9329     For i IN 1..v_LinesTab.COUNT LOOP
9330        --
9331        IF (l_debug <> -1) THEN
9332          rlm_core_sv.dlog(C_DEBUG,'process_status',v_LinesTab(i).process_status);
9333          rlm_core_sv.dlog(C_DEBUG,'cust_ship_from_org_ext',v_LinesTab(i).cust_ship_from_org_ext);
9334          rlm_core_sv.dlog(C_DEBUG,'ship_from_org_id',v_LinesTab(i).ship_from_org_id);
9335          rlm_core_sv.dlog(C_DEBUG,'cust_ship_to_ext',v_LinesTab(i).cust_ship_to_ext);
9336          rlm_core_sv.dlog(C_DEBUG,'ship_to_address_id',v_LinesTab(i).ship_to_address_id);
9337          rlm_core_sv.dlog(C_DEBUG,'supplier_item_ext',v_LinesTab(i).supplier_item_ext);
9338          rlm_core_sv.dlog(C_DEBUG,'Customer_Item_Ext',v_LinesTab(i).Customer_Item_Ext);
9339          rlm_core_sv.dlog(C_DEBUG,'Customer_Item_Id',v_LinesTab(i).Customer_Item_Id);
9340          rlm_core_sv.dlog(C_DEBUG,'INVENTORY_ITEM_ID',v_LinesTab(i).INVENTORY_ITEM_ID);
9341          rlm_core_sv.dlog(C_DEBUG,'CUST_BILL_TO_EXT',v_LinesTab(i).CUST_BILL_TO_EXT);
9342          rlm_core_sv.dlog(C_DEBUG,'BILL_TO_ADDRESS_ID',v_LinesTab(i).BILL_TO_ADDRESS_ID);
9343          rlm_core_sv.dlog(C_DEBUG,'CUST_INTRMD_SHIP_TO_EXT',v_LinesTab(i).CUST_INTRMD_SHIP_TO_EXT);
9344          rlm_core_sv.dlog(C_DEBUG,'INTRMD_SHIP_TO_ID',v_LinesTab(i).INTRMD_SHIP_TO_ID);
9345          rlm_core_sv.dlog(C_DEBUG,'ITEM_DETAIL_TYPE',v_LinesTab(i).ITEM_DETAIL_TYPE);
9346          rlm_core_sv.dlog(C_DEBUG,'ITEM_DETAIL_SUBTYPE',v_LinesTab(i).ITEM_DETAIL_SUBTYPE);
9347          rlm_core_sv.dlog(C_DEBUG,'order_header_id',v_LinesTab(i).order_header_id);
9348          rlm_core_sv.dlog(C_DEBUG,'ship_del_rule_name',v_LinesTab(i).ship_del_rule_name);
9349       END IF;
9350       --
9351     END LOOP;
9352     --
9353   END IF;
9354   --
9355   IF (l_debug <> -1) THEN
9356      rlm_core_sv.dpop(C_SDEBUG);
9357   END IF;
9358   --
9359 EXCEPTION
9360   WHEN OTHERS THEN
9361     --
9362     IF (l_debug <> -1) THEN
9363        rlm_core_sv.dpop(C_SDEBUG,'EXCEPTION: '||SUBSTR(SQLERRM,1,200));
9364     END IF;
9365     --
9366     raise;
9367 END PrintTable;
9368 
9369 
9370 /*===========================================================================
9371 
9372         FUNCTION NAME:  GetTPContext
9373 
9374 ===========================================================================*/
9375 PROCEDURE GetTPContext(x_header_rec IN RLM_INTERFACE_HEADERS%ROWTYPE,
9376                        x_lines_rec IN RLM_INTERFACE_LINES%ROWTYPE,
9377                        x_customer_number OUT NOCOPY VARCHAR2,
9378                        x_ship_to_ece_locn_code OUT NOCOPY VARCHAR2,
9379                        x_bill_to_ece_locn_code OUT NOCOPY VARCHAR2,
9380                        x_inter_ship_to_ece_locn_code OUT NOCOPY VARCHAR2,
9381                        x_tp_group_code OUT NOCOPY VARCHAR2)
9382 IS
9383    v_Progress VARCHAR2(3) := '010';
9384 
9385 BEGIN
9386    --
9387    IF (l_debug <> -1) THEN
9388       rlm_core_sv.dpush(C_SDEBUG,'GetTPContext');
9389    END IF;
9390    --
9391    IF x_header_rec.ECE_TP_LOCATION_CODE_EXT is NOT NULL THEN
9392         -- Following query is changed as per TCA obsolescence project.
9393 	SELECT	ETG.TP_GROUP_CODE
9394 	INTO	x_tp_group_code
9395 	FROM	ECE_TP_GROUP ETG,
9396 		ECE_TP_HEADERS ETH,
9397 		HZ_CUST_ACCT_SITES ACCT_SITE
9398 	WHERE	ETG.TP_GROUP_ID = ETH.TP_GROUP_ID
9399 	and	ETH.TP_HEADER_ID = ACCT_SITE.TP_HEADER_ID
9400 	and	ACCT_SITE.CUST_ACCOUNT_ID = x_header_rec.CUSTOMER_ID
9401 	and	ACCT_SITE.ECE_TP_LOCATION_CODE = x_header_rec.ECE_TP_LOCATION_CODE_EXT;
9402    ELSE
9403       x_tp_group_code := x_header_rec.ECE_TP_TRANSLATOR_CODE;
9404    END IF;
9405    --
9406    x_ship_to_ece_locn_code := x_header_rec.ECE_TP_LOCATION_CODE_EXT;
9407 
9408    IF x_ship_to_ece_locn_code is NULL THEN
9409        x_ship_to_ece_locn_code := x_lines_rec.cust_ship_to_ext;
9410    END IF;
9411 
9412    x_bill_to_ece_locn_code := x_lines_rec.cust_bill_to_ext;
9413    x_inter_ship_to_ece_locn_code := x_lines_rec.cust_intrmd_ship_to_ext;
9414 
9415    IF x_header_rec.customer_id is NOT NULL THEN
9416       -- Following query is changed as per TCA obsolescence project.
9417       SELECT 	ACCOUNT_NUMBER
9418       INTO   	x_customer_number
9419       FROM   	HZ_CUST_ACCOUNTS CUST_ACCT
9420       WHERE 	CUST_ACCT.CUST_ACCOUNT_ID = x_header_rec.Customer_Id;
9421    END IF;
9422    --
9423    IF (l_debug <> -1) THEN
9424       rlm_core_sv.dlog(C_DEBUG,'customer_id', x_customer_number);
9425       rlm_core_sv.dlog(C_DEBUG,'x_ship_to_ece_locn_code', x_ship_to_ece_locn_code);
9426       rlm_core_sv.dlog(C_DEBUG,'x_inter_ship_to_ece_locn_code', x_inter_ship_to_ece_locn_code);
9427       rlm_core_sv.dlog(C_DEBUG,'x_bill_to_ece_loc_code', x_bill_to_ece_locn_code);
9428       rlm_core_sv.dlog(C_DEBUG,'x_tp_group_code', x_tp_group_code);
9429       rlm_core_sv.dpop(C_SDEBUG);
9430    END IF;
9431    --
9432 EXCEPTION
9433    WHEN NO_DATA_FOUND THEN
9434       --
9435       x_customer_number := NULL;
9436       --
9437       IF (l_debug <> -1) THEN
9438          rlm_core_sv.dlog(C_DEBUG, 'No data found for' , x_header_rec.customer_id);
9439          rlm_core_sv.dpop(C_SDEBUG);
9440       END IF;
9441 
9442    WHEN OTHERS THEN
9443       rlm_message_sv.sql_error('rlm_validatedemand_sv.GetTPContext', v_Progress);
9444       --
9445       IF (l_debug <> -1) THEN
9446          rlm_core_sv.dpop(C_SDEBUG,'EXCEPTION: '||SUBSTR(SQLERRM,1,200));
9447       END IF;
9448       --
9449       raise;
9450 
9451 END GetTPContext;
9452 
9453 /*===========================================================================
9454 
9455         FUNCTION NAME:  GetHdrTPContext
9456 
9457 ===========================================================================*/
9458 PROCEDURE GetHdrTPContext(x_header_rec IN RLM_INTERFACE_HEADERS%ROWTYPE,
9459                           x_customer_number OUT NOCOPY VARCHAR2,
9460                           x_ship_to_ece_locn_code OUT NOCOPY VARCHAR2,
9461                           x_bill_to_ece_locn_code OUT NOCOPY VARCHAR2,
9462                           x_inter_ship_to_ece_locn_code OUT NOCOPY VARCHAR2,
9463                           x_tp_group_code OUT NOCOPY VARCHAR2)
9464 IS
9465    v_Progress VARCHAR2(3) := '010';
9466 
9467 BEGIN
9468    --
9469    IF (l_debug <> -1) THEN
9470       rlm_core_sv.dpush(C_SDEBUG,'GetHdrTPContext');
9471    END IF;
9472    --
9473    IF x_header_rec.ECE_TP_LOCATION_CODE_EXT is NOT NULL THEN
9474         -- Following query is changed as per TCA obsolescence project.
9475 	SELECT	ETG.TP_GROUP_CODE
9476 	INTO	x_tp_group_code
9477 	FROM	ECE_TP_GROUP ETG,
9478 		ECE_TP_HEADERS ETH,
9479 		HZ_CUST_ACCT_SITES ACCT_SITE
9480 	WHERE  	ETG.TP_GROUP_ID = ETH.TP_GROUP_ID
9481 	and	ETH.TP_HEADER_ID = ACCT_SITE.TP_HEADER_ID
9482 	and	ACCT_SITE.ECE_TP_LOCATION_CODE = x_header_rec.ECE_TP_LOCATION_CODE_EXT;
9483    ELSE
9484       x_tp_group_code := x_header_rec.ECE_TP_TRANSLATOR_CODE;
9485    END IF;
9486    --
9487 
9488    x_ship_to_ece_locn_code := x_header_rec.ECE_TP_LOCATION_CODE_EXT;
9489    x_bill_to_ece_locn_code := NULL;
9490    x_inter_ship_to_ece_locn_code := NULL;
9491 
9492    IF x_header_rec.customer_id is NOT NULL THEN
9493       -- Following query is changed as per TCA obsolescence project.
9494       SELECT 	ACCOUNT_NUMBER
9495       INTO   	x_customer_number
9496       FROM   	HZ_CUST_ACCOUNTS CUST_ACCT
9497       WHERE 	CUST_ACCT.CUST_ACCOUNT_ID = x_header_rec.Customer_Id;
9498    END IF;
9499    --
9500    IF (l_debug <> -1) THEN
9501       rlm_core_sv.dlog(C_DEBUG,'customer_id', x_customer_number);
9502       rlm_core_sv.dlog(C_DEBUG,'x_ship_to_ece_locn_code', x_ship_to_ece_locn_code);
9503       rlm_core_sv.dlog(C_DEBUG,'x_inter_ship_to_ece_locn_code', x_inter_ship_to_ece_locn_code);
9504       rlm_core_sv.dlog(C_DEBUG,'x_bill_to_ece_loc_code', x_bill_to_ece_locn_code);
9505       rlm_core_sv.dlog(C_DEBUG,'x_tp_group_code', x_tp_group_code);
9506       rlm_core_sv.dpop(C_SDEBUG);
9507    END IF;
9508    --
9509 EXCEPTION
9510    WHEN NO_DATA_FOUND THEN
9511       --
9512       x_customer_number := NULL;
9513       --
9514       IF (l_debug <> -1) THEN
9515          rlm_core_sv.dlog(C_DEBUG, 'No data found for' , x_header_rec.customer_id);
9516          rlm_core_sv.dpop(C_SDEBUG);
9517       END IF;
9518 
9519    WHEN OTHERS THEN
9520       rlm_message_sv.sql_error('rlm_validatedemand_sv.GetHdrTPContext', v_Progress);
9521       --
9522       IF (l_debug <> -1) THEN
9523          rlm_core_sv.dpop(C_SDEBUG,'EXCEPTION: '||SUBSTR(SQLERRM,1,200));
9524       END IF;
9525       --
9526       raise;
9527 
9528 END GetHdrTPContext;
9529 
9530 /*=============================================================================
9531   PROCEDURE NAME: SetTPAttCategory
9532 ==============================================================================*/
9533 PROCEDURE SetTPAttCategory (
9534   		x_header_rec IN OUT NOCOPY RLM_INTERFACE_HEADERS%ROWTYPE,
9535                 x_lines_rec  IN OUT NOCOPY RLM_INTERFACE_LINES%ROWTYPE,
9536                 x_group_rec  IN OUT NOCOPY RLM_VALIDATEDEMAND_SV.t_Group_rec) IS
9537 BEGIN
9538   --
9539   IF (l_debug <> -1) THEN
9540    rlm_core_sv.dpush(C_SDEBUG,'SetTPAttCategory');
9541   END IF;
9542   --
9543   x_header_rec.tp_attribute_category := x_header_rec.ece_tp_translator_code;
9544   x_lines_rec.tp_attribute_category := x_header_rec.ece_tp_translator_code;
9545   --
9546   IF (l_debug <> -1) THEN
9547    rlm_core_sv.dpop(C_SDEBUG);
9548   END IF;
9549   --
9550 EXCEPTION
9551      WHEN OTHERS THEN
9552         --
9553         IF (l_debug <> -1) THEN
9554    	  rlm_core_sv.dpop(C_SDEBUG,'EXCEPTION: '||SUBSTR(SQLERRM,1,200));
9555 	END IF;
9556         --
9557 END SetTPAttCategory;
9558 
9559 /*=============================================================================
9560   PROCEDURE NAME: SetHdrTPAttCategory
9561 ==============================================================================*/
9562 PROCEDURE SetHdrTPAttCategory (
9563   		x_header_rec IN OUT NOCOPY RLM_INTERFACE_HEADERS%ROWTYPE) IS
9564 BEGIN
9565   --
9566   IF (l_debug <> -1) THEN
9567    rlm_core_sv.dpush(C_SDEBUG,'SetHdrTPAttCategory');
9568   END IF;
9569   --
9570   --x_header_rec.tp_attribute_category := NVL(x_header_rec.ece_tp_translator_code, x_header_rec.customer_ext);
9571   --
9572   IF (l_debug <> -1) THEN
9573    rlm_core_sv.dpop(C_SDEBUG);
9574   END IF;
9575   --
9576 EXCEPTION
9577      WHEN OTHERS THEN
9578         --
9579         IF (l_debug <> -1) THEN
9580    	  rlm_core_sv.dpop(C_SDEBUG,'EXCEPTION: '||SUBSTR(SQLERRM,1,200));
9581 	END IF;
9582 
9583 END SetHdrTPAttCategory;
9584 
9585 /*=============================================================================
9586   PROCEDURE NAME: SetLineTPAttCategory
9587 ==============================================================================*/
9588 PROCEDURE SetLineTPAttCategory (
9589   		x_header_rec IN OUT NOCOPY RLM_INTERFACE_HEADERS%ROWTYPE,
9590                 x_lines_rec  IN OUT NOCOPY RLM_INTERFACE_LINES%ROWTYPE,
9591                 x_group_rec  IN OUT NOCOPY RLM_VALIDATEDEMAND_SV.t_Group_rec) IS
9592 BEGIN
9593   --
9594   IF (l_debug <> -1) THEN
9595    rlm_core_sv.dpush(C_SDEBUG,'SetLineTPAttCategory');
9596   END IF;
9597   --
9598   --x_header_rec.tp_attribute_category := NVL(x_header_rec.ece_tp_translator_code, x_header_rec.customer_ext);
9599   --x_lines_rec.tp_attribute_category := NVL(x_header_rec.ece_tp_translator_code, x_header_rec.customer_ext);
9600   --
9601   IF (l_debug <> -1) THEN
9602    rlm_core_sv.dpop(C_SDEBUG);
9603   END IF;
9604   --
9605 EXCEPTION
9606      WHEN OTHERS THEN
9607         --
9608         IF (l_debug <> -1) THEN
9609    	  rlm_core_sv.dpop(C_SDEBUG,'EXCEPTION: '||SUBSTR(SQLERRM,1,200));
9610 	END IF;
9611 
9612 END SetLineTPAttCategory;
9613 
9614 /*===========================================================================
9615         FUNCTION NAME:  CustomerRelationship
9616 ===========================================================================*/
9617 
9618 FUNCTION CustomerRelationship(x_RelatedCustomerId IN NUMBER,
9619                               x_customer_id IN NUMBER,
9620                               x_header_id     IN NUMBER,
9621                               x_site_use_code IN VARCHAR2 DEFAULT 'BILL_TO')
9622 RETURN BOOLEAN
9623 IS
9624 
9625   v_Progress                    VARCHAR2(3) := '010';
9626   v_Temp                        VARCHAR2(10);
9627   v_parameter                   VARCHAR2(1);
9628   e_no_om_cr                    EXCEPTION;
9629 
9630 BEGIN
9631   IF (l_debug <> -1) THEN
9632      rlm_core_sv.dpush(C_SDEBUG,'CustomerRelationship');
9633      rlm_core_sv.dlog(C_DEBUG,'x_RelatedCustomerId',x_RelatedCustomerId);
9634      rlm_core_sv.dlog(C_DEBUG,'x_customer_id',x_customer_id);
9635      rlm_core_sv.dlog(C_DEBUG,'x_site_use_code',x_site_use_code);
9636   END IF;
9637   --
9638 
9639   IF x_RelatedCustomerId <> x_customer_id THEN
9640      --
9641      IF x_site_use_code = 'BILL_TO' THEN
9642        --
9643        rlm_core_sv.dlog(C_DEBUG,'x_site_use_code',x_site_use_code);
9644        --
9645        SELECT      'exists'
9646        INTO        v_Temp
9647        FROM        HZ_CUST_ACCT_RELATE
9648        WHERE       cust_account_id = x_customer_id
9649        AND         related_cust_account_id = x_RelatedCustomerId
9650        AND         bill_to_flag = 'Y'
9651        AND         status='A';
9652        --
9653      ELSE
9654        --
9655        SELECT      'exists'
9656        INTO        v_Temp
9657        FROM        HZ_CUST_ACCT_RELATE
9658        WHERE       cust_account_id = x_customer_id
9659        AND         related_cust_account_id = x_RelatedCustomerId
9660        AND         ship_to_flag = 'Y'
9661        AND         status='A';
9662        --
9663      END IF;
9664      --
9665      -- Use Customer relationship only if the OM profile option is set.
9666      --
9667      v_parameter := OE_Sys_Parameters.value('CUSTOMER_RELATIONSHIPS_FLAG',
9668                                               MO_GLOBAL.get_current_org_id);
9669      --
9670      IF (l_debug <> -1) THEN
9671            rlm_core_sv.dlog(C_DEBUG,'v_parameter',v_parameter);
9672      END IF;
9673      --
9674      IF NVL(v_parameter,'N') NOT IN ('Y','A')  THEN
9675         --
9676         raise e_no_om_cr;
9677         --
9678      END IF;
9679      --
9680   END IF;
9681   --
9682   IF (l_debug <> -1) THEN
9683      rlm_core_sv.dpop(C_SDEBUG);
9684   END IF;
9685   --
9686   RETURN(TRUE);
9687 
9688 EXCEPTION
9689   --
9690   WHEN NO_DATA_FOUND THEN
9691     --
9692     IF (l_debug <> -1) THEN
9693        rlm_core_sv.dlog(C_DEBUG,'NO_DATA_FOUND');
9694     END IF;
9695     --
9696     rlm_message_sv.app_error(
9697                               x_ExceptionLevel => rlm_message_sv.k_error_level,
9698                               x_MessageName => 'RLM_CUSTOMER_RELATIONSHIP',
9699                               x_InterfaceHeaderId => x_header_id,
9700                               x_token1=>'CUSTOMER1',
9701                               x_value1 => rlm_core_sv.get_customer_name(x_RelatedCustomerId),
9702                               x_token2=>'CUSTOMER2',
9703                               x_value2 => rlm_core_sv.get_customer_name(x_customer_id)
9704                              );
9705     --
9706     IF (l_debug <> -1) THEN
9707        rlm_core_sv.dpop(C_SDEBUG,'EXCEPTION: RLM_CUSTOMER_RELATIONSHIP');
9708     END IF;
9709     --
9710     RETURN(FALSE);
9711     --
9712   WHEN e_no_om_cr THEN
9713     --
9714     rlm_message_sv.app_error(x_ExceptionLevel => rlm_message_sv.k_error_level,
9715                              x_MessageName => 'RLM_OM_CUSTOMER_RELATIONSHIP',
9716                              x_InterfaceHeaderId => x_header_id);
9717     --
9718     IF (l_debug <> -1) THEN
9719       rlm_core_sv.dlog(C_DEBUG,'e_no_om_cr');
9720        rlm_core_sv.dpop(C_SDEBUG,'EXCEPTION: RLM_OM_CUSTOMER_RELATIONSHIP');
9721     END IF;
9722     --
9723     RETURN(FALSE);
9724     --
9725   WHEN OTHERS THEN
9726     --
9727     rlm_message_sv.sql_error('RLM_VALIDATEDEMAND_SV.CustomerRelationship',
9728                              v_Progress);
9729     --
9730     IF (l_debug <> -1) THEN
9731        rlm_core_sv.dlog (C_DEBUG,'SQL Error: ',substr(sqlerrm,1,300));
9732        rlm_core_sv.dlog(C_DEBUG,'progress',v_Progress);
9733        rlm_core_sv.dpop(C_SDEBUG,'EXCEPTION: OTHER - sql error');
9734     END IF;
9735     --
9736     raise;
9737     --
9738 END CustomerRelationship;
9739 
9740 
9741 /*===========================================================================
9742 
9743         PROCEDURE NAME:  ValidateDateTypeATP
9744 
9745 ===========================================================================*/
9746 PROCEDURE ValidateDateTypeATP(
9747           x_line      IN RLM_INTERFACE_LINES%ROWTYPE)
9748 IS
9749  --global_atp
9750  v_order_date_type_code    VARCHAR2(30);
9751  v_order_number            NUMBER;
9752 BEGIN
9753  --
9754  IF (l_debug <> -1) THEN
9755     rlm_core_sv.dpush(C_SDEBUG, 'ValidateDateTypeATP');
9756  END IF;
9757  --
9758  IF RLM_MANAGE_DEMAND_SV.IsATPItem(x_line.ship_from_org_id,
9759                                    x_line.inventory_item_id) THEN
9760 
9761    IF x_line.item_detail_type IN ('0','1','2') THEN
9762       --
9763       BEGIN
9764         SELECT DECODE(order_date_type_code, 'ARRIVAL', 'DELIVER', 'SHIP'),
9765                order_number
9766         INTO   v_order_date_type_code, v_order_number
9767         FROM   oe_order_headers_all
9768         WHERE  header_id = x_line.order_header_id;
9769       EXCEPTION
9770         WHEN NO_DATA_FOUND THEN
9771           RAISE;
9772         WHEN OTHERS THEN
9773           RAISE;
9774       END;
9775       --
9776       IF (l_debug <> -1) THEN
9777          rlm_core_sv.dlog(C_DEBUG, 'OM Date Type', v_order_date_type_code);
9778          rlm_core_sv.dlog(C_DEBUG, 'RLM Date Type', x_line.date_type_code);
9779       END IF;
9780       --
9781       IF v_order_date_type_code <> x_line.date_type_code THEN
9782         --
9783         IF (l_debug <> -1) THEN
9784            rlm_core_sv.dlog(C_DEBUG, 'RLM line date type does not match OM date type');
9785         END IF;
9786         --
9787         rlm_message_sv.app_error(
9788                 x_ExceptionLevel => rlm_message_sv.k_warn_level,
9789                 x_MessageName => 'RLM_MISMATCH_DATE_TYPE',
9790                 x_InterfaceHeaderId => x_line.header_id,
9791                 x_InterfaceLineId => x_line.line_id,
9792                 x_token1=> 'RLM_DATE_TYPE',
9793                 x_value1=> rlm_core_sv.get_lookup_meaning(
9794                              'RLM_DATE_TYPE_CODE',
9795                              x_line.date_type_code),
9796                 x_token2=> 'OM_DATE_TYPE',
9797                 x_value2=> OE_Id_To_Value.Order_Date_Type(v_order_date_type_code),
9798                 x_token3=> 'ORDER',
9799                 x_value3=> TO_CHAR(v_order_number),
9800                 x_token4=> 'SF',
9801                 x_value4=> rlm_core_sv.get_ship_from(x_line.ship_from_org_id),
9802                 x_token5=> 'ST',
9803                 x_value5=> rlm_core_sv.get_ship_to(x_line.ship_to_address_id),
9804                 x_token6=> 'CI',
9805                 x_value6=> rlm_core_sv.get_item_number(x_line.customer_item_id));
9806 
9807                 g_warned := TRUE;
9808           --
9809       END IF;
9810       --
9811    END IF;
9812    --
9813  END IF;
9814  --
9815  IF (l_debug <> -1) THEN
9816     rlm_core_sv.dpop(C_SDEBUG);
9817  END IF;
9818  --
9819 EXCEPTION
9820   WHEN NO_DATA_FOUND THEN
9821      --
9822      IF (l_debug <> -1) THEN
9823         rlm_core_sv.dpop(C_SDEBUG, 'No sales order found');
9824      END IF;
9825 
9826   WHEN OTHERS THEN
9827      --
9828      IF (l_debug <> -1) THEN
9829         rlm_core_sv.dpop(C_SDEBUG,'EXCEPTION: '||SUBSTR(SQLERRM,1,200));
9830      END IF;
9831 
9832 END ValidateDateTypeATP;
9833 
9834 
9835 --
9836 -- Blanket Order Procedures
9837 --
9838 /*=======================================================================================
9839 
9840   PROCEDURE DeriveBlanketPO
9841 
9842 ========================================================================================*/
9843 PROCEDURE DeriveBlanketPO(x_cust_po_num	    IN RLM_INTERFACE_LINES.cust_po_number%TYPE,
9844 			  x_Group_rec       IN t_Group_rec,
9845 			  x_header_id	    IN RLM_INTERFACE_HEADERS.HEADER_ID%TYPE)
9846 IS
9847  --
9848  v_blanket_po	VARCHAR2(240);
9849  v_blanket_num   NUMBER;
9850  e_POMisMatch	EXCEPTION;
9851  --
9852 BEGIN
9853   --
9854   IF (l_debug <> -1) THEN
9855     rlm_core_sv.dpush(C_SDEBUG, 'DeriveBlanketPO');
9856   END IF;
9857   --
9858   SELECT cust_po_number
9859   INTO v_blanket_po
9860   FROM oe_blanket_headers
9861   WHERE order_number = x_Group_rec.setup_terms_rec.blanket_number;
9862   --
9863   IF (l_debug <> -1) THEN
9864     rlm_core_sv.dlog(C_DEBUG, 'Blanket Number', x_Group_rec.setup_terms_rec.blanket_number);
9865     rlm_core_sv.dlog(C_DEBUG, 'Blanket PO number', v_blanket_po);
9866     rlm_core_sv.dlog(C_DEBUG, 'Schedule PO', x_cust_po_num);
9867   END IF;
9868   --
9869   IF (x_cust_po_num IS NOT NULL AND v_blanket_po IS NOT NULL) THEN
9870    --
9871     IF (v_blanket_po <> x_cust_po_num) THEN
9872      --
9873      RAISE e_POMisMatch;
9874      --
9875     END IF;
9876     --
9877   END IF;
9878   --
9879   IF (l_debug <> -1) THEN
9880     rlm_core_sv.dpop(C_SDEBUG);
9881   END IF;
9882   --
9883   EXCEPTION
9884    --
9885    WHEN e_POMisMatch THEN
9886     --
9887     rlm_message_sv.app_error(
9888            x_ExceptionLevel => rlm_message_sv.k_warn_level,
9889            x_MessageName => 'RLM_BLKT_PO_MISMATCH',
9890            x_InterfaceHeaderId => x_header_id,
9891            x_token1=>'SCHED_PO',
9892            x_value1=>x_cust_po_num,
9893            x_token2=>'BLKT_PO',
9894            x_value2=>v_blanket_po,
9895            x_ValidationType => 'PURCHASE_ORDER');
9896     --
9897     IF (l_debug <> -1) THEN
9898       rlm_core_sv.dlog(C_DEBUG, 'WARNING: Mismatch between PO on schedule and blanket order');
9899       rlm_core_sv.dpop(C_SDEBUG, 'RLM_BLKT_PO_MISMATCH');
9900     END IF;
9901     --
9902    WHEN NO_DATA_FOUND THEN
9903     --
9904     rlm_message_sv.app_error(
9905            x_ExceptionLevel => rlm_message_sv.k_warn_level,
9906            x_MessageName => 'RLM_BLANKET_UNDEFINED',
9907            x_InterfaceHeaderId => x_header_id,
9908            x_token1=>'BLANKET_NUM',
9909            x_value1=>x_Group_rec.setup_terms_rec.blanket_number,
9910            x_ValidationType => 'PURCHASE_ORDER');
9911     --
9912     IF (l_debug <> -1) THEN
9913       rlm_core_sv.dlog(C_DEBUG, 'Blanket Order not defined');
9914       rlm_core_sv.dpop(C_SDEBUG, 'RLM_BLANKET_UNDEFINED');
9915     END IF;
9916     --
9917    WHEN OTHERS THEN
9918     --
9919     IF (l_debug <> -1) THEN
9920       rlm_core_sv.dlog(C_DEBUG, 'when others of DeriveBlanketPO');
9921       rlm_core_sv.dpop(C_SDEBUG, 'EXCEPTION: '||SUBSTR(SQLERRM,1,200));
9922     END IF;
9923     --
9924     RAISE;
9925     --
9926 END DeriveBlanketPO;
9927 
9928 
9929 /*===========================================================================
9930 
9931   FUNCTION ValidateBlanket
9932 
9933 ===========================================================================*/
9934 FUNCTION ValidateBlanket(x_Group_rec IN t_Group_rec,
9935 			 x_Sched_rec IN RLM_INTERFACE_HEADERS%ROWTYPE)
9936 RETURN BOOLEAN
9937 IS
9938   --
9939   l_reqdate		DATE;
9940   h_reqdate		DATE;
9941   v_startdate		DATE;
9942   v_enddate		DATE;
9943   v_onholdflag    	VARCHAR2(1);
9944   e_BlktStartDate	EXCEPTION;
9945   e_BlktEndDate		EXCEPTION;
9946   e_BlktOnHold		EXCEPTION;
9947   --
9948 BEGIN
9949   --
9950   IF (l_debug <> -1) THEN
9951     rlm_core_sv.dpush(C_SDEBUG, 'ValidateBlanket');
9952     rlm_core_sv.dlog(C_DEBUG, 'Header_id', x_Sched_rec.header_id);
9953     rlm_core_sv.dlog(C_DEBUG, 'Schedule source', x_Sched_rec.schedule_source);
9954     rlm_core_sv.dlog(C_DEBUG, 'Schedule Type', x_Sched_rec.schedule_type);
9955   END IF;
9956   --
9957   IF x_Sched_rec.schedule_type <> 'SEQUENCED' THEN
9958    --
9959    IF (l_debug <> -1) THEN
9960     rlm_core_sv.dlog(C_DEBUG, 'Non-sequenced schedule');
9961     rlm_core_sv.dlog(C_DEBUG, 'Schedule Item Number', x_Group_rec.schedule_item_num);
9962    END IF;
9963    --
9964    SELECT MIN(start_date_time), MAX(start_date_time)
9965    INTO l_reqdate, h_reqdate
9966    FROM rlm_interface_lines
9967    WHERE header_id = x_Sched_rec.header_id AND
9968    schedule_item_num = x_Group_rec.schedule_item_num AND
9969    item_detail_type IN (k_FIRM, k_FORECAST, k_PAST_DUE_FIRM);
9970    --
9971   ELSE
9972    --
9973    IF x_Sched_rec.schedule_source <> 'MANUAL' THEN
9974     --
9975     IF (l_debug <> -1) THEN
9976      rlm_core_sv.dlog(C_DEBUG, 'EDI Sequenced Schedule');
9977      rlm_core_sv.dlog(C_DEBUG, 'x_Group_rec.cust_ship_from_org_ext', x_Group_rec.cust_ship_from_org_ext);
9978      rlm_core_sv.dlog(C_DEBUG, 'x_Group_rec.cust_ship_to_ext', x_Group_rec.cust_ship_to_ext);
9979      rlm_core_sv.dlog(C_DEBUG, 'x_Group_rec.customer_item_ext', x_Group_rec.customer_item_ext);
9980     END IF;
9981     --
9982     SELECT MIN(start_date_time), MAX(start_date_time)
9983     INTO l_reqdate, h_reqdate
9984     FROM rlm_interface_lines
9985     WHERE header_id = x_Sched_rec.header_id AND
9986     cust_ship_from_org_ext = x_Group_rec.cust_ship_from_org_ext AND
9987     cust_ship_to_ext = x_Group_rec.cust_ship_to_ext AND
9988     customer_item_ext = x_Group_rec.customer_item_ext AND
9989     item_detail_type IN (k_FIRM, k_FORECAST, k_PAST_DUE_FIRM);
9990     --
9991    ELSE
9992     --
9993     IF (l_debug <> -1) THEN
9994      rlm_core_sv.dlog(C_DEBUG, 'Manual Sequenced Schedule');
9995      rlm_core_sv.dlog(C_DEBUG, 'x_Group_rec.ship_from_org_id', x_Group_rec.ship_from_org_id);
9996      rlm_core_sv.dlog(C_DEBUG, 'x_Group_rec.ship_to_address_id', x_Group_rec.ship_to_address_id);
9997      rlm_core_sv.dlog(C_DEBUG, 'x_Group_rec.customer_item_id', x_Group_rec.customer_item_id);
9998     END IF;
9999     --
10000     SELECT MIN(start_date_time), MAX(start_date_time)
10001     INTO l_reqdate, h_reqdate
10002     FROM rlm_interface_lines
10003     WHERE header_id = x_Sched_rec.header_id AND
10004     ship_from_org_id = x_Group_rec.ship_from_org_id AND
10005     ship_to_address_id = x_Group_rec.ship_to_address_id AND
10006     customer_item_id = x_Group_rec.customer_item_id AND
10007     item_detail_type IN (k_FIRM, k_FORECAST, k_PAST_DUE_FIRM);
10008     --
10009     END IF;
10010     --
10011   END IF;
10012   --
10013   IF (l_debug <> -1) THEN
10014     rlm_core_sv.dlog(C_DEBUG, 'Lowest request date in current group',  l_reqdate);
10015     rlm_core_sv.dlog(C_DEBUG, 'Highest request date in current group', h_reqdate);
10016   END IF;
10017   --
10018   SELECT start_date_active, end_date_active, on_hold_flag
10019   INTO v_startdate, v_enddate, v_onholdflag
10020   FROM oe_blanket_headers_ext
10021   WHERE order_number = x_Group_rec.setup_terms_rec.blanket_number;
10022   --
10023   IF (l_debug <> -1) THEN
10024     rlm_core_sv.dlog(C_DEBUG, 'Blanket Number',x_Group_rec.setup_terms_rec.blanket_number);
10025     rlm_core_sv.dlog(C_DEBUG, 'Blanket Effectivity Start Date', v_startdate);
10026     rlm_core_sv.dlog(C_DEBUG, 'Blanket Effectivity End Date', v_enddate);
10027     rlm_core_sv.dlog(C_DEBUG, 'On Hold Flag', v_onholdflag);
10028   END IF;
10029   --
10030   IF v_onholdflag = 'Y' THEN
10031    --
10032    RAISE e_BlktOnHold;
10033    --
10034   END IF;
10035   --
10036   IF (l_reqdate < v_startdate) THEN
10037    --
10038    RAISE e_BlktStartDate;
10039    --
10040   END IF;
10041   --
10042   IF (v_enddate is NOT NULL)  THEN
10043    --
10044    IF (h_reqdate > v_enddate) THEN
10045     --
10046     RAISE e_BlktEndDate;
10047     --
10048    END IF;
10049    --
10050   END IF;
10051   --
10052   IF (l_debug <> -1) THEN
10053     rlm_core_sv.dpop(C_SDEBUG, 'TRUE');
10054   END IF;
10055   --
10056   RETURN TRUE;
10057   --
10058   EXCEPTION
10059    --
10060    WHEN e_BlktOnHold THEN
10061     --
10062     rlm_message_sv.app_error(
10063            x_ExceptionLevel => rlm_message_sv.k_error_level,
10064            x_MessageName => 'RLM_BLANKET_ON_HOLD',
10065            x_InterfaceHeaderId => x_Sched_rec.header_id,
10066            x_InterfaceLineId => NULL,
10067 	   x_token1=>'BLANKET_NUMBER',
10068 	   x_value1=>x_Group_rec.setup_terms_rec.blanket_number);
10069      --
10070      IF (l_debug <> -1) THEN
10071        rlm_core_sv.dlog(C_DEBUG, 'Blanket Order on hold');
10072        rlm_core_sv.dpop(C_SDEBUG, 'FALSE');
10073      END IF;
10074      --
10075      RETURN FALSE;
10076      --
10077    WHEN e_BlktStartDate THEN
10078     --
10079     rlm_message_sv.app_error(
10080            x_ExceptionLevel => rlm_message_sv.k_error_level,
10081            x_MessageName => 'RLM_STARTDATE_BEFORE_BLANKET',
10082            x_InterfaceHeaderId => x_Sched_rec.header_id,
10083            x_InterfaceLineId => NULL,
10084            x_token1=>'REQDATE',
10085            x_value1=>to_char(l_reqdate, 'MM/DD/YYYY HH24:MI:SS'),
10086            x_token2=>'BLKT_START_DATE',
10087            x_value2=>to_char(v_startdate, 'MM/DD/YYYY HH24:MI:SS'),
10088 	   x_token3=>'BLANKET_NUM',
10089 	   x_value3=>x_Group_rec.setup_terms_rec.blanket_number);
10090      --
10091      IF (l_debug <> -1) THEN
10092        rlm_core_sv.dlog(C_DEBUG, 'Lowest request date before effectivity start');
10093        rlm_core_sv.dpop(C_SDEBUG, 'FALSE');
10094      END IF;
10095      --
10096      RETURN FALSE;
10097      --
10098    WHEN e_BlktEndDate   THEN
10099     --
10100     rlm_message_sv.app_error(
10101            x_ExceptionLevel => rlm_message_sv.k_error_level,
10102            x_MessageName => 'RLM_ENDDATE_AFTER_BLANKET',
10103            x_InterfaceHeaderId => x_Sched_rec.header_id,
10104            x_InterfaceLineId => NULL,
10105            x_token1=>'REQDATE',
10106            x_value1=>to_char(h_reqdate, 'MM/DD/YYYY HH24:MI:SS'),
10107            x_token2=>'BLKT_END_DATE',
10108            x_value2=>to_char(v_enddate, 'MM/DD/YYYY HH24:MI:SS'),
10109 	   x_token3=>'BLANKET_NUM',
10110 	   x_value3=>x_Group_rec.setup_terms_rec.blanket_number);
10111      --
10112      IF (l_debug <> -1) THEN
10113        rlm_core_sv.dlog(C_DEBUG, 'Highest request date after effectivity start');
10114        rlm_core_sv.dpop(C_SDEBUG, 'FALSE');
10115      END IF;
10116      --
10117      RETURN FALSE;
10118      --
10119    WHEN NO_DATA_FOUND THEN
10120     --
10121     rlm_message_sv.app_error(
10122            x_ExceptionLevel => rlm_message_sv.k_warn_level,
10123            x_MessageName => 'RLM_BLANKET_UNDEFINED',
10124            x_InterfaceHeaderId => x_Sched_rec.header_id,
10125            x_token1=>'BLANKET_NUM',
10126            x_value1=>x_Group_rec.setup_terms_rec.blanket_number);
10127     --
10128     IF (l_debug <> -1) THEN
10129       rlm_core_sv.dlog(C_DEBUG, 'Blanket Order not defined');
10130       rlm_core_sv.dpop(C_SDEBUG, 'FALSE');
10131     END IF;
10132     --
10133     RETURN FALSE;
10134     --
10135  WHEN OTHERS THEN
10136    --
10137    IF (l_debug <> -1) THEN
10138      rlm_core_sv.dlog(C_DEBUG, 'When others of ValidateBlanket');
10139      rlm_core_sv.dlog(C_DEBUG, 'EXCEPTION: '||SUBSTR(SQLERRM,1,200));
10140      rlm_core_sv.dpop(C_SDEBUG, 'FALSE');
10141    END IF;
10142    --
10143    RETURN FALSE;
10144 
10145 END ValidateBlanket;
10146 
10147 -- End of package
10148 END RLM_VALIDATEDEMAND_SV;