DBA Data[Home] [Help]

PACKAGE BODY: APPS.OE_BULK_PROCESS_HEADER

Source


1 PACKAGE BODY OE_BULK_PROCESS_HEADER AS
2 /* $Header: OEBLHDRB.pls 120.13 2011/12/20 01:31:23 sujithku ship $ */
3 
4 G_PKG_NAME         CONSTANT     VARCHAR2(30):='OE_BULK_PROCESS_HEADER';
5 
6 
7 -----------------------------------------------------------------------
8 -- LOCAL PROCEDURES/FUNCTIONS
9 -----------------------------------------------------------------------
10 
11 -- Pass sold_to_org_id on the order or line in the related_customer_id
12 -- parameter.
13 
14 FUNCTION Is_Related_Customer
15   (p_related_customer_id       IN NUMBER
16   ,p_customer_id               IN NUMBER
17   )
18 RETURN BOOLEAN
19 IS
20   l_dummy           VARCHAR2(1);
21 BEGIN
22 
23      SELECT 'VALID'
24        INTO l_dummy
25        FROM hz_cust_acct_relate
26       WHERE RELATED_CUST_ACCOUNT_ID = p_related_customer_id
27         AND CUST_ACCOUNT_ID = p_customer_id AND STATUS='A'
28         AND ROWNUM = 1;
29 
30      RETURN TRUE;
31 
32 EXCEPTION
33   WHEN OTHERS THEN
34     RETURN FALSE;
35 
36 END Is_Related_Customer;
37 
38 
39 FUNCTION Get_Order_Number(p_order_type_id IN NUMBER,
40                            p_order_number IN OUT NOCOPY /* file.sql.39 change */ NUMBER,
41                            p_gapless_sequence OUT NOCOPY VARCHAR2)
42 RETURN BOOLEAN
43 IS
44 
45 x_result NUMBER;
46 x_doc_sequence_value NUMBER;
47 x_doc_category_code  VARCHAR(30):= p_order_type_id;
48 x_doc_sequence_id    NUMBER;
49 x_db_sequence_name   VARCHAR2(50);
50 x_doc_sequence_type  CHAR(1);
51 x_doc_sequence_name  VARCHAR2(240);
52 x_Prd_Tbl_Name       VARCHAR2(240) ;
53 x_Aud_Tbl_Name       VARCHAR2(240);
54 x_Msg_Flag           VARCHAR2(240);
55 x_seqassid           INTEGER;
56 
57 l_debug_level CONSTANT NUMBER := oe_debug_pub.g_debug_level;
58 BEGIN
59 
60 -- Check whether order type exists in global table
61 
62    IF G_SEQ_INFO_TBL.EXISTS(p_order_type_id) THEN
63 
64      x_doc_sequence_type := G_SEQ_INFO_TBL(p_order_type_id);
65 
66    ELSE --  Get sequence type from AOL
67 
68      x_result :=   fnd_seqnum.get_seq_info( 660,
69                                           x_doc_category_code,
70                                           OE_Bulk_Order_Pvt.G_SOB_ID,
71                                           null,
72                                           sysdate,
73                                           x_doc_sequence_id,
74                                           x_doc_sequence_type,
75                                           x_doc_sequence_name,
76                                           x_db_sequence_name,
77                                           x_seqassid,
78                                           x_Prd_Tbl_Name,
79                                           x_Aud_Tbl_Name,
80                                           x_Msg_Flag
81                                           );
82 
83 
84      IF (x_result <>  FND_SEQNUM.SEQSUCC)THEN
85 
86          IF (x_result = FND_SEQNUM.NOTUSED) THEN
87                  fnd_message.set_name('ONT','OE_MISS_DOC_SEQ');
88                  oe_bulk_msg_pub.Add('Y', 'ERROR');
89                  RAISE FND_API.G_EXC_ERROR;
90          END IF;
91 
92      END IF;
93 
94      -- Add entry to global table
95 
96      G_SEQ_INFO_TBL(p_order_type_id) := x_doc_sequence_type;
97 
98   END IF;  -- Order Type exists in Global table
99 
100  -- For manual sequences Caller needs to pass the Order Number.
101   IF (x_doc_sequence_type = 'M') THEN
102      IF (p_order_number IS NULL) THEN
103         FND_MESSAGE.SET_NAME('ONT','OE_ATTRIBUTE_REQUIRED');
104         FND_MESSAGE.SET_TOKEN('ATTRIBUTE',
105                   OE_Order_Util.Get_Attribute_Name('ORDER_NUMBER'));
106         oe_bulk_msg_pub.Add('Y', 'ERROR');
107         return FALSE;
108      ELSE
109         return TRUE;
110      END IF;
111   -- Gapless sequence not supported for BULK
112   ELSIF x_doc_sequence_type = 'G' THEN
113      fnd_message.set_name('ONT','OE_BULK_GAPLESS_DOC_SEQ');
114      oe_bulk_msg_pub.Add('Y', 'ERROR');
115      p_gapless_sequence := 'Y';
116      RETURN FALSE;
117   END IF;
118 
119   X_result := fnd_seqnum.get_seq_val(660,
120                                      x_doc_category_code,
121                                      OE_Bulk_Order_Pvt.G_SOB_ID,
122                                      null,
123                                      sysdate,
124                                      x_doc_sequence_value,
125                                      x_doc_sequence_id,
126                                      'Y',
127                                      'Y');
128 
129   IF (x_result <> 0)THEN
130      RAISE FND_API.G_EXC_ERROR;
131   END IF;
132 
133   p_order_number := x_doc_sequence_value;
134   IF (p_order_number IS NULL) THEN
135      FND_MESSAGE.SET_NAME('ONT','OE_ATTRIBUTE_REQUIRED');
136      FND_MESSAGE.SET_TOKEN('ATTRIBUTE',
137             OE_Order_Util.Get_Attribute_Name('ORDER_NUMBER'));
138      oe_bulk_msg_pub.Add('Y', 'ERROR');
139      return FALSE;
140   END IF;
141 
142   RETURN TRUE;
143 
144 EXCEPTION
145   WHEN OTHERS THEN
146     RETURN FALSE;
147 END Get_Order_Number;
148 
149 
150 --
151 -- This FUNCTION returns the Price List Type Code
152 --
153 
154 FUNCTION Get_Price_List_Type
155 ( p_price_list_id IN  NUMBER)
156 RETURN VARCHAR2
157 IS
158   l_c_index        NUMBER;
159 BEGIN
160 
161    l_c_index := OE_Bulk_Cache.Load_Price_List(p_price_list_id);
162 
163    RETURN OE_Bulk_Cache.G_PRICE_LIST_TBL(l_c_index).list_type_code;
164 
165 END Get_Price_List_Type;
166 
167 
168 --
169 -- This FUNCTION validates Tax Exempt Reason against the lookup
170 --
171 
172 FUNCTION Valid_Tax_Exempt_Reason
173  (p_tax_exempt_reason_code          VARCHAR2
174  )
175 RETURN BOOLEAN
176 IS
177   l_dummy          VARCHAR2(1);
178 BEGIN
179 -- EBTax Changes
180   SELECT 'Y'
181   INTO l_dummy
182   FROM fnd_lookups l
183   WHERE l.LOOKUP_CODE = p_tax_exempt_reason_code --7782998
184     AND l.LOOKUP_TYPE = 'ZX_EXEMPTION_REASON_CODE'
185     AND l.ENABLED_FLAG = 'Y'
186     AND SYSDATE BETWEEN NVL(START_DATE_ACTIVE, SYSDATE)
187         AND NVL(END_DATE_ACTIVE, SYSDATE)
188     ;
189 
190     RETURN TRUE;
191 
192 EXCEPTION
193   WHEN OTHERS THEN
194      RETURN FALSE;
195 END Valid_Tax_Exempt_Reason;
196 
197 --
198 -- This FUNCTION validates Tax Exemptions against Customer, Sites
199 --
200 
201 FUNCTION Valid_Tax_Exemptions
202  (p_tax_exempt_number               VARCHAR2
203  ,p_tax_exempt_reason_code          VARCHAR2
204  ,p_ship_to_org_id                  NUMBER
205  ,p_invoice_to_org_id               NUMBER
206  ,p_sold_to_org_id                  NUMBER
207  ,p_request_date                    DATE
208  )
209 RETURN BOOLEAN
210 IS
211   l_dummy                 VARCHAR2(10);
212  -- eBTax Changes
213   l_ship_to_cust_Acct_id  hz_cust_Accounts.cust_Account_id%type;
214   l_ship_to_party_id      hz_cust_accounts.party_id%type;
215   l_ship_to_party_site_id hz_party_sites.party_site_id%type;
216   l_bill_to_cust_Acct_id  hz_cust_Accounts.cust_Account_id%type;
217   l_bill_to_party_id      hz_cust_accounts.party_id%type;
218   l_bill_to_party_site_id hz_party_sites.party_site_id%type;
219   l_org_id                NUMBER;
220   l_legal_entity_id       NUMBER;
221 
222    cursor partyinfo(p_site_org_id HZ_CUST_SITE_USES_ALL.SITE_USE_ID%type) is
223      SELECT cust_acct.cust_account_id,
224             cust_Acct.party_id,
225             acct_site.party_site_id,
226             site_use.org_id
227       FROM
228             HZ_CUST_SITE_USES_ALL       site_use,
229             HZ_CUST_ACCT_SITES_ALL      acct_site,
230             HZ_CUST_ACCOUNTS_ALL        cust_Acct
231      WHERE  site_use.site_use_id = p_site_org_id
232        AND  site_use.cust_acct_site_id  = acct_site.cust_acct_site_id
233        and  acct_site.cust_account_id = cust_acct.cust_account_id;
234 
235 
236 BEGIN
237 -- EBTax Changes
238 
239   open partyinfo(p_invoice_to_org_id);
240   fetch partyinfo into l_bill_to_cust_Acct_id,
241                        l_bill_to_party_id,
242                        l_bill_to_party_site_id,
243                        l_org_id;
244   close partyinfo;
245 
246   if p_ship_to_org_id = p_invoice_to_org_id then
247      l_ship_to_cust_Acct_id    :=  l_bill_to_cust_Acct_id;
248      l_ship_to_party_id        :=  l_bill_to_party_id;
249      l_ship_to_party_site_id   :=  l_bill_to_party_site_id ;
250   else
251      open partyinfo(p_ship_to_org_id);
252      fetch partyinfo into l_ship_to_cust_Acct_id,
253                        l_ship_to_party_id,
254                        l_ship_to_party_site_id,
255                        l_org_id;
256      close partyinfo;
257   end if;
258 
259   SELECT 'VALID'
260     INTO l_dummy
261     FROM ZX_EXEMPTIONS_V
262    WHERE EXEMPT_CERTIFICATE_NUMBER  = p_tax_exempt_number
263      AND EXEMPT_REASON_CODE = p_tax_exempt_reason_code
264      AND nvl(site_use_id,nvl(p_ship_to_org_id, p_invoice_to_org_id)) =
265                nvl(p_ship_to_org_id,p_invoice_to_org_id)
266      AND nvl(cust_account_id, l_bill_to_cust_acct_id) = l_bill_to_cust_acct_id
267      AND nvl(PARTY_SITE_ID,nvl(l_ship_to_party_site_id, l_bill_to_party_site_id))=
268                 nvl(l_ship_to_party_site_id, l_bill_to_party_site_id)
269     and  org_id = l_org_id
270     and  party_id = l_bill_to_party_id
271   --  and nvl(LEGAL_ENTITY_ID,-99) IN (nvl(l_legal_entity_id, legal_entity_id), -99)
272      AND EXEMPTION_STATUS_CODE = 'PRIMARY'
273      AND TRUNC(NVL(p_request_date,sysdate))
274           BETWEEN TRUNC(EFFECTIVE_FROM)
275                AND TRUNC(NVL(EFFECTIVE_TO,NVL(p_request_date,sysdate)))
276      AND ROWNUM = 1;
277 
278 
279 EXCEPTION
280   WHEN NO_DATA_FOUND THEN
281      RETURN FALSE;
282 END Valid_Tax_Exemptions;
283 
284 --{ bug 5054618
285 -- End customer changes
286 FUNCTION validate_end_customer(p_end_customer_id IN NUMBER) RETURN BOOLEAN
287 IS
288 l_dummy   VARCHAR2(10);
289 BEGIN
290    IF p_end_customer_id IS NULL OR
291       p_end_customer_id = FND_API.G_MISS_NUM THEN
292       RETURN TRUE;
293    END IF;
294 
295      SELECT  'VALID' INTO l_dummy
296        FROM OE_SOLD_TO_ORGS_V
297       WHERE   ORGANIZATION_ID =p_end_customer_id    AND
298       STATUS = 'A' AND
299     SYSDATE BETWEEN NVL(START_DATE_ACTIVE, SYSDATE)
300 	AND NVL(END_DATE_ACTIVE, SYSDATE);
301    RETURN TRUE;
302  EXCEPTION
303     WHEN NO_DATA_FOUND THEN
304 
305         IF OE_MSG_PUB.Check_Msg_Level(OE_MSG_PUB.G_MSG_LVL_ERROR)
306         THEN
307 
308 	      OE_MSG_PUB.Update_Msg_Context(p_attribute_code => 'END_CUSTOMER_ID');
309 
310             fnd_message.set_name('ONT','OE_INVALID_ATTRIBUTE');
311             FND_MESSAGE.SET_TOKEN('ATTRIBUTE',
312 				OE_Order_Util.Get_Attribute_Name('END_CUSTOMER_ID')||':validation:'||to_char(p_end_customer_id));
313             OE_MSG_PUB.Add;
314 	      OE_MSG_PUB.Update_Msg_Context(p_attribute_code => null);
315 
316         END IF;
317 
318         RETURN FALSE;
319 
320     WHEN OTHERS THEN
321 
322         IF OE_MSG_PUB.Check_Msg_Level(OE_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
323         THEN
324             OE_MSG_PUB.Add_Exc_Msg
325             (   G_PKG_NAME
326             ,   'END_CUSOTMER'
327             );
328         END IF;
329 
330          RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
331    null;
332 
333 END validate_end_customer;
334 
335 FUNCTION validate_end_customer_contact(p_end_customer_contact_id IN NUMBER) RETURN BOOLEAN
336 IS
337 l_dummy   VARCHAR2(10);
338 BEGIN
339  IF p_end_customer_contact_id IS NULL OR
340     p_end_customer_contact_id = FND_API.G_MISS_NUM THEN
341     RETURN TRUE;
342  END IF;
343 
344    SELECT  'VALID'  INTO  l_dummy
345      FROM  OE_RA_CONTACTS_V CON
346     WHERE   CON.CONTACT_ID = p_end_customer_contact_id
347       AND     CON.STATUS = 'A';
348  RETURN TRUE;
349  EXCEPTION
350   WHEN NO_DATA_FOUND THEN
351 
352         IF OE_MSG_PUB.Check_Msg_Level(OE_MSG_PUB.G_MSG_LVL_ERROR)
353         THEN
354 
355 	      OE_MSG_PUB.Update_Msg_Context(p_attribute_code => 'END_CUSTOMER_CONTACT_ID');
356 
357             fnd_message.set_name('ONT','OE_INVALID_ATTRIBUTE');
358             FND_MESSAGE.SET_TOKEN('ATTRIBUTE',
359 				OE_Order_Util.Get_Attribute_Name('end_customer_contact_id'));
360             OE_MSG_PUB.Add;
361 	      OE_MSG_PUB.Update_Msg_Context(p_attribute_code => null);
362 
363         END IF;
364 
365 
366         RETURN FALSE;
367 
368     WHEN OTHERS THEN
369 
370         IF OE_MSG_PUB.Check_Msg_Level(OE_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
371         THEN
372             OE_MSG_PUB.Add_Exc_Msg
373             (   G_PKG_NAME
374             ,   'End_Customer_Contact'
375             );
376         END IF;
377 
378 
379         RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
380    null;
381 END validate_end_customer_contact;
382 
383 
384 FUNCTION validate_END_CUSTOMER_SITE_USE (
385 					 p_end_customer_site_use_id IN NUMBER,
386 					 p_end_customer_id IN NUMBER)RETURN BOOLEAN
387    IS
388    l_dummy    VARCHAR2(10);
389      l_c_index        NUMBER;
390 BEGIN
391    IF p_end_customer_site_use_id IS NULL OR p_end_customer_site_use_id = FND_API.G_MISS_NUM  THEN
392       RETURN TRUE;
393    END IF;
394 
395 /*   SELECT  'VALID'
396 	    INTO
397 	    l_dummy
398 	    FROM
399 	    hz_cust_site_uses site_use,
400 	    hz_cust_acct_sites acct_site
401 	    WHERE
402 	    site_use.site_use_id=p_end_customer_site_use_id
403 	    and site_use.cust_acct_site_id=acct_site.cust_acct_site_id
404 	    and acct_site.cust_account_id=p_end_customer_id;
405 
406     RETURN TRUE; */
407  l_c_index := OE_Bulk_Cache.Load_End_customer_site
408                     (p_key          => p_end_customer_site_use_id);
409 
410   IF OE_Bulk_Cache.G_END_CUSTOMER_SITE_TBL(l_c_index).customer_id
411       = p_end_customer_id
412   THEN
413      RETURN TRUE;
414   ELSE
415      RETURN FALSE;
416   END IF;
417 
418     EXCEPTION
419   WHEN NO_DATA_FOUND THEN
420         IF OE_MSG_PUB.Check_Msg_Level(OE_MSG_PUB.G_MSG_LVL_ERROR)
421         THEN
422 
423 	      OE_MSG_PUB.Update_Msg_Context(p_attribute_code => 'END_CUSTOMER_SITE_USE_ID');
424 
425             fnd_message.set_name('ONT','OE_INVALID_ATTRIBUTE');
426             FND_MESSAGE.SET_TOKEN('ATTRIBUTE',
427 				OE_Order_Util.Get_Attribute_Name('end_customer_site_use_id'));
428             OE_MSG_PUB.Add;
429 	      OE_MSG_PUB.Update_Msg_Context(p_attribute_code => null);
430 
431         END IF;
432 
433 
434         RETURN FALSE;
435 
436     WHEN OTHERS THEN
437 
438         IF OE_MSG_PUB.Check_Msg_Level(OE_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
439         THEN
440             OE_MSG_PUB.Add_Exc_Msg
441             (   G_PKG_NAME
442             ,   'END_CUSTOMER_SITE_USE_ID'
443             );
444         END IF;
445 
446 
447         RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
448       null;
449  END validate_END_CUSTOMER_SITE_USE;
450 
451  FUNCTION validate_IB_OWNER ( p_ib_owner IN VARCHAR2 )RETURN BOOLEAN
452     IS l_dummy    VARCHAR2(10);
453   l_lookup_type1     VARCHAR2(80) :='ITEM_OWNER';
454 
455  BEGIN
456     IF p_ib_owner IS NULL OR
457        p_ib_owner = FND_API.G_MISS_CHAR  THEN
458        RETURN TRUE;
459     END IF;
460       SELECT  'VALID'      INTO
461        l_dummy      FROM     OE_LOOKUPS
462        WHERE    lookup_code = p_ib_owner AND
463        ( lookup_type = l_lookup_type1);
464 
465         RETURN TRUE;
466 	EXCEPTION
467         WHEN NO_DATA_FOUND THEN
468 
469         IF OE_MSG_PUB.Check_Msg_Level(OE_MSG_PUB.G_MSG_LVL_ERROR)
470         THEN
471 
472            OE_DEBUG_PUB.ADD('Validation failed for IB_INSTALLED_AT_LOCATION in OEBLHDRB.pls');
473 	      OE_MSG_PUB.Update_Msg_Context(p_attribute_code => 'IB_INSTALLED_AT_LOCATION');
474 
475             fnd_message.set_name('ONT','OE_INVALID_ATTRIBUTE');
476             FND_MESSAGE.SET_TOKEN('ATTRIBUTE',
477 				OE_Order_Util.Get_Attribute_Name('ib_installed_at_location'));
478             OE_MSG_PUB.Add;
479 	      OE_MSG_PUB.Update_Msg_Context(p_attribute_code => null);
480 
481         END IF;
482 
483 
484         RETURN FALSE;
485 
486     WHEN OTHERS THEN
487 
488         IF OE_MSG_PUB.Check_Msg_Level(OE_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
489         THEN
490             OE_MSG_PUB.Add_Exc_Msg
491             (   G_PKG_NAME
492             ,   'IB_INSTALLED_AT_LOCATION'
493             );
494         END IF;
495 
496 
497         RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
498 
499           null;
500 
501      END validate_IB_OWNER;
502 
503 
504      FUNCTION validate_IB_INST_LOC( p_ib_installed_at_location IN VARCHAR2 )RETURN BOOLEAN
505 	IS
506 	l_dummy                       VARCHAR2(10);
507 	l_lookup_type1   VARCHAR2(80) :='ITEM_INSTALL_LOCATION';
508 
509      BEGIN
510 	IF p_ib_installed_at_location IS NULL OR p_ib_installed_at_location = FND_API.G_MISS_CHAR  THEN
511 	   RETURN TRUE;
512 	END IF;
513 	  SELECT  'VALID'  INTO  l_dummy FROM OE_LOOKUPS
514 	   WHERE    lookup_code = p_ib_installed_at_location AND
515 	   (lookup_type = l_lookup_type1);
516 
517       RETURN TRUE;
518 	EXCEPTION
519 	       WHEN NO_DATA_FOUND THEN
520 
521         IF OE_MSG_PUB.Check_Msg_Level(OE_MSG_PUB.G_MSG_LVL_ERROR)
522         THEN
523 
524            OE_DEBUG_PUB.ADD('Validation failed for IB_INSTALLED_AT_LOCATION in OEBLHDRB.pls');
525 	      OE_MSG_PUB.Update_Msg_Context(p_attribute_code => 'IB_INSTALLED_AT_LOCATION');
526 
527             fnd_message.set_name('ONT','OE_INVALID_ATTRIBUTE');
528             FND_MESSAGE.SET_TOKEN('ATTRIBUTE',
529 				OE_Order_Util.Get_Attribute_Name('ib_installed_at_location'));
530             OE_MSG_PUB.Add;
531 	      OE_MSG_PUB.Update_Msg_Context(p_attribute_code => null);
532 
533         END IF;
534 
535 
536         RETURN FALSE;
537 
538     WHEN OTHERS THEN
539 
540         IF OE_MSG_PUB.Check_Msg_Level(OE_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
541         THEN
542             OE_MSG_PUB.Add_Exc_Msg
543             (   G_PKG_NAME
544             ,   'IB_INSTALLED_AT_LOCATION'
545             );
546         END IF;
547 
548 
549         RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
550           null;
551 
552 	END validate_IB_INST_LOC;
553 
554 	FUNCTION validate_IB_CURRENT_LOCATION ( p_ib_current_location IN VARCHAR2 )
555 	   RETURN BOOLEAN
556      IS
557 	l_dummy                       VARCHAR2(10);
558 	l_lookup_type1      	      VARCHAR2(80) :='ITEM_CURRENT_LOCATION';
559 
560      BEGIN
561 	IF p_ib_current_location IS NULL OR
562         p_ib_current_location = FND_API.G_MISS_CHAR
563 	   THEN
564 
565         RETURN TRUE;
566      END IF;
567 
568       SELECT  'VALID'
569 	INTO     l_dummy
570 	FROM     OE_LOOKUPS
571        WHERE    lookup_code = p_ib_current_location AND
572        (lookup_type = l_lookup_type1 );
573 
574         RETURN TRUE;
575      EXCEPTION
576 	WHEN NO_DATA_FOUND THEN
577 
578         IF OE_MSG_PUB.Check_Msg_Level(OE_MSG_PUB.G_MSG_LVL_ERROR)
579         THEN
580 
581            OE_DEBUG_PUB.ADD('Validation failed for IB_CURRENT_LOCATION in OEBLHDRB.pls');
582 	   OE_MSG_PUB.Update_Msg_Context(p_attribute_code => 'IB_CURRENT_LOCATION');
583 
584 	   fnd_message.set_name('ONT','OE_INVALID_ATTRIBUTE');
585             FND_MESSAGE.SET_TOKEN('ATTRIBUTE',
586 				OE_Order_Util.Get_Attribute_Name('ib_current_location'));
587             OE_MSG_PUB.Add;
588 	    OE_MSG_PUB.Update_Msg_Context(p_attribute_code => null);
589 
590      END IF;
591 
592 
593      RETURN FALSE;
594 
595      WHEN OTHERS THEN
596 
597         IF OE_MSG_PUB.Check_Msg_Level(OE_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
598         THEN
599 	   OE_MSG_PUB.Add_Exc_Msg
600 	      (   G_PKG_NAME
601 		  ,   'IB_CURRENT_LOCATION'
602 		  );
603         END IF;
604 
605 
606         RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
607 
608           null;
609        END validate_IB_CURRENT_LOCATION;
610 
611 --bug 5054618}
612 
613 PROCEDURE Check_Book_Reqd_Attributes
614 ( p_header_rec            IN OE_Bulk_Order_Pvt.HEADER_REC_TYPE
615 , p_index                 IN NUMBER
616 , x_return_status         IN OUT NOCOPY /* file.sql.39 change */ VARCHAR2
617 )
618 IS
619   l_set_of_books_rec    OE_Order_Cache.Set_Of_Books_Rec_Type;
620   l_c_index             NUMBER;
621 BEGIN
622 
623     oe_debug_pub.add('Enter OE_VALIDATE_HEADER.CHECK_BOOK_REQD',1);
624 
625   -- Check for the following required fields on a booked order:
626   -- Order Number, Sold To Org, Invoice To Org,
627   -- Price List, Tax Exempt Flag, Sales Person, Order Date
628 
629   IF p_header_rec.sold_to_org_id(p_index) IS NULL
630   THEN
631     x_return_status := FND_API.G_RET_STS_ERROR;
632     FND_MESSAGE.SET_NAME('ONT','OE_BOOK_REQUIRED_ATTRIBUTE');
633     FND_MESSAGE.SET_TOKEN('ATTRIBUTE',
634     OE_Order_UTIL.Get_Attribute_Name('SOLD_TO_ORG_ID'));
635     oe_bulk_msg_pub.ADD;
636   END IF;
637 
638   IF p_header_rec.salesrep_id(p_index) IS NULL
639   THEN
640     x_return_status := FND_API.G_RET_STS_ERROR;
641     FND_MESSAGE.SET_NAME('ONT','OE_BOOK_REQUIRED_ATTRIBUTE');
642     FND_MESSAGE.SET_TOKEN('ATTRIBUTE',
643     OE_Order_UTIL.Get_Attribute_Name('SALESREP_ID'));
644     oe_bulk_msg_pub.ADD;
645   END IF;
646 
647   IF p_header_rec.ordered_date(p_index) IS NULL
648   THEN
649     x_return_status := FND_API.G_RET_STS_ERROR;
650     FND_MESSAGE.SET_NAME('ONT','OE_BOOK_REQUIRED_ATTRIBUTE');
651     FND_MESSAGE.SET_TOKEN('ATTRIBUTE',
652     OE_Order_UTIL.Get_Attribute_Name('ORDERED_DATE'));
653     oe_bulk_msg_pub.ADD;
654   END IF;
655 
656   IF p_header_rec.invoice_to_org_id(p_index) IS NULL
657   THEN
658     x_return_status := FND_API.G_RET_STS_ERROR;
659     FND_MESSAGE.SET_NAME('ONT','OE_BOOK_REQUIRED_ATTRIBUTE');
660     FND_MESSAGE.SET_TOKEN('ATTRIBUTE',
661       OE_Order_UTIL.Get_Attribute_Name('INVOICE_TO_ORG_ID'));
662     oe_bulk_msg_pub.ADD;
663   END IF;
664 
665   IF p_header_rec.tax_exempt_flag(p_index) IS NULL
666   THEN
667     x_return_status := FND_API.G_RET_STS_ERROR;
668     FND_MESSAGE.SET_NAME('ONT','OE_BOOK_REQUIRED_ATTRIBUTE');
669     FND_MESSAGE.SET_TOKEN('ATTRIBUTE',
670       OE_Order_UTIL.Get_Attribute_Name('TAX_EXEMPT_FLAG'));
671     oe_bulk_msg_pub.ADD;
672   END IF;
673 
674 
675   -- Fix bug 1262790
676   -- Ship To Org and Payment Term are required only on regular or
677   -- MIXED orders, NOT on RETURN orders
678 
679   IF p_header_rec.order_category_code(p_index) <>
680                OE_GLOBALS.G_RETURN_CATEGORY_CODE THEN
681 
682     IF p_header_rec.ship_to_org_id(p_index) IS NULL
683     THEN
684       x_return_status := FND_API.G_RET_STS_ERROR;
685       FND_MESSAGE.SET_NAME('ONT','OE_BOOK_REQUIRED_ATTRIBUTE');
686       FND_MESSAGE.SET_TOKEN('ATTRIBUTE',
687         OE_Order_UTIL.Get_Attribute_Name('SHIP_TO_ORG_ID'));
688       oe_bulk_msg_pub.ADD;
689     END IF;
690 
691     IF p_header_rec.payment_term_id(p_index) IS NULL
692     THEN
693       x_return_status := FND_API.G_RET_STS_ERROR;
694       FND_MESSAGE.SET_NAME('ONT','OE_BOOK_REQUIRED_ATTRIBUTE');
695       FND_MESSAGE.SET_TOKEN('ATTRIBUTE',
696         OE_Order_UTIL.Get_Attribute_Name('PAYMENT_TERM_ID'));
697       oe_bulk_msg_pub.ADD;
698     END IF;
699 
700   END IF;
701 
702 
703   -- Check for additional required fields based on flags set
704   -- at the order type: agreement, customer po number
705 
706   l_c_index := OE_Bulk_Cache.Load_Order_Type(p_header_rec.order_type_id(p_index));
707 
708   IF ( OE_Bulk_Cache.G_ORDER_TYPE_TBL(l_c_index).agreement_required_flag = 'Y' AND
709        p_header_rec.agreement_id(p_index) IS NULL)
710   THEN
711     x_return_status := FND_API.G_RET_STS_ERROR;
712     FND_MESSAGE.SET_NAME('ONT','OE_BOOK_REQUIRED_ATTRIBUTE');
713     FND_MESSAGE.SET_TOKEN('ATTRIBUTE',
714     OE_Order_UTIL.Get_Attribute_Name('AGREEMENT_ID'));
715     oe_bulk_msg_pub.ADD;
716   END IF;
717 
718   IF ( OE_Bulk_Cache.G_ORDER_TYPE_TBL(l_c_index).require_po_flag = 'Y' AND
719        p_header_rec.cust_po_number(p_index) IS NULL)
720   THEN
721     x_return_status := FND_API.G_RET_STS_ERROR;
722     FND_MESSAGE.SET_NAME('ONT','OE_BOOK_REQUIRED_ATTRIBUTE');
723     FND_MESSAGE.SET_TOKEN('ATTRIBUTE',
724     OE_Order_UTIL.Get_Attribute_Name('CUST_PO_NUMBER'));
725     oe_bulk_msg_pub.ADD;
726   END IF;
727 
728 
729   -- Conversion Type Related Checks
730 
731   -- IF SOB currency is dIFferent from order currency,
732   -- conversion type is required
733 
734   IF p_header_rec.conversion_type_code(p_index) IS NULL
735   THEN
736      l_set_of_books_rec := OE_Order_Cache.Load_Set_Of_Books;
737 
738      IF ( l_set_of_books_rec.currency_code <>
739       p_header_rec.transactional_curr_code(p_index)) THEN
740       x_return_status := FND_API.G_RET_STS_ERROR;
741       FND_MESSAGE.SET_NAME('ONT','OE_VAL_REQ_NON_BASE_CURRENCY');
742       FND_MESSAGE.SET_TOKEN
743       ('ORDER_CURRENCY',p_header_rec.transactional_curr_code(p_index));
744       FND_MESSAGE.SET_TOKEN('SOB_CURRENCY',l_set_of_books_rec.currency_code);
745       oe_bulk_msg_pub.ADD;
746      END IF;
747 
748   -- IF conversion type is 'User', conversion rate AND conversion rate date
749   -- required.
750 
751   ELSIF p_header_rec.conversion_type_code(p_index) = 'User'
752   THEN
753 
754     IF p_header_rec.conversion_rate(p_index) IS NULL OR
755        p_header_rec.conversion_rate_date(p_index) IS NULL
756     THEN
757       x_return_status := FND_API.G_RET_STS_ERROR;
758       FND_MESSAGE.SET_NAME('ONT','OE_VAL_USER_CONVERSION_TYPE');
759       oe_bulk_msg_pub.ADD;
760     END IF;
761 
762   END IF; -- END of checks based on conversion type
763 
764 
765   -- Checks based on payment type attached to the order
766 
767   IF p_header_rec.payment_type_code(p_index) IS NOT NULL THEN
768 
769     -- payment amount should be specIFied
770     -- only IF Payment Type is NOT Credit Card
771 
772     IF  p_header_rec.payment_type_code(p_index) <> 'CREDIT_CARD' AND
773         p_header_rec.payment_amount(p_index) IS NULL
774     THEN
775       x_return_status := FND_API.G_RET_STS_ERROR;
776       FND_MESSAGE.SET_NAME('ONT','OE_BOOK_REQUIRED_ATTRIBUTE');
777       FND_MESSAGE.SET_TOKEN('ATTRIBUTE',
778       OE_Order_UTIL.Get_Attribute_Name('PAYMENT_AMOUNT'));
779       oe_bulk_msg_pub.ADD;
780     END IF;
781 
782     -- check number required IF payment type is Check
783 
784     IF (p_header_rec.payment_type_code(p_index) = 'CHECK' AND
785         p_header_rec.check_number(p_index) IS NULL )
786     THEN
787       x_return_status := FND_API.G_RET_STS_ERROR;
788       FND_MESSAGE.SET_NAME('ONT','OE_VAL_CHECK_NUM_REQD');
789       oe_bulk_msg_pub.ADD;
790     END IF;
791 
792     -- credit card holder name, number AND expiration date
793     -- required for payment type of Credit Card
794 
795     /*
796     ** Following Validation Moved to Authorize Credit Card
797     ** Payment Routine. Not required anymore at BOOKING.
798     IF p_header_rec.payment_type_code = 'CREDIT_CARD' THEN
799       IF p_header_rec.credit_card_holder_name IS NULL
800       OR p_header_rec.credit_card_number IS NULL
801       OR p_header_rec.credit_card_expiration_date IS NULL
802       THEN
803       x_return_status := FND_API.G_RET_STS_ERROR;
804       FND_MESSAGE.SET_NAME('ONT','OE_VAL_CREDIT_CARD_REQD');
805       oe_bulk_msg_pub.ADD;
806       END IF;
807     END IF;
808     */
809 
810   END IF; -- END of checks related to payment type
811 
812     oe_debug_pub.add('Exiting OE_VALIDATE_HEADER.CHECK_BOOK_REQD',1);
813 EXCEPTION
814   WHEN OTHERS THEN
815     x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
816     IF oe_bulk_msg_pub.check_msg_level (oe_bulk_msg_pub.G_MSG_LVL_UNEXP_ERROR)
817     THEN
818       oe_bulk_msg_pub.add_exc_msg
819       (  G_PKG_NAME ,
820         'Check_Book_Reqd_Attributes'
821       );
822     END IF;
823     RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
824 END Check_Book_Reqd_Attributes;
825 
826 
827 PROCEDURE Default_Record
828      (p_header_rec      IN OUT NOCOPY OE_Bulk_Order_Pvt.HEADER_REC_TYPE
829      ,p_index           IN NUMBER
830      ,x_return_status   OUT NOCOPY /* file.sql.39 change */ VARCHAR2
831      )
832 IS
833 l_c_index      NUMBER;
834 BEGIN
835 
836      x_return_status := FND_API.G_RET_STS_SUCCESS;
837 
838      -- Validation of defaulted attributes - when to do this, within the
839      -- cache for each source? YES!
840 
841      -- Default Order Type from 1.Invoice To 2.Ship To
842 
843      IF p_header_rec.order_type_id(p_index) IS NULL THEN
844 
845         BEGIN
846 
847         l_c_index := OE_Bulk_Cache.Load_Invoice_To
848                           (p_key => p_header_rec.invoice_to_org_id(p_index)
849                           ,p_default_attributes => 'Y');
850         p_header_rec.order_type_id(p_index)
851           := OE_Bulk_Cache.G_INVOICE_TO_TBL(l_c_index).order_type_id;
852 	-- Invalid invoice to - error message populated during validation
853         EXCEPTION
854           WHEN NO_DATA_FOUND THEN
855             oe_debug_pub.add('Invoice To cache returns no data found');
856             x_return_status := FND_API.G_RET_STS_ERROR;
857         END;
858 
859      END IF;
860 
861      IF p_header_rec.order_type_id(p_index) IS NULL THEN
862 
863         BEGIN
864 
865         l_c_index := OE_Bulk_Cache.Load_Ship_To
866                           (p_key => p_header_rec.ship_to_org_id(p_index)
867                           ,p_default_attributes => 'Y');
868         p_header_rec.order_type_id(p_index)
869           := OE_Bulk_Cache.G_SHIP_TO_TBL(l_c_index).order_type_id;
870 
871         -- Invalid ship to - error message populated during validation
872         EXCEPTION
873           WHEN NO_DATA_FOUND THEN
874             oe_debug_pub.add('Ship To cache returns no data found');
875             x_return_status := FND_API.G_RET_STS_ERROR;
876         END;
877 
878      END IF;
879 
880      -- ASSUMPTION: The hierarchy for defaulting sources for each of the
881      -- attributes can only be 1.Agreement 2.Ship To 3.Invoice To 4.Order Type
882 
883      -- Default attributes that have agreement as the first source
884 
885      IF p_header_rec.agreement_id(p_index) IS NOT NULL
886         AND ( p_header_rec.price_list_id(p_index) IS NULL
887              OR p_header_rec.payment_term_id(p_index) IS NULL
888              OR p_header_rec.accounting_rule_id(p_index) IS NULL
889              OR p_header_rec.invoicing_rule_id(p_index) IS NULL )
890      THEN
891 
892         BEGIN
893 
894         l_c_index := OE_Bulk_Cache.Load_Agreement
895                           (p_key => p_header_rec.agreement_id(p_index)
896                           ,p_default_attributes => 'Y');
897 
898         p_header_rec.price_list_id(p_index) := nvl(p_header_rec.price_list_id(p_index)
899                               ,OE_Bulk_Cache.G_AGREEMENT_TBL(l_c_index).price_list_id);
900         p_header_rec.payment_term_id(p_index) := nvl(p_header_rec.payment_term_id(p_index)
901                               ,OE_Bulk_Cache.G_AGREEMENT_TBL(l_c_index).payment_term_id);
902         p_header_rec.accounting_rule_id(p_index) := nvl(p_header_rec.accounting_rule_id(p_index)
903                               ,OE_Bulk_Cache.G_AGREEMENT_TBL(l_c_index).accounting_rule_id);
904         p_header_rec.invoicing_rule_id(p_index) := nvl(p_header_rec.invoicing_rule_id(p_index)
905                               ,OE_Bulk_Cache.G_AGREEMENT_TBL(l_c_index).invoicing_rule_id);
906 
907         -- Invalid agreement - error message populated during validation
908         EXCEPTION
909           WHEN NO_DATA_FOUND THEN
910             oe_debug_pub.add('Agreement cache returns no data found');
911             x_return_status := FND_API.G_RET_STS_ERROR;
912         END;
913 
914      END IF;
915 
916      -- Default attributes that have ship to as the first source
917      -- or is the next source after agreement.
918 
919      oe_debug_pub.add('load ship to cache');
920      IF p_header_rec.ship_to_org_id(p_index) IS NOT NULL
921         AND ( p_header_rec.fob_point_code(p_index) IS NULL
922              OR p_header_rec.freight_terms_code(p_index) IS NULL
923              OR p_header_rec.demand_class_code(p_index) IS NULL
924              OR p_header_rec.shipping_method_code(p_index) IS NULL
925              OR p_header_rec.ship_tolerance_above(p_index) IS NULL
926              OR p_header_rec.ship_tolerance_below(p_index) IS NULL
927              OR p_header_rec.latest_schedule_limit(p_index) IS NULL
928              OR p_header_rec.order_date_type_code(p_index) IS NULL )
929      THEN
930 
931         BEGIN
932 
933         l_c_index := OE_Bulk_Cache.Load_Ship_To
934                           (p_key => p_header_rec.ship_to_org_id(p_index)
935                           ,p_default_attributes => 'Y');
936 
937         p_header_rec.fob_point_code(p_index) := nvl(p_header_rec.fob_point_code(p_index)
938                               ,OE_Bulk_Cache.G_SHIP_TO_TBL(l_c_index).fob_point_code);
939         p_header_rec.freight_terms_code(p_index) := nvl(p_header_rec.freight_terms_code(p_index)
940                               ,OE_Bulk_Cache.G_SHIP_TO_TBL(l_c_index).freight_terms_code);
941         p_header_rec.demand_class_code(p_index) := nvl(p_header_rec.demand_class_code(p_index)
942                               ,OE_Bulk_Cache.G_SHIP_TO_TBL(l_c_index).demand_class_code);
943         p_header_rec.shipping_method_code(p_index) := nvl(p_header_rec.shipping_method_code(p_index)
944                               ,OE_Bulk_Cache.G_SHIP_TO_TBL(l_c_index).shipping_method_code);
945         p_header_rec.ship_tolerance_above(p_index) := nvl(p_header_rec.ship_tolerance_above(p_index)
946                               ,OE_Bulk_Cache.G_SHIP_TO_TBL(l_c_index).ship_tolerance_above);
947         p_header_rec.ship_tolerance_below(p_index) := nvl(p_header_rec.ship_tolerance_below(p_index)
948                               ,OE_Bulk_Cache.G_SHIP_TO_TBL(l_c_index).ship_tolerance_below);
949         p_header_rec.latest_schedule_limit(p_index) := nvl(p_header_rec.latest_schedule_limit(p_index)
950                               ,OE_Bulk_Cache.G_SHIP_TO_TBL(l_c_index).latest_schedule_limit);
951         p_header_rec.order_date_type_code(p_index) := nvl(p_header_rec.order_date_type_code(p_index)
952                               ,OE_Bulk_Cache.G_SHIP_TO_TBL(l_c_index).order_date_type_code);
953 
954         -- Invalid ship to - error message populated during validation
955         EXCEPTION
956           WHEN NO_DATA_FOUND THEN
957             oe_debug_pub.add('Ship To cache returns no data found');
958             x_return_status := FND_API.G_RET_STS_ERROR;
959         END;
960 
961      END IF;
962 
963      -- Default attributes that have invoice to as the first source
964      -- or is the next source after agreement, ship to.
965 
966      oe_debug_pub.add('load invoice to cache');
967      IF p_header_rec.invoice_to_org_id(p_index) IS NOT NULL
968         AND ( p_header_rec.price_list_id(p_index) IS NULL
969              OR p_header_rec.payment_term_id(p_index) IS NULL )
970      THEN
971 
972         BEGIN
973 
974         l_c_index := OE_Bulk_Cache.Load_Invoice_To
975                           (p_key => p_header_rec.invoice_to_org_id(p_index)
976                           ,p_default_attributes => 'Y');
977 
978         p_header_rec.price_list_id(p_index) := nvl(p_header_rec.price_list_id(p_index)
979                               ,OE_Bulk_Cache.G_INVOICE_TO_TBL(l_c_index).price_list_id);
980         p_header_rec.payment_term_id(p_index) := nvl(p_header_rec.payment_term_id(p_index)
981                               ,OE_Bulk_Cache.G_INVOICE_TO_TBL(l_c_index).payment_term_id);
982 
983         -- Invalid invoice to - error message populated during validation
984         EXCEPTION
985           WHEN NO_DATA_FOUND THEN
986             oe_debug_pub.add('Invoice to cache returns no data found');
987             x_return_status := FND_API.G_RET_STS_ERROR;
988         END;
989 
990      END IF;
991 
992      -- Default remaining attributes from order type
993 
994      IF p_header_rec.order_type_id(p_index) IS NOT NULL
995         AND (p_header_rec.fob_point_code(p_index) IS NULL
996              OR p_header_rec.freight_terms_code(p_index) IS NULL
997              OR p_header_rec.demand_class_code(p_index) IS NULL
998              OR p_header_rec.shipping_method_code(p_index) IS NULL
999              OR p_header_rec.shipment_priority_code(p_index) IS NULL
1000              OR p_header_rec.accounting_rule_id(p_index) IS NULL
1001              OR p_header_rec.invoicing_rule_id(p_index) IS NULL
1002              OR p_header_rec.conversion_type_code(p_index) IS NULL )
1003      THEN
1004 
1005         BEGIN
1006 
1007         l_c_index := OE_Bulk_Cache.Load_Order_Type
1008                           (p_key => p_header_rec.order_type_id(p_index)
1009                           ,p_default_attributes => 'Y');
1010 
1011         p_header_rec.accounting_rule_id(p_index) := nvl(p_header_rec.accounting_rule_id(p_index)
1012                               ,OE_Bulk_Cache.G_ORDER_TYPE_TBL(l_c_index).accounting_rule_id);
1013         p_header_rec.invoicing_rule_id(p_index) := nvl(p_header_rec.invoicing_rule_id(p_index)
1014                               ,OE_Bulk_Cache.G_ORDER_TYPE_TBL(l_c_index).invoicing_rule_id);
1015         p_header_rec.fob_point_code(p_index) := nvl(p_header_rec.fob_point_code(p_index)
1016                               ,OE_Bulk_Cache.G_ORDER_TYPE_TBL(l_c_index).fob_point_code);
1017         p_header_rec.freight_terms_code(p_index) := nvl(p_header_rec.freight_terms_code(p_index)
1018                               ,OE_Bulk_Cache.G_ORDER_TYPE_TBL(l_c_index).freight_terms_code);
1019         p_header_rec.demand_class_code(p_index) := nvl(p_header_rec.demand_class_code(p_index)
1020                               ,OE_Bulk_Cache.G_ORDER_TYPE_TBL(l_c_index).demand_class_code);
1021         p_header_rec.shipping_method_code(p_index) := nvl(p_header_rec.shipping_method_code(p_index)
1022                               ,OE_Bulk_Cache.G_ORDER_TYPE_TBL(l_c_index).shipping_method_code);
1023         p_header_rec.shipment_priority_code(p_index) := nvl(p_header_rec.shipment_priority_code(p_index)
1024                               ,OE_Bulk_Cache.G_ORDER_TYPE_TBL(l_c_index).shipment_priority_code);
1025         p_header_rec.conversion_type_code(p_index) := nvl(p_header_rec.conversion_type_code(p_index)
1026                               ,OE_Bulk_Cache.G_ORDER_TYPE_TBL(l_c_index).conversion_type_code);
1027 
1028         -- Invalid order type - error message populated during validation
1029         EXCEPTION
1030           WHEN NO_DATA_FOUND THEN
1031             oe_debug_pub.add('Order Type cache returns no data found');
1032             x_return_status := FND_API.G_RET_STS_ERROR;
1033         END;
1034 
1035      END IF;
1036 
1037      -- Constant Value Defaults
1038 
1039      IF p_header_rec.pricing_date(p_index) IS NULL THEN
1040         p_header_rec.pricing_date(p_index) := sysdate;
1041      END IF;
1042 
1043      IF p_header_rec.ordered_date(p_index) IS NULL THEN
1044         p_header_rec.ordered_date(p_index) := sysdate;
1045      END IF;
1046 
1047      IF p_header_rec.request_date(p_index) IS NULL THEN
1048         p_header_rec.request_date(p_index) := sysdate;
1049      END IF;
1050 
1051      IF p_header_rec.tax_exempt_flag(p_index) IS NULL THEN
1052         p_header_rec.tax_exempt_flag(p_index) := 'S';      -- 'Standard'
1053      END IF;
1054 
1055 EXCEPTION
1056   WHEN OTHERS THEN
1057     IF oe_bulk_msg_pub.check_msg_level(oe_bulk_msg_pub.G_MSG_LVL_UNEXP_ERROR)
1058     THEN
1059        oe_bulk_msg_pub.add_exc_msg
1060        (   G_PKG_NAME
1061         ,   'Default_Record'
1062         );
1063     END IF;
1064     RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
1065 END Default_Record;
1066 
1067 PROCEDURE Populate_Internal_Fields
1068      (p_header_rec      IN  OUT NOCOPY OE_Bulk_Order_Pvt.HEADER_REC_TYPE
1069      ,p_index           IN  NUMBER
1070      ,x_return_status   OUT NOCOPY /* file.sql.39 change */ VARCHAR2
1071      )
1072 IS
1073 l_c_index            NUMBER;
1074 l_set_of_books_rec   OE_Order_Cache.Set_of_Books_Rec_Type;
1075 l_is_fixed_rate      VARCHAR2(1);
1076 BEGIN
1077 
1078    -- Header_ID is pre-generated and read from interface tables
1079    -- This is to reduce DB block contention as sequential ids will
1080    -- be assigned to each parallel thread by master import program.
1081    -- (Refer OEBVIMNB.pls)
1082 
1083    BEGIN
1084 
1085    l_c_index := OE_Bulk_Cache.Load_Order_Type
1086                        (p_key => p_header_rec.order_type_id(p_index));
1087 
1088    IF OE_Bulk_Cache.G_ORDER_TYPE_TBL(l_c_index).order_category_code
1089       = 'RETURN'
1090    THEN
1091       FND_MESSAGE.SET_NAME('ONT','OE_BULK_NOT_SUPP_RETURN');
1092       oe_bulk_msg_pub.Add('Y', 'ERROR');
1093       x_return_status := FND_API.G_RET_STS_ERROR;
1094    ELSE
1095       p_header_rec.order_category_code(p_index) := OE_Bulk_Cache.G_ORDER_TYPE_TBL(l_c_index).order_category_code;
1096    END IF;
1097 
1098    -- Invalid order type - error message populated during validation
1099    EXCEPTION
1100      WHEN NO_DATA_FOUND THEN
1101        oe_debug_pub.add('Order Type cache returns no data found');
1102        -- Set order category for insert to succeed
1103        p_header_rec.order_category_code(p_index) := 'ORDER';
1104        x_return_status := FND_API.G_RET_STS_ERROR;
1105    END;
1106 
1107    IF p_header_rec.shipping_method_code(p_index) IS NOT NULL
1108       AND p_header_rec.ship_from_org_id(p_index) IS NOT NULL
1109    THEN
1110       p_header_rec.freight_carrier_code(p_index) :=
1111           Get_Freight_Carrier
1112           (p_shipping_method_code  => p_header_rec.shipping_method_code(p_index)
1113            ,p_ship_from_org_id     => p_header_rec.ship_from_org_id(p_index)
1114           );
1115    END IF;
1116 
1117    l_set_of_books_rec :=  OE_Order_Cache.Load_Set_Of_Books;
1118    IF p_header_rec.transactional_curr_code(p_index)
1119       <> l_set_of_books_rec.currency_code
1120    THEN
1121 
1122       l_Is_Fixed_Rate :=
1123          GL_CURRENCY_API.IS_FIXED_RATE(
1124            p_header_rec.transactional_curr_code(p_index),
1125            l_set_of_books_rec.currency_code,
1126 	   nvl(p_header_rec.Ordered_Date(p_index),Sysdate));
1127 
1128       IF (L_Is_Fixed_Rate = 'Y') THEN
1129 	  p_header_rec.Conversion_Type_Code(p_index) := 'EMU FIXED';
1130       END IF;
1131 
1132    END IF;
1133 
1134    -- QUOTING changes
1135    -- Version number should be initialized to 0 starting 11i10
1136    IF p_header_rec.version_number(p_index) IS NULL THEN
1137       IF OE_Code_Control.Get_Code_Release_Level >= '110510' THEN
1138          p_header_rec.version_number(p_index) := 0;
1139       ELSE
1140          p_header_rec.version_number(p_index) := 1;
1141       END IF;
1142    END IF;
1143 
1144 EXCEPTION
1145   WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
1146     x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
1147   WHEN OTHERS THEN
1148     oe_debug_pub.add('others errors, Populate_Internal_Fields');
1149     oe_debug_pub.add(substr(sqlerrm,1,200));
1150     x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
1151     IF oe_bulk_msg_pub.check_msg_level(oe_bulk_msg_pub.G_MSG_LVL_UNEXP_ERROR)
1152     THEN
1153        oe_bulk_msg_pub.add_exc_msg
1154        (   G_PKG_NAME
1155         ,   'Populate_Internal_Fields'
1156         );
1157     END IF;
1158 END Populate_Internal_Fields;
1159 
1160 -----------------------------------------------------------------------
1161 -- PUBLIC PROCEDURES/FUNCTIONS
1162 -----------------------------------------------------------------------
1163 
1164 FUNCTION Get_Freight_Carrier
1165   (p_shipping_method_code   IN VARCHAR2
1166   ,p_ship_from_org_id       IN VARCHAR2
1167   )
1168 RETURN VARCHAR2
1169 IS
1170   l_freight_code VARCHAR2(80);
1171 BEGIN
1172 
1173   IF OE_CODE_CONTROL.CODE_RELEASE_LEVEL >= '110509' THEN
1174 
1175     SELECT freight_code
1176     INTO   l_freight_code
1177     FROM   wsh_carriers wsh_ca,wsh_carrier_services wsh,
1178            wsh_org_carrier_services wsh_org
1179     WHERE  wsh_org.organization_id   = p_ship_from_org_id
1180       AND  wsh.carrier_service_id    = wsh_org.carrier_service_id
1181       AND  wsh_ca.carrier_id         = wsh.carrier_id
1182       AND  wsh.ship_method_code      = p_shipping_method_code
1183       AND  wsh_org.enabled_flag='Y';
1184   ELSE
1185 
1186     SELECT freight_code
1187     INTO l_freight_code
1188     FROM wsh_carrier_ship_methods
1189     WHERE ship_method_code = p_shipping_method_code
1190       AND ORGANIZATION_ID = p_ship_from_org_id;
1191 
1192   END IF;
1193 
1194   RETURN l_freight_code;
1195 
1196 EXCEPTION
1197 WHEN NO_DATA_FOUND THEN
1198   RETURN NULL;
1199 WHEN OTHERS THEN
1200   IF oe_bulk_msg_pub.check_msg_level (oe_bulk_msg_pub.G_MSG_LVL_UNEXP_ERROR)
1201   THEN
1202     oe_bulk_msg_pub.add_exc_msg
1203     ( G_PKG_NAME
1204      ,'Get_Freight_Carrier'
1205      );
1206   END IF;
1207   RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
1208 END Get_Freight_Carrier;
1209 
1210 --
1211 -- This FUNCTION is used for all agreement related validations.
1212 --
1213 
1214 FUNCTION Validate_Agreement
1215   (p_agreement_id         IN NUMBER
1216   ,p_pricing_date         IN DATE
1217   ,p_price_list_id        IN NUMBER
1218   ,p_sold_to_org_id       IN NUMBER
1219   )
1220 RETURN BOOLEAN
1221 IS
1222   l_c_index          NUMBER;
1223 BEGIN
1224 
1225    -- Load agreement in the cache
1226    l_c_index := OE_Bulk_Cache.Load_Agreement(p_agreement_id);
1227 
1228    -- Verify that agreement is effective for the valid dates
1229    IF NOT trunc(nvl(p_pricing_date,sysdate))
1230       BETWEEN trunc(nvl(OE_Bulk_Cache.G_AGREEMENT_TBL(l_c_index).start_date_active
1231                              ,add_months(sysdate,-10000)))
1232               AND trunc(nvl(OE_Bulk_Cache.G_AGREEMENT_TBL(l_c_index).end_date_active
1233                              ,add_months(sysdate,+10000)))
1234    THEN
1235 
1236       fnd_message.set_name('ONT', 'ONT_INVALID_AGREEMENT');
1237       fnd_message.set_Token('AGREEMENT_NAME',
1238                OE_Bulk_Cache.G_AGREEMENT_TBL(l_c_index).name);
1239       fnd_message.set_Token('REVISION',
1240                OE_Bulk_Cache.G_AGREEMENT_TBL(l_c_index).revision);
1241       oe_bulk_msg_pub.Add('Y', 'ERROR');
1242 
1243       RETURN FALSE;
1244 
1245    END IF;
1246 
1247    -- Verify that price list on header matches price list on agreement
1248    IF p_price_list_id IS NOT NULL
1249       AND Get_Price_List_Type(p_price_list_id) <> 'PRL'
1250    THEN
1251 
1252      IF (OE_Bulk_Cache.G_AGREEMENT_TBL(l_c_index).price_list_id
1253          <> p_price_list_id) THEN
1254 
1255         fnd_message.set_name('ONT', 'OE_INVALID_AGREEMENT_PLIST');
1256         fnd_message.set_Token('AGREEMENT_NAME',
1257             OE_Bulk_Cache.G_AGREEMENT_TBL(l_c_index).name);
1258         fnd_message.set_Token('PRICE_LIST1',
1259             OE_Bulk_Cache.G_PRICE_LIST_TBL(p_price_list_id).name);
1260         fnd_message.set_Token('PRICE_LIST2',
1261             OE_Bulk_Cache.G_AGREEMENT_TBL(l_c_index).price_list_id);
1262         oe_bulk_msg_pub.Add('Y', 'ERROR');
1263 
1264         RETURN FALSE;
1265 
1266      END IF;
1267 
1268    END IF;
1269 
1270    -- Verify that customer on agreement matches the customer on order or
1271    -- is a related customer if customer relationships is ON.
1272    --Bug 9496609
1273   IF  OE_Bulk_Cache.G_AGREEMENT_TBL(l_c_index).sold_to_org_id is not null
1274   and OE_Bulk_Cache.G_AGREEMENT_TBL(l_c_index).sold_to_org_id <> -1 then
1275    IF NOT OE_GLOBALS.EQUAL
1276             (OE_Bulk_Cache.G_AGREEMENT_TBL(l_c_index).sold_to_org_id
1277             ,p_sold_to_org_id)
1278    THEN
1279 
1280       IF OE_Bulk_Order_Pvt.G_CUST_RELATIONS = 'N'
1281          OR (OE_Bulk_Order_Pvt.G_CUST_RELATIONS = 'Y'
1282              AND NOT Is_Related_Customer(p_sold_to_org_id
1283                       ,OE_Bulk_Cache.G_AGREEMENT_TBL(l_c_index).sold_to_org_id))
1284       THEN
1285 
1286         fnd_message.set_name('ONT', 'OE_INVALID_AGREEMENT');
1287         fnd_message.set_Token('AGREEMENT_ID',p_agreement_id);
1288         fnd_message.set_Token('AGREEMENT_NAME',
1289                 OE_Bulk_Cache.G_AGREEMENT_TBL(l_c_index).name);
1290         fnd_message.set_Token('CUSTOMER_ID',
1291                 OE_Bulk_Cache.G_AGREEMENT_TBL(l_c_index).sold_to_org_id);
1292         oe_bulk_msg_pub.Add('Y', 'ERROR');
1293 
1294         RETURN FALSE;
1295 
1296       END IF;
1297 
1298    END IF;
1299 
1300   END IF;
1301   --Bug 9496609
1302 
1303    RETURN TRUE;
1304 
1305 EXCEPTION
1306   WHEN NO_DATA_FOUND THEN
1307      RETURN FALSE;
1308 END Validate_Agreement;
1309 
1310 
1311 -- This FUNCTION consists of all price list related validations.
1312 
1313 FUNCTION Validate_Price_List
1314   (p_price_list_id      IN NUMBER
1315   ,p_curr_code          IN VARCHAR2
1316   ,p_pricing_date       IN DATE
1317   ,p_calculate_price    IN VARCHAR2
1318   )
1319 RETURN BOOLEAN
1320 IS
1321 
1322   l_validate_result         VARCHAR2(1);
1323   l_c_index                 NUMBER;
1324 
1325 BEGIN
1326 
1327    -- For order header, this check is NOT needed if any one line exists
1328    -- with calculate_price_flag of 'N' or 'P' - where to do this?
1329 
1330    -- For line, price list validations not needed if calculate price is
1331    -- frozen or partial
1332 
1333    IF p_calculate_price IN ('P','N') THEN
1334       RETURN TRUE;
1335    END IF;
1336 
1337    -- Cache price list
1338 
1339    l_c_index := OE_Bulk_Cache.Load_Price_List(p_price_list_id);
1340 
1341    -- Verify that price list is effective for the valid dates
1342 
1343    IF NOT trunc(nvl(p_pricing_date,sysdate))
1344           BETWEEN trunc(nvl(OE_Bulk_Cache.G_PRICE_LIST_TBL(l_c_index).start_date_active
1345                               ,add_months(sysdate,-10000)))
1346               AND  trunc(nvl(OE_Bulk_Cache.G_PRICE_LIST_TBL(l_c_index).end_date_active
1347                                ,add_months(sysdate,+10000)))
1348    THEN
1349 
1350       fnd_message.set_name('ONT', 'OE_INVALID_NONAGR_PLIST');
1351       fnd_message.set_Token('PRICE_LIST1', p_price_list_id);
1352       fnd_message.set_Token('PRICING_DATE', p_pricing_date);
1353       oe_bulk_msg_pub.Add('Y', 'ERROR');
1354 
1355       RETURN FALSE;
1356 
1357    END IF;
1358 
1359    -- Validate currency against the price list
1360 
1361    QP_UTIL_PUB.Validate_Price_list_Curr_code(p_price_list_id
1362                            ,p_curr_code
1363                            ,p_pricing_date
1364                            ,l_validate_result);
1365 
1366    IF l_validate_result = 'N' THEN
1367 
1368       FND_MESSAGE.SET_NAME('ONT','OE_CURRENCY_MISMATCH');
1369       FND_MESSAGE.SET_TOKEN('LINE_CURR_CODE',
1370           OE_Bulk_Cache.G_PRICE_LIST_TBL(l_c_index).currency_code);
1371       FND_MESSAGE.SET_TOKEN('PRICE_LIST_NAME',
1372           OE_Bulk_Cache.G_PRICE_LIST_TBL(l_c_index).name);
1373       FND_MESSAGE.SET_TOKEN('HEADER_CURR_CODE',p_curr_code);
1374       oe_bulk_msg_pub.Add('Y', 'ERROR');
1375 
1376       RETURN FALSE;
1377 
1378    END IF;
1379 
1380    RETURN TRUE;
1381 
1382 EXCEPTION
1383    WHEN NO_DATA_FOUND THEN
1384      oe_debug_pub.add('no data found in validate price list');
1385      RETURN FALSE;
1386 END Validate_Price_List;
1387 
1388 
1389 FUNCTION Validate_Ship_to(p_sold_to IN  NUMBER,
1390                           p_Ship_to IN  NUMBER)
1391 RETURN BOOLEAN
1392 IS
1393   l_dummy       VARCHAR2(10);
1394   l_c_index     NUMBER;
1395 BEGIN
1396 
1397   --
1398   -- Validations here account for all customer relationships
1399   --
1400   -- If ship_to_org_id is not valid for any customer,
1401   -- then Cache FUNCTION Load_<Entity> will raise no data found
1402   -- so for all relationship values including G_CUST_RELATIONS = 'A'
1403   -- , it will return FALSE.
1404   --
1405   -- If customer relationships = 'N' but customer does not match
1406   -- ship to customer, it will return FALSE.
1407   --
1408   -- If customer relationships = 'Y', it will also check if ship
1409   -- to customer is a related customer and if not, return FALSE.
1410   --
1411 
1412   l_c_index := OE_Bulk_Cache.Load_Ship_To
1413                     (p_key          => p_ship_to);
1414 
1415   IF OE_Bulk_Cache.G_SHIP_TO_TBL(l_c_index).customer_id
1416       = p_sold_to
1417   THEN
1418      RETURN TRUE;
1419   END IF;
1420 
1421   IF OE_Bulk_Order_Pvt.G_CUST_RELATIONS = 'N' THEN
1422 
1423      RETURN FALSE;
1424 
1425   ELSIF OE_Bulk_Order_Pvt.G_CUST_RELATIONS = 'Y' THEN
1426 
1427      SELECT 'VALID'
1428        INTO l_dummy
1429        FROM HZ_CUST_ACCT_RELATE
1430       WHERE RELATED_CUST_ACCOUNT_ID = p_sold_to
1431         AND CUST_ACCOUNT_ID = OE_Bulk_Cache.G_SHIP_TO_TBL(l_c_index).customer_id
1432         AND ship_to_flag = 'Y' AND STATUS='A';
1433 
1434   END IF;
1435 
1436   RETURN TRUE;
1437 
1438 EXCEPTION
1439   WHEN NO_DATA_FOUND THEN
1440      RETURN FALSE;
1441 END Validate_Ship_to;
1442 
1443 --abghosh
1444 
1445 FUNCTION Validate_Sold_to_site(p_sold_to IN  NUMBER,
1446                           p_Sold_to_site_use_id IN  NUMBER)
1447 RETURN BOOLEAN
1448 IS
1449   l_dummy       VARCHAR2(10);
1450   l_c_index     NUMBER;
1451 BEGIN
1452 
1453   --
1454   --
1455   -- If sold_to_site_use_id is not valid for any customer,
1456   -- then Cache FUNCTION Load_<Entity> will raise no data found
1457   -- , it will return FALSE.
1458   --
1459   --
1460   --
1461 
1462   l_c_index := OE_Bulk_Cache.Load_Sold_to_site
1463                     (p_key          => p_sold_to_site_use_id);
1464 
1465   IF OE_Bulk_Cache.G_SOLD_TO_SITE_TBL(l_c_index).customer_id
1466       = p_sold_to
1467   THEN
1468      RETURN TRUE;
1469   ELSE
1470      RETURN FALSE;
1471   END IF;
1472 
1473 
1474 EXCEPTION
1475   WHEN NO_DATA_FOUND THEN
1476      RETURN FALSE;
1477 END Validate_Sold_to_site;
1478 
1479 
1480 FUNCTION Validate_Bill_to(p_sold_to IN NUMBER,
1481                           p_bill_to IN NUMBER)
1482 RETURN BOOLEAN
1483 IS
1484   l_dummy       VARCHAR2(10);
1485   l_c_index     NUMBER;
1486 BEGIN
1487 
1488   --
1489   -- Validations here account for all customer relationships
1490   --
1491   -- If invoice_to_org_id is not valid for any customer,
1492   -- then Cache FUNCTION Load_<Entity> will raise no data found
1493   -- so for all relationship values including G_CUST_RELATIONS = 'A'
1494   -- , it will return FALSE.
1495   --
1496   -- If customer relationships = 'N' but customer does not match
1497   -- invoice to customer, it will return FALSE.
1498   --
1499   -- If customer relationships = 'Y', it will also check if invoice
1500   -- to customer is a related customer and if not, return FALSE.
1501   --
1502 
1503   l_c_index := OE_Bulk_Cache.Load_Invoice_To
1504                     (p_key          => p_bill_to);
1505 
1506   IF OE_Bulk_Cache.G_INVOICE_TO_TBL(l_c_index).customer_id
1507       = p_sold_to
1508   THEN
1509      RETURN TRUE;
1510   END IF;
1511 
1512   IF OE_Bulk_Order_Pvt.G_CUST_RELATIONS = 'N' THEN
1513 
1514      RETURN FALSE;
1515 
1516   ELSIF OE_Bulk_Order_Pvt.G_CUST_RELATIONS = 'Y' THEN
1517 
1518      SELECT 'VALID'
1519        INTO l_dummy
1520        FROM HZ_CUST_ACCT_RELATE
1521       WHERE RELATED_CUST_ACCOUNT_ID = p_sold_to
1522         AND CUST_ACCOUNT_ID = OE_Bulk_Cache.G_INVOICE_TO_TBL(l_c_index).customer_id
1523         AND bill_to_flag = 'Y' AND STATUS='A';
1524 
1525   END IF;
1526 
1527   RETURN TRUE;
1528 
1529 EXCEPTION
1530   WHEN NO_DATA_FOUND THEN
1531      RETURN FALSE;
1532 END Validate_Bill_to;
1533 
1534 
1535 FUNCTION Validate_Deliver_to(p_sold_to IN NUMBER,
1536                              p_deliver_to IN NUMBER)
1537 RETURN BOOLEAN
1538 IS
1539 l_dummy VARCHAR2(10);
1540 --bug 4729536
1541 Cursor cur_customer_relations is
1542      SELECT /*MOAC_SQL_NO_CHANGE */ 'VALID'
1543      FROM oe_deliver_to_orgs_v
1544      WHERE site_use_id = p_deliver_to
1545      AND    status = 'A'
1546      AND customer_id = p_sold_to
1547      AND ROWNUM = 1
1548 
1549      UNION ALL
1550 
1551      SELECT /*MOAC_SQL_NO_CHANGE*/ 'VALID'
1552      FROM oe_deliver_to_orgs_v odto
1553      WHERE site_use_id = p_deliver_to
1554      AND    status = 'A'
1555      AND exists
1556 	  (
1557 	    SELECT 1
1558 	    FROM HZ_CUST_ACCT_RELATE hcar
1559 	    WHERE hcar.CUST_ACCOUNT_ID = odto.customer_id
1560 	    AND hcar.RELATED_CUST_ACCOUNT_ID = p_sold_to
1561 	    AND hcar.ship_to_flag = 'Y'
1562 	    AND hcar.STATUS ='A'
1563 	    )
1564     AND ROWNUM=1;
1565 
1566 BEGIN
1567 
1568   IF (OE_Bulk_Order_Pvt.G_CUST_RELATIONS = 'N') THEN
1569 
1570      SELECT 'VALID'
1571         INTO   l_dummy
1572         FROM   oe_deliver_to_orgs_v
1573         WHERE  customer_id = p_sold_to
1574         AND    site_use_id = p_deliver_to
1575         AND    status = 'A';
1576 
1577   ELSE
1578 
1579      /*SELECT /*MOAC_SQL_NO_CHANGE 'VALID'
1580        INTO l_dummy
1581        FROM oe_deliver_to_orgs_v
1582       WHERE site_use_id = p_deliver_to
1583         AND    status = 'A'
1584         AND customer_id IN (
1585                     Select p_sold_to from dual
1586                     union
1587                     SELECT CUST_ACCOUNT_ID
1588                     FROM HZ_CUST_ACCT_RELATE
1589                     WHERE RELATED_CUST_ACCOUNT_ID = p_sold_to
1590                       AND ship_to_flag = 'Y' AND STATUS ='A'
1591                     );*/
1592      --bug 4729536
1593      Open Cur_Customer_Relations;
1594      Fetch Cur_Customer_Relations into l_dummy;
1595      Close Cur_Customer_Relations;
1596      --bug 4729536
1597 
1598   END IF;
1599 
1600      return TRUE;
1601 
1602 EXCEPTION
1603   WHEN NO_DATA_FOUND THEN
1604      return FALSE;
1605 
1606 END Validate_Deliver_to;
1607 
1608 
1609 -- Validate that contact is valid for given (site)customer and usage.
1610 -- Validate Active status, since contact does NOT go thru attribute
1611 -- validation.
1612 
1613 FUNCTION Validate_Site_Contact
1614   (p_site_use_id       IN NUMBER
1615   ,p_contact_id        IN NUMBER
1616   )
1617 RETURN BOOLEAN
1618 IS
1619   l_dummy VARCHAR2(10);
1620 BEGIN
1621 
1622     SELECT  /* MOAC_SQL_CHANGE */ 'VALID'
1623       INTO  l_dummy
1624       FROM  HZ_CUST_ACCOUNT_ROLES ACCT_ROLE,
1625             HZ_CUST_SITE_USES_ALL SITE,
1626             HZ_CUST_ACCT_SITES  ADDR
1627      WHERE  ACCT_ROLE.CUST_ACCOUNT_ROLE_ID = p_contact_id
1628        AND  ACCT_ROLE.CUST_ACCOUNT_ID = ADDR.CUST_ACCOUNT_ID
1629        AND  ACCT_ROLE.ROLE_TYPE = 'CONTACT'
1630        AND  ADDR.CUST_ACCT_SITE_ID = SITE.CUST_ACCT_SITE_ID
1631        AND  SITE.SITE_USE_ID  = p_site_use_id
1632        AND  SITE.STATUS = 'A'
1633        AND  ACCT_ROLE.STATUS = 'A'
1634        AND  ADDR.STATUS ='A' ;-- added for bug 2752321
1635 
1636      RETURN TRUE;
1637 
1638 EXCEPTION
1639   WHEN NO_DATA_FOUND THEN
1640      RETURN FALSE;
1641 END Validate_Site_Contact;
1642 
1643 
1644 ---------------------------------------------------------------------
1645 -- PROCEDURE Entity
1646 --
1647 -- Main processing procedure used to process headers in a batch.
1648 -- IN parameters -
1649 -- p_header_rec : order headers in this batch
1650 -- p_defaulting_mode : 'Y' if fixed defaulting is needed, 'N' if
1651 -- defaulting is to be completely bypassed
1652 -- OUT NOCOPY /* file.sql.39 change */ parameters -
1653 -- x_header_scredit_rec : sales credits for headers processed
1654 --
1655 -- Processing steps include:
1656 -- 1. Restricted defaulting on p_header_rec if defaulting_mode is 'Y'
1657 -- 2. Populate all internal fields on p_header_rec
1658 -- 3. All entity validations
1659 -- 4. Other misc processing like holds evaluation, sales credits.
1660 ---------------------------------------------------------------------
1661 
1662 PROCEDURE Entity
1663 ( p_header_rec             IN OUT NOCOPY OE_Bulk_Order_Pvt.HEADER_REC_TYPE
1664 , x_header_scredit_rec     IN OUT NOCOPY OE_Bulk_Order_Pvt.SCREDIT_REC_TYPE
1665 , p_defaulting_mode        IN VARCHAR2
1666 , p_process_configurations   IN  VARCHAR2 DEFAULT 'N'
1667 , p_validate_configurations  IN  VARCHAR2 DEFAULT 'Y'
1668 , p_schedule_configurations  IN  VARCHAR2 DEFAULT 'N'
1669 , p_validate_desc_flex     IN VARCHAR2
1670 )
1671 IS
1672 
1673   ctr                     NUMBER;
1674   error_count             NUMBER := 0;
1675   l_dummy                 VARCHAR2(10);
1676   l_return_status         VARCHAR2(30);
1677   l_c_index               NUMBER;
1678   l_order_type_id         NUMBER;
1679   l_on_generic_hold       BOOLEAN;
1680   l_on_booking_hold       BOOLEAN;
1681   l_on_scheduling_hold    BOOLEAN;
1682   l_scredit_index         NUMBER := 1;
1683   l_gapless_sequence      VARCHAR2(1) := 'N';
1684   l_hold_ii_flag          VARCHAR2(1); -- Added to support out parameter
1685   l_debug_level CONSTANT NUMBER := oe_debug_pub.g_debug_level;
1686   l_header_rec_for_hold   OE_Order_PUB.Header_Rec_Type;  --ER#7479609
1687 
1688 BEGIN
1689    ctr := p_header_rec.header_id.COUNT;
1690 
1691    FOR i IN 1..ctr LOOP
1692 
1693       -- Set Context for messags
1694 
1695      oe_bulk_msg_pub.set_msg_context
1696         ( p_entity_code                 => 'HEADER'
1697          ,p_entity_id                   => p_header_rec.header_id(i)
1698          ,p_header_id                   => p_header_rec.header_id(i)
1699          ,p_line_id                     => null
1700          ,p_orig_sys_document_ref       => p_header_rec.orig_sys_document_ref(i)
1701          ,p_orig_sys_document_line_ref  => null
1702          ,p_order_source_id             => p_header_rec.order_source_id(i)
1703          ,p_source_document_type_id     => null
1704          ,p_source_document_id          => null
1705          ,p_source_document_line_id     => null);
1706 
1707       --PIB
1708         IF OE_CODE_CONTROL.CODE_RELEASE_LEVEL >= '110510' THEN
1709           p_header_rec.header_index.extend(1);
1710           p_header_rec.header_index(i) := i;
1711           p_header_rec.event_code.extend(1);
1712           IF p_header_rec.booked_flag(i) = 'Y' THEN
1713             p_header_rec.event_code(i) := 'BATCH,BOOK';
1714           ELSE
1715             p_header_rec.event_code(i) := 'BATCH';
1716           END IF;
1717           If l_debug_level > 0 Then
1718             oe_debug_pub.add('event code : '||p_header_rec.event_code(i));
1719           End If;
1720         END IF;
1721       --PIB
1722 
1723       ---------------------------------------------------------
1724       -- CALL THE FIXED DEFAULTING PROCEDURE IF NEEDED
1725       ---------------------------------------------------------
1726 
1727       IF p_defaulting_mode = 'Y' THEN
1728 
1729          Default_Record
1730               ( p_header_rec         => p_header_rec
1731                ,p_index              => i
1732                ,x_return_status      => l_return_status
1733                );
1734 
1735          IF l_return_status = FND_API.G_RET_STS_ERROR THEN
1736             p_header_rec.lock_control(i) := -99;
1737          ELSIF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
1738             RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
1739          END IF;
1740 
1741       END IF;
1742 
1743       ---------------------------------------------------------
1744       -- POPULATE INTERNAL FIELDS
1745       -- Hardcoded Defaulting From OEXDHDRB.pls
1746       ---------------------------------------------------------
1747 
1748       Populate_Internal_Fields
1749         ( p_header_rec         => p_header_rec
1750          ,p_index              => i
1751          ,x_return_status      => l_return_status
1752          );
1753 
1754       IF l_return_status = FND_API.G_RET_STS_ERROR THEN
1755          p_header_rec.lock_control(i) := -99;
1756       ELSIF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
1757          RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
1758       END IF;
1759 
1760 
1761       ---------------------------------------------------------
1762       -- START ENTITY VALIDATIONS
1763       ---------------------------------------------------------
1764 
1765       -- Validate Required Attributes
1766 
1767       -- Order Type is required
1768       IF (p_header_rec.order_type_id(i) IS NOT NULL) THEN
1769 
1770          l_order_type_id := p_header_rec.order_type_id(i);
1771 
1772          -- Get Order Number - will return FALSE IF
1773          -- 1. Doc Sequence type is 'Manual' and order number not specified
1774          -- 2. If gapless sequence
1775          -- Error messages are populated in Get_Order_Number
1776 
1777          IF NOT Get_order_number(p_header_rec.order_type_id(i),
1778                                  p_header_rec.order_number(i),
1779                                  l_gapless_sequence )  THEN
1780 
1781             IF l_gapless_sequence = 'Y' THEN
1782                p_header_rec.lock_control(i) := -98;
1783             ELSE
1784                p_header_rec.lock_control(i) := -99;
1785             END IF;
1786 
1787             -- Order Number is a required column hence put a dummy value
1788             -- for the insert to succeed.
1789             p_header_rec.order_number(i) := -1 * p_header_rec.header_id(i);
1790 
1791          END IF;
1792 
1793          -- Do other order type related validations
1794 
1795          -- Cache order type, if order type is not valid caching will fail
1796          -- with no data found error.
1797          l_c_index := OE_Bulk_Cache.Load_Order_Type
1798                          (p_key   => l_order_type_id);
1799 
1800          -- Check if Order Type is valid for ordered date
1801 
1802          IF p_header_rec.ordered_date(i) IS NOT NULL
1803             AND NOT (p_header_rec.ordered_date(i) BETWEEN
1804                      nvl(OE_Bulk_Cache.G_ORDER_TYPE_TBL(l_order_type_id).start_date_active,sysdate)
1805                      AND nvl(OE_Bulk_Cache.G_ORDER_TYPE_TBL(l_order_type_id).end_date_active,sysdate))
1806          THEN
1807              p_header_rec.lock_control(i) := -99;
1808              FND_MESSAGE.SET_NAME('ONT','OE_INVALID_ATTRIBUTE');
1809              FND_MESSAGE.SET_TOKEN('ATTRIBUTE',
1810                   OE_Order_Util.Get_Attribute_Name('ORDER_TYPE_ID'));
1811              oe_bulk_msg_pub.Add('Y', 'ERROR');
1812          END IF;
1813 
1814           -- Validate that Order Type has valid WF assignment
1815 
1816          IF NOT OE_BULK_WF_UTIL.Validate_OT_WF_Assignment
1817                           (p_header_rec.order_type_id(i)
1818                            ,p_header_rec.wf_process_name(i)) THEN
1819             p_header_rec.lock_control(i) := -99;
1820             FND_MESSAGE.SET_NAME('ONT','OE_MISS_FLOW');
1821             oe_bulk_msg_pub.Add('Y', 'ERROR');
1822          END IF;
1823 
1824          -- Populate order type name, this is denormalized onto header
1825          -- record as it will be used in insert into mtl_sales_orders
1826 
1827          p_header_rec.order_type_name(i) :=
1828                   OE_Bulk_Cache.G_ORDER_TYPE_TBL(l_c_index).NAME;
1829 
1830       ELSE
1831          p_header_rec.lock_control(i) := -99;
1832          FND_MESSAGE.SET_NAME('ONT','OE_ATTRIBUTE_REQUIRED');
1833          FND_MESSAGE.SET_TOKEN('ATTRIBUTE',
1834             OE_Order_UTIL.Get_Attribute_Name('ORDER_TYPE_ID'));
1835          oe_bulk_msg_pub.Add('Y', 'ERROR');
1836 
1837          -- To avoid Insert failure, populate not null column.
1838          -- This record will be deleted later.
1839 
1840          p_header_rec.order_type_id(i) := -99;
1841 
1842       END IF;  -- Order Type is not null
1843 
1844 
1845       -- Check that Transactional currency exists
1846       -- If it does validate Price List currency against it.
1847 
1848       IF (p_header_rec.transactional_curr_code(i) IS NULL) THEN
1849 
1850          p_header_rec.lock_control(i) := -99;
1851 
1852          -- To avoid Insert failure, populate not null column.
1853          -- This record will be deleted later.
1854          p_header_rec.transactional_curr_code(i) := '-99';
1855 
1856          FND_MESSAGE.SET_NAME('ONT','OE_ATTRIBUTE_REQUIRED');
1857          FND_MESSAGE.SET_TOKEN('ATTRIBUTE',
1858             OE_Order_UTIL.Get_Attribute_Name('TRANSACTIONAL_CURR_CODE'));
1859          oe_bulk_msg_pub.Add('Y', 'ERROR');
1860 
1861       END IF;
1862 
1863 
1864       -- Price List Validations
1865 
1866       IF  (p_header_rec.price_list_id(i) IS NOT NULL) THEN
1867 
1868         IF NOT Validate_Price_List(p_header_rec.price_list_id(i)
1869                  ,p_header_rec.transactional_curr_code(i)
1870                  ,p_header_rec.pricing_date(i)
1871                  ,'Y'
1872                  )
1873         THEN
1874 
1875           p_header_rec.lock_control(i) := -99 ;
1876 
1877         END IF;
1878 
1879       END IF;
1880 
1881 
1882       -- Conversion rate, date should be null when conversion type is null.
1883 
1884       IF (p_header_rec.conversion_type_code(i) IS NULL) THEN
1885            IF p_header_rec.conversion_rate(i) IS NOT NULL
1886               OR p_header_rec.conversion_rate_date(i) IS NOT NULL
1887            THEN
1888                p_header_rec.lock_control(i) := -99;
1889                FND_MESSAGE.SET_NAME('ONT','OE_VAL_CONVERSION_TYPE');
1890                oe_bulk_msg_pub.Add('Y', 'ERROR');
1891            END IF;
1892       END IF;
1893 
1894      -- Conversion rate  must be Null if coversion type is not User
1895     -- Removed the validation for conversion date Bug 3220059
1896    IF p_header_rec.conversion_type_code(i) <> 'User' AND
1897         p_header_rec.conversion_rate(i) IS NOT NULL
1898      THEN
1899         l_return_status := FND_API.G_RET_STS_ERROR;
1900         FND_MESSAGE.SET_NAME('ONT','OE_VALIDATION_CONV_TYPE');
1901         OE_MSG_PUB.ADD;
1902 
1903    END IF; -- END of checks based on conversion type
1904 
1905 
1906       -- Agreement related validations
1907 
1908       IF  (p_header_rec.agreement_id(i) IS NOT NULL) THEN
1909 
1910         -- Error messages are populated in Validate_Agreement
1911 
1912         IF NOT Validate_Agreement(p_header_rec.agreement_id(i)
1913                          ,p_header_rec.pricing_date(i)
1914                          ,p_header_rec.price_list_id(i)
1915                          ,p_header_rec.sold_to_org_id(i)
1916                          )
1917         THEN
1918 
1919              p_header_rec.lock_control(i) := -99;
1920 
1921          END IF;
1922 
1923       END IF;
1924 
1925 
1926       -- BEGIN: Site, Contact Validations
1927 
1928       -- Validate Sold-to Contact
1929       -- Validate Active status, since contact does go thru attribute
1930       -- validation.
1931       IF (p_header_rec.sold_to_contact_id(i) IS NOT NULL) THEN
1932          BEGIN
1933 
1934            SELECT  'VALID'
1935            INTO  l_dummy
1936            FROM  HZ_CUST_ACCOUNT_ROLES ACCT_ROLE
1937            WHERE  ACCT_ROLE.CUST_ACCOUNT_ROLE_ID = p_header_rec.sold_to_contact_id(i)
1938              AND  ACCT_ROLE.CUST_ACCOUNT_ID = p_header_rec.sold_to_org_id(i)
1939              AND  ROWNUM = 1
1940              AND  ACCT_ROLE.ROLE_TYPE = 'CONTACT'
1941              AND  STATUS = 'A';
1942 
1943          EXCEPTION
1944            WHEN NO_DATA_FOUND THEN
1945              p_header_rec.lock_control(i) := -99;
1946              FND_MESSAGE.SET_NAME('ONT','OE_INVALID_ATTRIBUTE');
1947              FND_MESSAGE.SET_TOKEN('ATTRIBUTE',
1948                        OE_Order_Util.Get_Attribute_Name('SOLD_TO_CONTACT_ID'));
1949              oe_bulk_msg_pub.Add('Y', 'ERROR');
1950          END;
1951       END IF; -- End sold to contact validation
1952 
1953       -- Validate Bill-to for customer
1954       IF (p_header_rec.invoice_to_org_id(i) IS NOT NULL) THEN
1955 
1956           IF NOT Validate_Bill_To(p_header_rec.sold_to_org_id(i),
1957                                      p_header_rec.invoice_to_org_id(i))
1958           THEN
1959 
1960              p_header_rec.lock_control(i) := -99;
1961              FND_MESSAGE.SET_NAME('ONT','OE_INVALID_ATTRIBUTE');
1962              FND_MESSAGE.SET_TOKEN('ATTRIBUTE',
1963                  OE_Order_Util.Get_Attribute_Name('invoice_to_org_id'));
1964              oe_bulk_msg_pub.Add('Y', 'ERROR');
1965 
1966           END IF;
1967 
1968       END IF; -- Invoice to is not null
1969 
1970       -- Validate Ship To for customer
1971       IF (p_header_rec.ship_to_org_id(i) IS NOT NULL) THEN
1972 
1973          IF NOT Validate_Ship_To(p_header_rec.sold_to_org_id(i),
1974                                  p_header_rec.ship_to_org_id(i))
1975          THEN
1976 
1977             p_header_rec.lock_control(i) := -99;
1978             FND_MESSAGE.SET_NAME('ONT','OE_INVALID_ATTRIBUTE');
1979             FND_MESSAGE.SET_TOKEN('ATTRIBUTE',
1980                 OE_Order_Util.Get_Attribute_Name('SHIP_TO_ORG_ID'));
1981             oe_bulk_msg_pub.Add('Y', 'ERROR');
1982 
1983           END IF;
1984 
1985       END IF; -- Ship to is not null
1986 
1987       --abghosh
1988       -- Validate sold_to_site_use_id for customer
1989       IF (p_header_rec.sold_to_site_use_id(i) IS NOT NULL) THEN
1990 
1991          IF NOT Validate_Sold_to_site(p_header_rec.sold_to_org_id(i),
1992                                  p_header_rec.sold_to_site_use_id(i))
1993          THEN
1994 
1995             p_header_rec.lock_control(i) := -99;
1996             FND_MESSAGE.SET_NAME('ONT','OE_INVALID_ATTRIBUTE');
1997             FND_MESSAGE.SET_TOKEN('ATTRIBUTE',
1998                 OE_Order_Util.Get_Attribute_Name('SOLD_TO_SITE_USE_ID'));
1999             oe_bulk_msg_pub.Add('Y', 'ERROR');
2000 
2001           END IF;
2002 
2003       END IF;
2004 
2005 	--{bug 5054618
2006 	-- end customer
2007       IF (p_header_rec.end_Customer_id(i) IS NOT NULL) THEN
2008 		    IF NOT Validate_End_Customer( p_header_rec.end_Customer_id(i)) THEN
2009 	       p_header_rec.lock_control(i) := -99;
2010 	       FND_MESSAGE.SET_NAME('ONT','OE_INVALID_ATTRIBUTE');
2011 	       FND_MESSAGE.SET_TOKEN('ATTRIBUTE',OE_Order_Util.Get_Attribute_Name('end_customer_id'));
2012 	       oe_bulk_msg_pub.Add('Y', 'ERROR');
2013 	    END IF;
2014 	 End IF;
2015 
2016 	 IF (p_header_rec.end_Customer_contact_id(i) IS NOT NULL) THEN
2017 	    IF NOT Validate_End_Customer_contact( p_header_rec.end_Customer_contact_id(i)) THEN
2018 		  p_header_rec.lock_control(i) := -99;
2019 		  FND_MESSAGE.SET_NAME('ONT','OE_INVALID_ATTRIBUTE');
2020 		  FND_MESSAGE.SET_TOKEN('ATTRIBUTE',OE_Order_Util.Get_Attribute_Name('end_customer_contact_id'));
2021 		  oe_bulk_msg_pub.Add('Y', 'ERROR');
2022 	       END IF;
2023 	    END IF;
2024 
2025 	    IF (p_header_rec.end_Customer_site_use_id(i) IS NOT NULL) THEN
2026 	       IF NOT Validate_End_Customer_site_use(p_header_rec.end_Customer_site_use_id(i),p_header_rec.end_customer_id(i)) THEN
2027 		      p_header_rec.lock_control(i) := -99;
2028 		      FND_MESSAGE.SET_NAME('ONT','OE_INVALID_ATTRIBUTE');
2029 		      FND_MESSAGE.SET_TOKEN('ATTRIBUTE',OE_Order_Util.Get_Attribute_Name('end_customer_site_use_id'));
2030 		      oe_bulk_msg_pub.Add('Y', 'ERROR');
2031 		   END IF;
2032 		END IF;
2033 
2034 		IF (p_header_rec.IB_owner(i) IS NOT NULL) THEN
2035 		   IF NOT validate_IB_Owner(p_header_rec.IB_Owner(i)) THEN
2036 		      p_header_rec.lock_control(i) := -99;
2037 		      FND_MESSAGE.SET_NAME('ONT','OE_INVALID_ATTRIBUTE');
2038 			    FND_MESSAGE.SET_TOKEN('ATTRIBUTE',OE_Order_Util.Get_Attribute_Name('IB_Owner'));
2039 			    oe_bulk_msg_pub.Add('Y', 'ERROR');
2040 			 END IF;
2041 		      END IF;
2042 
2043 			IF (p_header_rec.IB_current_location(i) IS NOT NULL) THEN
2044 			   IF NOT Validate_IB_current_location( p_header_rec.IB_current_Location(i)) THEN
2045 				 p_header_rec.lock_control(i) := -99;
2046 				 FND_MESSAGE.SET_NAME('ONT','OE_INVALID_ATTRIBUTE');
2047 				 FND_MESSAGE.SET_TOKEN('ATTRIBUTE',OE_Order_Util.Get_Attribute_Name('IB_location'));
2048 				 oe_bulk_msg_pub.Add('Y', 'ERROR');
2049 			      END IF;
2050                              END IF;
2051 
2052 			     IF (p_header_rec.IB_Installed_at_location(i) IS NOT NULL) THEN
2053 				IF NOT Validate_IB_Inst_loc( p_header_rec.IB_Installed_at_location(i)) THEN
2054 				   p_header_rec.lock_control(i) := -99;
2055 				      FND_MESSAGE.SET_NAME('ONT','OE_INVALID_ATTRIBUTE');
2056 				      FND_MESSAGE.SET_TOKEN('ATTRIBUTE',OE_Order_Util.Get_Attribute_Name('end_customer_site_use_id'));
2057 				      oe_bulk_msg_pub.Add('Y', 'ERROR');
2058 				   END IF;
2059 				END IF;
2060 	--bug 5054618}
2061 
2062        -- Validate Deliver-to for customer
2063       IF (p_header_rec.deliver_to_org_id(i) IS NOT NULL) THEN
2064 
2065          IF NOT Validate_Deliver_To(p_header_rec.sold_to_org_id(i)
2066                          ,p_header_rec.deliver_to_org_id(i))
2067          THEN
2068 
2069             p_header_rec.lock_control(i) := -99;
2070             FND_MESSAGE.SET_NAME('ONT','OE_INVALID_ATTRIBUTE');
2071             FND_MESSAGE.SET_TOKEN('ATTRIBUTE',
2072                 OE_Order_Util.Get_Attribute_Name('DELIVER_TO_ORG_ID'));
2073             oe_bulk_msg_pub.Add('Y', 'ERROR');
2074 
2075           END IF;
2076 
2077       END IF; -- deliver to is not null
2078 
2079       -- Validate Bill to contact
2080       IF (p_header_rec.invoice_to_contact_id(i) IS NOT NULL) THEN
2081 
2082          IF NOT Validate_Site_Contact(p_header_rec.invoice_to_org_id(i)
2083                       ,p_header_rec.invoice_to_contact_id(i)
2084                       )
2085          THEN
2086 
2087             p_header_rec.lock_control(i) := -99;
2088             FND_MESSAGE.SET_NAME('ONT','OE_INVALID_ATTRIBUTE');
2089             FND_MESSAGE.SET_TOKEN('ATTRIBUTE',
2090                 OE_Order_Util.Get_Attribute_Name('invoice_to_contact_id'));
2091             oe_bulk_msg_pub.Add('Y', 'ERROR');
2092 
2093          END IF;
2094 
2095       END IF;
2096 
2097       -- Validate ship to contact
2098       IF (p_header_rec.ship_to_contact_id(i) IS NOT NULL) THEN
2099 
2100          IF NOT Validate_Site_Contact(p_header_rec.ship_to_org_id(i)
2101                       ,p_header_rec.ship_to_contact_id(i)
2102                       )
2103          THEN
2104 
2105             p_header_rec.lock_control(i) := -99;
2106             FND_MESSAGE.SET_NAME('ONT','OE_INVALID_ATTRIBUTE');
2107             FND_MESSAGE.SET_TOKEN('ATTRIBUTE',
2108                 OE_Order_Util.Get_Attribute_Name('SHIP_TO_CONTACT_ID'));
2109             oe_bulk_msg_pub.Add('Y', 'ERROR');
2110 
2111          END IF;
2112 
2113       END IF;
2114 
2115       -- Validate deliver to contact
2116       IF (p_header_rec.deliver_to_contact_id(i) IS NOT NULL) THEN
2117 
2118          IF NOT Validate_Site_Contact(p_header_rec.deliver_to_org_id(i)
2119                       ,p_header_rec.deliver_to_contact_id(i)
2120                       )
2121          THEN
2122 
2123             p_header_rec.lock_control(i) := -99;
2124             FND_MESSAGE.SET_NAME('ONT','OE_INVALID_ATTRIBUTE');
2125             FND_MESSAGE.SET_TOKEN('ATTRIBUTE',
2126                 OE_Order_Util.Get_Attribute_Name('DELIVER_TO_CONTACT_ID'));
2127             oe_bulk_msg_pub.Add('Y', 'ERROR');
2128 
2129          END IF;
2130 
2131       END IF;
2132 
2133       -- END: Site, Contact Validations
2134 
2135 
2136       -- BEGIN: Check for Tax Exemption attributes
2137 
2138       IF (p_header_rec.tax_exempt_flag(i) = 'E') THEN
2139 
2140            -- Tax exempt reason code is required
2141            IF (p_header_rec.tax_exempt_reason_code(i) IS NULL) THEN
2142 
2143                p_header_rec.lock_control(i) := -99;
2144                FND_MESSAGE.SET_NAME('ONT','OE_ATTRIBUTE_REQUIRED');
2145                FND_MESSAGE.SET_TOKEN('ATTRIBUTE',
2146                       OE_Order_UTIL.Get_Attribute_Name('TAX_EXEMPT_REASON_CODE'));
2147                oe_bulk_msg_pub.Add('Y', 'ERROR');
2148 
2149            ELSIF NOT Valid_Tax_Exempt_Reason
2150                     (p_header_rec.tax_exempt_reason_code(i)) THEN
2151 
2152                p_header_rec.lock_control(i) := -99;
2153                FND_MESSAGE.SET_NAME('ONT','OE_INVALID_ATTRIBUTE');
2154                FND_MESSAGE.SET_TOKEN('ATTRIBUTE',
2155                       OE_Order_UTIL.Get_Attribute_Name('TAX_EXEMPT_REASON_CODE'));
2156                oe_bulk_msg_pub.Add('Y', 'ERROR');
2157 
2158            END IF;
2159 
2160       ELSIF (p_header_rec.tax_exempt_flag(i) = 'R') THEN
2161 
2162           IF (p_header_rec.tax_exempt_number(i) IS NOT NULL)
2163              OR (p_header_rec.tax_exempt_reason_code(i) IS NOT NULL)
2164           THEN
2165 
2166               p_header_rec.lock_control(i) := -99;
2167               FND_MESSAGE.SET_NAME('ONT','OE_TAX_EXEMPTION_NOT_ALLOWED');
2168               oe_bulk_msg_pub.Add('Y', 'ERROR');
2169 
2170           END IF;
2171 
2172       -- Validate Tax Exempt # and reason for this customer and site
2173       ELSIF (p_header_rec.tax_exempt_flag(i) = 'S')
2174             AND (p_header_rec.tax_exempt_number(i) IS NOT NULL)
2175             AND(p_header_rec.tax_exempt_reason_code(i) IS NOT NULL)
2176       THEN
2177 
2178 --commented for bug 7685103
2179 -- No need to validate execption number irrespective of tax_exempt_flags
2180 /*         IF NOT Valid_Tax_Exemptions(p_header_rec.tax_exempt_number(i)
2181                           ,p_header_rec.tax_exempt_reason_code(i)
2182                           ,p_header_rec.ship_to_org_id(i)
2183                           ,p_header_rec.invoice_to_org_id(i)
2184                           ,p_header_rec.sold_to_org_id(i)
2185                           ,p_header_rec.request_date(i)
2186                           )
2187          THEN
2188 
2189               p_header_rec.lock_control(i) := -99;
2190               FND_MESSAGE.SET_NAME('ONT','OE_INVALID_ATTRIBUTE');
2191               FND_MESSAGE.SET_TOKEN('ATTRIBUTE',
2192                   OE_Order_Util.Get_Attribute_Name('tax_exempt_number'));
2193               oe_bulk_msg_pub.Add('Y', 'ERROR');
2194 
2195          END IF;
2196 */
2197       NULL;
2198       END IF;
2199 
2200       -- END: Check for Tax Exemption attributes
2201 
2202 
2203       -- Duplicate PO Number Validation
2204 
2205       IF p_header_rec.cust_po_number(i) IS NOT NULL THEN
2206 
2207          IF OE_Validate_Header.Is_Duplicate_PO_Number
2208            (p_header_rec.cust_po_number(i)
2209            ,p_header_rec.sold_to_org_id(i)
2210            ,p_header_rec.header_id(i)
2211            )
2212          THEN
2213            FND_MESSAGE.SET_NAME('ONT','OE_VAL_DUP_PO_NUMBER');
2214            oe_bulk_msg_pub.ADD;
2215          END IF;
2216 
2217        END IF;
2218 
2219 
2220       -- BEGIN: Desc Flex Validation
2221 
2222       IF p_validate_desc_flex = 'Y' THEN
2223 
2224       IF OE_Bulk_Order_Pvt.G_OE_HEADER_ATTRIBUTES = 'Y' THEN
2225 
2226          IF NOT OE_VALIDATE.Header_Desc_Flex
2227                (p_context            => p_header_rec.context(i)
2228                ,p_attribute1         => p_header_rec.attribute1(i)
2229                ,p_attribute2         => p_header_rec.attribute2(i)
2230                ,p_attribute3         => p_header_rec.attribute3(i)
2231                ,p_attribute4         => p_header_rec.attribute4(i)
2232                ,p_attribute5         => p_header_rec.attribute5(i)
2233                ,p_attribute6         => p_header_rec.attribute6(i)
2234                ,p_attribute7         => p_header_rec.attribute7(i)
2235                ,p_attribute8         => p_header_rec.attribute8(i)
2236                ,p_attribute9         => p_header_rec.attribute9(i)
2237                ,p_attribute10        => p_header_rec.attribute10(i)
2238                ,p_attribute11        => p_header_rec.attribute11(i)
2239                ,p_attribute12        => p_header_rec.attribute12(i)
2240                ,p_attribute13        => p_header_rec.attribute13(i)
2241                ,p_attribute14        => p_header_rec.attribute14(i)
2242                ,p_attribute15        => p_header_rec.attribute15(i)
2243                ,p_attribute16        => p_header_rec.attribute16(i)  -- for bug 2184255
2244                ,p_attribute17        => p_header_rec.attribute17(i)
2245                ,p_attribute18        => p_header_rec.attribute18(i)
2246                ,p_attribute19        => p_header_rec.attribute19(i)
2247                ,p_attribute20        => p_header_rec.attribute20(i))
2248              THEN
2249                  p_header_rec.lock_control(i) := -99;
2250                  -- Log Error Message
2251                  FND_MESSAGE.SET_NAME('ONT','OE_INVALID_ATTRIBUTE');
2252                  FND_MESSAGE.SET_TOKEN('ATTRIBUTE',
2253                                        'Entity:Flexfield:Header_Desc_Flex');
2254                  oe_bulk_msg_pub.Add('Y', 'ERROR');
2255 	  ELSE -- if the flex validation is successfull
2256 	    -- For bug 2511313
2257 	    IF p_header_rec.context(i) IS NULL
2258 	      OR p_header_rec.context(i) = FND_API.G_MISS_CHAR THEN
2259 	       p_header_rec.context(i)    := oe_validate.g_context;
2260 	    END IF;
2261 
2262 	    IF p_header_rec.attribute1(i) IS NULL
2263 	      OR p_header_rec.attribute1(i) = FND_API.G_MISS_CHAR THEN
2264 	       p_header_rec.attribute1(i) := oe_validate.g_attribute1;
2265 	    END IF;
2266 
2267 	    IF p_header_rec.attribute2(i) IS NULL
2268 	      OR p_header_rec.attribute2(i) = FND_API.G_MISS_CHAR THEN
2269 	       p_header_rec.attribute2(i) := oe_validate.g_attribute2;
2270 	    END IF;
2271 
2272 	    IF p_header_rec.attribute3(i) IS NULL
2273 	      OR p_header_rec.attribute3(i) = FND_API.G_MISS_CHAR THEN
2274 	       p_header_rec.attribute3(i) := oe_validate.g_attribute3;
2275 	    END IF;
2276 
2277 	    IF p_header_rec.attribute4(i) IS NULL
2278 	      OR p_header_rec.attribute4(i) = FND_API.G_MISS_CHAR THEN
2279 	       p_header_rec.attribute4(i) := oe_validate.g_attribute4;
2280 	    END IF;
2281 
2282 	    IF p_header_rec.attribute5(i) IS NULL
2283 	      OR p_header_rec.attribute5(i) = FND_API.G_MISS_CHAR THEN
2284 	       p_header_rec.attribute5(i) := oe_validate.g_attribute5;
2285 	    END IF;
2286 
2287 	    IF p_header_rec.attribute6(i) IS NULL
2288 	      OR p_header_rec.attribute6(i) = FND_API.G_MISS_CHAR THEN
2289 	       p_header_rec.attribute6(i) := oe_validate.g_attribute6;
2290 	    END IF;
2291 
2292 	    IF p_header_rec.attribute7(i) IS NULL
2293 	      OR p_header_rec.attribute7(i) = FND_API.G_MISS_CHAR THEN
2294 	       p_header_rec.attribute7(i) := oe_validate.g_attribute7;
2295 	    END IF;
2296 
2297 	    IF p_header_rec.attribute8(i) IS NULL
2298 	      OR p_header_rec.attribute8(i) = FND_API.G_MISS_CHAR THEN
2299 	       p_header_rec.attribute8(i) := oe_validate.g_attribute8;
2300 	    END IF;
2301 
2302 	    IF p_header_rec.attribute9(i) IS NULL
2303 	      OR p_header_rec.attribute9(i) = FND_API.G_MISS_CHAR THEN
2304 	       p_header_rec.attribute9(i) := oe_validate.g_attribute9;
2305 	    END IF;
2306 
2307 	    IF p_header_rec.attribute10(i) IS NULL
2308 	      OR p_header_rec.attribute10(i) = FND_API.G_MISS_CHAR THEN
2309 	       p_header_rec.attribute10(i) := Oe_validate.G_attribute10;
2310 	    End IF;
2311 
2312 	    IF p_header_rec.attribute11(i) IS NULL
2313 	      OR p_header_rec.attribute11(i) = FND_API.G_MISS_CHAR THEN
2314 	       p_header_rec.attribute11(i) := oe_validate.g_attribute11;
2315 	    END IF;
2316 
2317 	    IF p_header_rec.attribute12(i) IS NULL
2318 	      OR p_header_rec.attribute12(i) = FND_API.G_MISS_CHAR THEN
2319 	       p_header_rec.attribute12(i) := oe_validate.g_attribute12;
2320 	    END IF;
2321 
2322 	    IF p_header_rec.attribute13(i) IS NULL
2323 	      OR p_header_rec.attribute13(i) = FND_API.G_MISS_CHAR THEN
2324 	       p_header_rec.attribute13(i) := oe_validate.g_attribute13;
2325 	    END IF;
2326 
2327 	    IF p_header_rec.attribute14(i) IS NULL
2328 	      OR p_header_rec.attribute14(i) = FND_API.G_MISS_CHAR THEN
2329 	       p_header_rec.attribute14(i) := oe_validate.g_attribute14;
2330 	    END IF;
2331 
2332 	    IF p_header_rec.attribute15(i) IS NULL
2333 	      OR p_header_rec.attribute15(i) = FND_API.G_MISS_CHAR THEN
2334 	       p_header_rec.attribute15(i) := oe_validate.g_attribute15;
2335 	    END IF;
2336 
2337 	    IF p_header_rec.attribute16(i) IS NULL  -- For bug 2184255
2338 	      OR p_header_rec.attribute16(i) = FND_API.G_MISS_CHAR THEN
2339 	       p_header_rec.attribute16(i) := oe_validate.g_attribute16;
2340 	    END IF;
2341 
2342 	    IF p_header_rec.attribute17(i) IS NULL
2343 	      OR p_header_rec.attribute17(i) = FND_API.G_MISS_CHAR THEN
2344 	       p_header_rec.attribute17(i) := oe_validate.g_attribute17;
2345 	    END IF;
2346 
2347 	    IF p_header_rec.attribute18(i) IS NULL
2348 	      OR p_header_rec.attribute18(i) = FND_API.G_MISS_CHAR THEN
2349 	       p_header_rec.attribute18(i) := oe_validate.g_attribute18;
2350 	    END IF;
2351 
2352 	    IF p_header_rec.attribute19(i) IS NULL
2353 	      OR p_header_rec.attribute19(i) = FND_API.G_MISS_CHAR THEN
2354 	       p_header_rec.attribute19(i) := oe_validate.g_attribute19;
2355 	    END IF;
2356 
2357 	    IF p_header_rec.attribute20(i) IS NULL
2358 	      OR p_header_rec.attribute20(i) = FND_API.G_MISS_CHAR THEN
2359 	       p_header_rec.attribute20(i) := oe_validate.g_attribute20;
2360 	    END IF;
2361 
2362 	    -- end of assignments, bug 2511313
2363 
2364 	 END IF;
2365       END IF;
2366 
2367       IF OE_Bulk_Order_Pvt.G_OE_HEADER_GLOBAL_ATTRIBUTE = 'Y' THEN
2368 
2369              IF NOT OE_VALIDATE.G_Header_Desc_Flex
2370               (p_context            => p_header_rec.global_attribute_category(i)
2371               ,p_attribute1         => p_header_rec.global_attribute1(i)
2372               ,p_attribute2         => p_header_rec.global_attribute2(i)
2373               ,p_attribute3         => p_header_rec.global_attribute3(i)
2374               ,p_attribute4         => p_header_rec.global_attribute4(i)
2375               ,p_attribute5         => p_header_rec.global_attribute5(i)
2376               ,p_attribute6         => p_header_rec.global_attribute6(i)
2377               ,p_attribute7         => p_header_rec.global_attribute7(i)
2378               ,p_attribute8         => p_header_rec.global_attribute8(i)
2379               ,p_attribute9         => p_header_rec.global_attribute9(i)
2380               ,p_attribute10        => p_header_rec.global_attribute10(i)
2381               ,p_attribute11        => p_header_rec.global_attribute11(i)
2382               ,p_attribute12        => p_header_rec.global_attribute12(i)
2383               ,p_attribute13        => p_header_rec.global_attribute13(i)
2384               ,p_attribute14        => p_header_rec.global_attribute13(i)
2385               ,p_attribute15        => p_header_rec.global_attribute14(i)
2386               ,p_attribute16        => p_header_rec.global_attribute16(i)
2387               ,p_attribute17        => p_header_rec.global_attribute17(i)
2388               ,p_attribute18        => p_header_rec.global_attribute18(i)
2389               ,p_attribute19        => p_header_rec.global_attribute19(i)
2390               ,p_attribute20        => p_header_rec.global_attribute20(i))
2391              THEN
2392                  p_header_rec.lock_control(i) := -99;
2393                  -- Log Error Message
2394                  FND_MESSAGE.SET_NAME('ONT','OE_INVALID_ATTRIBUTE');
2395                  FND_MESSAGE.SET_TOKEN('ATTRIBUTE',
2396                                        'Entity:Flexfield:G_Header_Desc_Flex');
2397                  oe_bulk_msg_pub.Add('Y', 'ERROR');
2398 
2399 	      ELSE -- for bug 2511313
2400 	        IF p_header_rec.global_attribute_category(i) IS NULL
2401 		  OR p_header_rec.global_attribute_category(i) = FND_API.G_MISS_CHAR THEN
2402 		   p_header_rec.global_attribute_category(i) := oe_validate.g_context;
2403 		END IF;
2404 
2405 		IF p_header_rec.global_attribute1(i) IS NULL
2406 		  OR p_header_rec.global_attribute1(i) = FND_API.G_MISS_CHAR THEN
2407 		   p_header_rec.global_attribute1(i) := oe_validate.g_attribute1;
2408 		END IF;
2409 
2410 		IF p_header_rec.global_attribute2(i) IS NULL
2411 		  OR p_header_rec.global_attribute2(i) = FND_API.G_MISS_CHAR THEN
2412 		   p_header_rec.global_attribute2(i) := oe_validate.g_attribute2;
2413 		END IF;
2414 
2415 		IF p_header_rec.global_attribute3(i) IS NULL
2416 		  OR p_header_rec.global_attribute3(i) = FND_API.G_MISS_CHAR THEN
2417 		   p_header_rec.global_attribute3(i) := oe_validate.g_attribute3;
2418 		END IF;
2419 
2420 		IF p_header_rec.global_attribute4(i) IS NULL
2421 		  OR p_header_rec.global_attribute4(i) = FND_API.G_MISS_CHAR THEN
2422 		   p_header_rec.global_attribute4(i) := oe_validate.g_attribute4;
2423 		END IF;
2424 
2425 		IF p_header_rec.global_attribute5(i) IS NULL
2426 		  OR p_header_rec.global_attribute5(i) = FND_API.G_MISS_CHAR THEN
2427 		   p_header_rec.global_attribute5(i) := oe_validate.g_attribute5;
2428 		END IF;
2429 
2430 		IF p_header_rec.global_attribute6(i) IS NULL
2431 		  OR p_header_rec.global_attribute6(i) = FND_API.G_MISS_CHAR THEN
2432 		   p_header_rec.global_attribute6(i) := oe_validate.g_attribute6;
2433 		END IF;
2434 
2435 		IF p_header_rec.global_attribute7(i) IS NULL
2436 		  OR p_header_rec.global_attribute7(i) = FND_API.G_MISS_CHAR THEN
2437 		   p_header_rec.global_attribute7(i) := oe_validate.g_attribute7;
2438 		END IF;
2439 
2440 		IF p_header_rec.global_attribute8(i) IS NULL
2441 		  OR p_header_rec.global_attribute8(i) = FND_API.G_MISS_CHAR THEN
2442 		   p_header_rec.global_attribute8(i) := oe_validate.g_attribute8;
2443 		END IF;
2444 
2445 		IF p_header_rec.global_attribute9(i) IS NULL
2446 		  OR p_header_rec.global_attribute9(i) = FND_API.G_MISS_CHAR THEN
2447 		   p_header_rec.global_attribute9(i) := oe_validate.g_attribute9;
2448 		END IF;
2449 
2450 		IF p_header_rec.global_attribute10(i) IS NULL
2451 		  OR p_header_rec.global_attribute10(i) = FND_API.G_MISS_CHAR THEN
2452 		   p_header_rec.global_attribute10(i) := oe_validate.g_attribute10;
2453 		END IF;
2454 
2455 		IF p_header_rec.global_attribute11(i) IS NULL
2456 		  OR p_header_rec.global_attribute11(i) = FND_API.G_MISS_CHAR THEN
2457 		   p_header_rec.global_attribute11(i) := oe_validate.g_attribute11;
2458 		END IF;
2459 
2460 		IF p_header_rec.global_attribute12(i) IS NULL
2461 		  OR p_header_rec.global_attribute12(i) = FND_API.G_MISS_CHAR THEN
2462 		   p_header_rec.global_attribute12(i) := oe_validate.g_attribute12;
2463 		END IF;
2464 
2465 		IF p_header_rec.global_attribute13(i) IS NULL
2466 		  OR p_header_rec.global_attribute13(i) = FND_API.G_MISS_CHAR THEN
2467 		   p_header_rec.global_attribute13(i) := oe_validate.g_attribute13;
2468 		END IF;
2469 
2470 		IF p_header_rec.global_attribute14(i) IS NULL
2471 		  OR p_header_rec.global_attribute14(i) = FND_API.G_MISS_CHAR THEN
2472 		   p_header_rec.global_attribute14(i) := oe_validate.g_attribute14;
2473 		END IF;
2474 
2475 		IF p_header_rec.global_attribute15(i) IS NULL
2476 		  OR p_header_rec.global_attribute15(i) = FND_API.G_MISS_CHAR THEN
2477 		   p_header_rec.global_attribute15(i) := oe_validate.g_attribute15;
2478 		END IF;
2479 
2480 		IF p_header_rec.global_attribute16(i) IS NULL
2481 		  OR p_header_rec.global_attribute16(i) = FND_API.G_MISS_CHAR THEN
2482 		   p_header_rec.global_attribute16(i) := oe_validate.g_attribute16;
2483 		END IF;
2484 
2485 		IF p_header_rec.global_attribute17(i) IS NULL
2486 		  OR p_header_rec.global_attribute17(i) = FND_API.G_MISS_CHAR THEN
2487 		   p_header_rec.global_attribute17(i) := oe_validate.g_attribute17;
2488 		END IF;
2489 
2490 		IF p_header_rec.global_attribute18(i) IS NULL
2491 		  OR p_header_rec.global_attribute18(i) = FND_API.G_MISS_CHAR THEN
2492 		   p_header_rec.global_attribute18(i) := oe_validate.g_attribute18;
2493 		END IF;
2494 
2495 		IF p_header_rec.global_attribute19(i) IS NULL
2496 		  OR p_header_rec.global_attribute19(i) = FND_API.G_MISS_CHAR THEN
2497 		   p_header_rec.global_attribute19(i) := oe_validate.g_attribute19;
2498 		END IF;
2499 
2500 		IF p_header_rec.global_attribute20(i) IS NULL
2501 		  OR p_header_rec.global_attribute20(i) = FND_API.G_MISS_CHAR THEN
2502 		   p_header_rec.global_attribute20(i) := oe_validate.g_attribute20;
2503 		END IF;
2504 		-- end of bug 2511313
2505 
2506              END IF;
2507       END IF;
2508 
2509       IF OE_Bulk_Order_Pvt.G_OE_HEADER_TP_ATTRIBUTES = 'Y' THEN
2510 
2511              IF NOT OE_VALIDATE.TP_Header_Desc_Flex
2512                (p_context            => p_header_rec.tp_context(i)
2513                ,p_attribute1         => p_header_rec.tp_attribute1(i)
2514                ,p_attribute2         => p_header_rec.tp_attribute2(i)
2515                ,p_attribute3         => p_header_rec.tp_attribute3(i)
2516                ,p_attribute4         => p_header_rec.tp_attribute4(i)
2517                ,p_attribute5         => p_header_rec.tp_attribute5(i)
2518                ,p_attribute6         => p_header_rec.tp_attribute6(i)
2519                ,p_attribute7         => p_header_rec.tp_attribute7(i)
2520                ,p_attribute8         => p_header_rec.tp_attribute8(i)
2521                ,p_attribute9         => p_header_rec.tp_attribute9(i)
2522                ,p_attribute10        => p_header_rec.tp_attribute10(i)
2523                ,p_attribute11        => p_header_rec.tp_attribute11(i)
2524                ,p_attribute12        => p_header_rec.tp_attribute12(i)
2525                ,p_attribute13        => p_header_rec.tp_attribute13(i)
2526                ,p_attribute14        => p_header_rec.tp_attribute14(i)
2527                ,p_attribute15        => p_header_rec.tp_attribute15(i))
2528              THEN
2529                  p_header_rec.lock_control(i) := -99;
2530                  -- Log Error Message
2531                  FND_MESSAGE.SET_NAME('ONT','OE_INVALID_ATTRIBUTE');
2532                  FND_MESSAGE.SET_TOKEN('ATTRIBUTE',
2533                                        'Entity:Flexfield:TP_Header_Desc_Flex');
2534                  oe_bulk_msg_pub.Add('Y', 'ERROR');
2535 	      ELSE  -- for bug 2511313
2536 
2537 		IF p_header_rec.tp_context(i) IS NULL
2538 		  OR p_header_rec.tp_context(i) = FND_API.G_MISS_CHAR THEN
2539 		   p_header_rec.tp_context(i)    := oe_validate.g_context;
2540 		END IF;
2541 
2542 		IF p_header_rec.tp_attribute1(i) IS NULL
2543 		  OR p_header_rec.tp_attribute1(i) = FND_API.G_MISS_CHAR THEN
2544 		   p_header_rec.tp_attribute1(i) := oe_validate.g_attribute1;
2545 		END IF;
2546 
2547 		IF p_header_rec.tp_attribute2(i) IS NULL
2548 		  OR p_header_rec.tp_attribute2(i) = FND_API.G_MISS_CHAR THEN
2549 		   p_header_rec.tp_attribute2(i) := oe_validate.g_attribute2;
2550 		END IF;
2551 
2552 		IF p_header_rec.tp_attribute3(i) IS NULL
2553 		  OR p_header_rec.tp_attribute3(i) = FND_API.G_MISS_CHAR THEN
2554 		   p_header_rec.tp_attribute3(i) := oe_validate.g_attribute3;
2555 		END IF;
2556 
2557 		IF p_header_rec.tp_attribute4(i) IS NULL
2558 		  OR p_header_rec.tp_attribute4(i) = FND_API.G_MISS_CHAR THEN
2559 		   p_header_rec.tp_attribute4(i) := oe_validate.g_attribute4;
2560 		END IF;
2561 
2562 		IF p_header_rec.tp_attribute5(i) IS NULL
2563 		  OR p_header_rec.tp_attribute5(i) = FND_API.G_MISS_CHAR THEN
2564 		   p_header_rec.tp_attribute5(i) := oe_validate.g_attribute5;
2565 		END IF;
2566 
2567 		IF p_header_rec.tp_attribute6(i) IS NULL
2568 		  OR p_header_rec.tp_attribute6(i) = FND_API.G_MISS_CHAR THEN
2569 		   p_header_rec.tp_attribute6(i) := oe_validate.g_attribute6;
2570 		END IF;
2571 
2572 		IF p_header_rec.tp_attribute7(i) IS NULL
2573 		  OR p_header_rec.tp_attribute7(i) = FND_API.G_MISS_CHAR THEN
2574 		   p_header_rec.tp_attribute7(i) := oe_validate.g_attribute7;
2575 		END IF;
2576 
2577 		IF p_header_rec.tp_attribute8(i) IS NULL
2578 		  OR p_header_rec.tp_attribute8(i) = FND_API.G_MISS_CHAR THEN
2579 		   p_header_rec.tp_attribute8(i) := oe_validate.g_attribute8;
2580 		END IF;
2581 
2582 		IF p_header_rec.tp_attribute9(i) IS NULL
2583 		  OR p_header_rec.tp_attribute9(i) = FND_API.G_MISS_CHAR THEN
2584 		   p_header_rec.tp_attribute9(i) := oe_validate.g_attribute9;
2585 		END IF;
2586 
2587 		IF p_header_rec.tp_attribute10(i) IS NULL
2588 		  OR p_header_rec.tp_attribute10(i) = FND_API.G_MISS_CHAR THEN
2589 		   p_header_rec.tp_attribute10(i) := Oe_validate.G_attribute10;
2590 		End IF;
2591 
2592 		IF p_header_rec.tp_attribute11(i) IS NULL
2593 		  OR p_header_rec.tp_attribute11(i) = FND_API.G_MISS_CHAR THEN
2594 		   p_header_rec.tp_attribute11(i) := oe_validate.g_attribute11;
2595 		END IF;
2596 
2597 		IF p_header_rec.tp_attribute12(i) IS NULL
2598 		  OR p_header_rec.tp_attribute12(i) = FND_API.G_MISS_CHAR THEN
2599 		   p_header_rec.tp_attribute12(i) := oe_validate.g_attribute12;
2600 		END IF;
2601 
2602 		IF p_header_rec.tp_attribute13(i) IS NULL
2603 		  OR p_header_rec.tp_attribute13(i) = FND_API.G_MISS_CHAR THEN
2604 		   p_header_rec.tp_attribute13(i) := oe_validate.g_attribute13;
2605 		END IF;
2606 
2607 		IF p_header_rec.tp_attribute14(i) IS NULL
2608 		  OR p_header_rec.tp_attribute14(i) = FND_API.G_MISS_CHAR THEN
2609 		   p_header_rec.tp_attribute14(i) := oe_validate.g_attribute14;
2610 		END IF;
2611 
2612 		IF p_header_rec.tp_attribute15(i) IS NULL
2613 		  OR p_header_rec.tp_attribute15(i) = FND_API.G_MISS_CHAR THEN
2614 		   p_header_rec.tp_attribute15(i) := oe_validate.g_attribute15;
2615 		END IF;
2616 
2617              END IF;
2618       END IF;
2619 
2620       END IF; -- End if p_validate_desc_flex is 'Y'
2621 
2622       -- END: Desc Flex Validations
2623 
2624 
2625       ---------------------------------------------------------------
2626       -- Add a 100% default sales credit record for this salesperson
2627       ---------------------------------------------------------------
2628 
2629       IF p_header_rec.salesrep_id(i) IS NOT NULL THEN
2630 
2631           x_header_scredit_rec.header_id.extend(1);
2632           x_header_scredit_rec.salesrep_id.extend(1);
2633           x_header_scredit_rec.sales_credit_type_id.extend(1);
2634 
2635           l_c_index := OE_Bulk_Cache.Load_Salesrep
2636                           (p_key => p_header_rec.salesrep_id(i));
2637 
2638           x_header_scredit_rec.header_id(l_scredit_index)
2639                   := p_header_rec.header_id(i);
2640           x_header_scredit_rec.salesrep_id(l_scredit_index)
2641                   := p_header_rec.salesrep_id(i);
2642           x_header_scredit_rec.sales_credit_type_id(l_scredit_index)
2643                   := OE_Bulk_Cache.G_SALESREP_TBL(l_c_index).sales_credit_type_id;
2644 
2645           l_scredit_index := l_scredit_index + 1;
2646 
2647       END IF;
2648 
2649       ---------------------------------------------------------------
2650       -- Load EDI attributes if sold to customer is an EDI customer
2651       ---------------------------------------------------------------
2652 
2653       IF OE_GLOBALS.G_EC_INSTALLED = 'Y'
2654          AND p_header_rec.booked_flag(i) = 'Y'
2655          AND nvl(p_header_rec.lock_control(i),0) <> -99
2656       THEN
2657 
2658          l_c_index := OE_Bulk_Cache.Load_Sold_To
2659                         (p_key => p_header_rec.sold_to_org_id(i)
2660                         ,p_edi_attributes => 'Y'
2661                         );
2662 
2663          IF OE_Bulk_Cache.G_SOLD_TO_TBL(l_c_index).tp_setup THEN
2664 
2665             OE_Bulk_Order_Pvt.G_ACK_NEEDED := 'Y';
2666             p_header_rec.first_ack_code(i) := 'X';
2667 
2668             -- Cache EDI attributes as these will be used in creating
2669             -- the acknowledgment records later.
2670 
2671             IF p_header_rec.invoice_to_org_id(i) IS NOT NULL THEN
2672                l_c_index := OE_Bulk_Cache.Load_Invoice_To
2673                         (p_key => p_header_rec.invoice_to_org_id(i)
2674                         ,p_edi_attributes => 'Y'
2675                         );
2676             END IF;
2677 
2678             IF p_header_rec.ship_to_org_id(i) IS NOT NULL THEN
2679                l_c_index := OE_Bulk_Cache.Load_Ship_To
2680                         (p_key => p_header_rec.ship_to_org_id(i)
2681                         ,p_edi_attributes => 'Y'
2682                         );
2683             END IF;
2684 
2685             IF p_header_rec.ship_from_org_id(i) IS NOT NULL THEN
2686                l_c_index := OE_Bulk_Cache.Load_Ship_From
2687                         (p_key => p_header_rec.ship_from_org_id(i)
2688                         );
2689             END IF;
2690 
2691 	    -- added for end customer changes(bug 5054618)
2692 
2693 	    IF p_header_rec.end_customer_id(i) IS NOT NULL THEN
2694                l_c_index := OE_Bulk_Cache.Load_End_customer
2695                         (p_key => p_header_rec.end_customer_id(i)
2696                         ,p_edi_attributes => 'Y'
2697                         );
2698             END IF;
2699 
2700 	    IF p_header_rec.End_customer_site_use_id(i) IS NOT NULL THEN
2701                l_c_index := OE_Bulk_Cache.Load_end_customer_site
2702                         (p_key => p_header_rec.end_customer_site_use_id(i)
2703                         ,p_edi_attributes => 'Y'
2704                         );
2705             END IF;
2706 
2707          END IF;
2708 
2709       END IF;
2710 
2711       ---------------------------------------------------------------
2712       -- Evaluate Holds for header
2713       ---------------------------------------------------------------
2714 
2715       IF p_header_rec.lock_control(i) <> -99 THEN
2716 
2717             -- Check Header Level Holds
2718             /*ER#7479609 start
2719             OE_Bulk_Holds_PVT.Evaluate_Holds(
2720                p_header_id  => p_header_rec.header_id(i),
2721                p_line_id => NULL,
2722                p_line_number => NULL,
2723                p_sold_to_org_id => p_header_rec.sold_to_org_id(i),
2724                p_inventory_item_id => NULL,
2725                p_ship_from_org_id => NULL,
2726                p_invoice_to_org_id => NULL,
2727                p_ship_to_org_id => NULL,
2728                p_top_model_line_id => NULL,
2729                p_ship_set_name  => NULL,
2730                p_arrival_set_name => NULL,
2731                p_on_generic_hold  => l_on_generic_hold,
2732                p_on_booking_hold  => l_on_booking_hold,
2733                p_on_scheduling_hold => l_on_scheduling_hold
2734                );
2735                ER#7479609 end*/
2736 
2737             --ER#7479609 start
2738             l_header_rec_for_hold.header_id := p_header_rec.header_id(i);
2739             l_header_rec_for_hold.sold_to_org_id := p_header_rec.sold_to_org_id(i);
2740             l_header_rec_for_hold.sales_channel_code := p_header_rec.sales_channel_code(i);
2741             l_header_rec_for_hold.payment_type_code := p_header_rec.payment_type_code(i);
2742             l_header_rec_for_hold.order_type_id := p_header_rec.order_type_id(i);
2743             l_header_rec_for_hold.transactional_curr_code := p_header_rec.transactional_curr_code(i);
2744 	    l_header_rec_for_hold.invoice_to_org_id := p_header_rec.invoice_to_org_id(i); --ER# 3667551
2745 
2746              OE_Bulk_Holds_PVT.Evaluate_Holds(
2747 		p_header_rec  => l_header_rec_for_hold,
2748 		p_line_rec    => NULL,
2749 		p_on_generic_hold  => l_on_generic_hold,
2750 		p_on_booking_hold  => l_on_booking_hold,
2751 		p_on_scheduling_hold => l_on_scheduling_hold
2752 		);
2753             --ER#7479609 end
2754 
2755        END IF;
2756 
2757        ---------------------------------------------------------------
2758        -- BOOKING VALIDATIONS
2759        ---------------------------------------------------------------
2760        IF p_header_rec.booked_flag(i) = 'Y' THEN
2761 
2762           -- Do not book the Order if the header is on HOLD.
2763 
2764           IF l_on_generic_hold OR l_on_booking_hold THEN
2765 
2766               FND_MESSAGE.SET_NAME('ONT','OE_BOOKING_HOLD_EXISTS');
2767               oe_bulk_msg_pub.ADD;
2768               p_header_rec.booked_flag(i) := 'N';
2769           --PIB
2770               IF OE_CODE_CONTROL.CODE_RELEASE_LEVEL >= '110510' Then
2771                  p_header_rec.event_code(i) := 'BATCH';
2772                  If l_debug_level > 0 Then
2773                     oe_debug_pub.add('event code1 : '||p_header_rec.event_code(i));
2774                  End If;
2775               END IF;
2776           --PIB
2777 
2778           ELSE
2779 
2780             Check_Book_Reqd_Attributes(p_header_rec => p_header_rec
2781                                      ,p_index   => i
2782                                      ,x_return_status => l_return_status);
2783 
2784             IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
2785                p_header_rec.booked_flag(i) := 'N';
2786           --PIB
2787               IF OE_CODE_CONTROL.CODE_RELEASE_LEVEL >= '110510' Then
2788                  p_header_rec.event_code(i) := 'BATCH';
2789                  If l_debug_level > 0 Then
2790                     oe_debug_pub.add('event code2 : '||p_header_rec.event_code(i));
2791                  End If;
2792               END IF;
2793           --PIB
2794             END IF;
2795 
2796           END IF;
2797 
2798        END IF;
2799 
2800          -- Update Global table with pointers to Erroneous record
2801 
2802          IF (p_header_rec.lock_control(i) IN (-99, -98, -97) ) THEN
2803 
2804             --ER 9060917
2805             If NVL (Fnd_Profile.Value('ONT_HVOP_DROP_INVALID_LINES'), 'N')='Y' then
2806 
2807                UPDATE oe_headers_iface_all
2808                SET error_flag='Y'
2809                WHERE order_source_id=p_header_rec.order_source_id(i)
2810                and orig_sys_document_ref=p_header_rec.orig_sys_document_ref(i);
2811 
2812             end if;
2813             --End of ER 9060917
2814 
2815              error_count := error_count + 1;
2816 
2817              OE_Bulk_Order_Pvt.G_ERROR_REC.order_source_id.EXTEND(1);
2818              OE_Bulk_Order_Pvt.G_ERROR_REC.order_source_id(error_count)
2819                         := p_header_rec.order_source_id(i);
2820 
2821              OE_Bulk_Order_Pvt.G_ERROR_REC.orig_sys_document_ref.EXTEND(1);
2822              OE_Bulk_Order_Pvt.G_ERROR_REC.orig_sys_document_ref(error_count)
2823                         := p_header_rec.orig_sys_document_ref(i);
2824 
2825              OE_Bulk_Order_Pvt.G_ERROR_REC.header_id.EXTEND(1);
2826              OE_Bulk_Order_Pvt.G_ERROR_REC.header_id(error_count)
2827                         := p_header_rec.header_id(i);
2828              OE_Bulk_Order_PVT.G_ERROR_REC.ineligible_for_hvop.EXTEND(1);
2829              OE_Bulk_Order_PVT.G_ERROR_REC.skip_batch.EXTEND(1);
2830 
2831              IF p_header_rec.lock_control(i) = -98 THEN
2832                   OE_Bulk_Order_PVT.G_ERROR_REC.ineligible_for_hvop(error_count):=
2833 'Y';
2834              ELSIF p_header_rec.lock_control(i) = -97 THEN
2835                  OE_Bulk_Order_PVT.G_ERROR_REC.skip_batch(error_count):= 'Y';
2836              END IF;
2837          END IF;
2838 
2839    END LOOP;
2840 
2841 
2842 EXCEPTION
2843     WHEN OTHERS THEN
2844     IF oe_bulk_msg_pub.check_msg_level(oe_bulk_msg_pub.G_MSG_LVL_UNEXP_ERROR)
2845     THEN
2846        oe_bulk_msg_pub.add_exc_msg
2847        (   G_PKG_NAME
2848         ,   'Entity'
2849         );
2850     END IF;
2851     RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
2852 END Entity;
2853 
2854 
2855 END OE_BULK_PROCESS_HEADER;