DBA Data[Home] [Help]

PACKAGE BODY: APPS.OE_BULK_HOLDS_PVT

Source


1 PACKAGE BODY OE_Bulk_Holds_PVT AS
2 /* $Header: OEBVHLDB.pls 120.12 2012/02/02 06:25:18 sujithku ship $ */
3 
4 G_PKG_NAME         CONSTANT     VARCHAR2(30):='OE_Bulk_Holds_PVT';
5 
6 
10  > 1. Customer - Header Level
7 /****************************************************************************
8  Valid Entity Combination
9  ^^^^^^^^^^^^^^^^^^^^^^^^
11  > 2. item  - Line Level
12  > 3. ship_to  - Line Level
13  > 4. bill to  - Line Level
14  > 5. warehouse  - Line Level
15  > 6. Item - Customer  - Line Level
16  > 7. Item - Customer Ship to Site  - Line Level
17  > 8. Item - Customer Bill to Site  - Line Level
18  > 9. Item - Warehouse  - Line Level
19  > 10. Warehouse - Customer  - Line Level
20  > 11. Warehouse - Customer Ship to Site  - Line Level
21  > 12. Warehouse - Customer Bill to Site  - Line Level
22 
23 ***************************************************************************/
24 PROCEDURE Extend_Holds_Tbl;
25 
26 PROCEDURE Extend_Hold_Source_Rec;
27 
28 --ER# 3667551  new Function added to return Customer Account ID for the Site ID passed in
29 FUNCTION CustAcctID_func
30   (
31     p_in_site_id IN NUMBER,
32     p_out_IDfound OUT NOCOPY VARCHAR2)
33   RETURN NUMBER IS
34   l_Custid NUMBER := 0;
35 BEGIN
36   p_out_IDfound:='N';
37   SELECT 'Y',
38     cust.cust_account_id
39   INTO p_out_IDfound ,
40     l_Custid
41   FROM HZ_CUST_ACCOUNTS_ALL cust ,
42     HZ_CUST_ACCT_SITES_ALL site,
43     hz_cust_site_uses_all siteuse
44   WHERE siteuse.site_use_id  = p_in_site_id
45   AND site.cust_acct_site_id = siteuse.cust_acct_site_id
46   AND siteuse.site_use_code  ='BILL_TO'
47   AND siteuse.status         = 'A'
48   AND cust.cust_account_id   =site.cust_account_id ;
49 
50   oe_debug_pub.add(' CustAcctID_func -l_Custid- '||l_Custid);
51   RETURN(l_Custid);
52 EXCEPTION
53 WHEN NO_DATA_FOUNd THEN
54   oe_debug_pub.add(' CustAcctID_func, No Data Found, p_in_site_id= '||p_in_site_id);
55   p_out_IDfound:='N';
56   RETURN 0;
57 WHEN OTHERS THEN
58   oe_debug_pub.add(' CustAcctID_func, When Others Exception, p_in_site_id='||p_in_site_id);
59   p_out_IDfound:='N';
60   RETURN 0;
61 END;
62 --ER# 3667551 END
63 
64 PROCEDURE Initialize_Holds_Tbl IS
65 BEGIN
66 
67   -- Clear the Globals.
68   g_hold_header_id.DELETE;
69   g_hold_line_id.DELETE;
70   g_hold_Source_Id.DELETE;
71   g_hold_ship_set.DELETE;
72   g_hold_arrival_set.DELETE;
73   g_hold_top_model_line_id.DELETE;
74   g_hold_activity_name.DELETE;
75 
76   g_hold_source_rec.HOLD_ID.DELETE;
77   g_hold_source_rec.HOLD_SOURCE_ID.DELETE;
78   g_hold_source_rec.HOLD_ENTITY_CODE.DELETE;
79   g_hold_source_rec.HOLD_ENTITY_ID.DELETE;
80 
81 EXCEPTION
82   WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
83     RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
84   WHEN OTHERS THEN
85     OE_BULK_MSG_PUB.Add_Exc_Msg
86        (   G_PKG_NAME
87         ,   'Initialize_Holds_Tbl'
88         );
89     RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
90 END Initialize_Holds_Tbl;
91 
92 PROCEDURE Load_Hold_Sources
93 IS
94 CURSOR C_Hold_Sources IS
95     SELECT HS.HOLD_SOURCE_ID,
96            HS.HOLD_ENTITY_ID,
97            HS.HOLD_ENTITY_CODE,
98            HS.HOLD_ENTITY_ID2,
99            HS.HOLD_ENTITY_CODE2,
100            HLD.ACTIVITY_NAME,
101 	   HS.HOLD_ID --ER# 3667551
102      FROM  OE_HOLD_SOURCES HS,
103            OE_HOLD_DEFINITIONS HLD
104      WHERE --ER#7479609 HS.HOLD_ENTITY_CODE IN ('C','I','B','W','S')
105            HS.HOLD_ENTITY_CODE IN ('C','I','B','D','W','S','PL','OT','CD','SC','P','SM','EC','IC')		--ER#7479609 --ER# 12571983 added ,'EC' --ER# 13331078 added 'IC'
106        AND ROUND( NVL(HS.HOLD_UNTIL_DATE, SYSDATE ) ) >=
107                                      ROUND( SYSDATE )
108        AND HS.RELEASED_FLAG = 'N'
109        AND HLD.HOLD_ID = HS.HOLD_ID
110        AND SYSDATE
111                BETWEEN NVL( HLD.START_DATE_ACTIVE, SYSDATE )
112                    AND NVL( HLD.END_DATE_ACTIVE, SYSDATE )
113      ORDER BY HS.HOLD_ENTITY_CODE,HS.HOLD_ENTITY_CODE2,HS.HOLD_ENTITY_ID,
114               HS.HOLD_ENTITY_ID2;
115 
116   T_HOLD_SOURCE_ID     OE_WSH_BULK_GRP.T_NUM := OE_WSH_BULK_GRP.T_NUM();
117   --ER#7479609 T_HOLD_ENTITY_ID     OE_WSH_BULK_GRP.T_NUM;
118   T_HOLD_ENTITY_ID     OE_WSH_BULK_GRP.T_V50 := OE_WSH_BULK_GRP.T_V50();  --ER#7479609
119   T_HOLD_ENTITY_CODE   OE_WSH_BULK_GRP.T_V30 := OE_WSH_BULK_GRP.T_V30();
120   --ER#7479609 T_HOLD_ENTITY_ID2    OE_WSH_BULK_GRP.T_NUM;
121   T_HOLD_ENTITY_ID2    OE_WSH_BULK_GRP.T_V50 := OE_WSH_BULK_GRP.T_V50();  --ER#7479609
122   T_HOLD_ENTITY_CODE2  OE_WSH_BULK_GRP.T_V30 := OE_WSH_BULK_GRP.T_V30();
123   T_HOLD_ACTIVITY_NAME OE_WSH_BULK_GRP.T_V30 := OE_WSH_BULK_GRP.T_V30();
124   T_HOLD_ID     OE_WSH_BULK_GRP.T_V50 := OE_WSH_BULK_GRP.T_V50();--ER# 3667551
125 
126   l_count   BINARY_INTEGER;
127 BEGIN
128 
129   oe_debug_pub.add('Entering OE_Bulk_Holds_PVT.Load_Hold_Sources');  --ER#7479609 debug
130   -- Clear the Globals.
131   g_hold_header_id.DELETE;
132   g_hold_line_id.DELETE;
133   g_hold_Source_Id.DELETE;
134   g_hold_ship_set.DELETE;
135   g_hold_arrival_set.DELETE;
136   g_hold_top_model_line_id.DELETE;
137   g_hold_activity_name.DELETE;
138 
139   Customer_Pointer.DELETE;
140   Item_Pointer.DELETE;
141   ship_to_Pointer.DELETE;
142   bill_to_Pointer.DELETE;
143   Warehouse_Pointer.DELETE;
144   --ER#7479609 start
145   PriceList_Pointer.DELETE;
146   OrderType_Pointer.DELETE;
147   CreationDate_Pointer.DELETE;
148   SalesChannel_Pointer.DELETE;
149   PaymentType_Pointer.DELETE;
150   ShipMethod_Pointer.DELETE;
151   deliver_to_Pointer.DELETE;
152   --ER#7479609 end
153 
154   Item_Customer_Pointer.DELETE;
155   Item_shipto_Pointer.DELETE;
156   Item_Billto_Pointer.DELETE;
157   Item_Warehouse_Pointer.DELETE;
158   --ER#7479609 start
162   --ER#7479609 Item_Project_Pointer.DELETE;
159   Item_ShipMethod_Pointer.DELETE;
160   Item_Deliverto_Pointer.DELETE;
161   Item_PriceList_Pointer.DELETE;
163   Item_SourceType_Pointer.DELETE;
164   Item_LineType_Pointer.DELETE;
165   --ER#7479609 end
166 
167   Warehouse_Customer_Pointer.DELETE;
168   Warehouse_shipto_Pointer.DELETE;
169   Warehouse_Billto_Pointer.DELETE;
170   --ER#7479609 start
171   Warehouse_LineType_Pointer.DELETE;
172   Warehouse_ShipMethod_Pointer.DELETE;
173   Warehouse_Deliverto_Pointer.DELETE;
174   Warehouse_SourceType_Pointer.DELETE;
175   --ER#7479609 end
176 
177   --ER#7479609 start
178   Cust_SourceType_Pointer.DELETE;
179   Cust_Billto_Pointer.DELETE;
180   Cust_Shipto_Pointer.DELETE;
181   Cust_Deliverto_Pointer.DELETE;
182   Cust_PriceList_Pointer.DELETE;
183   Cust_LineType_Pointer.DELETE;
184   Cust_PayTerm_Pointer.DELETE;
185   Cust_OrderType_Pointer.DELETE;
186   Cust_PaymentType_Pointer.DELETE;
187   Cust_Curr_Pointer.DELETE;
188   Cust_SalesChannel_Pointer.DELETE;
189 
190 
191   --ER#7479609 Project_Task_Pointer.DELETE;
192 
193   PriceList_Curr_Pointer.DELETE;
194 
195   OrderType_Curr_Pointer.DELETE;
196   OrderType_LineType_Pointer.DELETE;
197 
198   CreDate_CreBy_Pointer.DELETE;
199   --ER#7479609 end
200 
201   Customer_Hold.DELETE;
202   Item_Hold.DELETE;
203   ship_to_Hold.DELETE;
204   bill_to_Hold.DELETE;
205   Warehouse_Hold.DELETE;
206   --ER#7479609 start
207   PriceList_Hold.DELETE;
208   OrderType_Hold.DELETE;
209   CreationDate_Hold.DELETE;
210   SalesChannel_Hold.DELETE;
211   PaymentType_Hold.DELETE;
212   ShipMethod_Hold.DELETE;
213   deliver_to_Hold.DELETE;
214   --ER#7479609 end
215 
216   Item_Customer_Hold.DELETE;
217   Item_shipto_Hold.DELETE;
218   Item_Billto_Hold.DELETE;
219   Item_Warehouse_Hold.DELETE;
220   --ER#7479609 start
221   Item_ShipMethod_Hold.DELETE;
222   Item_Deliverto_Hold.DELETE;
223   Item_PriceList_Hold.DELETE;
224   Item_SourceType_Hold.DELETE;
225   Item_LineType_Hold.DELETE;
226   --ER#7479609 end
227 
228   Warehouse_Customer_Hold.DELETE;
229   Warehouse_shipto_Hold.DELETE;
230   Warehouse_Billto_Hold.DELETE;
231   --ER#7479609 start
232   Warehouse_LineType_Hold.DELETE;
233   Warehouse_ShipMethod_Hold.DELETE;
234   Warehouse_Deliverto_Hold.DELETE;
235   Warehouse_SourceType_Hold.DELETE;
236   --ER#7479609 end
237 
238 --ER#7479609 start
239   Cust_SourceType_Hold.DELETE;
240   Cust_Billto_Hold.DELETE;
241   Cust_Shipto_Hold.DELETE;
242   Cust_Deliverto_Hold.DELETE;
243   Cust_PriceList_Hold.DELETE;
244   Cust_LineType_Hold.DELETE;
245   Cust_PayTerm_Hold.DELETE;
246   Cust_OrderType_Hold.DELETE;
247   Cust_PaymentType_Hold.DELETE;
248   Cust_Curr_Hold.DELETE;
249   Cust_SalesChannel_Hold.DELETE;
250 
251 
252 
253   PriceList_Curr_Hold.DELETE;
254 
255   OrderType_Curr_Hold.DELETE;
256   OrderType_LineType_Hold.DELETE;
257 
258   CreDate_CreBy_Hold.DELETE;
259 --ER#7479609 end
260 
261 --ER# 12571983 start added for 'EC'
262 
263 EndCust_Pointer.Delete;
264 Item_EndCust_Pointer.Delete;
265 Warehouse_EndCust_Pointer.Delete;
266 EndCust_SourceType_Pointer.Delete;
267 EndCust_Billto_Pointer.Delete;
268 EndCust_Shipto_Pointer.Delete;
269 EndCust_Deliverto_Pointer.Delete;
270 EndCust_PriceList_Pointer.Delete;
271 EndCust_LineType_Pointer.Delete;
272 EndCust_PayTerm_Pointer.Delete;
273 EndCust_OrderType_Pointer.Delete;
274 EndCust_PaymentType_Pointer.Delete;
275 EndCust_Curr_Pointer.Delete;
276 EndCust_SalesChannel_Pointer.Delete;
277 EndCust_EndCustLoc_Pointer.Delete;
278 
279 EndCust_Hold.Delete;
280 Item_EndCust_Hold.Delete;
281 Warehouse_EndCust_Hold.Delete;
282 EndCust_SourceType_Hold.Delete;
283 EndCust_Billto_Hold.Delete;
284 EndCust_Shipto_Hold.Delete;
285 EndCust_Deliverto_Hold.Delete;
286 EndCust_PriceList_Hold.Delete;
287 EndCust_LineType_Hold.Delete;
288 EndCust_PayTerm_Hold.Delete;
289 EndCust_OrderType_Hold.Delete;
290 EndCust_PaymentType_Hold.Delete;
291 EndCust_Curr_Hold.Delete;
292 EndCust_SalesChannel_Hold.Delete;
293 EndCust_EndCustLoc_Hold.Delete;
294 
295 --ER# 12571983 end added for 'EC'
296 
297  oe_debug_pub.add('Before opening C_Hold_Sources');  --ER#7479609 debug
298   -- Load the Hold Sources into Globals.
299   OPEN C_Hold_Sources;
300   FETCH C_Hold_Sources BULK COLLECT INTO
301                        T_HOLD_SOURCE_ID,
302                        T_HOLD_ENTITY_ID,
303                        T_HOLD_ENTITY_CODE,
304                        T_HOLD_ENTITY_ID2,
305                        T_HOLD_ENTITY_CODE2,
306                        T_HOLD_ACTIVITY_NAME,
307 		       T_HOLD_ID;--ER# 3667551
308   CLOSE C_Hold_Sources;
309   oe_debug_pub.add('After Closing C_Hold_Sources:'||T_HOLD_SOURCE_ID.COUNT);  --ER#7479609 debug
310 
311   FOR i IN 1..T_HOLD_SOURCE_ID.COUNT LOOP
312 
313     -- Load Customer Hold Source
314     IF T_HOLD_ENTITY_CODE(i) = 'C' AND T_HOLD_ENTITY_ID2(i) IS NULL
315     THEN
316       l_count := Customer_Hold.COUNT;
317       Customer_Hold(l_count+1).Entity_Id1 := T_HOLD_ENTITY_ID(i);
318       Customer_Hold(l_count+1).Entity_Id2 := NULL;
319       Customer_Hold(l_count+1).Hold_Source_Id := T_HOLD_SOURCE_ID(i);
320       Customer_Hold(l_count+1).activity_name := T_HOLD_ACTIVITY_NAME(i);
321 	  Customer_Hold(l_count+1).HOLD_ID:=T_HOLD_ID(i);--ER# 3667551
322 
323       IF NOT Customer_Pointer.EXISTS(T_HOLD_ENTITY_ID(i)) THEN
324         Customer_Pointer(T_HOLD_ENTITY_ID(i)) := l_count+1;
328 
325       END IF;
326 
327     END IF;
329 	--ER# 12571983 start
330 	IF T_HOLD_ENTITY_CODE(i) = 'EC' AND T_HOLD_ENTITY_CODE2(i) IS NULL
331     THEN
332       l_count := EndCust_Hold.COUNT;
333       EndCust_Hold(l_count+1).Entity_Id1 := T_HOLD_ENTITY_ID(i);
334       EndCust_Hold(l_count+1).Entity_Id2 := NULL;
335       EndCust_Hold(l_count+1).Hold_Source_Id := T_HOLD_SOURCE_ID(i);
336       EndCust_Hold(l_count+1).activity_name := T_HOLD_ACTIVITY_NAME(i);
337 
338       IF NOT EndCust_Pointer.EXISTS(T_HOLD_ENTITY_ID(i)) THEN
339         EndCust_Pointer(T_HOLD_ENTITY_ID(i)) := l_count+1;
340       END IF;
341 
342     END IF;
343 	--ER# 12571983 end
344 
345     -- Load Item Hold Source
346     IF T_HOLD_ENTITY_CODE(i) = 'I' AND T_HOLD_ENTITY_ID2(i) IS NULL
347     THEN
348       l_count := Item_Hold.COUNT;
349       Item_Hold(l_count+1).Entity_Id1 := T_HOLD_ENTITY_ID(i);
350       Item_Hold(l_count+1).Entity_Id2 := NULL;
351       Item_Hold(l_count+1).Hold_Source_Id := T_HOLD_SOURCE_ID(i);
352       Item_Hold(l_count+1).activity_name := T_HOLD_ACTIVITY_NAME(i);
353 
354       IF NOT Item_Pointer.EXISTS(T_HOLD_ENTITY_ID(i)) THEN
355         Item_Pointer(T_HOLD_ENTITY_ID(i)) := l_count+1;
356       END IF;
357     END IF;
358 
359     -- Load Ship_To Hold Source
360     IF T_HOLD_ENTITY_CODE(i) = 'S' AND T_HOLD_ENTITY_ID2(i) IS NULL
361     THEN
362       l_count := Ship_to_Hold.COUNT;
363       Ship_to_Hold(l_count+1).Entity_Id1 := T_HOLD_ENTITY_ID(i);
364       Ship_to_Hold(l_count+1).Entity_Id2 := NULL;
365       Ship_to_Hold(l_count+1).Hold_Source_Id := T_HOLD_SOURCE_ID(i);
366       Ship_to_Hold(l_count+1).activity_name := T_HOLD_ACTIVITY_NAME(i);
367 
368       IF NOT Ship_to_Pointer.EXISTS(T_HOLD_ENTITY_ID(i)) THEN
369         Ship_to_Pointer(T_HOLD_ENTITY_ID(i)) := l_count+1;
370       END IF;
371     END IF;
372 
373     -- Load Bill_To Hold Source
374     IF T_HOLD_ENTITY_CODE(i) = 'B' AND T_HOLD_ENTITY_ID2(i) IS NULL
375     THEN
376       l_count := Bill_to_Hold.COUNT;
377       Bill_to_Hold(l_count+1).Entity_Id1 := T_HOLD_ENTITY_ID(i);
378       Bill_to_Hold(l_count+1).Entity_Id2 := NULL;
379       Bill_to_Hold(l_count+1).Hold_Source_Id := T_HOLD_SOURCE_ID(i);
380       Bill_to_Hold(l_count+1).activity_name := T_HOLD_ACTIVITY_NAME(i);
381 
382       IF NOT Bill_to_Pointer.EXISTS(T_HOLD_ENTITY_ID(i)) THEN
383         Bill_to_Pointer(T_HOLD_ENTITY_ID(i)) := l_count+1;
384       END IF;
385     END IF;
386 
387     -- Load Warehouse Hold Source
388     IF T_HOLD_ENTITY_CODE(i) = 'W' AND T_HOLD_ENTITY_ID2(i) IS NULL
389     THEN
390       l_count := Warehouse_Hold.COUNT;
391       Warehouse_Hold(l_count+1).Entity_Id1 := T_HOLD_ENTITY_ID(i);
392       Warehouse_Hold(l_count+1).Entity_Id2 := NULL;
393       Warehouse_Hold(l_count+1).Hold_Source_Id := T_HOLD_SOURCE_ID(i);
394       Warehouse_Hold(l_count+1).activity_name := T_HOLD_ACTIVITY_NAME(i);
395 
396       IF NOT Warehouse_Pointer.EXISTS(T_HOLD_ENTITY_ID(i)) THEN
397         Warehouse_Pointer(T_HOLD_ENTITY_ID(i)) := l_count+1;
398       END IF;
399     END IF;
400 
401 
402 
403 --ER#7479609 start
404 
405     IF T_HOLD_ENTITY_CODE(i) = 'PL' AND T_HOLD_ENTITY_ID2(i) IS NULL
406     THEN
407       l_count := PriceList_Hold.COUNT;
408       PriceList_Hold(l_count+1).Entity_Id1 := T_HOLD_ENTITY_ID(i);
409       PriceList_Hold(l_count+1).Entity_Id2 := NULL;
410       PriceList_Hold(l_count+1).Hold_Source_Id := T_HOLD_SOURCE_ID(i);
411       PriceList_Hold(l_count+1).activity_name := T_HOLD_ACTIVITY_NAME(i);
412 
413       IF NOT PriceList_Pointer.EXISTS(T_HOLD_ENTITY_ID(i)) THEN
414         PriceList_Pointer(T_HOLD_ENTITY_ID(i)) := l_count+1;
415       END IF;
416     END IF;
417 
418     IF T_HOLD_ENTITY_CODE(i) = 'OT' AND T_HOLD_ENTITY_ID2(i) IS NULL
419     THEN
420       l_count := OrderType_Hold.COUNT;
421       OrderType_Hold(l_count+1).Entity_Id1 := T_HOLD_ENTITY_ID(i);
422       OrderType_Hold(l_count+1).Entity_Id2 := NULL;
423       OrderType_Hold(l_count+1).Hold_Source_Id := T_HOLD_SOURCE_ID(i);
424       OrderType_Hold(l_count+1).activity_name := T_HOLD_ACTIVITY_NAME(i);
425 
426       IF NOT OrderType_Pointer.EXISTS(T_HOLD_ENTITY_ID(i)) THEN
427         OrderType_Pointer(T_HOLD_ENTITY_ID(i)) := l_count+1;
428       END IF;
429     END IF;
430 
431     IF T_HOLD_ENTITY_CODE(i) = 'CD' AND T_HOLD_ENTITY_ID2(i) IS NULL
432     THEN
433       l_count := CreationDate_Hold.COUNT;
434       CreationDate_Hold(l_count+1).Entity_Id1 := T_HOLD_ENTITY_ID(i);
435       CreationDate_Hold(l_count+1).Entity_Id2 := NULL;
436       CreationDate_Hold(l_count+1).Hold_Source_Id := T_HOLD_SOURCE_ID(i);
437       CreationDate_Hold(l_count+1).activity_name := T_HOLD_ACTIVITY_NAME(i);
438 
439       IF NOT CreationDate_Pointer.EXISTS(T_HOLD_ENTITY_ID(i)) THEN
440         CreationDate_Pointer(T_HOLD_ENTITY_ID(i)) := l_count+1;
441       END IF;
442     END IF;
443 
444     IF T_HOLD_ENTITY_CODE(i) = 'SC' AND T_HOLD_ENTITY_ID2(i) IS NULL
445     THEN
446       l_count := SalesChannel_Hold.COUNT;
447       SalesChannel_Hold(l_count+1).Entity_Id1 := T_HOLD_ENTITY_ID(i);
448       SalesChannel_Hold(l_count+1).Entity_Id2 := NULL;
449       SalesChannel_Hold(l_count+1).Hold_Source_Id := T_HOLD_SOURCE_ID(i);
450       SalesChannel_Hold(l_count+1).activity_name := T_HOLD_ACTIVITY_NAME(i);
451 
452       IF NOT SalesChannel_Pointer.EXISTS(T_HOLD_ENTITY_ID(i)) THEN
453         SalesChannel_Pointer(T_HOLD_ENTITY_ID(i)) := l_count+1;
454       END IF;
455     END IF;
456 
457     oe_debug_pub.add('Before Loading payment type');  --ER#7479609 debug
458     IF T_HOLD_ENTITY_CODE(i) = 'P' AND T_HOLD_ENTITY_ID2(i) IS NULL
459     THEN
460       l_count := PaymentType_Hold.COUNT;
464       PaymentType_Hold(l_count+1).activity_name := T_HOLD_ACTIVITY_NAME(i);
461       PaymentType_Hold(l_count+1).Entity_Id1 := T_HOLD_ENTITY_ID(i);
462       PaymentType_Hold(l_count+1).Entity_Id2 := NULL;
463       PaymentType_Hold(l_count+1).Hold_Source_Id := T_HOLD_SOURCE_ID(i);
465 
466       IF NOT PaymentType_Pointer.EXISTS(T_HOLD_ENTITY_ID(i)) THEN
467         PaymentType_Pointer(T_HOLD_ENTITY_ID(i)) := l_count+1;
468       END IF;
469 
470     END IF;
471 
472     IF T_HOLD_ENTITY_CODE(i) = 'SM' AND T_HOLD_ENTITY_ID2(i) IS NULL
473     THEN
474       l_count := ShipMethod_Hold.COUNT;
475       ShipMethod_Hold(l_count+1).Entity_Id1 := T_HOLD_ENTITY_ID(i);
476       ShipMethod_Hold(l_count+1).Entity_Id2 := NULL;
477       ShipMethod_Hold(l_count+1).Hold_Source_Id := T_HOLD_SOURCE_ID(i);
478       ShipMethod_Hold(l_count+1).activity_name := T_HOLD_ACTIVITY_NAME(i);
479 
480       IF NOT ShipMethod_Pointer.EXISTS(T_HOLD_ENTITY_ID(i)) THEN
481         ShipMethod_Pointer(T_HOLD_ENTITY_ID(i)) := l_count+1;
482       END IF;
483     END IF;
484 
485     IF T_HOLD_ENTITY_CODE(i) = 'D' AND T_HOLD_ENTITY_ID2(i) IS NULL
486     THEN
487       l_count := deliver_to_Hold.COUNT;
488       deliver_to_Hold(l_count+1).Entity_Id1 := T_HOLD_ENTITY_ID(i);
489       deliver_to_Hold(l_count+1).Entity_Id2 := NULL;
490       deliver_to_Hold(l_count+1).Hold_Source_Id := T_HOLD_SOURCE_ID(i);
491       deliver_to_Hold(l_count+1).activity_name := T_HOLD_ACTIVITY_NAME(i);
492 
493       IF NOT deliver_to_Pointer.EXISTS(T_HOLD_ENTITY_ID(i)) THEN
494         deliver_to_Pointer(T_HOLD_ENTITY_ID(i)) := l_count+1;
495       END IF;
496     END IF;
497 
498 --ER#7479609 end
499 
500 --ER#7479609 start
501 
502     IF T_HOLD_ENTITY_CODE(i) = 'C' AND T_HOLD_ENTITY_ID2(i) = 'ST'
503     THEN
504       l_count := Cust_SourceType_Hold.COUNT;
505       Cust_SourceType_Hold(l_count+1).Entity_Id1 := T_HOLD_ENTITY_ID(i);
506       Cust_SourceType_Hold(l_count+1).Entity_Id2 := T_HOLD_ENTITY_ID2(i);
507       Cust_SourceType_Hold(l_count+1).Hold_Source_Id := T_HOLD_SOURCE_ID(i);
508       Cust_SourceType_Hold(l_count+1).activity_name := T_HOLD_ACTIVITY_NAME(i);
509 
510       IF NOT Cust_SourceType_Pointer.EXISTS(T_HOLD_ENTITY_ID(i)) THEN
511         Cust_SourceType_Pointer(T_HOLD_ENTITY_ID(i)) := l_count+1;
512       END IF;
513 
514     END IF;
515 
516 	--ER# 12571983 start
517 	IF T_HOLD_ENTITY_CODE(i) = 'EC' AND T_HOLD_ENTITY_CODE2(i) = 'ST'
518     THEN
519       l_count := EndCust_SourceType_Hold.COUNT;
520       EndCust_SourceType_Hold(l_count+1).Entity_Id1 := T_HOLD_ENTITY_ID(i);
521       EndCust_SourceType_Hold(l_count+1).Entity_Id2 := T_HOLD_ENTITY_ID2(i);
522       EndCust_SourceType_Hold(l_count+1).Hold_Source_Id := T_HOLD_SOURCE_ID(i);
523       EndCust_SourceType_Hold(l_count+1).activity_name := T_HOLD_ACTIVITY_NAME(i);
524 
525       IF NOT EndCust_SourceType_Pointer.EXISTS(T_HOLD_ENTITY_ID(i)) THEN
526         EndCust_SourceType_Pointer(T_HOLD_ENTITY_ID(i)) := l_count+1;
527       END IF;
528 
529     END IF;
530 	--ER# 12571983 end
531 
532     IF T_HOLD_ENTITY_CODE(i) = 'C' AND T_HOLD_ENTITY_ID2(i) = 'B'
533     THEN
534       l_count := Cust_Billto_Hold.COUNT;
535       Cust_Billto_Hold(l_count+1).Entity_Id1 := T_HOLD_ENTITY_ID(i);
536       Cust_Billto_Hold(l_count+1).Entity_Id2 := T_HOLD_ENTITY_ID2(i);
537       Cust_Billto_Hold(l_count+1).Hold_Source_Id := T_HOLD_SOURCE_ID(i);
538       Cust_Billto_Hold(l_count+1).activity_name := T_HOLD_ACTIVITY_NAME(i);
539 
540       IF NOT Cust_Billto_Pointer.EXISTS(T_HOLD_ENTITY_ID(i)) THEN
541         Cust_Billto_Pointer(T_HOLD_ENTITY_ID(i)) := l_count+1;
542       END IF;
543 
544     END IF;
545 
546 	--ER# 12571983 start
547 	IF T_HOLD_ENTITY_CODE(i) = 'EC' AND T_HOLD_ENTITY_CODE2(i) = 'B'
548     THEN
549       l_count := EndCust_Billto_Hold.COUNT;
550       EndCust_Billto_Hold(l_count+1).Entity_Id1 := T_HOLD_ENTITY_ID(i);
551       EndCust_Billto_Hold(l_count+1).Entity_Id2 := T_HOLD_ENTITY_ID2(i);
552       EndCust_Billto_Hold(l_count+1).Hold_Source_Id := T_HOLD_SOURCE_ID(i);
553       EndCust_Billto_Hold(l_count+1).activity_name := T_HOLD_ACTIVITY_NAME(i);
554 
555       IF NOT EndCust_Billto_Pointer.EXISTS(T_HOLD_ENTITY_ID(i)) THEN
556         EndCust_Billto_Pointer(T_HOLD_ENTITY_ID(i)) := l_count+1;
557       END IF;
558 
559     END IF;
560 	--ER# 12571983 end
561 
562 
563     IF T_HOLD_ENTITY_CODE(i) = 'C' AND T_HOLD_ENTITY_ID2(i) = 'S'
564     THEN
565       l_count := Cust_Shipto_Hold.COUNT;
566       Cust_Shipto_Hold(l_count+1).Entity_Id1 := T_HOLD_ENTITY_ID(i);
567       Cust_Shipto_Hold(l_count+1).Entity_Id2 := T_HOLD_ENTITY_ID2(i);
568       Cust_Shipto_Hold(l_count+1).Hold_Source_Id := T_HOLD_SOURCE_ID(i);
569       Cust_Shipto_Hold(l_count+1).activity_name := T_HOLD_ACTIVITY_NAME(i);
570 
571       IF NOT Cust_Shipto_Pointer.EXISTS(T_HOLD_ENTITY_ID(i)) THEN
572         Cust_Shipto_Pointer(T_HOLD_ENTITY_ID(i)) := l_count+1;
573       END IF;
574 
575     END IF;
576 
577 	--ER# 12571983 start
578 	IF T_HOLD_ENTITY_CODE(i) = 'EC' AND T_HOLD_ENTITY_CODE2(i) = 'S'
579     THEN
580       l_count := EndCust_Shipto_Hold.COUNT;
581       EndCust_Shipto_Hold(l_count+1).Entity_Id1 := T_HOLD_ENTITY_ID(i);
582       EndCust_Shipto_Hold(l_count+1).Entity_Id2 := T_HOLD_ENTITY_ID2(i);
583       EndCust_Shipto_Hold(l_count+1).Hold_Source_Id := T_HOLD_SOURCE_ID(i);
584       EndCust_Shipto_Hold(l_count+1).activity_name := T_HOLD_ACTIVITY_NAME(i);
585 
586       IF NOT EndCust_Shipto_Pointer.EXISTS(T_HOLD_ENTITY_ID(i)) THEN
587         EndCust_Shipto_Pointer(T_HOLD_ENTITY_ID(i)) := l_count+1;
588       END IF;
589 
590     END IF;
591 	--ER# 12571983 end
592 
593 
594     IF T_HOLD_ENTITY_CODE(i) = 'C' AND T_HOLD_ENTITY_ID2(i) = 'D'
598       Cust_Deliverto_Hold(l_count+1).Entity_Id2 := T_HOLD_ENTITY_ID2(i);
595     THEN
596       l_count := Cust_Deliverto_Hold.COUNT;
597       Cust_Deliverto_Hold(l_count+1).Entity_Id1 := T_HOLD_ENTITY_ID(i);
599       Cust_Deliverto_Hold(l_count+1).Hold_Source_Id := T_HOLD_SOURCE_ID(i);
600       Cust_Deliverto_Hold(l_count+1).activity_name := T_HOLD_ACTIVITY_NAME(i);
601 
602       IF NOT Cust_Deliverto_Pointer.EXISTS(T_HOLD_ENTITY_ID(i)) THEN
603         Cust_Deliverto_Pointer(T_HOLD_ENTITY_ID(i)) := l_count+1;
604       END IF;
605 
606     END IF;
607 
608 	--ER# 12571983 start
609 
610 	IF T_HOLD_ENTITY_CODE(i) = 'EC' AND T_HOLD_ENTITY_CODE2(i) = 'D'
611     THEN
612       l_count := EndCust_Deliverto_Hold.COUNT;
613       EndCust_Deliverto_Hold(l_count+1).Entity_Id1 := T_HOLD_ENTITY_ID(i);
614       EndCust_Deliverto_Hold(l_count+1).Entity_Id2 := T_HOLD_ENTITY_ID2(i);
615       EndCust_Deliverto_Hold(l_count+1).Hold_Source_Id := T_HOLD_SOURCE_ID(i);
616       EndCust_Deliverto_Hold(l_count+1).activity_name := T_HOLD_ACTIVITY_NAME(i);
617 
618       IF NOT EndCust_Deliverto_Pointer.EXISTS(T_HOLD_ENTITY_ID(i)) THEN
619         EndCust_Deliverto_Pointer(T_HOLD_ENTITY_ID(i)) := l_count+1;
620       END IF;
621 
622     END IF;
623 
624 	--ER# 12571983 end
625 
626 
627     IF T_HOLD_ENTITY_CODE(i) = 'C' AND T_HOLD_ENTITY_ID2(i) = 'PL'
628     THEN
629       l_count := Cust_PriceList_Hold.COUNT;
630       Cust_PriceList_Hold(l_count+1).Entity_Id1 := T_HOLD_ENTITY_ID(i);
631       Cust_PriceList_Hold(l_count+1).Entity_Id2 := T_HOLD_ENTITY_ID2(i);
632       Cust_PriceList_Hold(l_count+1).Hold_Source_Id := T_HOLD_SOURCE_ID(i);
633       Cust_PriceList_Hold(l_count+1).activity_name := T_HOLD_ACTIVITY_NAME(i);
634 
635       IF NOT Cust_PriceList_Pointer.EXISTS(T_HOLD_ENTITY_ID(i)) THEN
636         Cust_PriceList_Pointer(T_HOLD_ENTITY_ID(i)) := l_count+1;
637       END IF;
638 
639     END IF;
640 
641 	--ER# 12571983 start
642 	IF T_HOLD_ENTITY_CODE(i) = 'EC' AND T_HOLD_ENTITY_ID2(i) = 'PL'
643     THEN
644       l_count := EndCust_PriceList_Hold.COUNT;
645       EndCust_PriceList_Hold(l_count+1).Entity_Id1 := T_HOLD_ENTITY_ID(i);
646       EndCust_PriceList_Hold(l_count+1).Entity_Id2 := T_HOLD_ENTITY_ID2(i);
647       EndCust_PriceList_Hold(l_count+1).Hold_Source_Id := T_HOLD_SOURCE_ID(i);
648       EndCust_PriceList_Hold(l_count+1).activity_name := T_HOLD_ACTIVITY_NAME(i);
649 
650       IF NOT EndCust_PriceList_Pointer.EXISTS(T_HOLD_ENTITY_ID(i)) THEN
651         EndCust_PriceList_Pointer(T_HOLD_ENTITY_ID(i)) := l_count+1;
652       END IF;
653 
654     END IF;
655 	--ER# 12571983 end
656 
657 
658     IF T_HOLD_ENTITY_CODE(i) = 'C' AND T_HOLD_ENTITY_ID2(i) = 'LT'
659     THEN
660       l_count := Cust_LineType_Hold.COUNT;
661       Cust_LineType_Hold(l_count+1).Entity_Id1 := T_HOLD_ENTITY_ID(i);
662       Cust_LineType_Hold(l_count+1).Entity_Id2 := T_HOLD_ENTITY_ID2(i);
663       Cust_LineType_Hold(l_count+1).Hold_Source_Id := T_HOLD_SOURCE_ID(i);
664       Cust_LineType_Hold(l_count+1).activity_name := T_HOLD_ACTIVITY_NAME(i);
665 
666       IF NOT Cust_LineType_Pointer.EXISTS(T_HOLD_ENTITY_ID(i)) THEN
667         Cust_LineType_Pointer(T_HOLD_ENTITY_ID(i)) := l_count+1;
668       END IF;
669 
670     END IF;
671 
672 	--ER# 12571983 start
673 	IF T_HOLD_ENTITY_CODE(i) = 'EC' AND T_HOLD_ENTITY_CODE2(i) = 'LT'
674     THEN
675       l_count := EndCust_LineType_Hold.COUNT;
676       EndCust_LineType_Hold(l_count+1).Entity_Id1 := T_HOLD_ENTITY_ID(i);
677       EndCust_LineType_Hold(l_count+1).Entity_Id2 := T_HOLD_ENTITY_ID2(i);
678       EndCust_LineType_Hold(l_count+1).Hold_Source_Id := T_HOLD_SOURCE_ID(i);
679       EndCust_LineType_Hold(l_count+1).activity_name := T_HOLD_ACTIVITY_NAME(i);
680 
681       IF NOT EndCust_LineType_Pointer.EXISTS(T_HOLD_ENTITY_ID(i)) THEN
682         EndCust_LineType_Pointer(T_HOLD_ENTITY_ID(i)) := l_count+1;
683       END IF;
684 
685     END IF;
686 	--ER# 12571983 end
687 
688 
689     IF T_HOLD_ENTITY_CODE(i) = 'C' AND T_HOLD_ENTITY_ID2(i) = 'PT'
690     THEN
691       l_count := Cust_PayTerm_Hold.COUNT;
692       Cust_PayTerm_Hold(l_count+1).Entity_Id1 := T_HOLD_ENTITY_ID(i);
693       Cust_PayTerm_Hold(l_count+1).Entity_Id2 := T_HOLD_ENTITY_ID2(i);
694       Cust_PayTerm_Hold(l_count+1).Hold_Source_Id := T_HOLD_SOURCE_ID(i);
695       Cust_PayTerm_Hold(l_count+1).activity_name := T_HOLD_ACTIVITY_NAME(i);
696 
697       IF NOT Cust_PayTerm_Pointer.EXISTS(T_HOLD_ENTITY_ID(i)) THEN
698         Cust_PayTerm_Pointer(T_HOLD_ENTITY_ID(i)) := l_count+1;
699       END IF;
700 
701     END IF;
702 
703 	--ER# 12571983 start
704 	IF T_HOLD_ENTITY_CODE(i) = 'EC' AND T_HOLD_ENTITY_CODE2(i) = 'PT'
705     THEN
706       l_count := EndCust_PayTerm_Hold.COUNT;
707       EndCust_PayTerm_Hold(l_count+1).Entity_Id1 := T_HOLD_ENTITY_ID(i);
708       EndCust_PayTerm_Hold(l_count+1).Entity_Id2 := T_HOLD_ENTITY_ID2(i);
709       EndCust_PayTerm_Hold(l_count+1).Hold_Source_Id := T_HOLD_SOURCE_ID(i);
710       EndCust_PayTerm_Hold(l_count+1).activity_name := T_HOLD_ACTIVITY_NAME(i);
711 
712       IF NOT EndCust_PayTerm_Pointer.EXISTS(T_HOLD_ENTITY_ID(i)) THEN
713         EndCust_PayTerm_Pointer(T_HOLD_ENTITY_ID(i)) := l_count+1;
714       END IF;
715 
716     END IF;
717 	--ER# 12571983 end
718 
719 
720     IF T_HOLD_ENTITY_CODE(i) = 'C' AND T_HOLD_ENTITY_ID2(i) = 'OT'
721     THEN
722       l_count := Cust_OrderType_Hold.COUNT;
723       Cust_OrderType_Hold(l_count+1).Entity_Id1 := T_HOLD_ENTITY_ID(i);
724       Cust_OrderType_Hold(l_count+1).Entity_Id2 := T_HOLD_ENTITY_ID2(i);
725       Cust_OrderType_Hold(l_count+1).Hold_Source_Id := T_HOLD_SOURCE_ID(i);
726       Cust_OrderType_Hold(l_count+1).activity_name := T_HOLD_ACTIVITY_NAME(i);
727 
728       IF NOT Cust_OrderType_Pointer.EXISTS(T_HOLD_ENTITY_ID(i)) THEN
729         Cust_OrderType_Pointer(T_HOLD_ENTITY_ID(i)) := l_count+1;
730       END IF;
731 
732     END IF;
733 
734 
735 	--ER# 12571983 start
736 	IF T_HOLD_ENTITY_CODE(i) = 'EC' AND T_HOLD_ENTITY_CODE2(i) = 'OT'
737     THEN
738 	  l_count := EndCust_OrderType_Hold.COUNT;
739       EndCust_OrderType_Hold(l_count+1).Entity_Id1 := T_HOLD_ENTITY_ID(i);
740       EndCust_OrderType_Hold(l_count+1).Entity_Id2 := T_HOLD_ENTITY_ID2(i);
741       EndCust_OrderType_Hold(l_count+1).Hold_Source_Id := T_HOLD_SOURCE_ID(i);
742       EndCust_OrderType_Hold(l_count+1).activity_name := T_HOLD_ACTIVITY_NAME(i);
743 
744       IF NOT EndCust_OrderType_Pointer.EXISTS(T_HOLD_ENTITY_ID(i)) THEN
745 	    EndCust_OrderType_Pointer(T_HOLD_ENTITY_ID(i)) := l_count+1;
746       END IF;
747 
748     END IF;
749 	--ER# 12571983 end
750 
751 
752     IF T_HOLD_ENTITY_CODE(i) = 'C' AND T_HOLD_ENTITY_ID2(i) = 'P'
753     THEN
754       l_count := Cust_PaymentType_Hold.COUNT;
755       Cust_PaymentType_Hold(l_count+1).Entity_Id1 := T_HOLD_ENTITY_ID(i);
756       Cust_PaymentType_Hold(l_count+1).Entity_Id2 := T_HOLD_ENTITY_ID2(i);
757       Cust_PaymentType_Hold(l_count+1).Hold_Source_Id := T_HOLD_SOURCE_ID(i);
758       Cust_PaymentType_Hold(l_count+1).activity_name := T_HOLD_ACTIVITY_NAME(i);
759 
760       IF NOT Cust_PaymentType_Pointer.EXISTS(T_HOLD_ENTITY_ID(i)) THEN
761         Cust_PaymentType_Pointer(T_HOLD_ENTITY_ID(i)) := l_count+1;
762       END IF;
763 
764     END IF;
765 
766 	--ER# 12571983 start
767 	IF T_HOLD_ENTITY_CODE(i) = 'EC' AND T_HOLD_ENTITY_CODE2(i) = 'P'
768     THEN
769       l_count := EndCust_PaymentType_Hold.COUNT;
770       EndCust_PaymentType_Hold(l_count+1).Entity_Id1 := T_HOLD_ENTITY_ID(i);
771       EndCust_PaymentType_Hold(l_count+1).Entity_Id2 := T_HOLD_ENTITY_ID2(i);
772       EndCust_PaymentType_Hold(l_count+1).Hold_Source_Id := T_HOLD_SOURCE_ID(i);
773       EndCust_PaymentType_Hold(l_count+1).activity_name := T_HOLD_ACTIVITY_NAME(i);
774 
775       IF NOT EndCust_PaymentType_Pointer.EXISTS(T_HOLD_ENTITY_ID(i)) THEN
776         EndCust_PaymentType_Pointer(T_HOLD_ENTITY_ID(i)) := l_count+1;
777       END IF;
778 
779     END IF;
780 	--ER# 12571983 end
781 
782 
783     IF T_HOLD_ENTITY_CODE(i) = 'C' AND T_HOLD_ENTITY_ID2(i) = 'TC'
784     THEN
785       l_count := Cust_Curr_Hold.COUNT;
786       Cust_Curr_Hold(l_count+1).Entity_Id1 := T_HOLD_ENTITY_ID(i);
787       Cust_Curr_Hold(l_count+1).Entity_Id2 := T_HOLD_ENTITY_ID2(i);
788       Cust_Curr_Hold(l_count+1).Hold_Source_Id := T_HOLD_SOURCE_ID(i);
789       Cust_Curr_Hold(l_count+1).activity_name := T_HOLD_ACTIVITY_NAME(i);
790 
791       IF NOT Cust_Curr_Pointer.EXISTS(T_HOLD_ENTITY_ID(i)) THEN
792         Cust_Curr_Pointer(T_HOLD_ENTITY_ID(i)) := l_count+1;
793       END IF;
794 
795     END IF;
796 
797 	--ER# 12571983 start
798 	IF T_HOLD_ENTITY_CODE(i) = 'EC' AND T_HOLD_ENTITY_CODE2(i) = 'TC'
799     THEN
800       l_count := EndCust_Curr_Hold.COUNT;
801       EndCust_Curr_Hold(l_count+1).Entity_Id1 := T_HOLD_ENTITY_ID(i);
802       EndCust_Curr_Hold(l_count+1).Entity_Id2 := T_HOLD_ENTITY_ID2(i);
803       EndCust_Curr_Hold(l_count+1).Hold_Source_Id := T_HOLD_SOURCE_ID(i);
804       EndCust_Curr_Hold(l_count+1).activity_name := T_HOLD_ACTIVITY_NAME(i);
805 
806       IF NOT EndCust_Curr_Pointer.EXISTS(T_HOLD_ENTITY_ID(i)) THEN
807         EndCust_Curr_Pointer(T_HOLD_ENTITY_ID(i)) := l_count+1;
808       END IF;
809 
810     END IF;
811 	--ER# 12571983 end
812 
813 
814     IF T_HOLD_ENTITY_CODE(i) = 'C' AND T_HOLD_ENTITY_ID2(i) = 'SC'
815     THEN
816       l_count := Cust_SalesChannel_Hold.COUNT;
817       Cust_SalesChannel_Hold(l_count+1).Entity_Id1 := T_HOLD_ENTITY_ID(i);
818       Cust_SalesChannel_Hold(l_count+1).Entity_Id2 := T_HOLD_ENTITY_ID2(i);
819       Cust_SalesChannel_Hold(l_count+1).Hold_Source_Id := T_HOLD_SOURCE_ID(i);
820       Cust_SalesChannel_Hold(l_count+1).activity_name := T_HOLD_ACTIVITY_NAME(i);
821 
822       IF NOT Cust_SalesChannel_Pointer.EXISTS(T_HOLD_ENTITY_ID(i)) THEN
823         Cust_SalesChannel_Pointer(T_HOLD_ENTITY_ID(i)) := l_count+1;
824       END IF;
825 
826     END IF;
827 
828 	--ER# 12571983 start
829 	IF T_HOLD_ENTITY_CODE(i) = 'EC' AND T_HOLD_ENTITY_CODE2(i) = 'SC'
830     THEN
831       l_count := EndCust_SalesChannel_Hold.COUNT;
832       EndCust_SalesChannel_Hold(l_count+1).Entity_Id1 := T_HOLD_ENTITY_ID(i);
833       EndCust_SalesChannel_Hold(l_count+1).Entity_Id2 := T_HOLD_ENTITY_ID2(i);
834       EndCust_SalesChannel_Hold(l_count+1).Hold_Source_Id := T_HOLD_SOURCE_ID(i);
835       EndCust_SalesChannel_Hold(l_count+1).activity_name := T_HOLD_ACTIVITY_NAME(i);
836 
840 
837       IF NOT EndCust_SalesChannel_Pointer.EXISTS(T_HOLD_ENTITY_ID(i)) THEN
838         EndCust_SalesChannel_Pointer(T_HOLD_ENTITY_ID(i)) := l_count+1;
839       END IF;
841     END IF;
842 
843 	IF T_HOLD_ENTITY_CODE(i) = 'EC' AND T_HOLD_ENTITY_CODE2(i) = 'EL'
844     THEN
845 	  l_count := EndCust_EndCustLoc_Hold.COUNT;
846       EndCust_EndCustLoc_Hold(l_count+1).Entity_Id1 := T_HOLD_ENTITY_ID(i);
847       EndCust_EndCustLoc_Hold(l_count+1).Entity_Id2 := T_HOLD_ENTITY_ID2(i);
848       EndCust_EndCustLoc_Hold(l_count+1).Hold_Source_Id := T_HOLD_SOURCE_ID(i);
849       EndCust_EndCustLoc_Hold(l_count+1).activity_name := T_HOLD_ACTIVITY_NAME(i);
850 
851       IF NOT EndCust_EndCustLoc_Pointer.EXISTS(T_HOLD_ENTITY_ID(i)) THEN
852         EndCust_EndCustLoc_Pointer(T_HOLD_ENTITY_ID(i)) := l_count+1;
853       END IF;
854 
855     END IF;
856 	--ER# 12571983 end
857 
858 
859 --ER#7479609 end
860 
861     -- Load Item Customer Hold Source
862     IF T_HOLD_ENTITY_CODE(i) = 'I' AND T_HOLD_ENTITY_CODE2(i) = 'C'
863     THEN
864       l_count := Item_Customer_Hold.COUNT;
865       Item_Customer_Hold(l_count+1).Entity_Id1 := T_HOLD_ENTITY_ID(i);
866       Item_Customer_Hold(l_count+1).Entity_Id2 := T_HOLD_ENTITY_ID2(i);
867       Item_Customer_Hold(l_count+1).Hold_Source_Id := T_HOLD_SOURCE_ID(i);
868       Item_Customer_Hold(l_count+1).activity_name := T_HOLD_ACTIVITY_NAME(i);
869 
870       IF NOT Item_Customer_Pointer.EXISTS(T_HOLD_ENTITY_ID(i)) THEN
871         Item_Customer_Pointer(T_HOLD_ENTITY_ID(i)) := l_count+1;
872       END IF;
873 
874     END IF;
875 
876 	--ER# 12571983 start
877 	IF T_HOLD_ENTITY_CODE(i) = 'I' AND T_HOLD_ENTITY_CODE2(i) = 'EC'
878     THEN
879       l_count := Item_EndCust_Hold.COUNT;
880       Item_EndCust_Hold(l_count+1).Entity_Id1 := T_HOLD_ENTITY_ID(i);
881       Item_EndCust_Hold(l_count+1).Entity_Id2 := T_HOLD_ENTITY_ID2(i);
882       Item_EndCust_Hold(l_count+1).Hold_Source_Id := T_HOLD_SOURCE_ID(i);
883       Item_EndCust_Hold(l_count+1).activity_name := T_HOLD_ACTIVITY_NAME(i);
884 
885       IF NOT Item_EndCust_Pointer.EXISTS(T_HOLD_ENTITY_ID(i)) THEN
886         Item_EndCust_Pointer(T_HOLD_ENTITY_ID(i)) := l_count+1;
887       END IF;
888 
889     END IF;
890 	--ER# 12571983 end
891 
892     -- Load Item Ship_To Hold Source
893     IF T_HOLD_ENTITY_CODE(i) = 'I' AND T_HOLD_ENTITY_CODE2(i) = 'S'
894     THEN
895       l_count := Item_Shipto_Hold.COUNT;
896       Item_Shipto_Hold(l_count+1).Entity_Id1 := T_HOLD_ENTITY_ID(i);
897       Item_Shipto_Hold(l_count+1).Entity_Id2 := T_HOLD_ENTITY_ID2(i);
898       Item_Shipto_Hold(l_count+1).Hold_Source_Id := T_HOLD_SOURCE_ID(i);
899       Item_Shipto_Hold(l_count+1).activity_name := T_HOLD_ACTIVITY_NAME(i);
900 
901       IF NOT Item_Shipto_Pointer.EXISTS(T_HOLD_ENTITY_ID(i)) THEN
902         Item_Shipto_Pointer(T_HOLD_ENTITY_ID(i)) := l_count+1;
903       END IF;
904 
905     END IF;
906 
907     -- Load Item Bill_To Hold Source
908     IF T_HOLD_ENTITY_CODE(i) = 'I' AND T_HOLD_ENTITY_CODE2(i) = 'B'
909     THEN
910       l_count := Item_Billto_Hold.COUNT;
911       Item_Billto_Hold(l_count+1).Entity_Id1 := T_HOLD_ENTITY_ID(i);
912       Item_Billto_Hold(l_count+1).Entity_Id2 := T_HOLD_ENTITY_ID2(i);
913       Item_Billto_Hold(l_count+1).Hold_Source_Id := T_HOLD_SOURCE_ID(i);
914       Item_Billto_Hold(l_count+1).activity_name := T_HOLD_ACTIVITY_NAME(i);
915 
916       IF NOT Item_Billto_Pointer.EXISTS(T_HOLD_ENTITY_ID(i)) THEN
917         Item_Billto_Pointer(T_HOLD_ENTITY_ID(i)) := l_count+1;
918       END IF;
919 
920     END IF;
921 
922     -- Load Item Warehouse Hold Source
923     IF T_HOLD_ENTITY_CODE(i) = 'I' AND T_HOLD_ENTITY_CODE2(i) = 'W'
924     THEN
925       l_count := Item_Warehouse_Hold.COUNT;
926       Item_Warehouse_Hold(l_count+1).Entity_Id1 := T_HOLD_ENTITY_ID(i);
927       Item_Warehouse_Hold(l_count+1).Entity_Id2 := T_HOLD_ENTITY_ID2(i);
928       Item_Warehouse_Hold(l_count+1).Hold_Source_Id := T_HOLD_SOURCE_ID(i);
929       Item_Warehouse_Hold(l_count+1).activity_name := T_HOLD_ACTIVITY_NAME(i);
930 
931       IF NOT Item_Warehouse_Pointer.EXISTS(T_HOLD_ENTITY_ID(i)) THEN
932         Item_Warehouse_Pointer(T_HOLD_ENTITY_ID(i)) := l_count+1;
933       END IF;
934 
935     END IF;
936 
937 --ER#7479609 start
938     -- Load Item Linetype Hold Source
939     IF T_HOLD_ENTITY_CODE(i) = 'I' AND T_HOLD_ENTITY_CODE2(i) = 'LT'
940     THEN
941       l_count := Item_LineType_Hold.COUNT;
942       Item_LineType_Hold(l_count+1).Entity_Id1 := T_HOLD_ENTITY_ID(i);
943       Item_LineType_Hold(l_count+1).Entity_Id2 := T_HOLD_ENTITY_ID2(i);
944       Item_LineType_Hold(l_count+1).Hold_Source_Id := T_HOLD_SOURCE_ID(i);
945       Item_LineType_Hold(l_count+1).activity_name := T_HOLD_ACTIVITY_NAME(i);
946 
947       IF NOT Item_LineType_Pointer.EXISTS(T_HOLD_ENTITY_ID(i)) THEN
948         Item_LineType_Pointer(T_HOLD_ENTITY_ID(i)) := l_count+1;
949       END IF;
950     END IF;
951 --ER#7479609 end
952 
953 --ER#7479609 start
954 
955     IF T_HOLD_ENTITY_CODE(i) = 'I' AND T_HOLD_ENTITY_CODE2(i) = 'SM'
956     THEN
957       l_count := Item_ShipMethod_Hold.COUNT;
958       Item_ShipMethod_Hold(l_count+1).Entity_Id1 := T_HOLD_ENTITY_ID(i);
959       Item_ShipMethod_Hold(l_count+1).Entity_Id2 := T_HOLD_ENTITY_ID2(i);
960       Item_ShipMethod_Hold(l_count+1).Hold_Source_Id := T_HOLD_SOURCE_ID(i);
961       Item_ShipMethod_Hold(l_count+1).activity_name := T_HOLD_ACTIVITY_NAME(i);
962 
963       IF NOT Item_ShipMethod_Pointer.EXISTS(T_HOLD_ENTITY_ID(i)) THEN
964         Item_ShipMethod_Pointer(T_HOLD_ENTITY_ID(i)) := l_count+1;
965       END IF;
966 
967     END IF;
968 
969 
970     IF T_HOLD_ENTITY_CODE(i) = 'I' AND T_HOLD_ENTITY_CODE2(i) = 'D'
971     THEN
972       l_count := Item_Warehouse_Hold.COUNT;
973       Item_Deliverto_Hold(l_count+1).Entity_Id1 := T_HOLD_ENTITY_ID(i);
974       Item_Deliverto_Hold(l_count+1).Entity_Id2 := T_HOLD_ENTITY_ID2(i);
975       Item_Deliverto_Hold(l_count+1).Hold_Source_Id := T_HOLD_SOURCE_ID(i);
976       Item_Deliverto_Hold(l_count+1).activity_name := T_HOLD_ACTIVITY_NAME(i);
977 
978       IF NOT Item_Deliverto_Pointer.EXISTS(T_HOLD_ENTITY_ID(i)) THEN
979         Item_Deliverto_Pointer(T_HOLD_ENTITY_ID(i)) := l_count+1;
980       END IF;
981 
982     END IF;
983 
984     IF T_HOLD_ENTITY_CODE(i) = 'I' AND T_HOLD_ENTITY_CODE2(i) = 'PL'
985     THEN
986       l_count := Item_PriceList_Hold.COUNT;
987       Item_PriceList_Hold(l_count+1).Entity_Id1 := T_HOLD_ENTITY_ID(i);
988       Item_PriceList_Hold(l_count+1).Entity_Id2 := T_HOLD_ENTITY_ID2(i);
989       Item_PriceList_Hold(l_count+1).Hold_Source_Id := T_HOLD_SOURCE_ID(i);
990       Item_PriceList_Hold(l_count+1).activity_name := T_HOLD_ACTIVITY_NAME(i);
991 
992       IF NOT Item_PriceList_Pointer.EXISTS(T_HOLD_ENTITY_ID(i)) THEN
993         Item_PriceList_Pointer(T_HOLD_ENTITY_ID(i)) := l_count+1;
994       END IF;
995 
996     END IF;
997 
998 
999     IF T_HOLD_ENTITY_CODE(i) = 'I' AND T_HOLD_ENTITY_CODE2(i) = 'ST'
1000     THEN
1001       l_count := Item_SourceType_Hold.COUNT;
1002       Item_SourceType_Hold(l_count+1).Entity_Id1 := T_HOLD_ENTITY_ID(i);
1003       Item_SourceType_Hold(l_count+1).Entity_Id2 := T_HOLD_ENTITY_ID2(i);
1004       Item_SourceType_Hold(l_count+1).Hold_Source_Id := T_HOLD_SOURCE_ID(i);
1005       Item_SourceType_Hold(l_count+1).activity_name := T_HOLD_ACTIVITY_NAME(i);
1006 
1007       IF NOT Item_SourceType_Pointer.EXISTS(T_HOLD_ENTITY_ID(i)) THEN
1008         Item_SourceType_Pointer(T_HOLD_ENTITY_ID(i)) := l_count+1;
1009       END IF;
1010 
1011     END IF;
1012 
1013 --ER#7479609 end
1014     oe_debug_pub.add('Before Loading Ware House');  --ER#7479609 debug
1015     -- Load Warehouse Customer Hold Source
1016     IF T_HOLD_ENTITY_CODE(i) = 'W' AND T_HOLD_ENTITY_CODE2(i) = 'C'
1017     THEN
1018       l_count := Warehouse_Customer_Hold.COUNT;
1019       Warehouse_Customer_Hold(l_count+1).Entity_Id1 := T_HOLD_ENTITY_ID(i);
1020       Warehouse_Customer_Hold(l_count+1).Entity_Id2 := T_HOLD_ENTITY_ID2(i);
1021       Warehouse_Customer_Hold(l_count+1).Hold_Source_Id := T_HOLD_SOURCE_ID(i);
1022       Warehouse_Customer_Hold(l_count+1).activity_name := T_HOLD_ACTIVITY_NAME(i);
1023 
1024       IF NOT Warehouse_Customer_Pointer.EXISTS(T_HOLD_ENTITY_ID(i)) THEN
1025         Warehouse_Customer_Pointer(T_HOLD_ENTITY_ID(i)) := l_count+1;
1026       END IF;
1027 
1028     END IF;
1029 
1030 	--ER# 12571983 start
1031 	IF T_HOLD_ENTITY_CODE(i) = 'W' AND T_HOLD_ENTITY_CODE2(i) = 'EC'
1032     THEN
1033       l_count := Warehouse_EndCust_Hold.COUNT;
1034       Warehouse_EndCust_Hold(l_count+1).Entity_Id1 := T_HOLD_ENTITY_ID(i);
1035       Warehouse_EndCust_Hold(l_count+1).Entity_Id2 := T_HOLD_ENTITY_ID2(i);
1036       Warehouse_EndCust_Hold(l_count+1).Hold_Source_Id := T_HOLD_SOURCE_ID(i);
1037       Warehouse_EndCust_Hold(l_count+1).activity_name := T_HOLD_ACTIVITY_NAME(i);
1038 
1039       IF NOT Warehouse_EndCust_Pointer.EXISTS(T_HOLD_ENTITY_ID(i)) THEN
1040         Warehouse_EndCust_Pointer(T_HOLD_ENTITY_ID(i)) := l_count+1;
1041       END IF;
1042 
1043     END IF;
1044 	--ER# 12571983 end
1045 
1046     -- Load Warehouse Shipto Hold Source
1047     IF T_HOLD_ENTITY_CODE(i) = 'W' AND T_HOLD_ENTITY_CODE2(i) = 'S'
1048     THEN
1049       l_count := Warehouse_shipto_Hold.COUNT;
1050       Warehouse_Shipto_Hold(l_count+1).Entity_Id1 := T_HOLD_ENTITY_ID(i);
1051       Warehouse_Shipto_Hold(l_count+1).Entity_Id2 := T_HOLD_ENTITY_ID2(i);
1052       Warehouse_Shipto_Hold(l_count+1).Hold_Source_Id := T_HOLD_SOURCE_ID(i);
1053       Warehouse_Shipto_Hold(l_count+1).activity_name := T_HOLD_ACTIVITY_NAME(i);
1054 
1055       IF NOT Warehouse_Shipto_Pointer.EXISTS(T_HOLD_ENTITY_ID(i)) THEN
1056         Warehouse_Shipto_Pointer(T_HOLD_ENTITY_ID(i)) := l_count+1;
1057       END IF;
1058 
1059     END IF;
1060 
1061     -- Load Warehouse Billto Hold Source
1062     IF T_HOLD_ENTITY_CODE(i) = 'W' AND T_HOLD_ENTITY_CODE2(i) = 'B'
1063     THEN
1064       l_count := Warehouse_Billto_hold.COUNT;
1065       Warehouse_Billto_Hold(l_count+1).Entity_Id1 := T_HOLD_ENTITY_ID(i);
1066       Warehouse_Billto_Hold(l_count+1).Entity_Id2 := T_HOLD_ENTITY_ID2(i);
1067       Warehouse_Billto_Hold(l_count+1).Hold_Source_Id := T_HOLD_SOURCE_ID(i);
1068       Warehouse_Billto_Hold(l_count+1).activity_name := T_HOLD_ACTIVITY_NAME(i);
1069 
1070       IF NOT Warehouse_Billto_Pointer.EXISTS(T_HOLD_ENTITY_ID(i)) THEN
1071         Warehouse_Billto_Pointer(T_HOLD_ENTITY_ID(i)) := l_count+1;
1072       END IF;
1073 
1074     END IF;
1075 
1076 --ER#7479609 start
1077 
1078     IF T_HOLD_ENTITY_CODE(i) = 'W' AND T_HOLD_ENTITY_CODE2(i) = 'LT'
1079     THEN
1080       l_count := Warehouse_LineType_Hold.COUNT;
1081       Warehouse_LineType_Hold(l_count+1).Entity_Id1 := T_HOLD_ENTITY_ID(i);
1082       Warehouse_LineType_Hold(l_count+1).Entity_Id2 := T_HOLD_ENTITY_ID2(i);
1083       Warehouse_LineType_Hold(l_count+1).Hold_Source_Id := T_HOLD_SOURCE_ID(i);
1084       Warehouse_LineType_Hold(l_count+1).activity_name := T_HOLD_ACTIVITY_NAME(i);
1085 
1086       IF NOT Warehouse_LineType_Pointer.EXISTS(T_HOLD_ENTITY_ID(i)) THEN
1087         Warehouse_LineType_Pointer(T_HOLD_ENTITY_ID(i)) := l_count+1;
1088       END IF;
1089 
1090     END IF;
1091 
1092     IF T_HOLD_ENTITY_CODE(i) = 'W' AND T_HOLD_ENTITY_CODE2(i) = 'SM'
1093     THEN
1094       l_count := Warehouse_ShipMethod_Hold.COUNT;
1095       Warehouse_ShipMethod_Hold(l_count+1).Entity_Id1 := T_HOLD_ENTITY_ID(i);
1096       Warehouse_ShipMethod_Hold(l_count+1).Entity_Id2 := T_HOLD_ENTITY_ID2(i);
1097       Warehouse_ShipMethod_Hold(l_count+1).Hold_Source_Id := T_HOLD_SOURCE_ID(i);
1098       Warehouse_ShipMethod_Hold(l_count+1).activity_name := T_HOLD_ACTIVITY_NAME(i);
1099 
1100       IF NOT Warehouse_ShipMethod_Pointer.EXISTS(T_HOLD_ENTITY_ID(i)) THEN
1101         Warehouse_ShipMethod_Pointer(T_HOLD_ENTITY_ID(i)) := l_count+1;
1102       END IF;
1103 
1104     END IF;
1105 
1106     IF T_HOLD_ENTITY_CODE(i) = 'W' AND T_HOLD_ENTITY_CODE2(i) = 'D'
1107     THEN
1108       l_count := Warehouse_Deliverto_Hold.COUNT;
1109       Warehouse_Deliverto_Hold(l_count+1).Entity_Id1 := T_HOLD_ENTITY_ID(i);
1110       Warehouse_Deliverto_Hold(l_count+1).Entity_Id2 := T_HOLD_ENTITY_ID2(i);
1111       Warehouse_Deliverto_Hold(l_count+1).Hold_Source_Id := T_HOLD_SOURCE_ID(i);
1112       Warehouse_Deliverto_Hold(l_count+1).activity_name := T_HOLD_ACTIVITY_NAME(i);
1113 
1114       IF NOT Warehouse_Deliverto_Pointer.EXISTS(T_HOLD_ENTITY_ID(i)) THEN
1115         Warehouse_Deliverto_Pointer(T_HOLD_ENTITY_ID(i)) := l_count+1;
1116       END IF;
1117 
1118     END IF;
1119 
1120     IF T_HOLD_ENTITY_CODE(i) = 'W' AND T_HOLD_ENTITY_CODE2(i) = 'ST'
1121     THEN
1122       l_count := Warehouse_SourceType_Hold.COUNT;
1123       Warehouse_SourceType_Hold(l_count+1).Entity_Id1 := T_HOLD_ENTITY_ID(i);
1124       Warehouse_SourceType_Hold(l_count+1).Entity_Id2 := T_HOLD_ENTITY_ID2(i);
1125       Warehouse_SourceType_Hold(l_count+1).Hold_Source_Id := T_HOLD_SOURCE_ID(i);
1126       Warehouse_SourceType_Hold(l_count+1).activity_name := T_HOLD_ACTIVITY_NAME(i);
1127 
1128       IF NOT Warehouse_SourceType_Pointer.EXISTS(T_HOLD_ENTITY_ID(i)) THEN
1129         Warehouse_SourceType_Pointer(T_HOLD_ENTITY_ID(i)) := l_count+1;
1130       END IF;
1131 
1132     END IF;
1133 
1134 --ER#7479609 end
1135 
1136 --ER#7479609 start
1137 -- Misc
1138 
1139 
1140     IF T_HOLD_ENTITY_CODE(i) = 'PL' AND T_HOLD_ENTITY_CODE2(i) = 'TC'
1141     THEN
1142       l_count := PriceList_Curr_Hold.COUNT;
1143       PriceList_Curr_Hold(l_count+1).Entity_Id1 := T_HOLD_ENTITY_ID(i);
1144       PriceList_Curr_Hold(l_count+1).Entity_Id2 := T_HOLD_ENTITY_ID2(i);
1145       PriceList_Curr_Hold(l_count+1).Hold_Source_Id := T_HOLD_SOURCE_ID(i);
1146       PriceList_Curr_Hold(l_count+1).activity_name := T_HOLD_ACTIVITY_NAME(i);
1147 
1148       IF NOT PriceList_Curr_Pointer.EXISTS(T_HOLD_ENTITY_ID(i)) THEN
1149         PriceList_Curr_Pointer(T_HOLD_ENTITY_ID(i)) := l_count+1;
1150       END IF;
1151 
1152     END IF;
1153 
1154 
1155     IF T_HOLD_ENTITY_CODE(i) = 'OT' AND T_HOLD_ENTITY_CODE2(i) = 'TC'
1156     THEN
1157       l_count := OrderType_Curr_Hold.COUNT;
1158       OrderType_Curr_Hold(l_count+1).Entity_Id1 := T_HOLD_ENTITY_ID(i);
1159       OrderType_Curr_Hold(l_count+1).Entity_Id2 := T_HOLD_ENTITY_ID2(i);
1160       OrderType_Curr_Hold(l_count+1).Hold_Source_Id := T_HOLD_SOURCE_ID(i);
1161       OrderType_Curr_Hold(l_count+1).activity_name := T_HOLD_ACTIVITY_NAME(i);
1162 
1163       IF NOT OrderType_Curr_Pointer.EXISTS(T_HOLD_ENTITY_ID(i)) THEN
1164         OrderType_Curr_Pointer(T_HOLD_ENTITY_ID(i)) := l_count+1;
1165       END IF;
1166 
1167     END IF;
1168 
1169 
1170     IF T_HOLD_ENTITY_CODE(i) = 'OT' AND T_HOLD_ENTITY_CODE2(i) = 'LT'
1171     THEN
1172       l_count := OrderType_LineType_Hold.COUNT;
1173       OrderType_LineType_Hold(l_count+1).Entity_Id1 := T_HOLD_ENTITY_ID(i);
1174       OrderType_LineType_Hold(l_count+1).Entity_Id2 := T_HOLD_ENTITY_ID2(i);
1175       OrderType_LineType_Hold(l_count+1).Hold_Source_Id := T_HOLD_SOURCE_ID(i);
1176       OrderType_LineType_Hold(l_count+1).activity_name := T_HOLD_ACTIVITY_NAME(i);
1177 
1178       IF NOT OrderType_LineType_Pointer.EXISTS(T_HOLD_ENTITY_ID(i)) THEN
1179         OrderType_LineType_Pointer(T_HOLD_ENTITY_ID(i)) := l_count+1;
1183 
1180       END IF;
1181 
1182     END IF;
1184 
1185     IF T_HOLD_ENTITY_CODE(i) = 'CD' AND T_HOLD_ENTITY_CODE2(i) = 'CB'
1186     THEN
1187       l_count := CreDate_CreBy_Hold.COUNT;
1188       CreDate_CreBy_Hold(l_count+1).Entity_Id1 := T_HOLD_ENTITY_ID(i);
1189       CreDate_CreBy_Hold(l_count+1).Entity_Id2 := T_HOLD_ENTITY_ID2(i);
1190       CreDate_CreBy_Hold(l_count+1).Hold_Source_Id := T_HOLD_SOURCE_ID(i);
1191       CreDate_CreBy_Hold(l_count+1).activity_name := T_HOLD_ACTIVITY_NAME(i);
1192 
1193       IF NOT CreDate_CreBy_Pointer.EXISTS(T_HOLD_ENTITY_ID(i)) THEN
1194         CreDate_CreBy_Pointer(T_HOLD_ENTITY_ID(i)) := l_count+1;
1195       END IF;
1196 
1197     END IF;
1198 
1199 
1200 --ER#7479609 end
1201 
1202 --ER# 13331078 START for 'IC'
1203 
1204 --Item Category Hold
1205 IF T_HOLD_ENTITY_CODE(i) = 'IC' AND T_HOLD_ENTITY_CODE2(i) IS NULL
1206     THEN
1207       l_count := ItemCat_Hold.COUNT;
1208       ItemCat_Hold(l_count+1).Entity_Id1 := T_HOLD_ENTITY_ID(i);
1209       ItemCat_Hold(l_count+1).Entity_Id2 := NULL;
1210       ItemCat_Hold(l_count+1).Hold_Source_Id := T_HOLD_SOURCE_ID(i);
1211       ItemCat_Hold(l_count+1).activity_name := T_HOLD_ACTIVITY_NAME(i);
1212 
1213       IF NOT ItemCat_Pointer.EXISTS(T_HOLD_ENTITY_ID(i)) THEN
1214         ItemCat_Pointer(T_HOLD_ENTITY_ID(i)) := l_count+1;
1215       END IF;
1216     END IF;
1217 
1218 -- Load Item Category,Customer Hold Source
1219     IF T_HOLD_ENTITY_CODE(i) = 'IC' AND T_HOLD_ENTITY_CODE2(i) = 'C'
1220     THEN
1221       l_count := ItemCat_Customer_Hold.COUNT;
1222       ItemCat_Customer_Hold(l_count+1).Entity_Id1 := T_HOLD_ENTITY_ID(i);
1223       ItemCat_Customer_Hold(l_count+1).Entity_Id2 := T_HOLD_ENTITY_ID2(i);
1224       ItemCat_Customer_Hold(l_count+1).Hold_Source_Id := T_HOLD_SOURCE_ID(i);
1225       ItemCat_Customer_Hold(l_count+1).activity_name := T_HOLD_ACTIVITY_NAME(i);
1226 
1227       IF NOT ItemCat_Customer_Pointer.EXISTS(T_HOLD_ENTITY_ID(i)) THEN
1228         ItemCat_Customer_Pointer(T_HOLD_ENTITY_ID(i)) := l_count+1;
1229       END IF;
1230 
1231     END IF;
1232 
1233 	--ER# 12571983 as well
1234 	-- Load Item Category, End Customer Hold Source
1235 	IF T_HOLD_ENTITY_CODE(i) = 'IC' AND T_HOLD_ENTITY_CODE2(i) = 'EC'
1236     THEN
1237       l_count := ItemCat_EndCust_Hold.COUNT;
1238       ItemCat_EndCust_Hold(l_count+1).Entity_Id1 := T_HOLD_ENTITY_ID(i);
1239       ItemCat_EndCust_Hold(l_count+1).Entity_Id2 := T_HOLD_ENTITY_ID2(i);
1240       ItemCat_EndCust_Hold(l_count+1).Hold_Source_Id := T_HOLD_SOURCE_ID(i);
1241       ItemCat_EndCust_Hold(l_count+1).activity_name := T_HOLD_ACTIVITY_NAME(i);
1242 
1243       IF NOT ItemCat_EndCust_Pointer.EXISTS(T_HOLD_ENTITY_ID(i)) THEN
1244         ItemCat_EndCust_Pointer(T_HOLD_ENTITY_ID(i)) := l_count+1;
1245       END IF;
1246 
1247     END IF;
1248 	--ER# 12571983 end
1249 
1250     -- Load Item Category,Ship_To Hold Source
1251     IF T_HOLD_ENTITY_CODE(i) = 'IC' AND T_HOLD_ENTITY_CODE2(i) = 'S'
1252     THEN
1253       l_count := ItemCat_Shipto_Hold.COUNT;
1254       ItemCat_Shipto_Hold(l_count+1).Entity_Id1 := T_HOLD_ENTITY_ID(i);
1255       ItemCat_Shipto_Hold(l_count+1).Entity_Id2 := T_HOLD_ENTITY_ID2(i);
1256       ItemCat_Shipto_Hold(l_count+1).Hold_Source_Id := T_HOLD_SOURCE_ID(i);
1257       ItemCat_Shipto_Hold(l_count+1).activity_name := T_HOLD_ACTIVITY_NAME(i);
1258 
1259       IF NOT ItemCat_Shipto_Pointer.EXISTS(T_HOLD_ENTITY_ID(i)) THEN
1260         ItemCat_Shipto_Pointer(T_HOLD_ENTITY_ID(i)) := l_count+1;
1261       END IF;
1262 
1263     END IF;
1264 
1265     -- Load Item Category,Bill_To Hold Source
1266     IF T_HOLD_ENTITY_CODE(i) = 'IC' AND T_HOLD_ENTITY_CODE2(i) = 'B'
1267     THEN
1268       l_count := ItemCat_Billto_Hold.COUNT;
1269       ItemCat_Billto_Hold(l_count+1).Entity_Id1 := T_HOLD_ENTITY_ID(i);
1270       ItemCat_Billto_Hold(l_count+1).Entity_Id2 := T_HOLD_ENTITY_ID2(i);
1271       ItemCat_Billto_Hold(l_count+1).Hold_Source_Id := T_HOLD_SOURCE_ID(i);
1272       ItemCat_Billto_Hold(l_count+1).activity_name := T_HOLD_ACTIVITY_NAME(i);
1273 
1274       IF NOT ItemCat_Billto_Pointer.EXISTS(T_HOLD_ENTITY_ID(i)) THEN
1275         ItemCat_Billto_Pointer(T_HOLD_ENTITY_ID(i)) := l_count+1;
1276       END IF;
1277 
1278     END IF;
1279 
1280     -- Load Item Category,Warehouse Hold Source
1281     IF T_HOLD_ENTITY_CODE(i) = 'IC' AND T_HOLD_ENTITY_CODE2(i) = 'W'
1282     THEN
1283       l_count := ItemCat_Warehouse_Hold.COUNT;
1284       ItemCat_Warehouse_Hold(l_count+1).Entity_Id1 := T_HOLD_ENTITY_ID(i);
1285       ItemCat_Warehouse_Hold(l_count+1).Entity_Id2 := T_HOLD_ENTITY_ID2(i);
1286       ItemCat_Warehouse_Hold(l_count+1).Hold_Source_Id := T_HOLD_SOURCE_ID(i);
1287       ItemCat_Warehouse_Hold(l_count+1).activity_name := T_HOLD_ACTIVITY_NAME(i);
1288 
1289       IF NOT ItemCat_Warehouse_Pointer.EXISTS(T_HOLD_ENTITY_ID(i)) THEN
1290         ItemCat_Warehouse_Pointer(T_HOLD_ENTITY_ID(i)) := l_count+1;
1291       END IF;
1292 
1293     END IF;
1294 
1295 
1296     -- Load Item Category,Linetype Hold Source
1297     IF T_HOLD_ENTITY_CODE(i) = 'IC' AND T_HOLD_ENTITY_CODE2(i) = 'LT'
1298     THEN
1299       l_count := ItemCat_LineType_Hold.COUNT;
1300       ItemCat_LineType_Hold(l_count+1).Entity_Id1 := T_HOLD_ENTITY_ID(i);
1301       ItemCat_LineType_Hold(l_count+1).Entity_Id2 := T_HOLD_ENTITY_ID2(i);
1302       ItemCat_LineType_Hold(l_count+1).Hold_Source_Id := T_HOLD_SOURCE_ID(i);
1303       ItemCat_LineType_Hold(l_count+1).activity_name := T_HOLD_ACTIVITY_NAME(i);
1304 
1305       IF NOT ItemCat_LineType_Pointer.EXISTS(T_HOLD_ENTITY_ID(i)) THEN
1306         ItemCat_LineType_Pointer(T_HOLD_ENTITY_ID(i)) := l_count+1;
1307       END IF;
1308     END IF;
1309 
1313     THEN
1310 	-- Load Item Category,Ship Method Hold Source
1311 
1312     IF T_HOLD_ENTITY_CODE(i) = 'IC' AND T_HOLD_ENTITY_CODE2(i) = 'SM'
1314       l_count := ItemCat_ShipMethod_Hold.COUNT;
1315       ItemCat_ShipMethod_Hold(l_count+1).Entity_Id1 := T_HOLD_ENTITY_ID(i);
1316       ItemCat_ShipMethod_Hold(l_count+1).Entity_Id2 := T_HOLD_ENTITY_ID2(i);
1317       ItemCat_ShipMethod_Hold(l_count+1).Hold_Source_Id := T_HOLD_SOURCE_ID(i);
1318       ItemCat_ShipMethod_Hold(l_count+1).activity_name := T_HOLD_ACTIVITY_NAME(i);
1319 
1320       IF NOT ItemCat_ShipMethod_Pointer.EXISTS(T_HOLD_ENTITY_ID(i)) THEN
1321         ItemCat_ShipMethod_Pointer(T_HOLD_ENTITY_ID(i)) := l_count+1;
1322       END IF;
1323 
1324     END IF;
1325 
1326  -- Load Item Category,Deliver To Hold Source
1327     IF T_HOLD_ENTITY_CODE(i) = 'IC' AND T_HOLD_ENTITY_CODE2(i) = 'D'
1328     THEN
1329       l_count := ItemCat_Deliverto_Hold.COUNT;
1330       ItemCat_Deliverto_Hold(l_count+1).Entity_Id1 := T_HOLD_ENTITY_ID(i);
1331       ItemCat_Deliverto_Hold(l_count+1).Entity_Id2 := T_HOLD_ENTITY_ID2(i);
1332       ItemCat_Deliverto_Hold(l_count+1).Hold_Source_Id := T_HOLD_SOURCE_ID(i);
1333       ItemCat_Deliverto_Hold(l_count+1).activity_name := T_HOLD_ACTIVITY_NAME(i);
1334 
1335       IF NOT ItemCat_Deliverto_Pointer.EXISTS(T_HOLD_ENTITY_ID(i)) THEN
1336         ItemCat_Deliverto_Pointer(T_HOLD_ENTITY_ID(i)) := l_count+1;
1337       END IF;
1338 
1339     END IF;
1340 
1341 	-- Load Item Category,Price List Hold Source
1342     IF T_HOLD_ENTITY_CODE(i) = 'IC' AND T_HOLD_ENTITY_CODE2(i) = 'PL'
1343     THEN
1344       l_count := ItemCat_PriceList_Hold.COUNT;
1345       ItemCat_PriceList_Hold(l_count+1).Entity_Id1 := T_HOLD_ENTITY_ID(i);
1346       ItemCat_PriceList_Hold(l_count+1).Entity_Id2 := T_HOLD_ENTITY_ID2(i);
1347       ItemCat_PriceList_Hold(l_count+1).Hold_Source_Id := T_HOLD_SOURCE_ID(i);
1348       ItemCat_PriceList_Hold(l_count+1).activity_name := T_HOLD_ACTIVITY_NAME(i);
1349 
1350       IF NOT ItemCat_PriceList_Pointer.EXISTS(T_HOLD_ENTITY_ID(i)) THEN
1351         ItemCat_PriceList_Pointer(T_HOLD_ENTITY_ID(i)) := l_count+1;
1352       END IF;
1353 
1354     END IF;
1355 
1356 -- Load Item Category,Source Type Hold Source
1357     IF T_HOLD_ENTITY_CODE(i) = 'IC' AND T_HOLD_ENTITY_CODE2(i) = 'ST'
1358     THEN
1359       l_count := ItemCat_SourceType_Hold.COUNT;
1360       ItemCat_SourceType_Hold(l_count+1).Entity_Id1 := T_HOLD_ENTITY_ID(i);
1361       ItemCat_SourceType_Hold(l_count+1).Entity_Id2 := T_HOLD_ENTITY_ID2(i);
1362       ItemCat_SourceType_Hold(l_count+1).Hold_Source_Id := T_HOLD_SOURCE_ID(i);
1363       ItemCat_SourceType_Hold(l_count+1).activity_name := T_HOLD_ACTIVITY_NAME(i);
1364 
1365       IF NOT ItemCat_SourceType_Pointer.EXISTS(T_HOLD_ENTITY_ID(i)) THEN
1366         ItemCat_SourceType_Pointer(T_HOLD_ENTITY_ID(i)) := l_count+1;
1367       END IF;
1368 
1369     END IF;
1370 
1371 --ER# 13331078 END for 'IC'
1372 
1373   END LOOP;
1374 
1375   oe_debug_pub.add('Exitting OE_Bulk_Holds_PVT.Load_Hold_Sources');  --ER#7479609 debug
1376 
1377 EXCEPTION
1378   WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
1379     RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
1380   WHEN OTHERS THEN
1381     OE_BULK_MSG_PUB.Add_Exc_Msg
1382        (   G_PKG_NAME
1383         ,   'Load_Hold_Sources'
1384         );
1385     RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
1386 END Load_Hold_Sources;
1387 
1388 
1389 
1390 --ER#7479609 start
1391 PROCEDURE Evaluate_Holds(
1392 p_header_rec        IN OE_Order_PUB.Header_Rec_Type,
1393 p_line_rec           IN OE_Order_PUB.Line_Rec_Type,
1394 p_check_only_warehouse_holds IN BOOLEAN := FALSE,
1395 p_on_generic_hold            OUT NOCOPY BOOLEAN,
1396 p_on_booking_hold            OUT NOCOPY BOOLEAN,
1397 p_on_scheduling_hold         OUT NOCOPY BOOLEAN
1398 )
1399 IS
1400 i  NUMBER;
1401 j NUMBER;
1402 l_activity_name VARCHAR2(30);
1403 l_inventory_item_id  NUMBER;
1404 
1405 
1406 l_itemcategory_id NUMBER :=''; --ER# 13331078
1407 
1408 --ER# 3667551 start
1409 l_credithold_syspar varchar2(10) := NVL(OE_SYS_PARAMETERS.value('ONT_CREDITHOLD_TYPE'),'S') ;
1410 l_custlin_hold CHAR := 'N';
1411 l_invoice_Custid NUMBER := 0;
1412 --ER# 3667551 end;
1413 
1414 BEGIN
1415 oe_debug_pub.add('Entering OE_Bulk_Holds_PVT.Evaluate_Holds');
1416 oe_debug_pub.add('Header'||p_header_rec.header_id);
1417 oe_debug_pub.add('Line:'||p_line_rec.header_id||':'||p_line_rec.line_id);
1418 
1419   -- Set the OUT parameter
1420   p_on_generic_hold := FALSE;
1421   p_on_booking_hold := FALSE;
1422   p_on_scheduling_hold := FALSE;
1423 
1424   IF p_line_rec.line_id IS NULL THEN -- Header Level Holds
1425 
1426      -- Check Customer Hold
1427      IF Customer_Pointer.EXISTS(p_header_rec.sold_to_org_id) THEN
1428 
1429          j := Customer_Pointer(p_header_rec.sold_to_org_id);
1430          WHILE Customer_hold(j).Entity_Id1 = p_header_rec.sold_to_org_id
1431          LOOP
1432 		 --ER# 3667551 start, if System param set to 'BillToCustomerLine' then no header hold
1433 		 -- Also for Bill To Customer and Sold to Customer being same with parameter as 'BTH'
1434 		 -- applying hold is handled seperately below this section so no hold to be applied for BTH also here
1435 		 --
1436 		 If(l_credithold_syspar IN('BTL','BTH') AND Customer_hold(j).hold_id=1) then
1437 		 j := j+1; -- Increment counter so that next hold data is processed
1438 		 oe_debug_pub.add('Credit Hold TYpe System Parameter set to BillToCustomer, no header level hold');
1439 		 Else
1440 		 --ER# 3667551 end
1441              Mark_Hold(p_header_id => p_header_rec.header_id,
1442                   p_line_id => NULL,
1443                   p_line_number => NULL,
1444                   p_hold_source_id => Customer_hold(j).hold_source_id,
1448                   p_attribute => 'Customer',
1445                   p_ship_set_name => NULL,
1446                   p_arrival_set_name => NULL,
1447                   p_activity_name => Customer_hold(j).activity_name,
1449                   p_top_model_line_id => NULL
1450                   );
1451              IF Customer_hold(j).activity_name IS NULL THEN
1452                p_on_generic_hold := TRUE;
1453              ELSIF Customer_hold(j).activity_name = 'BOOK_ORDER' THEN
1454                p_on_booking_hold := TRUE;
1455              END IF;
1456              j := j+1;
1457             End If; --ER# 3667551, added end if;
1458 
1459 			 IF j > Customer_hold.COUNT THEN
1460                  EXIT;
1461              END IF;
1462 
1463          END LOOP;
1464 
1465      END IF;
1466 
1467 	 --ER# 3667551 start
1468 	 -- Check Customer Hold , for Credit Hold checking with System parameter "Apply Credit Hold Based On"
1469 	 --set to 'Bill To Customer Header'
1470 		l_invoice_Custid:=CustAcctID_func(p_in_site_id => p_header_rec.invoice_to_org_id,
1471                                           p_out_IDfound=> l_custlin_hold);
1472 
1473      IF l_custlin_hold='Y' and Customer_Pointer.EXISTS(l_invoice_Custid) THEN
1474 
1475          j := Customer_Pointer(l_invoice_Custid);
1476 
1477          WHILE Customer_hold(j).Entity_Id1 = l_invoice_Custid
1478          LOOP
1479 
1480 		 If(l_credithold_syspar='BTH' AND Customer_hold(j).hold_id=1) then
1481 
1482              Mark_Hold(p_header_id => p_header_rec.header_id,
1483                   p_line_id => NULL,
1484                   p_line_number => NULL,
1485                   p_hold_source_id => Customer_hold(j).hold_source_id,
1486                   p_ship_set_name => NULL,
1487                   p_arrival_set_name => NULL,
1488                   p_activity_name => Customer_hold(j).activity_name,
1489                   p_attribute => 'Customer',
1490                   p_top_model_line_id => NULL
1491                   );
1492              IF Customer_hold(j).activity_name IS NULL THEN
1493                p_on_generic_hold := TRUE;
1494              ELSIF Customer_hold(j).activity_name = 'BOOK_ORDER' THEN
1495                p_on_booking_hold := TRUE;
1496              END IF;
1497             End If; -- end if of BTH check
1498 			j := j+1;
1499              IF j > Customer_hold.COUNT THEN
1500                  EXIT;
1501              END IF;
1502 
1503          END LOOP;
1504 
1505      END IF;
1506      --ER# 3667551 end
1507 
1508 
1509 --ER#7479609 start
1510 
1511      -- Check Sales channel Hold
1512      IF SalesChannel_Pointer.EXISTS(p_header_rec.sales_channel_code) THEN
1513 
1514          j := SalesChannel_Pointer(p_header_rec.sales_channel_code);
1515          WHILE SalesChannel_Hold(j).Entity_Id1 = p_header_rec.sales_channel_code
1516          LOOP
1517              Mark_Hold(p_header_id => p_header_rec.header_id,
1518                   p_line_id => NULL,
1519                   p_line_number => NULL,
1520                   p_hold_source_id => SalesChannel_Hold(j).hold_source_id,
1521                   p_ship_set_name => NULL,
1522                   p_arrival_set_name => NULL,
1523                   p_activity_name => SalesChannel_Hold(j).activity_name,
1524                   p_attribute => 'Sales Channel',
1525                   p_top_model_line_id => NULL
1526                   );
1527              IF SalesChannel_Hold(j).activity_name IS NULL THEN
1528                p_on_generic_hold := TRUE;
1529              ELSIF SalesChannel_Hold(j).activity_name = 'BOOK_ORDER' THEN
1530                p_on_booking_hold := TRUE;
1531              END IF;
1532              j := j+1;
1533 
1534              IF j > SalesChannel_Hold.COUNT THEN
1535                  EXIT;
1536              END IF;
1537 
1538          END LOOP;
1539 
1540      END IF;
1541 
1542      -- Check Payment Type Hold
1543      IF PaymentType_Pointer.EXISTS(p_header_rec.payment_type_code) THEN
1544 
1545          j := PaymentType_Pointer(p_header_rec.payment_type_code);
1546          WHILE PaymentType_Hold(j).Entity_Id1 = p_header_rec.payment_type_code
1547          LOOP
1548              Mark_Hold(p_header_id => p_header_rec.header_id,
1549                   p_line_id => NULL,
1550                   p_line_number => NULL,
1551                   p_hold_source_id => PaymentType_Hold(j).hold_source_id,
1552                   p_ship_set_name => NULL,
1553                   p_arrival_set_name => NULL,
1554                   p_activity_name => PaymentType_Hold(j).activity_name,
1555                   p_attribute => 'Payment Type',
1556                   p_top_model_line_id => NULL
1557                   );
1558              IF PaymentType_Hold(j).activity_name IS NULL THEN
1559                p_on_generic_hold := TRUE;
1560              ELSIF PaymentType_Hold(j).activity_name = 'BOOK_ORDER' THEN
1561                p_on_booking_hold := TRUE;
1562              END IF;
1563              j := j+1;
1564 
1565              IF j > PaymentType_Hold.COUNT THEN
1566                  EXIT;
1567              END IF;
1568 
1569          END LOOP;
1570 
1571      END IF;
1572 
1573      -- Check Customer Order Type Holds
1574      IF p_header_rec.sold_to_org_id IS NOT NULL AND
1575         p_header_rec.order_type_id IS NOT NULL AND
1576         Cust_OrderType_Pointer.EXISTS(p_header_rec.sold_to_org_id)
1577      THEN
1578          j := Cust_OrderType_Pointer(p_header_rec.sold_to_org_id);
1579          WHILE Cust_OrderType_Hold(j).Entity_Id1 = p_header_rec.sold_to_org_id
1580          LOOP
1581 
1582              IF Cust_OrderType_Hold(j).Entity_Id2 = p_header_rec.order_type_id
1583              THEN
1584               Mark_Hold(p_header_id => p_header_rec.header_id,
1585                   p_line_id => NULL,
1586                   p_line_number => NULL,
1590                   p_activity_name => Cust_OrderType_Hold(j).activity_name,
1587                   p_hold_source_id => Cust_OrderType_Hold(j).hold_source_id,
1588                   p_ship_set_name => NULL,
1589                   p_arrival_set_name => NULL,
1591                   p_attribute => 'Customer/Order Type',
1592                   p_top_model_line_id => NULL
1593                   );
1594                IF Cust_OrderType_Hold(j).activity_name IS NULL THEN
1595                  p_on_generic_hold := TRUE;
1596                ELSIF Cust_OrderType_Hold(j).activity_name = 'BOOK_ORDER' THEN
1597                  p_on_booking_hold := TRUE;
1598                END IF;
1599 
1600              END IF;
1601              j := j + 1;
1602 
1603              IF j > Cust_OrderType_Hold.COUNT THEN
1604                  EXIT;
1605              END IF;
1606 
1607          END LOOP;
1608      END IF;
1609 
1610 
1611      -- Check Customer payment Type Holds
1612 
1613      IF p_header_rec.sold_to_org_id IS NOT NULL AND
1614         p_header_rec.payment_type_code IS NOT NULL AND
1615         Cust_PaymentType_Pointer.EXISTS(p_header_rec.sold_to_org_id)
1616      THEN
1617          j := Cust_PaymentType_Pointer(p_header_rec.sold_to_org_id);
1618          WHILE Cust_PaymentType_Hold(j).Entity_Id1 = p_header_rec.sold_to_org_id
1619          LOOP
1620 
1621              IF Cust_PaymentType_Hold(j).Entity_Id2 = p_header_rec.payment_type_code
1622              THEN
1623               Mark_Hold(p_header_id => p_header_rec.header_id,
1624                   p_line_id => NULL,
1625                   p_line_number => NULL,
1626                   p_hold_source_id => Cust_PaymentType_Hold(j).hold_source_id,
1627                   p_ship_set_name => NULL,
1628                   p_arrival_set_name => NULL,
1629                   p_activity_name => Cust_PaymentType_Hold(j).activity_name,
1630                   p_attribute => 'Customer/Payment Type',
1631                   p_top_model_line_id => NULL
1632                   );
1633                IF Cust_PaymentType_Hold(j).activity_name IS NULL THEN
1634                  p_on_generic_hold := TRUE;
1635                ELSIF Cust_PaymentType_Hold(j).activity_name = 'BOOK_ORDER' THEN
1636                  p_on_booking_hold := TRUE;
1637                END IF;
1638 
1639              END IF;
1640              j := j + 1;
1641 
1642              IF j > Cust_PaymentType_Hold.COUNT THEN
1643                  EXIT;
1644              END IF;
1645 
1646          END LOOP;
1647      END IF;
1648 
1649      -- Check Customer currency Holds
1650      IF p_header_rec.sold_to_org_id IS NOT NULL AND
1651         p_header_rec.transactional_curr_code  IS NOT NULL AND
1652         Cust_Curr_Pointer.EXISTS(p_header_rec.sold_to_org_id)
1653      THEN
1654          j := Cust_Curr_Pointer(p_header_rec.sold_to_org_id);
1655          WHILE Cust_Curr_Hold(j).Entity_Id1 = p_header_rec.sold_to_org_id
1656          LOOP
1657 
1658              IF Cust_Curr_Hold(j).Entity_Id2 = p_header_rec.transactional_curr_code
1659              THEN
1660               Mark_Hold(p_header_id => p_header_rec.header_id,
1661                   p_line_id => NULL,
1662                   p_line_number => NULL,
1663                   p_hold_source_id => Cust_Curr_Hold(j).hold_source_id,
1664                   p_ship_set_name => NULL,
1665                   p_arrival_set_name => NULL,
1666                   p_activity_name => Cust_Curr_Hold(j).activity_name,
1667                   p_attribute => 'Customer/Currency',
1668                   p_top_model_line_id => NULL
1669                   );
1670                IF Cust_Curr_Hold(j).activity_name IS NULL THEN
1671                  p_on_generic_hold := TRUE;
1672                ELSIF Cust_Curr_Hold(j).activity_name = 'BOOK_ORDER' THEN
1673                  p_on_booking_hold := TRUE;
1674                END IF;
1675 
1676              END IF;
1677              j := j + 1;
1678 
1679              IF j > Cust_Curr_Hold.COUNT THEN
1680                  EXIT;
1681              END IF;
1682 
1683          END LOOP;
1684      END IF;
1685 
1686      -- Check Customer Sales Channel Holds
1687      IF p_header_rec.sold_to_org_id IS NOT NULL AND
1688         p_header_rec.sales_channel_code IS NOT NULL AND
1689         Cust_SalesChannel_Pointer.EXISTS(p_header_rec.sold_to_org_id)
1690      THEN
1691          j := Cust_SalesChannel_Pointer(p_header_rec.sold_to_org_id);
1692          WHILE Cust_SalesChannel_Hold(j).Entity_Id1 = p_header_rec.sold_to_org_id
1693          LOOP
1694 
1695              IF Cust_SalesChannel_Hold(j).Entity_Id2 = p_header_rec.sales_channel_code
1696              THEN
1697               Mark_Hold(p_header_id => p_header_rec.header_id,
1698                   p_line_id => NULL,
1699                   p_line_number => NULL,
1700                   p_hold_source_id => Cust_SalesChannel_Hold(j).hold_source_id,
1701                   p_ship_set_name => NULL,
1702                   p_arrival_set_name => NULL,
1703                   p_activity_name => Cust_SalesChannel_Hold(j).activity_name,
1704                   p_attribute => 'Customer/Sales Channel',
1705                   p_top_model_line_id => NULL
1706                   );
1707                IF Cust_SalesChannel_Hold(j).activity_name IS NULL THEN
1708                  p_on_generic_hold := TRUE;
1709                ELSIF Cust_SalesChannel_Hold(j).activity_name = 'BOOK_ORDER' THEN
1710                  p_on_booking_hold := TRUE;
1711                END IF;
1712 
1713              END IF;
1714              j := j + 1;
1715 
1716              IF j > Cust_SalesChannel_Hold.COUNT THEN
1717                  EXIT;
1718              END IF;
1719 
1720          END LOOP;
1721      END IF;
1722 
1723 --ER#7479609 end
1724   ELSE  -- Line Level Holds
1725 
1726   --ER# 13331078 start
1727        BEGIN
1731 	   mtl_default_category_sets  mdc
1728 	   select mic.category_id
1729 	   into l_itemcategory_id
1730 	   from mtl_item_categories mic,
1732 	   where mic.inventory_item_id = p_line_rec.inventory_item_id
1733 	   and mic.organization_id = oe_sys_parameters.Value('MASTER_ORGANIZATION_ID')  --13653352
1734 	   AND mdc.functional_area_id=7
1735 	   AND mdc.category_set_id = mic.category_set_id;
1736 	   EXCEPTION WHEN OTHERS THEN
1737 	   l_itemcategory_id := '';
1738 	   END;
1739 
1740 	--ER# 13331078 end
1741 
1742 
1743      IF p_check_only_warehouse_holds THEN
1744         GOTO Just_WareHouse_Holds;
1745      END IF;
1746 
1747 	 --ER# 3667551 start
1748 	 -- Check Customer Hold at Line Level for Credit Hold Enabled with SystemParameter to BillTo
1749 	  -- check should be for hold source entry of Bill To Customer of Line
1750 	 l_invoice_Custid:=CustAcctID_func(p_in_site_id => p_line_rec.invoice_to_org_id,
1751                                           p_out_IDfound=> l_custlin_hold);
1752      --IF Customer_Pointer.EXISTS(p_line_rec.sold_to_org_id) THEN
1753 	 IF (Customer_Pointer.EXISTS(l_invoice_Custid) AND l_custlin_hold = 'Y') THEN
1754 		  j := Customer_Pointer(l_invoice_Custid);
1755 		  oe_debug_pub.add(' CH sold_to_org_id= ' ||p_line_rec.sold_to_org_id||'invoice_to_org_id= '||p_line_rec.invoice_to_org_id);
1756 
1757 		 WHILE (Customer_hold(j).Entity_Id1 = l_invoice_Custid )
1758          LOOP
1759 
1760 			If(l_credithold_syspar='BTL' AND Customer_hold(j).hold_id=1) then
1761 			  Mark_Hold(p_header_id => p_line_rec.header_id,
1762 						p_line_id => p_line_rec.line_id,
1763 						p_line_number => p_line_rec.line_number,
1764 						p_hold_source_id => Customer_hold(j).hold_source_id,
1765 						p_ship_set_name => NULL,
1766 						p_arrival_set_name => NULL,
1767 						p_activity_name => Customer_hold(j).activity_name,
1768 						p_attribute => 'Customer',
1769 						p_top_model_line_id => p_line_rec.top_model_line_id
1770 						);
1771 
1772 			  IF Customer_hold(j).activity_name   IS NULL THEN
1773 				p_on_generic_hold                 := TRUE;
1774 			  ELSIF Customer_hold(j).activity_name = 'LINE_SCHEDULING' THEN
1775 				p_on_scheduling_hold              := TRUE;
1776 			  END IF;
1777 
1778 			END IF;
1779 			j   := j+1;
1780 
1781 			IF j > Customer_hold.COUNT THEN
1782 			  EXIT;
1783 			END IF;
1784 
1785 		  END LOOP;
1786 		END IF;
1787 		--ER# 3667551, END
1788 
1789      -- Check Item Hold
1790      IF p_line_rec.inventory_item_id IS NOT NULL AND
1791         Item_Pointer.EXISTS(p_line_rec.inventory_item_id)
1792      THEN
1793          j := Item_Pointer(p_line_rec.inventory_item_id);
1794          WHILE item_hold(j).Entity_Id1 = p_line_rec.inventory_item_id
1795          LOOP
1796             Mark_Hold(p_header_id => p_line_rec.header_id,
1797                   p_line_id => p_line_rec.line_id,
1798                   p_line_number => p_line_rec.line_number,
1799                   p_hold_source_id => Item_Hold(j).hold_source_id,
1800                   p_ship_set_name => NULL,
1801                   p_arrival_set_name => NULL,
1802                   p_activity_name => Item_hold(j).activity_name,
1803                   p_attribute => 'Item',
1804                   p_top_model_line_id => p_line_rec.top_model_line_id
1805                   );
1806             IF item_hold(j).activity_name IS NULL THEN
1807                p_on_generic_hold := TRUE;
1808             ELSIF item_hold(j).activity_name = 'LINE_SCHEDULING' THEN
1809                p_on_scheduling_hold := TRUE;
1810             END IF;
1811             j := j+1;
1812             IF j > Item_Hold.COUNT THEN
1813                 EXIT;
1814             END IF;
1815 
1816          END LOOP;
1817 
1818      END IF;
1819 
1820      -- Check Ship_To Hold
1821      IF p_line_rec.ship_to_org_id IS NOT NULL AND
1822         Ship_To_Pointer.EXISTS(p_line_rec.ship_to_org_id)
1823      THEN
1824          j := ship_to_Pointer(p_line_rec.ship_to_org_id);
1825          WHILE Ship_to_hold(j).Entity_Id1 = p_line_rec.ship_to_org_id
1826          LOOP
1827             Mark_Hold(p_header_id => p_line_rec.header_id,
1828                   p_line_id => p_line_rec.line_id,
1829                   p_line_number => p_line_rec.line_number,
1830                   p_hold_source_id => Ship_to_Hold(j).hold_source_id,
1831                   p_ship_set_name => NULL,
1832                   p_arrival_set_name => NULL,
1833                   p_activity_name => Ship_to_hold(j).activity_name,
1834                   p_attribute => 'Ship to Site',
1835                   p_top_model_line_id => p_line_rec.top_model_line_id
1836                   );
1837             IF Ship_to_hold(j).activity_name IS NULL THEN
1838                p_on_generic_hold := TRUE;
1839             ELSIF Ship_to_hold(j).activity_name = 'LINE_SCHEDULING' THEN
1840                p_on_scheduling_hold := TRUE;
1841             END IF;
1842             j := j+1;
1843             IF j > Ship_to_Hold.COUNT THEN
1844                 EXIT;
1845             END IF;
1846 
1847          END LOOP;
1848 
1849      END IF;
1850 
1851      -- Check Bill_To Hold
1852      IF p_line_rec.invoice_to_org_id IS NOT NULL AND
1853         Bill_To_Pointer.EXISTS(p_line_rec.invoice_to_org_id)
1854      THEN
1855          j := Bill_To_Pointer(p_line_rec.invoice_to_org_id);
1856          WHILE Bill_To_hold(j).Entity_Id1 = p_line_rec.invoice_to_org_id
1857          LOOP
1858             Mark_Hold(p_header_id => p_line_rec.header_id,
1859                   p_line_id => p_line_rec.line_id,
1860                   p_line_number => p_line_rec.line_number,
1861                   p_hold_source_id => Bill_To_hold(j).hold_source_id,
1862                   p_ship_set_name => NULL,
1863                   p_arrival_set_name => NULL,
1864                   p_activity_name => Bill_To_hold(j).activity_name,
1868             IF Bill_To_hold(j).activity_name IS NULL THEN
1865                   p_attribute => 'Bill to Site',
1866                   p_top_model_line_id => p_line_rec.top_model_line_id
1867                   );
1869                p_on_generic_hold := TRUE;
1870             ELSIF Bill_To_hold(j).activity_name = 'LINE_SCHEDULING' THEN
1871                p_on_scheduling_hold := TRUE;
1872             END IF;
1873             j := j+1;
1874             IF j > Bill_to_Hold.COUNT THEN
1875                 EXIT;
1876             END IF;
1877 
1878          END LOOP;
1879 
1880      END IF;
1881 
1882 --ER#7479609 start
1883 
1884      -- Check Price List Hold
1885      IF p_line_rec.price_list_id  IS NOT NULL AND
1886         PriceList_Pointer.EXISTS(p_line_rec.price_list_id)
1887      THEN
1888          j := PriceList_Pointer(p_line_rec.price_list_id);
1889          WHILE PriceList_Hold(j).Entity_Id1 = p_line_rec.price_list_id
1890          LOOP
1891             Mark_Hold(p_header_id => p_line_rec.header_id,
1892                   p_line_id => p_line_rec.line_id,
1893                   p_line_number => p_line_rec.line_number,
1894                   p_hold_source_id => PriceList_Hold(j).hold_source_id,
1895                   p_ship_set_name => NULL,
1896                   p_arrival_set_name => NULL,
1897                   p_activity_name => PriceList_Hold(j).activity_name,
1898                   p_attribute => 'Price List',
1899                   p_top_model_line_id => p_line_rec.top_model_line_id
1900                   );
1901             IF PriceList_Hold(j).activity_name IS NULL THEN
1902                p_on_generic_hold := TRUE;
1903             ELSIF PriceList_Hold(j).activity_name = 'LINE_SCHEDULING' THEN
1904                p_on_scheduling_hold := TRUE;
1905             END IF;
1906             j := j+1;
1907             IF j > PriceList_Hold.COUNT THEN
1908                 EXIT;
1909             END IF;
1910 
1911          END LOOP;
1912 
1913      END IF;
1914 
1915      -- Check Order Type Hold
1916      IF p_header_rec.order_type_id  IS NOT NULL AND
1917         OrderType_Pointer.EXISTS(p_header_rec.order_type_id)
1918      THEN
1919          j := OrderType_Pointer(p_header_rec.order_type_id);
1920          WHILE OrderType_Hold(j).Entity_Id1 = p_header_rec.order_type_id
1921          LOOP
1922             Mark_Hold(p_header_id => p_line_rec.header_id,
1923                   p_line_id => p_line_rec.line_id,
1924                   p_line_number => p_line_rec.line_number,
1925                   p_hold_source_id => OrderType_Hold(j).hold_source_id,
1926                   p_ship_set_name => NULL,
1927                   p_arrival_set_name => NULL,
1928                   p_activity_name => OrderType_Hold(j).activity_name,
1929                   p_attribute => 'POrder Type',
1930                   p_top_model_line_id => p_line_rec.top_model_line_id
1931                   );
1932             IF OrderType_Hold(j).activity_name IS NULL THEN
1933                p_on_generic_hold := TRUE;
1934             ELSIF OrderType_Hold(j).activity_name = 'LINE_SCHEDULING' THEN
1935                p_on_scheduling_hold := TRUE;
1936             END IF;
1937             j := j+1;
1938             IF j > OrderType_Hold.COUNT THEN
1939                 EXIT;
1940             END IF;
1941 
1942          END LOOP;
1943 
1944      END IF;
1945 
1946      -- Check Creation Date Hold
1947      IF p_line_rec.creation_date  IS NOT NULL AND
1948         CreationDate_Pointer.EXISTS(to_char(p_line_rec.creation_date,'DD-MON-RRRR'))
1949      THEN
1950          j := CreationDate_Pointer(to_char(p_line_rec.creation_date,'DD-MON-RRRR'));
1951          WHILE CreationDate_Hold(j).Entity_Id1 = to_char(p_line_rec.creation_date,'DD-MON-RRRR')
1952          LOOP
1953             Mark_Hold(p_header_id => p_line_rec.header_id,
1954                   p_line_id => p_line_rec.line_id,
1955                   p_line_number => p_line_rec.line_number,
1956                   p_hold_source_id => CreationDate_Hold(j).hold_source_id,
1957                   p_ship_set_name => NULL,
1958                   p_arrival_set_name => NULL,
1959                   p_activity_name => CreationDate_Hold(j).activity_name,
1960                   p_attribute => 'Creation Date',
1961                   p_top_model_line_id => p_line_rec.top_model_line_id
1962                   );
1963             IF CreationDate_Hold(j).activity_name IS NULL THEN
1964                p_on_generic_hold := TRUE;
1965             ELSIF CreationDate_Hold(j).activity_name = 'LINE_SCHEDULING' THEN
1966                p_on_scheduling_hold := TRUE;
1967             END IF;
1968             j := j+1;
1969             IF j > CreationDate_Hold.COUNT THEN
1970                 EXIT;
1971             END IF;
1972 
1973          END LOOP;
1974 
1975      END IF;
1976 
1977 
1978      -- Check Shipping Method Hold
1979      IF p_line_rec.shipping_method_code IS NOT NULL AND
1980         ShipMethod_Pointer.EXISTS(p_line_rec.shipping_method_code)
1981      THEN
1982          j := ShipMethod_Pointer(p_line_rec.shipping_method_code);
1983          WHILE ShipMethod_Hold(j).Entity_Id1 = p_line_rec.shipping_method_code
1984          LOOP
1985             Mark_Hold(p_header_id => p_line_rec.header_id,
1986                   p_line_id => p_line_rec.line_id,
1987                   p_line_number => p_line_rec.line_number,
1988                   p_hold_source_id => ShipMethod_Hold(j).hold_source_id,
1989                   p_ship_set_name => NULL,
1990                   p_arrival_set_name => NULL,
1991                   p_activity_name => ShipMethod_Hold(j).activity_name,
1992                   p_attribute => 'Shipping Method',
1993                   p_top_model_line_id => p_line_rec.top_model_line_id
1994                   );
1995             IF ShipMethod_Hold(j).activity_name IS NULL THEN
1996                p_on_generic_hold := TRUE;
2000             j := j+1;
1997             ELSIF ShipMethod_Hold(j).activity_name = 'LINE_SCHEDULING' THEN
1998                p_on_scheduling_hold := TRUE;
1999             END IF;
2001             IF j > ShipMethod_Hold.COUNT THEN
2002                 EXIT;
2003             END IF;
2004 
2005          END LOOP;
2006 
2007      END IF;
2008 
2009 
2010 --ER#7479609 end
2011 
2012 
2013      -- Check Item Customer Holds
2014      IF p_line_rec.inventory_item_id IS NOT NULL AND
2015         p_line_rec.sold_to_org_id IS NOT NULL AND
2016         Item_Customer_Pointer.EXISTS(p_line_rec.inventory_item_id)
2017      THEN
2018          j := Item_Customer_Pointer(p_line_rec.inventory_item_id);
2019          WHILE Item_Customer_hold(j).Entity_Id1 = p_line_rec.inventory_item_id
2020          LOOP
2021 
2022              IF Item_Customer_Hold(j).Entity_Id2 = p_line_rec.sold_to_org_id
2023              THEN
2024                  Mark_Hold(p_header_id => p_line_rec.header_id,
2025                   p_line_id => p_line_rec.line_id,
2026                   p_line_number => p_line_rec.line_number,
2027                   p_hold_source_id => Item_Customer_Hold(j).hold_source_id,
2028                   p_ship_set_name => NULL,
2029                   p_arrival_set_name => NULL,
2030                   p_activity_name => Item_Customer_Hold(j).activity_name,
2031                   p_attribute => 'Item\Customer',
2032                   p_top_model_line_id => p_line_rec.top_model_line_id
2033                   );
2034                  IF Item_Customer_Hold(j).activity_name IS NULL THEN
2035                     p_on_generic_hold := TRUE;
2036                  ELSIF Item_Customer_Hold(j).activity_name = 'LINE_SCHEDULING'
2037                  THEN
2038                     p_on_scheduling_hold := TRUE;
2039                  END IF;
2040 
2041              END IF;
2042              j := j + 1;
2043 
2044              IF j > Item_Customer_hold.COUNT THEN
2045                  EXIT;
2046              END IF;
2047 
2048          END LOOP;
2049      END IF;
2050 
2051      -- Check Item Shipto Holds
2052      IF p_line_rec.inventory_item_id IS NOT NULL AND
2053         p_line_rec.ship_to_org_id IS NOT NULL AND
2054         Item_Shipto_Pointer.EXISTS(p_line_rec.inventory_item_id)
2055      THEN
2056          j := Item_shipto_Pointer(p_line_rec.inventory_item_id);
2057          WHILE Item_shipto_hold(j).Entity_Id1 = p_line_rec.inventory_item_id
2058          LOOP
2059 
2060              IF Item_shipto_Hold(j).Entity_Id2 = p_line_rec.ship_to_org_id
2061              THEN
2062                  Mark_Hold(p_header_id => p_line_rec.header_id,
2063                   p_line_id => p_line_rec.line_id,
2064                   p_line_number => p_line_rec.line_number,
2065                   p_hold_source_id => Item_shipto_Hold(j).hold_source_id,
2066                   p_ship_set_name => NULL,
2067                   p_arrival_set_name => NULL,
2068                   p_activity_name => Item_shipto_Hold(j).activity_name,
2069                   p_attribute => 'Item\Ship to Site',
2070                   p_top_model_line_id => p_line_rec.top_model_line_id
2071                   );
2072                  IF Item_shipto_Hold(j).activity_name IS NULL THEN
2073                     p_on_generic_hold := TRUE;
2074                  ELSIF Item_shipto_Hold(j).activity_name = 'LINE_SCHEDULING'
2075                  THEN
2076                     p_on_scheduling_hold := TRUE;
2077                  END IF;
2078 
2079              END IF;
2080              j := j + 1;
2081 
2082              IF j > Item_shipto_hold.COUNT THEN
2083                  EXIT;
2084              END IF;
2085 
2086          END LOOP;
2087      END IF;
2088 
2089      -- Check Item LineType Holds
2090      IF p_line_rec.inventory_item_id IS NOT NULL AND
2091         p_line_rec.line_type_id IS NOT NULL AND
2092         Item_LineType_Pointer.EXISTS(p_line_rec.inventory_item_id)
2093      THEN
2094          j := Item_LineType_Pointer(p_line_rec.inventory_item_id);
2095          WHILE Item_LineType_Hold(j).Entity_Id1 = p_line_rec.inventory_item_id
2096          LOOP
2097 
2098              IF Item_LineType_Hold(j).Entity_Id2 = p_line_rec.line_type_id
2099              THEN
2100                  Mark_Hold(p_header_id => p_line_rec.header_id,
2101                   p_line_id => p_line_rec.line_id,
2102                   p_line_number => p_line_rec.line_number,
2103                   p_hold_source_id => Item_LineType_Hold(j).hold_source_id,
2104                   p_ship_set_name => NULL,
2105                   p_arrival_set_name => NULL,
2106                   p_activity_name => Item_LineType_Hold(j).activity_name,
2107                   p_attribute => 'Item\Line Type',
2108                   p_top_model_line_id => p_line_rec.top_model_line_id
2109                   );
2110                  IF Item_LineType_Hold(j).activity_name IS NULL THEN
2111                     p_on_generic_hold := TRUE;
2112                  ELSIF Item_LineType_Hold(j).activity_name = 'LINE_SCHEDULING'
2113                  THEN
2114                     p_on_scheduling_hold := TRUE;
2115                  END IF;
2116 
2117              END IF;
2118              j := j + 1;
2119 
2120              IF j > Item_LineType_Hold.COUNT THEN
2121                  EXIT;
2122              END IF;
2123 
2124          END LOOP;
2125      END IF;
2126 
2127 --ER#7479609 start
2128 
2129 
2130      -- Check Item Customer Holds
2131      IF p_line_rec.inventory_item_id IS NOT NULL AND
2132         p_line_rec.sold_to_org_id IS NOT NULL AND
2133         Item_Customer_Pointer.EXISTS(p_line_rec.inventory_item_id)
2134      THEN
2135          j := Item_Customer_Pointer(p_line_rec.inventory_item_id);
2136          WHILE Item_Customer_hold(j).Entity_Id1 = p_line_rec.inventory_item_id
2140              THEN
2137          LOOP
2138 
2139              IF Item_Customer_Hold(j).Entity_Id2 = p_line_rec.sold_to_org_id
2141                  Mark_Hold(p_header_id => p_line_rec.header_id,
2142                   p_line_id => p_line_rec.line_id,
2143                   p_line_number => p_line_rec.line_number,
2144                   p_hold_source_id => Item_Customer_Hold(j).hold_source_id,
2145                   p_ship_set_name => NULL,
2146                   p_arrival_set_name => NULL,
2147                   p_activity_name => Item_Customer_Hold(j).activity_name,
2148                   p_attribute => 'Item\Customer',
2149                   p_top_model_line_id => p_line_rec.top_model_line_id
2150                   );
2151                  IF Item_Customer_Hold(j).activity_name IS NULL THEN
2152                     p_on_generic_hold := TRUE;
2153                  ELSIF Item_Customer_Hold(j).activity_name = 'LINE_SCHEDULING'
2154                  THEN
2155                     p_on_scheduling_hold := TRUE;
2156                  END IF;
2157 
2158              END IF;
2159              j := j + 1;
2160 
2161              IF j > Item_Customer_hold.COUNT THEN
2162                  EXIT;
2163              END IF;
2164 
2165          END LOOP;
2166      END IF;
2167 
2168      -- Check Item Ship Method Holds
2169      IF p_line_rec.inventory_item_id IS NOT NULL AND
2170         p_line_rec.shipping_method_code IS NOT NULL AND
2171         Item_ShipMethod_Pointer.EXISTS(p_line_rec.inventory_item_id)
2172      THEN
2173          j := Item_ShipMethod_Pointer(p_line_rec.inventory_item_id);
2174          WHILE Item_ShipMethod_Hold(j).Entity_Id1 = p_line_rec.inventory_item_id
2175          LOOP
2176 
2177              IF Item_ShipMethod_Hold(j).Entity_Id2 = p_line_rec.shipping_method_code
2178              THEN
2179                  Mark_Hold(p_header_id => p_line_rec.header_id,
2180                   p_line_id => p_line_rec.line_id,
2181                   p_line_number => p_line_rec.line_number,
2182                   p_hold_source_id => Item_ShipMethod_Hold(j).hold_source_id,
2183                   p_ship_set_name => NULL,
2184                   p_arrival_set_name => NULL,
2185                   p_activity_name => Item_ShipMethod_Hold(j).activity_name,
2186                   p_attribute => 'Item\Ship Method',
2187                   p_top_model_line_id => p_line_rec.top_model_line_id
2188                   );
2189                  IF Item_ShipMethod_Hold(j).activity_name IS NULL THEN
2190                     p_on_generic_hold := TRUE;
2191                  ELSIF Item_ShipMethod_Hold(j).activity_name = 'LINE_SCHEDULING'
2192                  THEN
2193                     p_on_scheduling_hold := TRUE;
2194                  END IF;
2195 
2196              END IF;
2197              j := j + 1;
2198 
2199              IF j > Item_ShipMethod_Hold.COUNT THEN
2200                  EXIT;
2201              END IF;
2202 
2203          END LOOP;
2204      END IF;
2205 
2206      -- Check Item Deliver to Site Holds
2207      IF p_line_rec.inventory_item_id IS NOT NULL AND
2208         p_line_rec.deliver_to_org_id IS NOT NULL AND
2209         Item_Deliverto_Pointer.EXISTS(p_line_rec.inventory_item_id)
2210      THEN
2211          j := Item_Deliverto_Pointer(p_line_rec.inventory_item_id);
2212          WHILE Item_Deliverto_Hold(j).Entity_Id1 = p_line_rec.inventory_item_id
2213          LOOP
2214 
2215              IF Item_Deliverto_Hold(j).Entity_Id2 = p_line_rec.deliver_to_org_id
2216              THEN
2217                  Mark_Hold(p_header_id => p_line_rec.header_id,
2218                   p_line_id => p_line_rec.line_id,
2219                   p_line_number => p_line_rec.line_number,
2220                   p_hold_source_id => Item_Deliverto_Hold(j).hold_source_id,
2221                   p_ship_set_name => NULL,
2222                   p_arrival_set_name => NULL,
2223                   p_activity_name => Item_Deliverto_Hold(j).activity_name,
2224                   p_attribute => 'Item\Deliver to Site',
2225                   p_top_model_line_id => p_line_rec.top_model_line_id
2226                   );
2227                  IF Item_Deliverto_Hold(j).activity_name IS NULL THEN
2228                     p_on_generic_hold := TRUE;
2229                  ELSIF Item_Deliverto_Hold(j).activity_name = 'LINE_SCHEDULING'
2230                  THEN
2231                     p_on_scheduling_hold := TRUE;
2232                  END IF;
2233 
2234              END IF;
2235              j := j + 1;
2236 
2237              IF j > Item_Deliverto_Hold.COUNT THEN
2238                  EXIT;
2239              END IF;
2240 
2241          END LOOP;
2242      END IF;
2243 
2244 
2245      -- Check Item Price List Holds
2246      IF p_line_rec.inventory_item_id IS NOT NULL AND
2247         p_line_rec.price_list_id IS NOT NULL AND
2248         Item_PriceList_Pointer.EXISTS(p_line_rec.inventory_item_id)
2249      THEN
2250          j := Item_PriceList_Pointer(p_line_rec.inventory_item_id);
2251          WHILE Item_PriceList_Hold(j).Entity_Id1 = p_line_rec.inventory_item_id
2252          LOOP
2253 
2254              IF Item_PriceList_Hold(j).Entity_Id2 = p_line_rec.price_list_id
2255              THEN
2256                  Mark_Hold(p_header_id => p_line_rec.header_id,
2257                   p_line_id => p_line_rec.line_id,
2258                   p_line_number => p_line_rec.line_number,
2259                   p_hold_source_id => Item_PriceList_Hold(j).hold_source_id,
2260                   p_ship_set_name => NULL,
2261                   p_arrival_set_name => NULL,
2262                   p_activity_name => Item_PriceList_Hold(j).activity_name,
2263                   p_attribute => 'Item\Price List',
2264                   p_top_model_line_id => p_line_rec.top_model_line_id
2265                   );
2269                  THEN
2266                  IF Item_PriceList_Hold(j).activity_name IS NULL THEN
2267                     p_on_generic_hold := TRUE;
2268                  ELSIF Item_PriceList_Hold(j).activity_name = 'LINE_SCHEDULING'
2270                     p_on_scheduling_hold := TRUE;
2271                  END IF;
2272 
2273              END IF;
2274              j := j + 1;
2275 
2276              IF j > Item_PriceList_Hold.COUNT THEN
2277                  EXIT;
2278              END IF;
2279 
2280          END LOOP;
2281      END IF;
2282 
2283 
2284      -- Check Item Source Type Holds
2285      IF p_line_rec.inventory_item_id IS NOT NULL AND
2286         p_line_rec.source_type_code IS NOT NULL AND
2287         Item_SourceType_Pointer.EXISTS(p_line_rec.inventory_item_id)
2288      THEN
2289          j := Item_SourceType_Pointer(p_line_rec.inventory_item_id);
2290          WHILE Item_SourceType_Hold(j).Entity_Id1 = p_line_rec.inventory_item_id
2291          LOOP
2292 
2293              IF Item_SourceType_Hold(j).Entity_Id2 = p_line_rec.source_type_code
2294              THEN
2295                  Mark_Hold(p_header_id => p_line_rec.header_id,
2296                   p_line_id => p_line_rec.line_id,
2297                   p_line_number => p_line_rec.line_number,
2298                   p_hold_source_id => Item_SourceType_Hold(j).hold_source_id,
2299                   p_ship_set_name => NULL,
2300                   p_arrival_set_name => NULL,
2301                   p_activity_name => Item_SourceType_Hold(j).activity_name,
2302                   p_attribute => 'Item\Source Type',
2303                   p_top_model_line_id => p_line_rec.top_model_line_id
2304                   );
2305                  IF Item_SourceType_Hold(j).activity_name IS NULL THEN
2306                     p_on_generic_hold := TRUE;
2307                  ELSIF Item_SourceType_Hold(j).activity_name = 'LINE_SCHEDULING'
2308                  THEN
2309                     p_on_scheduling_hold := TRUE;
2310                  END IF;
2311 
2312              END IF;
2313              j := j + 1;
2314 
2315              IF j > Item_SourceType_Hold.COUNT THEN
2316                  EXIT;
2317              END IF;
2318 
2319          END LOOP;
2320      END IF;
2321 
2322 --ER#7479609 end
2323 
2324      -- Check Item BillTo Holds
2325      IF p_line_rec.inventory_item_id IS NOT NULL AND
2326         p_line_rec.invoice_to_org_id IS NOT NULL AND
2327         Item_Billto_Pointer.EXISTS(p_line_rec.inventory_item_id)
2328      THEN
2329          j := Item_billto_Pointer(p_line_rec.inventory_item_id);
2330          WHILE Item_billto_hold(j).Entity_Id1 = p_line_rec.inventory_item_id
2331          LOOP
2332 
2333              IF Item_billto_Hold(j).Entity_Id2 = p_line_rec.invoice_to_org_id
2334              THEN
2335                  Mark_Hold(p_header_id => p_line_rec.header_id,
2336                   p_line_id => p_line_rec.line_id,
2337                   p_line_number => p_line_rec.line_number,
2338                   p_hold_source_id => Item_billto_Hold(j).hold_source_id,
2339                   p_ship_set_name => NULL,
2340                   p_arrival_set_name => NULL,
2341                   p_activity_name => Item_billto_Hold(j).activity_name,
2342                   p_attribute => 'Item\Bill to Site',
2343                   p_top_model_line_id => p_line_rec.top_model_line_id
2344                   );
2345                  IF Item_billto_Hold(j).activity_name IS NULL THEN
2346                     p_on_generic_hold := TRUE;
2347                  ELSIF Item_billto_Hold(j).activity_name = 'LINE_SCHEDULING'
2348                  THEN
2349                     p_on_scheduling_hold := TRUE;
2350                  END IF;
2351 
2352              END IF;
2353              j := j + 1;
2354 
2355              IF j > Item_billto_hold.COUNT THEN
2356                  EXIT;
2357              END IF;
2358 
2359          END LOOP;
2360      END IF;
2361 
2362 --ER#7479609 start
2363 
2364      -- Check Customer Source Type  Holds
2365      IF p_line_rec.sold_to_org_id IS NOT NULL AND
2366         p_line_rec.source_type_code IS NOT NULL AND
2367         Cust_SourceType_Pointer.EXISTS(p_line_rec.sold_to_org_id)
2368      THEN
2369          j := Cust_SourceType_Pointer(p_line_rec.sold_to_org_id);
2370          WHILE Cust_SourceType_Hold(j).Entity_Id1 = p_line_rec.sold_to_org_id
2371          LOOP
2372 
2373              IF Cust_SourceType_Hold(j).Entity_Id2 = p_line_rec.source_type_code
2374              THEN
2375                  Mark_Hold(p_header_id => p_line_rec.header_id,
2376                   p_line_id => p_line_rec.line_id,
2377                   p_line_number => p_line_rec.line_number,
2378                   p_hold_source_id => Cust_SourceType_Hold(j).hold_source_id,
2379                   p_ship_set_name => NULL,
2380                   p_arrival_set_name => NULL,
2381                   p_activity_name => Cust_SourceType_Hold(j).activity_name,
2382                   p_attribute => 'Customer/Source Type',
2383                   p_top_model_line_id => p_line_rec.top_model_line_id
2384                   );
2385                  IF Cust_SourceType_Hold(j).activity_name IS NULL THEN
2386                     p_on_generic_hold := TRUE;
2387                  ELSIF Cust_SourceType_Hold(j).activity_name = 'LINE_SCHEDULING'
2388                  THEN
2389                     p_on_scheduling_hold := TRUE;
2390                  END IF;
2391 
2392              END IF;
2393              j := j + 1;
2394 
2395              IF j > Cust_SourceType_Hold.COUNT THEN
2396                  EXIT;
2397              END IF;
2398 
2399          END LOOP;
2400      END IF;
2401 
2402      -- Check Customer Bill to Site  Holds
2406      THEN
2403      IF p_line_rec.sold_to_org_id IS NOT NULL AND
2404         p_line_rec.invoice_to_org_id IS NOT NULL AND
2405         Cust_Billto_Pointer.EXISTS(p_line_rec.sold_to_org_id)
2407          j := Cust_Billto_Pointer(p_line_rec.sold_to_org_id);
2408          WHILE Cust_Billto_Hold(j).Entity_Id1 = p_line_rec.sold_to_org_id
2409          LOOP
2410 
2411              IF Cust_Billto_Hold(j).Entity_Id2 = p_line_rec.invoice_to_org_id
2412              THEN
2413                  Mark_Hold(p_header_id => p_line_rec.header_id,
2414                   p_line_id => p_line_rec.line_id,
2415                   p_line_number => p_line_rec.line_number,
2416                   p_hold_source_id => Cust_Billto_Hold(j).hold_source_id,
2417                   p_ship_set_name => NULL,
2418                   p_arrival_set_name => NULL,
2419                   p_activity_name => Cust_Billto_Hold(j).activity_name,
2420                   p_attribute => 'Customer/Bill to Site',
2421                   p_top_model_line_id => p_line_rec.top_model_line_id
2422                   );
2423                  IF Cust_Billto_Hold(j).activity_name IS NULL THEN
2424                     p_on_generic_hold := TRUE;
2425                  ELSIF Cust_Billto_Hold(j).activity_name = 'LINE_SCHEDULING'
2426                  THEN
2427                     p_on_scheduling_hold := TRUE;
2428                  END IF;
2429 
2430              END IF;
2431              j := j + 1;
2432 
2433              IF j > Cust_Billto_Hold.COUNT THEN
2434                  EXIT;
2435              END IF;
2436 
2437          END LOOP;
2438      END IF;
2439 
2440      -- Check Customer Ship to Site  Holds
2441      IF p_line_rec.sold_to_org_id IS NOT NULL AND
2442         p_line_rec.ship_to_org_id IS NOT NULL AND
2443         Cust_Shipto_Pointer.EXISTS(p_line_rec.sold_to_org_id)
2444      THEN
2445          j := Cust_Shipto_Pointer(p_line_rec.sold_to_org_id);
2446          WHILE Cust_Shipto_Hold(j).Entity_Id1 = p_line_rec.sold_to_org_id
2447          LOOP
2448 
2449              IF Cust_Shipto_Hold(j).Entity_Id2 = p_line_rec.ship_to_org_id
2450              THEN
2451                  Mark_Hold(p_header_id => p_line_rec.header_id,
2452                   p_line_id => p_line_rec.line_id,
2453                   p_line_number => p_line_rec.line_number,
2454                   p_hold_source_id => Cust_Shipto_Hold(j).hold_source_id,
2455                   p_ship_set_name => NULL,
2456                   p_arrival_set_name => NULL,
2457                   p_activity_name => Cust_Shipto_Hold(j).activity_name,
2458                   p_attribute => 'Customer/Ship to Site',
2459                   p_top_model_line_id => p_line_rec.top_model_line_id
2460                   );
2461                  IF Cust_Shipto_Hold(j).activity_name IS NULL THEN
2462                     p_on_generic_hold := TRUE;
2463                  ELSIF Cust_Shipto_Hold(j).activity_name = 'LINE_SCHEDULING'
2464                  THEN
2465                     p_on_scheduling_hold := TRUE;
2466                  END IF;
2467 
2468              END IF;
2469              j := j + 1;
2470 
2471              IF j > Cust_Shipto_Hold.COUNT THEN
2472                  EXIT;
2473              END IF;
2474 
2475          END LOOP;
2476      END IF;
2477 
2478 
2479      -- Check Customer Deliver to Site  Holds
2480      IF p_line_rec.sold_to_org_id IS NOT NULL AND
2481         p_line_rec.deliver_to_org_id IS NOT NULL AND
2482         Cust_Deliverto_Pointer.EXISTS(p_line_rec.sold_to_org_id)
2483      THEN
2484          j := Cust_Deliverto_Pointer(p_line_rec.sold_to_org_id);
2485          WHILE Cust_Deliverto_Hold(j).Entity_Id1 = p_line_rec.deliver_to_org_id
2486          LOOP
2487 
2488              IF Cust_Deliverto_Hold(j).Entity_Id2 = p_line_rec.ship_to_org_id
2489              THEN
2490                  Mark_Hold(p_header_id => p_line_rec.header_id,
2491                   p_line_id => p_line_rec.line_id,
2492                   p_line_number => p_line_rec.line_number,
2493                   p_hold_source_id => Cust_Deliverto_Hold(j).hold_source_id,
2494                   p_ship_set_name => NULL,
2495                   p_arrival_set_name => NULL,
2496                   p_activity_name => Cust_Deliverto_Hold(j).activity_name,
2497                   p_attribute => 'Customer/Deliver to Site',
2498                   p_top_model_line_id => p_line_rec.top_model_line_id
2499                   );
2500                  IF Cust_Deliverto_Hold(j).activity_name IS NULL THEN
2501                     p_on_generic_hold := TRUE;
2502                  ELSIF Cust_Deliverto_Hold(j).activity_name = 'LINE_SCHEDULING'
2503                  THEN
2504                     p_on_scheduling_hold := TRUE;
2505                  END IF;
2506 
2507              END IF;
2508              j := j + 1;
2509 
2510              IF j > Cust_Deliverto_Hold.COUNT THEN
2511                  EXIT;
2512              END IF;
2513 
2514          END LOOP;
2515      END IF;
2516 
2517 
2518      -- Check Customer Price List Holds
2519      IF p_line_rec.sold_to_org_id IS NOT NULL AND
2520         p_line_rec.price_list_id IS NOT NULL AND
2521         Cust_PriceList_Pointer.EXISTS(p_line_rec.sold_to_org_id)
2522      THEN
2523          j := Cust_PriceList_Pointer(p_line_rec.sold_to_org_id);
2524          WHILE Cust_PriceList_Hold(j).Entity_Id1 = p_line_rec.deliver_to_org_id
2525          LOOP
2526 
2527              IF Cust_PriceList_Hold(j).Entity_Id2 = p_line_rec.price_list_id
2528              THEN
2529                  Mark_Hold(p_header_id => p_line_rec.header_id,
2530                   p_line_id => p_line_rec.line_id,
2531                   p_line_number => p_line_rec.line_number,
2532                   p_hold_source_id => Cust_PriceList_Hold(j).hold_source_id,
2533                   p_ship_set_name => NULL,
2534                   p_arrival_set_name => NULL,
2538                   );
2535                   p_activity_name => Cust_PriceList_Hold(j).activity_name,
2536                   p_attribute => 'Customer/Price List',
2537                   p_top_model_line_id => p_line_rec.top_model_line_id
2539                  IF Cust_PriceList_Hold(j).activity_name IS NULL THEN
2540                     p_on_generic_hold := TRUE;
2541                  ELSIF Cust_PriceList_Hold(j).activity_name = 'LINE_SCHEDULING'
2542                  THEN
2543                     p_on_scheduling_hold := TRUE;
2544                  END IF;
2545 
2546              END IF;
2547              j := j + 1;
2548 
2549              IF j > Cust_PriceList_Hold.COUNT THEN
2550                  EXIT;
2551              END IF;
2552 
2553          END LOOP;
2554      END IF;
2555 
2556      -- Check Customer Line type Holds
2557      IF p_line_rec.sold_to_org_id IS NOT NULL AND
2558         p_line_rec.line_type_id IS NOT NULL AND
2559         Cust_LineType_Pointer.EXISTS(p_line_rec.sold_to_org_id)
2560      THEN
2561          j := Cust_LineType_Pointer(p_line_rec.sold_to_org_id);
2562          WHILE Cust_LineType_Hold(j).Entity_Id1 = p_line_rec.deliver_to_org_id
2563          LOOP
2564 
2565              IF Cust_LineType_Hold(j).Entity_Id2 = p_line_rec.line_type_id
2566              THEN
2567                  Mark_Hold(p_header_id => p_line_rec.header_id,
2568                   p_line_id => p_line_rec.line_id,
2569                   p_line_number => p_line_rec.line_number,
2570                   p_hold_source_id => Cust_LineType_Hold(j).hold_source_id,
2571                   p_ship_set_name => NULL,
2572                   p_arrival_set_name => NULL,
2573                   p_activity_name => Cust_LineType_Hold(j).activity_name,
2574                   p_attribute => 'Customer/Line Type',
2575                   p_top_model_line_id => p_line_rec.top_model_line_id
2576                   );
2577                  IF Cust_LineType_Hold(j).activity_name IS NULL THEN
2578                     p_on_generic_hold := TRUE;
2579                  ELSIF Cust_LineType_Hold(j).activity_name = 'LINE_SCHEDULING'
2580                  THEN
2581                     p_on_scheduling_hold := TRUE;
2582                  END IF;
2583 
2584              END IF;
2585              j := j + 1;
2586 
2587              IF j > Cust_LineType_Hold.COUNT THEN
2588                  EXIT;
2589              END IF;
2590 
2591          END LOOP;
2592      END IF;
2593 
2594      -- Check Customer Payment term Holds
2595      IF p_line_rec.sold_to_org_id IS NOT NULL AND
2596         p_line_rec.payment_term_id IS NOT NULL AND
2597         Cust_PayTerm_Pointer.EXISTS(p_line_rec.sold_to_org_id)
2598      THEN
2599          j := Cust_PayTerm_Pointer(p_line_rec.sold_to_org_id);
2600          WHILE Cust_PayTerm_Hold(j).Entity_Id1 = p_line_rec.deliver_to_org_id
2601          LOOP
2602 
2603              IF Cust_PayTerm_Hold(j).Entity_Id2 = p_line_rec.payment_term_id
2604              THEN
2605                  Mark_Hold(p_header_id => p_line_rec.header_id,
2606                   p_line_id => p_line_rec.line_id,
2607                   p_line_number => p_line_rec.line_number,
2608                   p_hold_source_id => Cust_PayTerm_Hold(j).hold_source_id,
2609                   p_ship_set_name => NULL,
2610                   p_arrival_set_name => NULL,
2611                   p_activity_name => Cust_PayTerm_Hold(j).activity_name,
2612                   p_attribute => 'Customer/Payment Term',
2613                   p_top_model_line_id => p_line_rec.top_model_line_id
2614                   );
2615                  IF Cust_PayTerm_Hold(j).activity_name IS NULL THEN
2616                     p_on_generic_hold := TRUE;
2617                  ELSIF Cust_PayTerm_Hold(j).activity_name = 'LINE_SCHEDULING'
2618                  THEN
2619                     p_on_scheduling_hold := TRUE;
2620                  END IF;
2621 
2622              END IF;
2623              j := j + 1;
2624 
2625              IF j > Cust_PayTerm_Hold.COUNT THEN
2626                  EXIT;
2627              END IF;
2628 
2629          END LOOP;
2630      END IF;
2631 
2632 
2633      -- Check Order Type Line Type Holds
2634      IF p_header_rec.order_type_id IS NOT NULL AND
2635         p_line_rec.line_type_id IS NOT NULL AND
2636         OrderType_LineType_Pointer.EXISTS(p_header_rec.order_type_id)
2637      THEN
2638          j := OrderType_LineType_Pointer(p_header_rec.order_type_id);
2639          WHILE OrderType_LineType_Hold(j).Entity_Id1 = p_header_rec.order_type_id
2640          LOOP
2641 
2642              IF OrderType_LineType_Hold(j).Entity_Id2 = p_line_rec.line_type_id
2643              THEN
2644                  Mark_Hold(p_header_id => p_line_rec.header_id,
2645                   p_line_id => p_line_rec.line_id,
2646                   p_line_number => p_line_rec.line_number,
2647                   p_hold_source_id => OrderType_LineType_Hold(j).hold_source_id,
2648                   p_ship_set_name => NULL,
2649                   p_arrival_set_name => NULL,
2650                   p_activity_name => OrderType_LineType_Hold(j).activity_name,
2651                   p_attribute => 'Order Type/Line Type',
2652                   p_top_model_line_id => p_line_rec.top_model_line_id
2653                   );
2654                  IF OrderType_LineType_Hold(j).activity_name IS NULL THEN
2655                     p_on_generic_hold := TRUE;
2656                  ELSIF OrderType_LineType_Hold(j).activity_name = 'LINE_SCHEDULING'
2657                  THEN
2658                     p_on_scheduling_hold := TRUE;
2659                  END IF;
2660 
2661              END IF;
2662              j := j + 1;
2663 
2664              IF j > OrderType_LineType_Hold.COUNT THEN
2665                  EXIT;
2666              END IF;
2667 
2668          END LOOP;
2669      END IF;
2670 
2671 
2675         CreDate_CreBy_Pointer.EXISTS(to_char(p_line_rec.creation_date,'DD-MON-RRRR'))
2672      -- Check Creation date/Creation By Holds
2673      IF p_line_rec.creation_date IS NOT NULL AND
2674         p_line_rec.created_by IS NOT NULL AND
2676      THEN
2677          j := CreDate_CreBy_Pointer(to_char(p_line_rec.creation_date,'DD-MON-RRRR'));
2678          WHILE CreDate_CreBy_Hold(j).Entity_Id1 = to_char(p_line_rec.creation_date,'DD-MON-RRRR')
2679          LOOP
2680 
2681              IF CreDate_CreBy_Hold(j).Entity_Id2 = p_line_rec.created_by
2682              THEN
2683                  Mark_Hold(p_header_id => p_line_rec.header_id,
2684                   p_line_id => p_line_rec.line_id,
2685                   p_line_number => p_line_rec.line_number,
2686                   p_hold_source_id => CreDate_CreBy_Hold(j).hold_source_id,
2687                   p_ship_set_name => NULL,
2688                   p_arrival_set_name => NULL,
2689                   p_activity_name => CreDate_CreBy_Hold(j).activity_name,
2690                   p_attribute => 'Creation Date/Creation By',
2691                   p_top_model_line_id => p_line_rec.top_model_line_id
2692                   );
2693                  IF CreDate_CreBy_Hold(j).activity_name IS NULL THEN
2694                     p_on_generic_hold := TRUE;
2695                  ELSIF CreDate_CreBy_Hold(j).activity_name = 'LINE_SCHEDULING'
2696                  THEN
2697                     p_on_scheduling_hold := TRUE;
2698                  END IF;
2699 
2700              END IF;
2701              j := j + 1;
2702 
2703              IF j > CreDate_CreBy_Hold.COUNT THEN
2704                  EXIT;
2705              END IF;
2706 
2707          END LOOP;
2708      END IF;
2709 
2710 
2711 --ER#7479609 end
2712     --ER# 12571983 start
2713 	-- Check EndCustomer Holds
2714 	IF EndCust_Pointer.EXISTS(p_line_rec.end_customer_id) THEN
2715 
2716          j := EndCust_Pointer(p_line_rec.end_customer_id);
2717          WHILE EndCust_Hold(j).Entity_Id1 = p_line_rec.end_customer_id
2718          LOOP
2719              Mark_Hold(p_header_id => p_line_rec.header_id,
2720                   p_line_id =>  p_line_rec.line_id,
2721                   p_line_number => p_line_rec.line_number,
2722                   p_hold_source_id => EndCust_Hold(j).hold_source_id,
2723                   p_ship_set_name => NULL,
2724                   p_arrival_set_name => NULL,
2725                   p_activity_name => EndCust_Hold(j).activity_name,
2726                   p_attribute => 'End Customer',
2727                   p_top_model_line_id => p_line_rec.top_model_line_id
2728                   );
2729              IF EndCust_Hold(j).activity_name IS NULL THEN
2730                p_on_generic_hold := TRUE;
2731              ELSIF EndCust_Hold(j).activity_name = 'LINE_SCHEDULING'
2732                 THEN
2733                     p_on_scheduling_hold := TRUE;
2734                 END IF;
2735              j := j+1;
2736 
2737              IF j > EndCust_Hold.COUNT THEN
2738                  EXIT;
2739              END IF;
2740 
2741          END LOOP;
2742 
2743      END IF;
2744 
2745 	 -- Check End Customer, Order Type Holds
2746      IF p_line_rec.end_customer_id IS NOT NULL AND
2747         p_header_rec.order_type_id IS NOT NULL AND
2748         EndCust_OrderType_Pointer.EXISTS(p_line_rec.end_customer_id)
2749      THEN
2750          j := EndCust_OrderType_Pointer(p_line_rec.end_customer_id);
2751 
2752 		 WHILE EndCust_OrderType_Hold(j).Entity_Id1 = p_line_rec.end_customer_id
2753          LOOP
2754              IF EndCust_OrderType_Hold(j).Entity_Id2 = p_header_rec.order_type_id
2755              THEN
2756               Mark_Hold(p_header_id => p_line_rec.header_id,
2757                   p_line_id => p_line_rec.line_id,
2758                   p_line_number => p_line_rec.line_number,
2759                   p_hold_source_id => EndCust_OrderType_Hold(j).hold_source_id,
2760                   p_ship_set_name => NULL,
2761                   p_arrival_set_name => NULL,
2762                   p_activity_name => EndCust_OrderType_Hold(j).activity_name,
2763                   p_attribute => 'End Customer/Order Type',
2764                   p_top_model_line_id => p_line_rec.top_model_line_id
2765                   );
2766                IF EndCust_OrderType_Hold(j).activity_name IS NULL THEN
2767                  p_on_generic_hold := TRUE;
2768                ELSIF EndCust_OrderType_Hold(j).activity_name = 'LINE_SCHEDULING'
2769                 THEN
2770                     p_on_scheduling_hold := TRUE;
2771                 END IF;
2772 
2773              END IF;
2774              j := j + 1;
2775 
2776              IF j > EndCust_OrderType_Hold.COUNT THEN
2777                  EXIT;
2778              END IF;
2779 
2780          END LOOP;
2781      END IF;
2782 
2783 
2784      -- Check End Customer, payment Type Holds
2785 
2786      IF p_line_rec.end_customer_id IS NOT NULL AND
2787         p_header_rec.payment_type_code IS NOT NULL AND
2788         EndCust_PaymentType_Pointer.EXISTS(p_line_rec.end_customer_id)
2789      THEN
2790          j := EndCust_PaymentType_Pointer(p_line_rec.end_customer_id);
2791          WHILE EndCust_PaymentType_Hold(j).Entity_Id1 = p_line_rec.end_customer_id
2792          LOOP
2793 
2794              IF EndCust_PaymentType_Hold(j).Entity_Id2 = p_header_rec.payment_type_code
2795              THEN
2796               Mark_Hold(p_header_id => p_line_rec.header_id,
2797                   p_line_id => p_line_rec.line_id,
2798                   p_line_number => p_line_rec.line_number,
2799                   p_hold_source_id => EndCust_PaymentType_Hold(j).hold_source_id,
2800                   p_ship_set_name => NULL,
2801                   p_arrival_set_name => NULL,
2802                   p_activity_name => EndCust_PaymentType_Hold(j).activity_name,
2806                IF EndCust_PaymentType_Hold(j).activity_name IS NULL THEN
2803                   p_attribute => 'End Customer/Payment Type',
2804                   p_top_model_line_id => p_line_rec.top_model_line_id
2805                   );
2807                  p_on_generic_hold := TRUE;
2808                ELSIF EndCust_PaymentType_Hold(j).activity_name = 'LINE_SCHEDULING'
2809                 THEN
2810                     p_on_scheduling_hold := TRUE;
2811                 END IF;
2812 
2813              END IF;
2814              j := j + 1;
2815 
2816              IF j > EndCust_PaymentType_Hold.COUNT THEN
2817                  EXIT;
2818              END IF;
2819 
2820          END LOOP;
2821      END IF;
2822 
2823      -- Check End Customer, currency Holds
2824      IF p_line_rec.end_customer_id IS NOT NULL AND
2825         p_header_rec.transactional_curr_code  IS NOT NULL AND
2826         EndCust_Curr_Pointer.EXISTS(p_line_rec.end_customer_id)
2827      THEN
2828          j := EndCust_Curr_Pointer(p_line_rec.end_customer_id);
2829          WHILE EndCust_Curr_Hold(j).Entity_Id1 = p_line_rec.end_customer_id
2830          LOOP
2831 
2832              IF EndCust_Curr_Hold(j).Entity_Id2 = p_header_rec.transactional_curr_code
2833              THEN
2834               Mark_Hold(p_header_id => p_line_rec.header_id,
2835                   p_line_id => p_line_rec.line_id,
2836                   p_line_number => p_line_rec.line_number,
2837                   p_hold_source_id => EndCust_Curr_Hold(j).hold_source_id,
2838                   p_ship_set_name => NULL,
2839                   p_arrival_set_name => NULL,
2840                   p_activity_name => EndCust_Curr_Hold(j).activity_name,
2841                   p_attribute => 'End Customer/Currency',
2842                   p_top_model_line_id => p_line_rec.top_model_line_id
2843                   );
2844                IF EndCust_Curr_Hold(j).activity_name IS NULL THEN
2845                  p_on_generic_hold := TRUE;
2846                ELSIF EndCust_Curr_Hold(j).activity_name = 'LINE_SCHEDULING'
2847                 THEN
2848                     p_on_scheduling_hold := TRUE;
2849                 END IF;
2850 
2851              END IF;
2852              j := j + 1;
2853 
2854              IF j > EndCust_Curr_Hold.COUNT THEN
2855                  EXIT;
2856              END IF;
2857 
2858          END LOOP;
2859      END IF;
2860 
2861      -- Check End Customer, Sales Channel Holds
2862      IF p_line_rec.end_customer_id IS NOT NULL AND
2863         p_header_rec.sales_channel_code IS NOT NULL AND
2864         EndCust_SalesChannel_Pointer.EXISTS(p_line_rec.end_customer_id)
2865      THEN
2866          j := EndCust_SalesChannel_Pointer(p_line_rec.end_customer_id);
2867          WHILE EndCust_SalesChannel_Hold(j).Entity_Id1 = p_line_rec.end_customer_id
2868          LOOP
2869 
2870              IF EndCust_SalesChannel_Hold(j).Entity_Id2 = p_header_rec.sales_channel_code
2871              THEN
2872               Mark_Hold(p_header_id => p_line_rec.header_id,
2873                   p_line_id => p_line_rec.line_id,
2874                   p_line_number => p_line_rec.line_number,
2875                   p_hold_source_id => EndCust_SalesChannel_Hold(j).hold_source_id,
2876                   p_ship_set_name => NULL,
2877                   p_arrival_set_name => NULL,
2878                   p_activity_name => EndCust_SalesChannel_Hold(j).activity_name,
2879                   p_attribute => 'End Customer/Sales Channel',
2880                   p_top_model_line_id => p_line_rec.top_model_line_id
2881                   );
2882                IF EndCust_SalesChannel_Hold(j).activity_name IS NULL THEN
2883                  p_on_generic_hold := TRUE;
2884                ELSIF EndCust_SalesChannel_Hold(j).activity_name = 'LINE_SCHEDULING'
2885                 THEN
2886                     p_on_scheduling_hold := TRUE;
2887                 END IF;
2888 
2889              END IF;
2890              j := j + 1;
2891 
2892              IF j > EndCust_SalesChannel_Hold.COUNT THEN
2893                  EXIT;
2894              END IF;
2895 
2896          END LOOP;
2897      END IF;
2898 
2899 	 -- Check End Customer, End Customer Location Holds
2900      IF p_line_rec.end_customer_id IS NOT NULL AND
2901         p_line_rec.end_customer_site_use_id IS NOT NULL AND
2902         EndCust_EndCustLoc_Pointer.EXISTS(p_line_rec.end_customer_id)
2903      THEN
2904 	     j := EndCust_EndCustLoc_Pointer(p_line_rec.end_customer_id);
2905          WHILE EndCust_EndCustLoc_Hold(j).Entity_Id1 = p_line_rec.end_customer_id
2906          LOOP
2907 
2908              IF EndCust_EndCustLoc_Hold(j).Entity_Id2 = p_line_rec.end_customer_site_use_id
2909              THEN
2910               Mark_Hold(p_header_id => p_line_rec.header_id,
2911                   p_line_id => p_line_rec.line_id,
2912                   p_line_number => p_line_rec.line_number,
2913                   p_hold_source_id => EndCust_EndCustLoc_Hold(j).hold_source_id,
2914                   p_ship_set_name => NULL,
2915                   p_arrival_set_name => NULL,
2916                   p_activity_name => EndCust_EndCustLoc_Hold(j).activity_name,
2917                   p_attribute => 'End Customer/End Customer Location',
2918                   p_top_model_line_id => p_line_rec.top_model_line_id
2919                   );
2920                IF EndCust_EndCustLoc_Hold(j).activity_name IS NULL THEN
2921                  p_on_generic_hold := TRUE;
2922                ELSIF EndCust_EndCustLoc_Hold(j).activity_name = 'LINE_SCHEDULING'
2923                 THEN
2924                     p_on_scheduling_hold := TRUE;
2925                 END IF;
2926 
2927              END IF;
2928              j := j + 1;
2929 
2930              IF j > EndCust_EndCustLoc_Hold.COUNT THEN
2931                  EXIT;
2932              END IF;
2933 
2934          END LOOP;
2935      END IF;
2936 
2937     -- Check Item, EndCustomer Holds
2938 	 IF p_line_rec.inventory_item_id IS NOT NULL AND
2939         p_line_rec.end_customer_id IS NOT NULL AND
2940         Item_EndCust_Pointer.EXISTS(p_line_rec.inventory_item_id)
2941      THEN
2942          j := Item_EndCust_Pointer(p_line_rec.inventory_item_id);
2943          WHILE Item_EndCust_Hold(j).Entity_Id1 = p_line_rec.inventory_item_id
2944          LOOP
2945 
2946              IF Item_EndCust_Hold(j).Entity_Id2 = p_line_rec.end_customer_id
2947              THEN
2948                  Mark_Hold(p_header_id => p_line_rec.header_id,
2949                   p_line_id => p_line_rec.line_id,
2950                   p_line_number => p_line_rec.line_number,
2951                   p_hold_source_id => Item_EndCust_Hold(j).hold_source_id,
2952                   p_ship_set_name => NULL,
2953                   p_arrival_set_name => NULL,
2954                   p_activity_name => Item_EndCust_Hold(j).activity_name,
2955                   p_attribute => 'Item\End Customer',
2956                   p_top_model_line_id => p_line_rec.top_model_line_id
2957                   );
2958                  IF Item_EndCust_Hold(j).activity_name IS NULL THEN
2959                     p_on_generic_hold := TRUE;
2960                  ELSIF Item_EndCust_Hold(j).activity_name = 'LINE_SCHEDULING'
2961                  THEN
2962                     p_on_scheduling_hold := TRUE;
2963                  END IF;
2964 
2965              END IF;
2966              j := j + 1;
2967 
2968              IF j > Item_EndCust_Hold.COUNT THEN
2969                  EXIT;
2970              END IF;
2971 
2972          END LOOP;
2973      END IF;
2974 
2975 	 -- Check End Customer, Source Type  Holds
2976      IF p_line_rec.end_customer_id IS NOT NULL AND
2977         p_line_rec.source_type_code IS NOT NULL AND
2978         EndCust_SourceType_Pointer.EXISTS(p_line_rec.end_customer_id)
2979      THEN
2980          j := EndCust_SourceType_Pointer(p_line_rec.end_customer_id);
2981          WHILE EndCust_SourceType_Hold(j).Entity_Id1 = p_line_rec.end_customer_id
2982          LOOP
2983 
2984              IF EndCust_SourceType_Hold(j).Entity_Id2 = p_line_rec.source_type_code
2985              THEN
2986                  Mark_Hold(p_header_id => p_line_rec.header_id,
2987                   p_line_id => p_line_rec.line_id,
2988                   p_line_number => p_line_rec.line_number,
2989                   p_hold_source_id => EndCust_SourceType_Hold(j).hold_source_id,
2990                   p_ship_set_name => NULL,
2991                   p_arrival_set_name => NULL,
2992                   p_activity_name => EndCust_SourceType_Hold(j).activity_name,
2993                   p_attribute => 'End Customer/Source Type',
2994                   p_top_model_line_id => p_line_rec.top_model_line_id
2995                   );
2996                  IF EndCust_SourceType_Hold(j).activity_name IS NULL THEN
2997                     p_on_generic_hold := TRUE;
2998                  ELSIF EndCust_SourceType_Hold(j).activity_name = 'LINE_SCHEDULING'
2999                  THEN
3000                     p_on_scheduling_hold := TRUE;
3001                  END IF;
3002 
3003              END IF;
3004              j := j + 1;
3005 
3006              IF j > EndCust_SourceType_Hold.COUNT THEN
3007                  EXIT;
3008              END IF;
3009 
3010          END LOOP;
3011      END IF;
3012 
3013      -- Check End Customer, Bill to Site  Holds
3014      IF p_line_rec.end_customer_id IS NOT NULL AND
3015         p_line_rec.invoice_to_org_id IS NOT NULL AND
3016         EndCust_Billto_Pointer.EXISTS(p_line_rec.end_customer_id)
3017      THEN
3018          j := EndCust_Billto_Pointer(p_line_rec.end_customer_id);
3019          WHILE EndCust_Billto_Hold(j).Entity_Id1 = p_line_rec.end_customer_id
3020          LOOP
3021 
3022              IF EndCust_Billto_Hold(j).Entity_Id2 = p_line_rec.invoice_to_org_id
3023              THEN
3024                  Mark_Hold(p_header_id => p_line_rec.header_id,
3025                   p_line_id => p_line_rec.line_id,
3026                   p_line_number => p_line_rec.line_number,
3027                   p_hold_source_id => EndCust_Billto_Hold(j).hold_source_id,
3028                   p_ship_set_name => NULL,
3029                   p_arrival_set_name => NULL,
3030                   p_activity_name => EndCust_Billto_Hold(j).activity_name,
3031                   p_attribute => 'End Customer/Bill to Site',
3032                   p_top_model_line_id => p_line_rec.top_model_line_id
3033                   );
3034                  IF EndCust_Billto_Hold(j).activity_name IS NULL THEN
3035                     p_on_generic_hold := TRUE;
3036                  ELSIF EndCust_Billto_Hold(j).activity_name = 'LINE_SCHEDULING'
3037                  THEN
3038                     p_on_scheduling_hold := TRUE;
3039                  END IF;
3040 
3041              END IF;
3042              j := j + 1;
3043 
3044              IF j > EndCust_Billto_Hold.COUNT THEN
3045                  EXIT;
3046              END IF;
3047 
3048          END LOOP;
3049      END IF;
3050 
3051      -- Check End Customer, Ship to Site  Holds
3052      IF p_line_rec.end_customer_id IS NOT NULL AND
3053         p_line_rec.ship_to_org_id IS NOT NULL AND
3054         EndCust_Shipto_Pointer.EXISTS(p_line_rec.end_customer_id)
3055      THEN
3056          j := EndCust_Shipto_Pointer(p_line_rec.end_customer_id);
3057          WHILE EndCust_Shipto_Hold(j).Entity_Id1 = p_line_rec.end_customer_id
3058          LOOP
3059 
3060              IF EndCust_Shipto_Hold(j).Entity_Id2 = p_line_rec.ship_to_org_id
3061              THEN
3062                  Mark_Hold(p_header_id => p_line_rec.header_id,
3063                   p_line_id => p_line_rec.line_id,
3064                   p_line_number => p_line_rec.line_number,
3065                   p_hold_source_id => EndCust_Shipto_Hold(j).hold_source_id,
3066                   p_ship_set_name => NULL,
3067                   p_arrival_set_name => NULL,
3068                   p_activity_name => EndCust_Shipto_Hold(j).activity_name,
3069                   p_attribute => 'End Customer/Ship to Site',
3070                   p_top_model_line_id => p_line_rec.top_model_line_id
3071                   );
3072                  IF EndCust_Shipto_Hold(j).activity_name IS NULL THEN
3073                     p_on_generic_hold := TRUE;
3074                  ELSIF EndCust_Shipto_Hold(j).activity_name = 'LINE_SCHEDULING'
3075                  THEN
3076                     p_on_scheduling_hold := TRUE;
3077                  END IF;
3078 
3079              END IF;
3080              j := j + 1;
3081 
3082              IF j > EndCust_Shipto_Hold.COUNT THEN
3083                  EXIT;
3084              END IF;
3085 
3086          END LOOP;
3087      END IF;
3088 
3089 
3090      -- Check End Customer, Deliver to Site  Holds
3091      IF p_line_rec.end_customer_id IS NOT NULL AND
3092         p_line_rec.deliver_to_org_id IS NOT NULL AND
3093         EndCust_Deliverto_Pointer.EXISTS(p_line_rec.end_customer_id)
3094      THEN
3095          j := EndCust_Deliverto_Pointer(p_line_rec.end_customer_id);
3096          WHILE EndCust_Deliverto_Hold(j).Entity_Id1 = p_line_rec.end_customer_id
3097          LOOP
3098 
3099              IF EndCust_Deliverto_Hold(j).Entity_Id2 = p_line_rec.deliver_to_org_id
3100              THEN
3101                  Mark_Hold(p_header_id => p_line_rec.header_id,
3102                   p_line_id => p_line_rec.line_id,
3103                   p_line_number => p_line_rec.line_number,
3104                   p_hold_source_id => EndCust_Deliverto_Hold(j).hold_source_id,
3105                   p_ship_set_name => NULL,
3106                   p_arrival_set_name => NULL,
3107                   p_activity_name => EndCust_Deliverto_Hold(j).activity_name,
3108                   p_attribute => 'End Customer/Deliver to Site',
3109                   p_top_model_line_id => p_line_rec.top_model_line_id
3110                   );
3111                  IF EndCust_Deliverto_Hold(j).activity_name IS NULL THEN
3112                     p_on_generic_hold := TRUE;
3113                  ELSIF EndCust_Deliverto_Hold(j).activity_name = 'LINE_SCHEDULING'
3114                  THEN
3115                     p_on_scheduling_hold := TRUE;
3116                  END IF;
3117 
3118              END IF;
3119              j := j + 1;
3120 
3121              IF j > EndCust_Deliverto_Hold.COUNT THEN
3122                  EXIT;
3123              END IF;
3124 
3125          END LOOP;
3126      END IF;
3127 
3128 
3129      -- Check End Customer, Price List Holds
3130      IF p_line_rec.end_customer_id IS NOT NULL AND
3131         p_line_rec.price_list_id IS NOT NULL AND
3132         EndCust_PriceList_Pointer.EXISTS(p_line_rec.end_customer_id)
3133      THEN
3134          j := EndCust_PriceList_Pointer(p_line_rec.end_customer_id);
3135          WHILE EndCust_PriceList_Hold(j).Entity_Id1 = p_line_rec.end_customer_id
3136          LOOP
3137 
3138              IF EndCust_PriceList_Hold(j).Entity_Id2 = p_line_rec.price_list_id
3139              THEN
3140                  Mark_Hold(p_header_id => p_line_rec.header_id,
3141                   p_line_id => p_line_rec.line_id,
3142                   p_line_number => p_line_rec.line_number,
3143                   p_hold_source_id => EndCust_PriceList_Hold(j).hold_source_id,
3144                   p_ship_set_name => NULL,
3145                   p_arrival_set_name => NULL,
3146                   p_activity_name => EndCust_PriceList_Hold(j).activity_name,
3147                   p_attribute => 'End Customer/Price List',
3148                   p_top_model_line_id => p_line_rec.top_model_line_id
3149                   );
3150                  IF EndCust_PriceList_Hold(j).activity_name IS NULL THEN
3151                     p_on_generic_hold := TRUE;
3152                  ELSIF EndCust_PriceList_Hold(j).activity_name = 'LINE_SCHEDULING'
3153                  THEN
3154                     p_on_scheduling_hold := TRUE;
3155                  END IF;
3156 
3157              END IF;
3158              j := j + 1;
3159 
3160              IF j > EndCust_PriceList_Hold.COUNT THEN
3161                  EXIT;
3162              END IF;
3163 
3164          END LOOP;
3165      END IF;
3166 
3167      -- Check End Customer, Line type Holds
3168      IF p_line_rec.end_customer_id IS NOT NULL AND
3169         p_line_rec.line_type_id IS NOT NULL AND
3170         EndCust_LineType_Pointer.EXISTS(p_line_rec.end_customer_id)
3171      THEN
3172          j := EndCust_LineType_Pointer(p_line_rec.end_customer_id);
3173          WHILE EndCust_LineType_Hold(j).Entity_Id1 = p_line_rec.end_customer_id
3174          LOOP
3175 
3176              IF EndCust_LineType_Hold(j).Entity_Id2 = p_line_rec.line_type_id
3177              THEN
3178                  Mark_Hold(p_header_id => p_line_rec.header_id,
3179                   p_line_id => p_line_rec.line_id,
3180                   p_line_number => p_line_rec.line_number,
3181                   p_hold_source_id => EndCust_LineType_Hold(j).hold_source_id,
3182                   p_ship_set_name => NULL,
3183                   p_arrival_set_name => NULL,
3184                   p_activity_name => EndCust_LineType_Hold(j).activity_name,
3185                   p_attribute => 'End Customer/Line Type',
3186                   p_top_model_line_id => p_line_rec.top_model_line_id
3187                   );
3188                  IF EndCust_LineType_Hold(j).activity_name IS NULL THEN
3189                     p_on_generic_hold := TRUE;
3190                  ELSIF EndCust_LineType_Hold(j).activity_name = 'LINE_SCHEDULING'
3191                  THEN
3192                     p_on_scheduling_hold := TRUE;
3193                  END IF;
3194 
3195              END IF;
3196              j := j + 1;
3197 
3198              IF j > EndCust_LineType_Hold.COUNT THEN
3199                  EXIT;
3200              END IF;
3201 
3202          END LOOP;
3203      END IF;
3204 
3205      -- Check EndCustomer, Payment term Holds
3206      IF p_line_rec.end_customer_id IS NOT NULL AND
3207         p_line_rec.payment_term_id IS NOT NULL AND
3208         EndCust_PayTerm_Pointer.EXISTS(p_line_rec.end_customer_id)
3209      THEN
3210          j := EndCust_PayTerm_Pointer(p_line_rec.end_customer_id);
3211          WHILE EndCust_PayTerm_Hold(j).Entity_Id1 = p_line_rec.end_customer_id
3212          LOOP
3213 
3214              IF EndCust_PayTerm_Hold(j).Entity_Id2 = p_line_rec.payment_term_id
3215              THEN
3216                  Mark_Hold(p_header_id => p_line_rec.header_id,
3217                   p_line_id => p_line_rec.line_id,
3218                   p_line_number => p_line_rec.line_number,
3219                   p_hold_source_id => EndCust_PayTerm_Hold(j).hold_source_id,
3220                   p_ship_set_name => NULL,
3221                   p_arrival_set_name => NULL,
3222                   p_activity_name => EndCust_PayTerm_Hold(j).activity_name,
3223                   p_attribute => 'End Customer/Payment Term',
3224                   p_top_model_line_id => p_line_rec.top_model_line_id
3225                   );
3226                  IF EndCust_PayTerm_Hold(j).activity_name IS NULL THEN
3227                     p_on_generic_hold := TRUE;
3228                  ELSIF EndCust_PayTerm_Hold(j).activity_name = 'LINE_SCHEDULING'
3229                  THEN
3230                     p_on_scheduling_hold := TRUE;
3231                  END IF;
3232 
3233              END IF;
3234              j := j + 1;
3235 
3236              IF j > EndCust_PayTerm_Hold.COUNT THEN
3237                  EXIT;
3238              END IF;
3239 
3240          END LOOP;
3241      END IF;
3242 	 --ER# 12571983 end
3243 
3244 	 --ER# 13331078 START added for 'IC'
3245 -- Check Item Category Hold
3246      IF l_itemcategory_id IS NOT NULL AND
3247         ItemCat_Pointer.EXISTS(l_itemcategory_id)
3248      THEN
3249          j := ItemCat_Pointer(l_itemcategory_id);
3250          WHILE ItemCat_Hold(j).Entity_Id1 = l_itemcategory_id
3251          LOOP
3252             Mark_Hold(p_header_id => p_line_rec.header_id,
3253                   p_line_id => p_line_rec.line_id,
3254                   p_line_number => p_line_rec.line_number,
3255                   p_hold_source_id => ItemCat_Hold(j).hold_source_id,
3256                   p_ship_set_name => NULL,
3257                   p_arrival_set_name => NULL,
3258                   p_activity_name => ItemCat_Hold(j).activity_name,
3259                   p_attribute => 'ItemCategory',
3260                   p_top_model_line_id => p_line_rec.top_model_line_id
3261                   );
3262             IF ItemCat_Hold(j).activity_name IS NULL THEN
3263                p_on_generic_hold := TRUE;
3264             ELSIF ItemCat_Hold(j).activity_name = 'LINE_SCHEDULING' THEN
3265                p_on_scheduling_hold := TRUE;
3266             END IF;
3267             j := j+1;
3268             IF j > ItemCat_Hold.COUNT THEN
3269                 EXIT;
3270             END IF;
3271 
3272          END LOOP;
3273 
3274      END IF;
3275 
3276 	 -- Check Item Category,Customer Holds
3277      IF l_itemcategory_id IS NOT NULL AND
3278         p_line_rec.sold_to_org_id IS NOT NULL AND
3279         ItemCat_Customer_Pointer.EXISTS(l_itemcategory_id)
3280      THEN
3281          j := ItemCat_Customer_Pointer(l_itemcategory_id);
3282          WHILE ItemCat_Customer_Hold(j).Entity_Id1 = l_itemcategory_id
3283          LOOP
3284 
3285              IF ItemCat_Customer_Hold(j).Entity_Id2 = p_line_rec.sold_to_org_id
3286              THEN
3287                  Mark_Hold(p_header_id => p_line_rec.header_id,
3288                   p_line_id => p_line_rec.line_id,
3289                   p_line_number => p_line_rec.line_number,
3290                   p_hold_source_id => ItemCat_Customer_Hold(j).hold_source_id,
3291                   p_ship_set_name => NULL,
3292                   p_arrival_set_name => NULL,
3293                   p_activity_name => ItemCat_Customer_Hold(j).activity_name,
3294                   p_attribute => 'ItemCategory\Customer',
3295                   p_top_model_line_id => p_line_rec.top_model_line_id
3296                   );
3297                  IF ItemCat_Customer_Hold(j).activity_name IS NULL THEN
3298                     p_on_generic_hold := TRUE;
3299                  ELSIF ItemCat_Customer_Hold(j).activity_name = 'LINE_SCHEDULING'
3300                  THEN
3301                     p_on_scheduling_hold := TRUE;
3302                  END IF;
3303 
3304              END IF;
3305              j := j + 1;
3306 
3307              IF j > ItemCat_Customer_Hold.COUNT THEN
3308                  EXIT;
3309              END IF;
3310 
3311          END LOOP;
3312      END IF;
3313 
3314 
3315 	 -- Check Item Category,Shipto Holds
3316      IF l_itemcategory_id IS NOT NULL AND
3317         p_line_rec.ship_to_org_id IS NOT NULL AND
3318         ItemCat_shipto_Pointer.EXISTS(l_itemcategory_id)
3319      THEN
3320          j := ItemCat_shipto_Pointer(l_itemcategory_id);
3321          WHILE ItemCat_shipto_Hold(j).Entity_Id1 = l_itemcategory_id
3322          LOOP
3323 
3324              IF ItemCat_shipto_Hold(j).Entity_Id2 = p_line_rec.ship_to_org_id
3325              THEN
3326                  Mark_Hold(p_header_id => p_line_rec.header_id,
3327                   p_line_id => p_line_rec.line_id,
3328                   p_line_number => p_line_rec.line_number,
3329                   p_hold_source_id => ItemCat_shipto_Hold(j).hold_source_id,
3330                   p_ship_set_name => NULL,
3331                   p_arrival_set_name => NULL,
3332                   p_activity_name => ItemCat_shipto_Hold(j).activity_name,
3333                   p_attribute => 'ItemCategory\Ship to Site',
3334                   p_top_model_line_id => p_line_rec.top_model_line_id
3335                   );
3336                  IF ItemCat_shipto_Hold(j).activity_name IS NULL THEN
3337                     p_on_generic_hold := TRUE;
3338                  ELSIF ItemCat_shipto_Hold(j).activity_name = 'LINE_SCHEDULING'
3339                  THEN
3340                     p_on_scheduling_hold := TRUE;
3341                  END IF;
3342 
3343              END IF;
3344              j := j + 1;
3345 
3346              IF j > ItemCat_shipto_Hold.COUNT THEN
3347                  EXIT;
3348              END IF;
3349 
3350          END LOOP;
3351      END IF;
3352 
3353      -- Check Item Category,LineType Holds
3354      IF l_itemcategory_id IS NOT NULL AND
3355         p_line_rec.line_type_id IS NOT NULL AND
3356         ItemCat_LineType_Pointer.EXISTS(l_itemcategory_id)
3357      THEN
3361 
3358          j := ItemCat_LineType_Pointer(l_itemcategory_id);
3359          WHILE ItemCat_LineType_Hold(j).Entity_Id1 = l_itemcategory_id
3360          LOOP
3362              IF ItemCat_LineType_Hold(j).Entity_Id2 = p_line_rec.line_type_id
3363              THEN
3364                  Mark_Hold(p_header_id => p_line_rec.header_id,
3365                   p_line_id => p_line_rec.line_id,
3366                   p_line_number => p_line_rec.line_number,
3367                   p_hold_source_id => ItemCat_LineType_Hold(j).hold_source_id,
3368                   p_ship_set_name => NULL,
3369                   p_arrival_set_name => NULL,
3370                   p_activity_name => ItemCat_LineType_Hold(j).activity_name,
3371                   p_attribute => 'ItemCategory\Line Type',
3372                   p_top_model_line_id => p_line_rec.top_model_line_id
3373                   );
3374                  IF ItemCat_LineType_Hold(j).activity_name IS NULL THEN
3375                     p_on_generic_hold := TRUE;
3376                  ELSIF ItemCat_LineType_Hold(j).activity_name = 'LINE_SCHEDULING'
3377                  THEN
3378                     p_on_scheduling_hold := TRUE;
3379                  END IF;
3380 
3381              END IF;
3382              j := j + 1;
3383 
3384              IF j > ItemCat_LineType_Hold.COUNT THEN
3385                  EXIT;
3386              END IF;
3387 
3388          END LOOP;
3389      END IF;
3390 
3391 
3392      -- Check Item Category,Ship Method Holds
3393      IF l_itemcategory_id IS NOT NULL AND
3394         p_line_rec.shipping_method_code IS NOT NULL AND
3395         ItemCat_ShipMethod_Pointer.EXISTS(l_itemcategory_id)
3396      THEN
3397          j := ItemCat_ShipMethod_Pointer(l_itemcategory_id);
3398          WHILE ItemCat_ShipMethod_Hold(j).Entity_Id1 = l_itemcategory_id
3399          LOOP
3400 
3401              IF ItemCat_ShipMethod_Hold(j).Entity_Id2 = p_line_rec.shipping_method_code
3402              THEN
3403                  Mark_Hold(p_header_id => p_line_rec.header_id,
3404                   p_line_id => p_line_rec.line_id,
3405                   p_line_number => p_line_rec.line_number,
3406                   p_hold_source_id => ItemCat_ShipMethod_Hold(j).hold_source_id,
3407                   p_ship_set_name => NULL,
3408                   p_arrival_set_name => NULL,
3409                   p_activity_name => ItemCat_ShipMethod_Hold(j).activity_name,
3410                   p_attribute => 'ItemCategory\Ship Method',
3411                   p_top_model_line_id => p_line_rec.top_model_line_id
3412                   );
3413                  IF ItemCat_ShipMethod_Hold(j).activity_name IS NULL THEN
3414                     p_on_generic_hold := TRUE;
3415                  ELSIF ItemCat_ShipMethod_Hold(j).activity_name = 'LINE_SCHEDULING'
3416                  THEN
3417                     p_on_scheduling_hold := TRUE;
3418                  END IF;
3419 
3420              END IF;
3421              j := j + 1;
3422 
3423              IF j > ItemCat_ShipMethod_Hold.COUNT THEN
3424                  EXIT;
3425              END IF;
3426 
3427          END LOOP;
3428      END IF;
3429 
3430      -- Check Item Category,Deliver to Site Holds
3431      IF l_itemcategory_id IS NOT NULL AND
3432         p_line_rec.deliver_to_org_id IS NOT NULL AND
3433         ItemCat_Deliverto_Pointer.EXISTS(l_itemcategory_id)
3434      THEN
3435          j := ItemCat_Deliverto_Pointer(l_itemcategory_id);
3436          WHILE ItemCat_Deliverto_Hold(j).Entity_Id1 = l_itemcategory_id
3437          LOOP
3438 
3439              IF ItemCat_Deliverto_Hold(j).Entity_Id2 = p_line_rec.deliver_to_org_id
3440              THEN
3441                  Mark_Hold(p_header_id => p_line_rec.header_id,
3442                   p_line_id => p_line_rec.line_id,
3443                   p_line_number => p_line_rec.line_number,
3444                   p_hold_source_id => ItemCat_Deliverto_Hold(j).hold_source_id,
3445                   p_ship_set_name => NULL,
3446                   p_arrival_set_name => NULL,
3447                   p_activity_name => ItemCat_Deliverto_Hold(j).activity_name,
3448                   p_attribute => 'ItemCategory\Deliver to Site',
3449                   p_top_model_line_id => p_line_rec.top_model_line_id
3450                   );
3451                  IF ItemCat_Deliverto_Hold(j).activity_name IS NULL THEN
3452                     p_on_generic_hold := TRUE;
3453                  ELSIF ItemCat_Deliverto_Hold(j).activity_name = 'LINE_SCHEDULING'
3454                  THEN
3455                     p_on_scheduling_hold := TRUE;
3456                  END IF;
3457 
3458              END IF;
3459              j := j + 1;
3460 
3461              IF j > ItemCat_Deliverto_Hold.COUNT THEN
3462                  EXIT;
3463              END IF;
3464 
3465          END LOOP;
3466      END IF;
3467 
3468 
3469      -- Check Item Category,Price List Holds
3470      IF l_itemcategory_id IS NOT NULL AND
3471         p_line_rec.price_list_id IS NOT NULL AND
3472         ItemCat_PriceList_Pointer.EXISTS(l_itemcategory_id)
3473      THEN
3474          j := ItemCat_PriceList_Pointer(l_itemcategory_id);
3475          WHILE ItemCat_PriceList_Hold(j).Entity_Id1 = l_itemcategory_id
3476          LOOP
3477 
3478              IF ItemCat_PriceList_Hold(j).Entity_Id2 = p_line_rec.price_list_id
3479              THEN
3480                  Mark_Hold(p_header_id => p_line_rec.header_id,
3481                   p_line_id => p_line_rec.line_id,
3482                   p_line_number => p_line_rec.line_number,
3483                   p_hold_source_id => ItemCat_PriceList_Hold(j).hold_source_id,
3484                   p_ship_set_name => NULL,
3485                   p_arrival_set_name => NULL,
3486                   p_activity_name => ItemCat_PriceList_Hold(j).activity_name,
3487                   p_attribute => 'ItemCategory\Price List',
3488                   p_top_model_line_id => p_line_rec.top_model_line_id
3489                   );
3490                  IF ItemCat_PriceList_Hold(j).activity_name IS NULL THEN
3491                     p_on_generic_hold := TRUE;
3492                  ELSIF ItemCat_PriceList_Hold(j).activity_name = 'LINE_SCHEDULING'
3493                  THEN
3494                     p_on_scheduling_hold := TRUE;
3495                  END IF;
3496 
3497              END IF;
3498              j := j + 1;
3499 
3500              IF j > ItemCat_PriceList_Hold.COUNT THEN
3501                  EXIT;
3502              END IF;
3503 
3504          END LOOP;
3505      END IF;
3506 
3507 
3508      -- Check Item Category,Source Type Holds
3509      IF l_itemcategory_id IS NOT NULL AND
3510         p_line_rec.source_type_code IS NOT NULL AND
3511         ItemCat_SourceType_Pointer.EXISTS(l_itemcategory_id)
3512      THEN
3513          j := ItemCat_SourceType_Pointer(l_itemcategory_id);
3514          WHILE ItemCat_SourceType_Hold(j).Entity_Id1 = l_itemcategory_id
3515          LOOP
3516 
3517              IF ItemCat_SourceType_Hold(j).Entity_Id2 = p_line_rec.source_type_code
3518              THEN
3519                  Mark_Hold(p_header_id => p_line_rec.header_id,
3520                   p_line_id => p_line_rec.line_id,
3521                   p_line_number => p_line_rec.line_number,
3522                   p_hold_source_id => ItemCat_SourceType_Hold(j).hold_source_id,
3523                   p_ship_set_name => NULL,
3524                   p_arrival_set_name => NULL,
3525                   p_activity_name => ItemCat_SourceType_Hold(j).activity_name,
3526                   p_attribute => 'ItemCategory\Source Type',
3527                   p_top_model_line_id => p_line_rec.top_model_line_id
3528                   );
3532                  THEN
3529                  IF ItemCat_SourceType_Hold(j).activity_name IS NULL THEN
3530                     p_on_generic_hold := TRUE;
3531                  ELSIF ItemCat_SourceType_Hold(j).activity_name = 'LINE_SCHEDULING'
3533                     p_on_scheduling_hold := TRUE;
3534                  END IF;
3535 
3536              END IF;
3537              j := j + 1;
3538 
3539              IF j > ItemCat_SourceType_Hold.COUNT THEN
3540                  EXIT;
3541              END IF;
3542 
3543          END LOOP;
3544      END IF;
3545 
3546 
3547      -- Check Item Category,BillTo Holds
3548      IF l_itemcategory_id IS NOT NULL AND
3549         p_line_rec.invoice_to_org_id IS NOT NULL AND
3550         ItemCat_Billto_Pointer.EXISTS(l_itemcategory_id)
3551      THEN
3552          j := ItemCat_Billto_Pointer(l_itemcategory_id);
3553          WHILE ItemCat_Billto_Hold(j).Entity_Id1 = l_itemcategory_id
3554          LOOP
3555 
3556              IF ItemCat_Billto_Hold(j).Entity_Id2 = p_line_rec.invoice_to_org_id
3557              THEN
3558                  Mark_Hold(p_header_id => p_line_rec.header_id,
3559                   p_line_id => p_line_rec.line_id,
3560                   p_line_number => p_line_rec.line_number,
3561                   p_hold_source_id => ItemCat_Billto_Hold(j).hold_source_id,
3562                   p_ship_set_name => NULL,
3563                   p_arrival_set_name => NULL,
3564                   p_activity_name => ItemCat_Billto_Hold(j).activity_name,
3565                   p_attribute => 'ItemCategory\Bill to Site',
3566                   p_top_model_line_id => p_line_rec.top_model_line_id
3567                   );
3568                  IF ItemCat_Billto_Hold(j).activity_name IS NULL THEN
3569                     p_on_generic_hold := TRUE;
3570                  ELSIF ItemCat_Billto_Hold(j).activity_name = 'LINE_SCHEDULING'
3571                  THEN
3572                     p_on_scheduling_hold := TRUE;
3573                  END IF;
3574 
3575              END IF;
3576              j := j + 1;
3577 
3578              IF j > ItemCat_Billto_Hold.COUNT THEN
3579                  EXIT;
3580              END IF;
3581 
3582          END LOOP;
3583      END IF;
3584 
3585 	 -- Check Item, EndCustomer Holds, for --ER# 12571983 as well
3586 	 IF l_itemcategory_id IS NOT NULL AND
3587         p_line_rec.end_customer_id IS NOT NULL AND
3588         ItemCat_EndCust_Pointer.EXISTS(l_itemcategory_id)
3589      THEN
3590          j := ItemCat_EndCust_Pointer(l_itemcategory_id);
3591          WHILE ItemCat_EndCust_Hold(j).Entity_Id1 = l_itemcategory_id
3592          LOOP
3593 
3594              IF ItemCat_EndCust_Hold(j).Entity_Id2 = p_line_rec.end_customer_id
3595              THEN
3596                  Mark_Hold(p_header_id => p_line_rec.header_id,
3597                   p_line_id => p_line_rec.line_id,
3598                   p_line_number => p_line_rec.line_number,
3599                   p_hold_source_id => ItemCat_EndCust_Hold(j).hold_source_id,
3600                   p_ship_set_name => NULL,
3601                   p_arrival_set_name => NULL,
3602                   p_activity_name => ItemCat_EndCust_Hold(j).activity_name,
3603                   p_attribute => 'ItemCategory\End Customer',
3604                   p_top_model_line_id => p_line_rec.top_model_line_id
3605                   );
3606                  IF ItemCat_EndCust_Hold(j).activity_name IS NULL THEN
3607                     p_on_generic_hold := TRUE;
3608                  ELSIF ItemCat_EndCust_Hold(j).activity_name = 'LINE_SCHEDULING'
3609                  THEN
3610                     p_on_scheduling_hold := TRUE;
3611                  END IF;
3612 
3613              END IF;
3614              j := j + 1;
3615 
3616              IF j > ItemCat_EndCust_Hold.COUNT THEN
3617                  EXIT;
3618              END IF;
3619 
3620          END LOOP;
3621      END IF;
3622 
3623 	 --ER# 13331078 END added for 'IC'
3624 
3625 
3626      <<Just_WareHouse_Holds>>
3627 
3628      -- Check Item Warehouse Holds
3629      IF p_line_rec.inventory_item_id IS NOT NULL AND
3630         p_line_rec.ship_from_org_id  IS NOT NULL AND
3631         Item_Warehouse_Pointer.EXISTS(p_line_rec.inventory_item_id)
3632      THEN
3633          j := Item_Warehouse_Pointer(p_line_rec.inventory_item_id);
3634          WHILE Item_Warehouse_hold(j).Entity_Id1 = p_line_rec.inventory_item_id
3635          LOOP
3636 
3637              IF Item_Warehouse_Hold(j).Entity_Id2 = p_line_rec.ship_from_org_id
3638              THEN
3639                  Mark_Hold(p_header_id => p_line_rec.header_id,
3640                   p_line_id => p_line_rec.line_id,
3641                   p_line_number => p_line_rec.line_number,
3642                   p_hold_source_id => Item_Warehouse_Hold(j).hold_source_id,
3643                   p_ship_set_name => NULL,
3644                   p_arrival_set_name => NULL,
3645                   p_activity_name => Item_Warehouse_Hold(j).activity_name,
3646                   p_attribute => 'Item\Warehouse',
3647                   p_top_model_line_id => p_line_rec.top_model_line_id
3648                   );
3649                  IF Item_Warehouse_Hold(j).activity_name IS NULL THEN
3650                     p_on_generic_hold := TRUE;
3651                  ELSIF Item_Warehouse_Hold(j).activity_name = 'LINE_SCHEDULING'
3652                  THEN
3653                     p_on_scheduling_hold := TRUE;
3654                  END IF;
3655 
3656              END IF;
3657              j := j + 1;
3658 
3659              IF j > Item_Warehouse_hold.COUNT THEN
3660                  EXIT;
3661              END IF;
3662 
3666      -- Check Warehouse Hold
3663          END LOOP;
3664      END IF;
3665 
3667      IF p_line_rec.ship_from_org_id IS NOT NULL AND
3668         Warehouse_Pointer.EXISTS(p_line_rec.ship_from_org_id)
3669      THEN
3670          j := Warehouse_Pointer(p_line_rec.ship_from_org_id);
3671          WHILE Warehouse_hold(j).Entity_Id1 = p_line_rec.ship_from_org_id
3672          LOOP
3673             Mark_Hold(p_header_id => p_line_rec.header_id,
3674                   p_line_id => p_line_rec.line_id,
3675                   p_line_number => p_line_rec.line_number,
3676                   p_hold_source_id => Warehouse_hold(j).hold_source_id,
3677                   p_ship_set_name => NULL,
3678                   p_arrival_set_name => NULL,
3679                   p_activity_name => Warehouse_hold(j).activity_name,
3680                   p_attribute => 'Warehouse',
3681                   p_top_model_line_id => p_line_rec.top_model_line_id
3682                   );
3683             IF Warehouse_hold(j).activity_name IS NULL THEN
3684                p_on_generic_hold := TRUE;
3685             ELSIF Warehouse_hold(j).activity_name = 'LINE_SCHEDULING' THEN
3686                p_on_scheduling_hold := TRUE;
3687             END IF;
3688             j := j+1;
3689             IF j > Warehouse_Hold.COUNT THEN
3690                 EXIT;
3691             END IF;
3692 
3693          END LOOP;
3694 
3695      END IF;
3696 
3697      -- Check Warehouse Customer Holds
3698      IF p_line_rec.ship_from_org_id IS NOT NULL AND
3699         p_line_rec.sold_to_org_id IS NOT NULL AND
3700         Warehouse_Customer_Pointer.EXISTS(p_line_rec.ship_from_org_id)
3701      THEN
3702          j := Warehouse_Customer_Pointer(p_line_rec.ship_from_org_id);
3703          WHILE Warehouse_Customer_Hold(j).Entity_Id1 = p_line_rec.ship_from_org_id
3704          LOOP
3705 
3706              IF Warehouse_Customer_Hold(j).Entity_Id2 = p_line_rec.sold_to_org_id
3707              THEN
3708                  Mark_Hold(p_header_id => p_line_rec.header_id,
3709                   p_line_id => p_line_rec.line_id,
3710                   p_line_number => p_line_rec.line_number,
3711                   p_hold_source_id =>Warehouse_Customer_Hold(j).hold_source_id,
3712                   p_ship_set_name => NULL,
3713                   p_arrival_set_name => NULL,
3714                   p_activity_name => Warehouse_Customer_Hold(j).activity_name,
3715                   p_attribute => 'Warehouse\Customer',
3716                   p_top_model_line_id => p_line_rec.top_model_line_id
3717                   );
3718                 IF Warehouse_Customer_Hold(j).activity_name IS NULL THEN
3719                     p_on_generic_hold := TRUE;
3720                 ELSIF Warehouse_Customer_Hold(j).activity_name = 'LINE_SCHEDULING'
3721                 THEN
3722                     p_on_scheduling_hold := TRUE;
3723                 END IF;
3724 
3725              END IF;
3726              j := j + 1;
3727 
3728              IF j > Warehouse_Customer_Hold.COUNT THEN
3729                  EXIT;
3730              END IF;
3731 
3732          END LOOP;
3733      END IF;
3734 
3735      -- Check Warehouse Shipto Holds
3736      IF p_line_rec.ship_from_org_id IS NOT NULL AND
3737         p_line_rec.ship_to_org_id IS NOT NULL AND
3738         Warehouse_shipto_pointer.EXISTS(p_line_rec.ship_from_org_id)
3739      THEN
3740          j := Warehouse_shipto_pointer(p_line_rec.ship_from_org_id);
3741          WHILE Warehouse_shipto_Hold(j).Entity_Id1 = p_line_rec.ship_from_org_id
3742          LOOP
3743 
3744              IF Warehouse_shipto_Hold(j).Entity_Id2 = p_line_rec.ship_to_org_id
3745              THEN
3746                  Mark_Hold(p_header_id => p_line_rec.header_id,
3747                   p_line_id => p_line_rec.line_id,
3748                   p_line_number => p_line_rec.line_number,
3749                   p_hold_source_id => Warehouse_shipto_Hold(j).hold_source_id,
3750                   p_ship_set_name => NULL,
3751                   p_arrival_set_name => NULL,
3752                   p_activity_name => Warehouse_shipto_Hold(j).activity_name,
3753                   p_attribute => 'Warehouse\Ship to Site',
3754                   p_top_model_line_id => p_line_rec.top_model_line_id
3755                   );
3756                 IF Warehouse_shipto_Hold(j).activity_name IS NULL THEN
3757                     p_on_generic_hold := TRUE;
3758                 ELSIF Warehouse_shipto_Hold(j).activity_name = 'LINE_SCHEDULING'
3759                 THEN
3760                     p_on_scheduling_hold := TRUE;
3761                 END IF;
3762 
3763              END IF;
3764              j := j + 1;
3765 
3766              IF j > Warehouse_shipto_Hold.COUNT THEN
3767                  EXIT;
3768              END IF;
3769 
3770          END LOOP;
3771      END IF;
3772 
3773      -- Check Warehouse BillTo Holds
3774      IF p_line_rec.ship_from_org_id IS NOT NULL AND
3775         p_line_rec.invoice_to_org_id IS NOT NULL AND
3776         Warehouse_billto_pointer.EXISTS(p_line_rec.ship_from_org_id)
3777      THEN
3778          j := Warehouse_billto_pointer(p_line_rec.ship_from_org_id);
3779          WHILE Warehouse_billto_Hold(j).Entity_Id1 = p_line_rec.ship_from_org_id
3780          LOOP
3781 
3782              IF Warehouse_billto_Hold(j).Entity_Id2 = p_line_rec.invoice_to_org_id
3783              THEN
3784                  Mark_Hold(p_header_id => p_line_rec.header_id,
3785                   p_line_id => p_line_rec.line_id,
3786                   p_line_number => p_line_rec.line_number,
3787                   p_hold_source_id => Warehouse_billto_Hold(j).hold_source_id,
3788                   p_ship_set_name => NULL,
3792                   p_top_model_line_id => p_line_rec.top_model_line_id
3789                   p_arrival_set_name => NULL,
3790                   p_activity_name => Warehouse_billto_Hold(j).activity_name,
3791                   p_attribute => 'Warehouse\Bill to Site',
3793                   );
3794                 IF Warehouse_billto_Hold(j).activity_name IS NULL THEN
3795                     p_on_generic_hold := TRUE;
3796                 ELSIF Warehouse_billto_Hold(j).activity_name = 'LINE_SCHEDULING'
3797                 THEN
3798                     p_on_scheduling_hold := TRUE;
3799                 END IF;
3800 
3801              END IF;
3802              j := j + 1;
3803 
3804              IF j > Warehouse_billto_Hold.COUNT THEN
3805                  EXIT;
3806              END IF;
3807 
3808          END LOOP;
3809      END IF;
3810 
3811 --ER#7479609 start
3812 
3813      -- Check Warehouse Line Type Holds
3814      IF p_line_rec.ship_from_org_id IS NOT NULL AND
3815         p_line_rec.line_type_id IS NOT NULL AND
3816         Warehouse_LineType_Pointer.EXISTS(p_line_rec.ship_from_org_id)
3817      THEN
3818          j := Warehouse_LineType_Pointer(p_line_rec.ship_from_org_id);
3819          WHILE Warehouse_LineType_Hold(j).Entity_Id1 = p_line_rec.ship_from_org_id
3820          LOOP
3821 
3822              IF Warehouse_LineType_Hold(j).Entity_Id2 = p_line_rec.line_type_id
3823              THEN
3824                  Mark_Hold(p_header_id => p_line_rec.header_id,
3825                   p_line_id => p_line_rec.line_id,
3826                   p_line_number => p_line_rec.line_number,
3827                   p_hold_source_id => Warehouse_LineType_Hold(j).hold_source_id,
3828                   p_ship_set_name => NULL,
3829                   p_arrival_set_name => NULL,
3830                   p_activity_name => Warehouse_LineType_Hold(j).activity_name,
3831                   p_attribute => 'Warehouse\Line Type',
3832                   p_top_model_line_id => p_line_rec.top_model_line_id
3833                   );
3834                 IF Warehouse_LineType_Hold(j).activity_name IS NULL THEN
3835                     p_on_generic_hold := TRUE;
3836                 ELSIF Warehouse_LineType_Hold(j).activity_name = 'LINE_SCHEDULING'
3837                 THEN
3838                     p_on_scheduling_hold := TRUE;
3839                 END IF;
3840 
3841              END IF;
3842              j := j + 1;
3843 
3844              IF j > Warehouse_LineType_Hold.COUNT THEN
3845                  EXIT;
3846              END IF;
3847 
3848          END LOOP;
3849      END IF;
3850 
3851      -- Check Warehouse Shipping Method Holds
3852      IF p_line_rec.ship_from_org_id IS NOT NULL AND
3853         p_line_rec.shipping_method_code IS NOT NULL AND
3854         Warehouse_ShipMethod_Pointer.EXISTS(p_line_rec.ship_from_org_id)
3855      THEN
3856          j := Warehouse_ShipMethod_Pointer(p_line_rec.ship_from_org_id);
3857          WHILE Warehouse_ShipMethod_Hold(j).Entity_Id1 = p_line_rec.ship_from_org_id
3858          LOOP
3859 
3860              IF Warehouse_ShipMethod_Hold(j).Entity_Id2 = p_line_rec.shipping_method_code
3861              THEN
3862                  Mark_Hold(p_header_id => p_line_rec.header_id,
3863                   p_line_id => p_line_rec.line_id,
3864                   p_line_number => p_line_rec.line_number,
3865                   p_hold_source_id => Warehouse_ShipMethod_Hold(j).hold_source_id,
3866                   p_ship_set_name => NULL,
3867                   p_arrival_set_name => NULL,
3868                   p_activity_name => Warehouse_ShipMethod_Hold(j).activity_name,
3869                   p_attribute => 'Warehouse\Shipping Method',
3870                   p_top_model_line_id => p_line_rec.top_model_line_id
3871                   );
3872                 IF Warehouse_ShipMethod_Hold(j).activity_name IS NULL THEN
3873                     p_on_generic_hold := TRUE;
3874                 ELSIF Warehouse_ShipMethod_Hold(j).activity_name = 'LINE_SCHEDULING'
3875                 THEN
3876                     p_on_scheduling_hold := TRUE;
3877                 END IF;
3878 
3879              END IF;
3880              j := j + 1;
3881 
3882              IF j > Warehouse_ShipMethod_Hold.COUNT THEN
3883                  EXIT;
3884              END IF;
3885 
3886          END LOOP;
3887      END IF;
3888 
3889      -- Check Warehouse Deliver to Site Holds
3890      IF p_line_rec.ship_from_org_id IS NOT NULL AND
3891         p_line_rec.deliver_to_org_id IS NOT NULL AND
3892         Warehouse_Deliverto_Pointer.EXISTS(p_line_rec.ship_from_org_id)
3893      THEN
3894          j := Warehouse_Deliverto_Pointer(p_line_rec.ship_from_org_id);
3895          WHILE Warehouse_Deliverto_Hold(j).Entity_Id1 = p_line_rec.ship_from_org_id
3896          LOOP
3897 
3898              IF Warehouse_Deliverto_Hold(j).Entity_Id2 = p_line_rec.deliver_to_org_id
3899              THEN
3900                  Mark_Hold(p_header_id => p_line_rec.header_id,
3901                   p_line_id => p_line_rec.line_id,
3902                   p_line_number => p_line_rec.line_number,
3903                   p_hold_source_id => Warehouse_Deliverto_Hold(j).hold_source_id,
3904                   p_ship_set_name => NULL,
3905                   p_arrival_set_name => NULL,
3906                   p_activity_name => Warehouse_Deliverto_Hold(j).activity_name,
3907                   p_attribute => 'Warehouse\Deliver to Site',
3908                   p_top_model_line_id => p_line_rec.top_model_line_id
3909                   );
3910                 IF Warehouse_Deliverto_Hold(j).activity_name IS NULL THEN
3911                     p_on_generic_hold := TRUE;
3912                 ELSIF Warehouse_Deliverto_Hold(j).activity_name = 'LINE_SCHEDULING'
3913                 THEN
3914                     p_on_scheduling_hold := TRUE;
3915                 END IF;
3916 
3917              END IF;
3918              j := j + 1;
3919 
3923 
3920              IF j > Warehouse_Deliverto_Hold.COUNT THEN
3921                  EXIT;
3922              END IF;
3924          END LOOP;
3925      END IF;
3926 
3927 
3928      -- Check Warehouse Source type Holds
3929      IF p_line_rec.ship_from_org_id IS NOT NULL AND
3930         p_line_rec.source_type_code IS NOT NULL AND
3931         Warehouse_SourceType_Pointer.EXISTS(p_line_rec.ship_from_org_id)
3932      THEN
3933          j := Warehouse_SourceType_Pointer(p_line_rec.ship_from_org_id);
3934          WHILE Warehouse_SourceType_Hold(j).Entity_Id1 = p_line_rec.ship_from_org_id
3935          LOOP
3936 
3937              IF Warehouse_SourceType_Hold(j).Entity_Id2 = p_line_rec.source_type_code
3938              THEN
3939                  Mark_Hold(p_header_id => p_line_rec.header_id,
3940                   p_line_id => p_line_rec.line_id,
3941                   p_line_number => p_line_rec.line_number,
3942                   p_hold_source_id => Warehouse_SourceType_Hold(j).hold_source_id,
3943                   p_ship_set_name => NULL,
3944                   p_arrival_set_name => NULL,
3945                   p_activity_name => Warehouse_SourceType_Hold(j).activity_name,
3946                   p_attribute => 'Warehouse\Source Type',
3947                   p_top_model_line_id => p_line_rec.top_model_line_id
3948                   );
3949                 IF Warehouse_SourceType_Hold(j).activity_name IS NULL THEN
3950                     p_on_generic_hold := TRUE;
3951                 ELSIF Warehouse_SourceType_Hold(j).activity_name = 'LINE_SCHEDULING'
3952                 THEN
3953                     p_on_scheduling_hold := TRUE;
3954                 END IF;
3955 
3956              END IF;
3957              j := j + 1;
3958 
3959              IF j > Warehouse_SourceType_Hold.COUNT THEN
3960                  EXIT;
3961              END IF;
3962 
3963          END LOOP;
3964      END IF;
3965 
3966 --ER#7479609 end
3967 
3968    --ER# 12571983 start
3969     -- Check Warehouse, EndCustomer Holds
3970      IF p_line_rec.ship_from_org_id IS NOT NULL AND
3971         p_line_rec.end_customer_id IS NOT NULL AND
3972         Warehouse_EndCust_Pointer.EXISTS(p_line_rec.ship_from_org_id)
3973      THEN
3974          j := Warehouse_EndCust_Pointer(p_line_rec.ship_from_org_id);
3975          WHILE Warehouse_EndCust_Hold(j).Entity_Id1 = p_line_rec.ship_from_org_id
3976          LOOP
3977 
3978              IF Warehouse_EndCust_Hold(j).Entity_Id2 = p_line_rec.end_customer_id
3979              THEN
3980                  Mark_Hold(p_header_id => p_line_rec.header_id,
3981                   p_line_id => p_line_rec.line_id,
3982                   p_line_number => p_line_rec.line_number,
3983                   p_hold_source_id =>Warehouse_EndCust_Hold(j).hold_source_id,
3984                   p_ship_set_name => NULL,
3985                   p_arrival_set_name => NULL,
3986                   p_activity_name => Warehouse_EndCust_Hold(j).activity_name,
3987                   p_attribute => 'Warehouse\End Customer',
3988                   p_top_model_line_id => p_line_rec.top_model_line_id
3989                   );
3990                 IF Warehouse_EndCust_Hold(j).activity_name IS NULL THEN
3991                     p_on_generic_hold := TRUE;
3992                 ELSIF Warehouse_EndCust_Hold(j).activity_name = 'LINE_SCHEDULING'
3993                 THEN
3994                     p_on_scheduling_hold := TRUE;
3995                 END IF;
3996 
3997              END IF;
3998              j := j + 1;
3999 
4000              IF j > Warehouse_EndCust_Hold.COUNT THEN
4001                  EXIT;
4002              END IF;
4003 
4004          END LOOP;
4005      END IF;
4006 	--ER# 12571983 end
4007 
4008 	--ER# 13331078 START added fro 'IC'
4009 	  --Check Item Category,Warehouse Holds
4010      IF l_itemcategory_id IS NOT NULL AND
4011         p_line_rec.ship_from_org_id  IS NOT NULL AND
4012         ItemCat_Warehouse_Pointer.EXISTS(l_itemcategory_id)
4013      THEN
4014          j := ItemCat_Warehouse_Pointer(l_itemcategory_id);
4015          WHILE ItemCat_Warehouse_Hold(j).Entity_Id1 = l_itemcategory_id
4016          LOOP
4017 
4018              IF ItemCat_Warehouse_Hold(j).Entity_Id2 = p_line_rec.ship_from_org_id
4019              THEN
4020                  Mark_Hold(p_header_id => p_line_rec.header_id,
4021                   p_line_id => p_line_rec.line_id,
4022                   p_line_number => p_line_rec.line_number,
4023                   p_hold_source_id => ItemCat_Warehouse_Hold(j).hold_source_id,
4024                   p_ship_set_name => NULL,
4025                   p_arrival_set_name => NULL,
4026                   p_activity_name => ItemCat_Warehouse_Hold(j).activity_name,
4027                   p_attribute => 'ItemCategory\Warehouse',
4028                   p_top_model_line_id => p_line_rec.top_model_line_id
4029                   );
4030                  IF ItemCat_Warehouse_Hold(j).activity_name IS NULL THEN
4031                     p_on_generic_hold := TRUE;
4032                  ELSIF ItemCat_Warehouse_Hold(j).activity_name = 'LINE_SCHEDULING'
4033                  THEN
4034                     p_on_scheduling_hold := TRUE;
4035                  END IF;
4036 
4037              END IF;
4038              j := j + 1;
4039 
4040              IF j > ItemCat_Warehouse_Hold.COUNT THEN
4041                  EXIT;
4042              END IF;
4043 
4044          END LOOP;
4045      END IF;
4046 
4047 	 --ER# 13331078 END added 'IC'
4048 
4049   END IF;
4050 oe_debug_pub.add('Exitting OE_Bulk_Holds_PVT.Evaluate_Holds');  --ER#7479609 debug
4051 EXCEPTION
4052   WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
4053     RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
4054   WHEN OTHERS THEN
4055     OE_BULK_MSG_PUB.Add_Exc_Msg
4056        (   G_PKG_NAME
4057         ,   'Evaluate_Holds'
4058         );
4062 --ER#7479609 end
4059     RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
4060 END Evaluate_Holds;
4061 
4063 
4064 
4065 
4066 PROCEDURE Evaluate_Holds(
4067 p_header_id                  IN NUMBER,
4068 p_line_id                    IN NUMBER,
4069 p_line_number                IN NUMBER,
4070 p_sold_to_org_id             IN NUMBER,
4071 p_inventory_item_id          IN NUMBER,
4072 p_ship_from_org_id           IN NUMBER,
4073 p_invoice_to_org_id          IN NUMBER,
4074 p_ship_to_org_id             IN NUMBER,
4075 p_top_model_line_id          IN NUMBER,
4076 p_ship_set_name              IN VARCHAR2,
4077 p_arrival_set_name           IN VARCHAR2,
4078 p_check_only_warehouse_holds IN BOOLEAN := FALSE,
4079 p_on_generic_hold            OUT NOCOPY BOOLEAN,
4080 p_on_booking_hold            OUT NOCOPY BOOLEAN,
4081 p_on_scheduling_hold         OUT NOCOPY BOOLEAN
4082 )
4083 IS
4084 i  NUMBER;
4085 j NUMBER;
4086 l_activity_name VARCHAR2(30);
4087 BEGIN
4088   -- Set the OUT parameter
4089   p_on_generic_hold := FALSE;
4090   p_on_booking_hold := FALSE;
4091   p_on_scheduling_hold := FALSE;
4092 
4093   IF p_line_id IS NULL THEN -- Header Level Holds
4094 
4095      -- Check Customer Hold
4096      IF Customer_Pointer.EXISTS(p_sold_to_org_id) THEN
4097 
4098          j := Customer_Pointer(p_sold_to_org_id);
4099          WHILE Customer_hold(j).Entity_Id1 = p_sold_to_org_id
4100          LOOP
4101              Mark_Hold(p_header_id => p_header_id,
4102                   p_line_id => NULL,
4103                   p_line_number => NULL,
4104                   p_hold_source_id => Customer_hold(j).hold_source_id,
4105                   p_ship_set_name => NULL,
4106                   p_arrival_set_name => NULL,
4107                   p_activity_name => Customer_hold(j).activity_name,
4108                   p_attribute => 'Customer',
4109                   p_top_model_line_id => NULL
4110                   );
4111              IF Customer_hold(j).activity_name IS NULL THEN
4112                p_on_generic_hold := TRUE;
4113              ELSIF Customer_hold(j).activity_name = 'BOOK_ORDER' THEN
4114                p_on_booking_hold := TRUE;
4115              END IF;
4116              j := j+1;
4117 
4118              IF j > Customer_hold.COUNT THEN
4119                  EXIT;
4120              END IF;
4121 
4122          END LOOP;
4123 
4124      END IF;
4125 
4126   ELSE  -- Line Level Holds
4127 
4128      IF p_check_only_warehouse_holds THEN
4129         GOTO Just_WareHouse_Holds;
4130      END IF;
4131 
4132      -- Check Item Hold
4133      IF p_inventory_item_id IS NOT NULL AND
4134         Item_Pointer.EXISTS(p_inventory_item_id)
4135      THEN
4136          j := Item_Pointer(p_inventory_item_id);
4137          WHILE item_hold(j).Entity_Id1 = p_inventory_item_id
4138          LOOP
4139             Mark_Hold(p_header_id => p_header_id,
4140                   p_line_id => p_line_id,
4141                   p_line_number => p_line_number,
4142                   p_hold_source_id => Item_Hold(j).hold_source_id,
4143                   p_ship_set_name => p_ship_set_name,
4144                   p_arrival_set_name => p_arrival_set_name,
4145                   p_activity_name => Item_hold(j).activity_name,
4146                   p_attribute => 'Item',
4147                   p_top_model_line_id => p_top_model_line_id
4148                   );
4149             IF item_hold(j).activity_name IS NULL THEN
4150                p_on_generic_hold := TRUE;
4151             ELSIF item_hold(j).activity_name = 'LINE_SCHEDULING' THEN
4152                p_on_scheduling_hold := TRUE;
4153             END IF;
4154             j := j+1;
4155             IF j > Item_Hold.COUNT THEN
4156                 EXIT;
4157             END IF;
4158 
4159          END LOOP;
4160 
4161      END IF;
4162 
4163      -- Check Ship_To Hold
4164      IF p_ship_to_org_id IS NOT NULL AND
4165         Ship_To_Pointer.EXISTS(p_ship_to_org_id)
4166      THEN
4167          j := ship_to_Pointer(p_ship_to_org_id);
4168          WHILE Ship_to_hold(j).Entity_Id1 = p_ship_to_org_id
4169          LOOP
4170             Mark_Hold(p_header_id => p_header_id,
4171                   p_line_id => p_line_id,
4172                   p_line_number => p_line_number,
4173                   p_hold_source_id => Ship_to_Hold(j).hold_source_id,
4174                   p_ship_set_name => p_ship_set_name,
4175                   p_arrival_set_name => p_arrival_set_name,
4176                   p_activity_name => Ship_to_hold(j).activity_name,
4177                   p_attribute => 'Ship to Site',
4178                   p_top_model_line_id => p_top_model_line_id
4179                   );
4180             IF Ship_to_hold(j).activity_name IS NULL THEN
4181                p_on_generic_hold := TRUE;
4182             ELSIF Ship_to_hold(j).activity_name = 'LINE_SCHEDULING' THEN
4183                p_on_scheduling_hold := TRUE;
4184             END IF;
4185             j := j+1;
4186             IF j > Ship_to_Hold.COUNT THEN
4187                 EXIT;
4188             END IF;
4189 
4190          END LOOP;
4191 
4192      END IF;
4193 
4194      -- Check Bill_To Hold
4195      IF p_invoice_to_org_id IS NOT NULL AND
4196         Bill_To_Pointer.EXISTS(p_invoice_to_org_id)
4197      THEN
4198          j := Bill_To_Pointer(p_invoice_to_org_id);
4199          WHILE Bill_To_hold(j).Entity_Id1 = p_invoice_to_org_id
4200          LOOP
4201             Mark_Hold(p_header_id => p_header_id,
4202                   p_line_id => p_line_id,
4203                   p_line_number => p_line_number,
4204                   p_hold_source_id => Bill_To_hold(j).hold_source_id,
4205                   p_ship_set_name => p_ship_set_name,
4209                   p_top_model_line_id => p_top_model_line_id
4206                   p_arrival_set_name => p_arrival_set_name,
4207                   p_activity_name => Bill_To_hold(j).activity_name,
4208                   p_attribute => 'Bill to Site',
4210                   );
4211             IF Bill_To_hold(j).activity_name IS NULL THEN
4212                p_on_generic_hold := TRUE;
4213             ELSIF Bill_To_hold(j).activity_name = 'LINE_SCHEDULING' THEN
4214                p_on_scheduling_hold := TRUE;
4215             END IF;
4216             j := j+1;
4217             IF j > Bill_to_Hold.COUNT THEN
4218                 EXIT;
4219             END IF;
4220 
4221          END LOOP;
4222 
4223      END IF;
4224 
4225 
4226      -- Check Item Customer Holds
4227      IF p_inventory_item_id IS NOT NULL AND
4228         p_sold_to_org_id IS NOT NULL AND
4229         Item_Customer_Pointer.EXISTS(p_inventory_item_id)
4230      THEN
4231          j := Item_Customer_Pointer(p_inventory_item_id);
4232          WHILE Item_Customer_hold(j).Entity_Id1 = p_inventory_item_id
4233          LOOP
4234 
4235              IF Item_Customer_Hold(j).Entity_Id2 = p_sold_to_org_id
4236              THEN
4237                  Mark_Hold(p_header_id => p_header_id,
4238                   p_line_id => p_line_id,
4239                   p_line_number => p_line_number,
4240                   p_hold_source_id => Item_Customer_Hold(j).hold_source_id,
4241                   p_ship_set_name => p_ship_set_name,
4242                   p_arrival_set_name => p_arrival_set_name,
4243                   p_activity_name => Item_Customer_Hold(j).activity_name,
4244                   p_attribute => 'Item\Customer',
4245                   p_top_model_line_id => p_top_model_line_id
4246                   );
4247                  IF Item_Customer_Hold(j).activity_name IS NULL THEN
4248                     p_on_generic_hold := TRUE;
4249                  ELSIF Item_Customer_Hold(j).activity_name = 'LINE_SCHEDULING'
4250                  THEN
4251                     p_on_scheduling_hold := TRUE;
4252                  END IF;
4253 
4254              END IF;
4255              j := j + 1;
4256 
4257              IF j > Item_Customer_hold.COUNT THEN
4258                  EXIT;
4259              END IF;
4260 
4261          END LOOP;
4262      END IF;
4263 
4264      -- Check Item Shipto Holds
4265      IF p_inventory_item_id IS NOT NULL AND
4266         p_ship_to_org_id IS NOT NULL AND
4267         Item_Shipto_Pointer.EXISTS(p_inventory_item_id)
4268      THEN
4269          j := Item_shipto_Pointer(p_inventory_item_id);
4270          WHILE Item_shipto_hold(j).Entity_Id1 = p_inventory_item_id
4271          LOOP
4272 
4273              IF Item_shipto_Hold(j).Entity_Id2 = p_ship_to_org_id
4274              THEN
4275                  Mark_Hold(p_header_id => p_header_id,
4276                   p_line_id => p_line_id,
4277                   p_line_number => p_line_number,
4278                   p_hold_source_id => Item_shipto_Hold(j).hold_source_id,
4279                   p_ship_set_name => p_ship_set_name,
4280                   p_arrival_set_name => p_arrival_set_name,
4281                   p_activity_name => Item_shipto_Hold(j).activity_name,
4282                   p_attribute => 'Item\Ship to Site',
4283                   p_top_model_line_id => p_top_model_line_id
4284                   );
4285                  IF Item_shipto_Hold(j).activity_name IS NULL THEN
4286                     p_on_generic_hold := TRUE;
4287                  ELSIF Item_shipto_Hold(j).activity_name = 'LINE_SCHEDULING'
4288                  THEN
4289                     p_on_scheduling_hold := TRUE;
4290                  END IF;
4291 
4292              END IF;
4293              j := j + 1;
4294 
4295              IF j > Item_shipto_hold.COUNT THEN
4296                  EXIT;
4297              END IF;
4298 
4299          END LOOP;
4300      END IF;
4301 
4302      -- Check Item BillTo Holds
4303      IF p_inventory_item_id IS NOT NULL AND
4304         p_invoice_to_org_id IS NOT NULL AND
4305         Item_Billto_Pointer.EXISTS(p_inventory_item_id)
4306      THEN
4307          j := Item_billto_Pointer(p_inventory_item_id);
4308          WHILE Item_billto_hold(j).Entity_Id1 = p_inventory_item_id
4309          LOOP
4310 
4311              IF Item_billto_Hold(j).Entity_Id2 = p_invoice_to_org_id
4312              THEN
4313                  Mark_Hold(p_header_id => p_header_id,
4314                   p_line_id => p_line_id,
4315                   p_line_number => p_line_number,
4316                   p_hold_source_id => Item_billto_Hold(j).hold_source_id,
4317                   p_ship_set_name => p_ship_set_name,
4318                   p_arrival_set_name => p_arrival_set_name,
4319                   p_activity_name => Item_billto_Hold(j).activity_name,
4320                   p_attribute => 'Item\Bill to Site',
4321                   p_top_model_line_id => p_top_model_line_id
4322                   );
4323                  IF Item_billto_Hold(j).activity_name IS NULL THEN
4324                     p_on_generic_hold := TRUE;
4325                  ELSIF Item_billto_Hold(j).activity_name = 'LINE_SCHEDULING'
4326                  THEN
4327                     p_on_scheduling_hold := TRUE;
4328                  END IF;
4329 
4330              END IF;
4331              j := j + 1;
4332 
4333              IF j > Item_billto_hold.COUNT THEN
4334                  EXIT;
4335              END IF;
4336 
4337          END LOOP;
4338      END IF;
4339 
4340      <<Just_WareHouse_Holds>>
4341 
4342      -- Check Item Warehouse Holds
4343      IF p_inventory_item_id IS NOT NULL AND
4344         p_ship_from_org_id IS NOT NULL AND
4348          WHILE Item_Warehouse_hold(j).Entity_Id1 = p_inventory_item_id
4345         Item_Warehouse_Pointer.EXISTS(p_inventory_item_id)
4346      THEN
4347          j := Item_Warehouse_Pointer(p_inventory_item_id);
4349          LOOP
4350 
4351              IF Item_Warehouse_Hold(j).Entity_Id2 = p_ship_from_org_id
4352              THEN
4353                  Mark_Hold(p_header_id => p_header_id,
4354                   p_line_id => p_line_id,
4355                   p_line_number => p_line_number,
4356                   p_hold_source_id => Item_Warehouse_Hold(j).hold_source_id,
4357                   p_ship_set_name => p_ship_set_name,
4358                   p_arrival_set_name => p_arrival_set_name,
4359                   p_activity_name => Item_Warehouse_Hold(j).activity_name,
4360                   p_attribute => 'Item\Warehouse',
4361                   p_top_model_line_id => p_top_model_line_id
4362                   );
4363                  IF Item_Warehouse_Hold(j).activity_name IS NULL THEN
4364                     p_on_generic_hold := TRUE;
4365                  ELSIF Item_Warehouse_Hold(j).activity_name = 'LINE_SCHEDULING'
4366                  THEN
4367                     p_on_scheduling_hold := TRUE;
4368                  END IF;
4369 
4370              END IF;
4371              j := j + 1;
4372 
4373              IF j > Item_Warehouse_hold.COUNT THEN
4374                  EXIT;
4375              END IF;
4376 
4377          END LOOP;
4378      END IF;
4379 
4380      -- Check Warehouse Hold
4381      IF p_ship_from_org_id IS NOT NULL AND
4382         Warehouse_Pointer.EXISTS(p_ship_from_org_id)
4383      THEN
4384          j := Warehouse_Pointer(p_ship_from_org_id);
4385          WHILE Warehouse_hold(j).Entity_Id1 = p_ship_from_org_id
4386          LOOP
4387             Mark_Hold(p_header_id => p_header_id,
4388                   p_line_id => p_line_id,
4389                   p_line_number => p_line_number,
4390                   p_hold_source_id => Warehouse_hold(j).hold_source_id,
4391                   p_ship_set_name => p_ship_set_name,
4392                   p_arrival_set_name => p_arrival_set_name,
4393                   p_activity_name => Warehouse_hold(j).activity_name,
4394                   p_attribute => 'Warehouse',
4395                   p_top_model_line_id => p_top_model_line_id
4396                   );
4397             IF Warehouse_hold(j).activity_name IS NULL THEN
4398                p_on_generic_hold := TRUE;
4399             ELSIF Warehouse_hold(j).activity_name = 'LINE_SCHEDULING' THEN
4400                p_on_scheduling_hold := TRUE;
4401             END IF;
4402             j := j+1;
4403             IF j > Warehouse_Hold.COUNT THEN
4404                 EXIT;
4405             END IF;
4406 
4407          END LOOP;
4408 
4409      END IF;
4410 
4411      -- Check Warehouse Customer Holds
4412      IF p_ship_from_org_id IS NOT NULL AND
4413         p_sold_to_org_id IS NOT NULL AND
4414         Warehouse_Customer_Pointer.EXISTS(p_ship_from_org_id)
4415      THEN
4416          j := Warehouse_Customer_Pointer(p_ship_from_org_id);
4417          WHILE Warehouse_Customer_Hold(j).Entity_Id1 = p_ship_from_org_id
4418          LOOP
4419 
4420              IF Warehouse_Customer_Hold(j).Entity_Id2 = p_sold_to_org_id
4421              THEN
4422                  Mark_Hold(p_header_id => p_header_id,
4423                   p_line_id => p_line_id,
4424                   p_line_number => p_line_number,
4425                   p_hold_source_id =>Warehouse_Customer_Hold(j).hold_source_id,
4426                   p_ship_set_name => p_ship_set_name,
4427                   p_arrival_set_name => p_arrival_set_name,
4428                   p_activity_name => Warehouse_Customer_Hold(j).activity_name,
4429                   p_attribute => 'Warehouse\Customer',
4430                   p_top_model_line_id => p_top_model_line_id
4431                   );
4432                 IF Warehouse_Customer_Hold(j).activity_name IS NULL THEN
4433                     p_on_generic_hold := TRUE;
4434                 ELSIF Warehouse_Customer_Hold(j).activity_name = 'LINE_SCHEDULING'
4435                 THEN
4436                     p_on_scheduling_hold := TRUE;
4437                 END IF;
4438 
4439              END IF;
4440              j := j + 1;
4441 
4442              IF j > Warehouse_Customer_Hold.COUNT THEN
4443                  EXIT;
4444              END IF;
4445 
4446          END LOOP;
4447      END IF;
4448 
4449      -- Check Warehouse Shipto Holds
4450      IF p_ship_from_org_id IS NOT NULL AND
4451         p_ship_to_org_id IS NOT NULL AND
4452         Warehouse_shipto_pointer.EXISTS(p_ship_from_org_id)
4453      THEN
4454          j := Warehouse_shipto_pointer(p_ship_from_org_id);
4455          WHILE Warehouse_shipto_Hold(j).Entity_Id1 = p_ship_from_org_id
4456          LOOP
4457 
4458              IF Warehouse_shipto_Hold(j).Entity_Id2 = p_ship_to_org_id
4459              THEN
4460                  Mark_Hold(p_header_id => p_header_id,
4461                   p_line_id => p_line_id,
4462                   p_line_number => p_line_number,
4463                   p_hold_source_id => Warehouse_shipto_Hold(j).hold_source_id,
4464                   p_ship_set_name => p_ship_set_name,
4465                   p_arrival_set_name => p_arrival_set_name,
4466                   p_activity_name => Warehouse_shipto_Hold(j).activity_name,
4467                   p_attribute => 'Warehouse\Ship to Site',
4468                   p_top_model_line_id => p_top_model_line_id
4469                   );
4470                 IF Warehouse_shipto_Hold(j).activity_name IS NULL THEN
4471                     p_on_generic_hold := TRUE;
4472                 ELSIF Warehouse_shipto_Hold(j).activity_name = 'LINE_SCHEDULING'
4473                 THEN
4477              END IF;
4474                     p_on_scheduling_hold := TRUE;
4475                 END IF;
4476 
4478              j := j + 1;
4479 
4480              IF j > Warehouse_shipto_Hold.COUNT THEN
4481                  EXIT;
4482              END IF;
4483 
4484          END LOOP;
4485      END IF;
4486 
4487      -- Check Warehouse BillTo Holds
4488      IF p_ship_from_org_id IS NOT NULL AND
4489         p_invoice_to_org_id IS NOT NULL AND
4490         Warehouse_billto_pointer.EXISTS(p_ship_from_org_id)
4491      THEN
4492          j := Warehouse_billto_pointer(p_ship_from_org_id);
4493          WHILE Warehouse_billto_Hold(j).Entity_Id1 = p_ship_from_org_id
4494          LOOP
4495 
4496              IF Warehouse_billto_Hold(j).Entity_Id2 = p_invoice_to_org_id
4497              THEN
4498                  Mark_Hold(p_header_id => p_header_id,
4499                   p_line_id => p_line_id,
4500                   p_line_number => p_line_number,
4501                   p_hold_source_id => Warehouse_billto_Hold(j).hold_source_id,
4502                   p_ship_set_name => p_ship_set_name,
4503                   p_arrival_set_name => p_arrival_set_name,
4504                   p_activity_name => Warehouse_billto_Hold(j).activity_name,
4505                   p_attribute => 'Warehouse\Bill to Site',
4506                   p_top_model_line_id => p_top_model_line_id
4507                   );
4508                 IF Warehouse_billto_Hold(j).activity_name IS NULL THEN
4509                     p_on_generic_hold := TRUE;
4510                 ELSIF Warehouse_billto_Hold(j).activity_name = 'LINE_SCHEDULING'
4511                 THEN
4512                     p_on_scheduling_hold := TRUE;
4513                 END IF;
4514 
4515              END IF;
4516              j := j + 1;
4517 
4518              IF j > Warehouse_billto_Hold.COUNT THEN
4519                  EXIT;
4520              END IF;
4521 
4522          END LOOP;
4523      END IF;
4524 
4525   END IF;
4526 
4527 EXCEPTION
4528   WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
4529     RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
4530   WHEN OTHERS THEN
4531     OE_BULK_MSG_PUB.Add_Exc_Msg
4532        (   G_PKG_NAME
4533         ,   'Evaluate_Holds'
4534         );
4535     RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
4536 END Evaluate_Holds;
4537 
4538 PROCEDURE Extend_Holds_Tbl
4539 IS
4540 BEGIN
4541 
4542   G_Hold_header_id.EXTEND;
4543   G_Hold_line_id.EXTEND;
4544   G_Hold_source_id.EXTEND;
4545   G_hold_ship_set.EXTEND;
4546   G_hold_arrival_set.EXTEND;
4547   G_hold_top_model_line_id.EXTEND;
4548   G_hold_activity_name.EXTEND;
4549 
4550 EXCEPTION
4551   WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
4552     RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
4553   WHEN OTHERS THEN
4554     OE_BULK_MSG_PUB.Add_Exc_Msg
4555        (   G_PKG_NAME
4556         ,   'Extend_Holds_Tbl'
4557         );
4558     RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
4559 END Extend_Holds_Tbl;
4560 
4561 PROCEDURE Create_Holds
4562 IS
4563   l_debug_level CONSTANT NUMBER := oe_debug_pub.g_debug_level;
4564   l_org_id      number :=mo_global.get_current_org_id; --5488209
4565 BEGIN
4566 
4567     IF l_debug_level > 0 THEN
4568         oe_debug_pub.add('No. of holds to create is '||G_Hold_header_id.COUNT);
4569         oe_debug_pub.add('No. of holds sources to create is '
4570                           ||g_hold_source_rec.HOLD_SOURCE_ID.COUNT);
4571     END IF;
4572 
4573     FORALL i IN 1..G_Hold_header_id.COUNT
4574     --added org_id in insert for bug 5488209
4575     INSERT INTO OE_ORDER_HOLDS
4576     (   ORDER_HOLD_ID
4577     ,   LAST_UPDATE_DATE
4578     ,   LAST_UPDATED_BY
4579     ,   CREATION_DATE
4580     ,   CREATED_BY
4581     ,   LAST_UPDATE_LOGIN
4582     ,   HOLD_SOURCE_ID
4583     ,   HEADER_ID
4584     ,   LINE_ID
4585     ,   RELEASED_FLAG
4586     ,   ORG_ID
4587     )
4588     VALUES
4589    (    OE_ORDER_HOLDS_S.NEXTVAL
4590     ,   SYSDATE
4591     ,   NVL(FND_GLOBAL.USER_ID, -1)
4592     ,   SYSDATE
4593     ,   NVL(FND_GLOBAL.USER_ID, -1)
4594     ,   NULL
4595     ,   G_hold_source_id(i)
4596     ,   G_Hold_header_id(i)
4597     ,   G_Hold_line_id(i)
4598     ,   'N'
4599     ,   l_org_id
4600     );
4601 
4602   -- Clear the Globals.
4603   g_hold_header_id.DELETE;
4604   g_hold_line_id.DELETE;
4605   g_hold_Source_Id.DELETE;
4606   g_hold_ship_set.DELETE;
4607   g_hold_arrival_set.DELETE;
4608   g_hold_top_model_line_id.DELETE;
4609   g_hold_activity_name.DELETE;
4610 
4611   IF g_hold_source_rec.HOLD_SOURCE_ID.COUNT > 0 THEN
4612       FORALL i IN 1..g_hold_source_rec.HOLD_SOURCE_ID.COUNT
4613           --added org_id in insert for bug 5488209
4614           INSERT INTO OE_HOLD_SOURCES
4615           (  HOLD_SOURCE_ID
4616            , LAST_UPDATE_DATE
4617            , LAST_UPDATED_BY
4618            , CREATION_DATE
4619            , CREATED_BY
4620            , LAST_UPDATE_LOGIN
4621            , PROGRAM_APPLICATION_ID
4622            , PROGRAM_ID
4623            , PROGRAM_UPDATE_DATE
4624            , REQUEST_ID
4625            , HOLD_ID
4626            , HOLD_ENTITY_CODE
4627            , HOLD_ENTITY_ID
4628            , HOLD_UNTIL_DATE
4629            , RELEASED_FLAG
4630 	   , ORG_ID
4631           )
4632      VALUES
4633           (  g_hold_source_rec.hold_source_id(i)
4634            , sysdate
4635            , NVL(FND_GLOBAL.USER_ID, -1)
4636            , sysdate
4637            , NVL(FND_GLOBAL.USER_ID, -1)
4638            , NULL
4639            , NULL
4643            , g_hold_source_rec.HOLD_ID(i)
4640            , NULL
4641            , NULL
4642            , NULL
4644            , g_hold_source_rec.HOLD_ENTITY_CODE(i)
4645            , g_hold_source_rec.HOLD_ENTITY_ID(i)
4646            , NULL
4647            , 'N'
4648 	   , l_org_id
4649            );
4650 
4651           g_hold_source_rec.HOLD_ID.DELETE;
4652           g_hold_source_rec.HOLD_SOURCE_ID.DELETE;
4653           g_hold_source_rec.HOLD_ENTITY_CODE.DELETE;
4654           g_hold_source_rec.HOLD_ENTITY_ID.DELETE;
4655   END IF;
4656 EXCEPTION
4657   WHEN OTHERS THEN
4658     IF l_debug_level > 0 THEN
4659         oe_debug_pub.add('In OTHERS error ' || SUBSTR(sqlerrm,1,240), 1);
4660     END IF;
4661     OE_BULK_MSG_PUB.Add_Exc_Msg
4662        (   G_PKG_NAME
4663         ,   'Create_Holds'
4664         );
4665     RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
4666 END Create_Holds;
4667 
4668 PROCEDURE Mark_Hold(p_header_id IN NUMBER,
4669                     p_line_id IN NUMBER,
4670                     p_line_number IN NUMBER,
4671                     p_hold_source_id IN NUMBER,
4672                     p_ship_set_name IN VARCHAR2,
4673                     p_arrival_set_name IN VARCHAR2,
4674                     p_activity_name IN VARCHAR2,
4675                     p_attribute IN VARCHAR2,
4676                     p_top_model_line_id IN NUMBER
4677                     )
4678 IS
4679   l_debug_level CONSTANT NUMBER := oe_debug_pub.g_debug_level;
4680   i BINARY_INTEGER;
4681 BEGIN
4682 
4683     i := G_Hold_header_id.COUNT;
4684     Extend_Holds_Tbl;
4685 
4686     G_Hold_header_id(i+1) := p_header_id;
4687     G_Hold_line_id(i+1) := p_line_id;
4688     G_Hold_source_id(i+1) := p_hold_source_id;
4689     G_Hold_ship_set(i+1) := p_ship_set_name;
4690     G_Hold_arrival_set(i+1) := p_arrival_set_name;
4691     G_Hold_top_model_line_id(i+1) := p_top_model_line_id;
4692     G_Hold_activity_name(i+1) := p_activity_name;
4693 
4694     IF p_line_id IS NULL THEN
4695         FND_MESSAGE.SET_NAME('ONT','OE_HLD_APPLIED');
4696     ELSE
4697         FND_MESSAGE.SET_NAME('ONT','OE_HLD_APPLIED_LINE');
4698         FND_MESSAGE.SET_TOKEN('LINE_NUMBER',p_line_number);
4699     END IF;
4700     FND_MESSAGE.SET_TOKEN('ATTRIBUTE',p_attribute);
4701     OE_BULK_MSG_PUB.ADD;
4702 
4703 EXCEPTION
4704   WHEN OTHERS THEN
4705     IF l_debug_level > 0 THEN
4706         oe_debug_pub.add('In OTHERS error - Mark_Hold ' ||
4707                           SUBSTR(sqlerrm,1,240), 1);
4708     END IF;
4709     OE_BULK_MSG_PUB.Add_Exc_Msg
4710        (   G_PKG_NAME
4711         ,   'Mark_Hold'
4712         );
4713     RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
4714 END Mark_Hold;
4715 
4716 FUNCTION Is_Header_On_Hold(
4717 p_header_id         IN NUMBER,
4718 p_hold_index        IN OUT NOCOPY NUMBER
4719 ) RETURN BOOLEAN
4720 IS
4721 i        NUMBER;
4722 l_old_header_id  NUMBER;
4723 BEGIN
4724 
4725     IF g_hold_header_id.COUNT > 0 THEN
4726 
4727         IF p_hold_index IS NULL THEN
4728            p_hold_index := 1;
4729         END IF;
4730 
4731         l_old_header_id := g_hold_header_id(p_hold_index);
4732 
4733         FOR i IN p_hold_index..g_hold_header_id.COUNT LOOP
4734 
4735             -- IF there are NO Header Level Holds
4736             IF g_hold_line_id(i) IS NOT NULL THEN
4737                 RETURN FALSE;
4738             END IF;
4739 
4740             -- Since the search is a linear one with incremental header_id
4741             IF g_hold_header_id(i) > p_header_id THEN
4742                 RETURN  FALSE;
4743             END IF;
4744 
4745             IF g_hold_header_id(i) <> l_old_header_id THEN
4746                p_hold_index := i;
4747             END IF;
4748 
4749             IF p_header_id = g_hold_header_id(i) AND
4750                g_hold_activity_name(i) IS NULL THEN
4751                 RETURN TRUE;
4752             END IF;
4753             l_old_header_id := g_hold_header_id(i);
4754 
4755         END LOOP;
4756 
4757     END IF;
4758 
4759     RETURN FALSE;
4760 
4761 EXCEPTION
4762   WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
4763     RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
4764   WHEN OTHERS THEN
4765     OE_BULK_MSG_PUB.Add_Exc_Msg
4766        (   G_PKG_NAME
4767         ,   'Is_Header_On_Hold'
4768         );
4769     RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
4770 END Is_Header_On_Hold;
4771 
4772 FUNCTION Is_Line_On_Hold(
4773 p_header_id         IN NUMBER,
4774 p_line_id           IN NUMBER,
4775 p_top_model_line_id IN NUMBER,
4776 p_ship_set_name     IN VARCHAR2,
4777 p_arrival_set_name  IN VARCHAR2,
4778 p_hold_index        IN OUT NOCOPY NUMBER
4779 ) RETURN BOOLEAN
4780 IS
4781 i        BINARY_INTEGER;
4782 l_old_header_id  NUMBER;
4783 BEGIN
4784 
4785     IF g_hold_header_id.COUNT > 0 THEN
4786 
4787         i := 1;
4788         l_old_header_id := g_hold_header_id(p_hold_index);
4789         -- Check if the header is on hold
4790         WHILE g_hold_line_id(i) IS NULL LOOP
4791             IF p_header_id = g_hold_header_id(i) AND
4792                g_hold_activity_name(i) IS NULL THEN
4793                 RETURN TRUE;
4794             END IF;
4795             i := i+1;
4796 
4797             IF i > g_hold_header_id.COUNT THEN
4798                 RETURN FALSE;
4799             END IF;
4800 
4801         END LOOP;
4802 
4803         -- Header is not on HOLD.
4804 
4805         IF p_hold_index IS NULL THEN
4806 
4807             IF i <= g_hold_header_id.COUNT THEN
4808                 p_hold_index := i;
4809             END IF;
4810 
4814             END IF;
4811             -- IF there are no lines on hold then
4812             IF p_hold_index IS NULL THEN
4813                 RETURN FALSE;
4815 
4816         END IF;
4817 
4818         IF p_header_id > g_hold_header_id(g_hold_header_id.LAST) THEN
4819             RETURN FALSE;
4820         END IF;
4821 
4822         l_old_header_id := g_hold_header_id(p_hold_index);
4823 
4824         FOR i IN p_hold_index..g_hold_header_id.COUNT LOOP
4825 
4826             -- Since the search is a linear one with incremental header_id
4827             IF g_hold_header_id(i) > p_header_id THEN
4828                 RETURN  FALSE;
4829             END IF;
4830 
4831             IF g_hold_header_id(i) <> l_old_header_id THEN
4832                p_hold_index := i;
4833             END IF;
4834 
4835             -- Check if there is a Match
4836             IF p_header_id = g_hold_header_id(i) AND
4837             (p_top_model_line_id = g_hold_top_model_line_id(i) OR
4838              p_ship_set_name = g_hold_ship_set(i) OR
4839              p_arrival_set_name = g_hold_arrival_set(i)) AND
4840              g_hold_activity_name(i) IS NULL
4841             THEN
4842                 RETURN TRUE;
4843             END IF;
4844 
4845             l_old_header_id := g_hold_header_id(i);
4846 
4847         END LOOP;
4848     END IF;
4849 
4850     RETURN FALSE;
4851 
4852 EXCEPTION
4853   WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
4854     RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
4855   WHEN OTHERS THEN
4856     OE_BULK_MSG_PUB.Add_Exc_Msg
4857        (   G_PKG_NAME
4858         ,   'Is_Line_On_Hold'
4859         );
4860     RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
4861 END Is_Line_On_Hold;
4862 
4863 PROCEDURE Apply_GSA_Hold(p_header_id IN NUMBER,
4864                     p_line_id IN NUMBER,
4865                     p_line_number IN NUMBER,
4866                     p_hold_id IN NUMBER,
4867                     p_ship_set_name IN VARCHAR2,
4868                     p_arrival_set_name IN VARCHAR2,
4869                     p_activity_name IN VARCHAR2,
4870                     p_attribute IN VARCHAR2,
4871                     p_top_model_line_id IN NUMBER,
4872                     x_return_status OUT NOCOPY /* file.sql.39 change */ VARCHAR2    --bug 3735141
4873                     )
4874 IS
4875 i  BINARY_INTEGER;
4876 l_debug_level CONSTANT NUMBER := oe_debug_pub.g_debug_level;
4877 BEGIN
4878     x_return_status := FND_API.G_RET_STS_SUCCESS;
4879     -- Check the count of the Global Table for Hold Source Rec
4880     i := g_hold_source_rec.HOLD_ID.COUNT;
4881 
4882     -- Assign memory
4883     Extend_Hold_Source_Rec;
4884 
4885     g_hold_source_rec.HOLD_ID(i+1) := p_hold_id;
4886 
4887     -- Get the Hold Source Id
4888     SELECT  OE_HOLD_SOURCES_S.NEXTVAL
4889     INTO g_hold_source_rec.HOLD_SOURCE_ID(i+1)
4890     FROM DUAL;
4891 
4892     g_hold_source_rec.HOLD_ENTITY_CODE(i+1) := 'O';
4893     g_hold_source_rec.HOLD_ENTITY_ID(i+1) := p_header_id; --bug 3716296
4894     -- passing header_id as hold_entity_id instead of line_id
4895 
4896     Mark_Hold(p_header_id => p_header_id,
4897               p_line_id => p_line_id,
4898               p_line_number => NULL,
4899               p_hold_source_id => g_hold_source_rec.HOLD_SOURCE_ID(i+1),
4900               p_ship_set_name => NULL,
4901               p_arrival_set_name => NULL,
4902               p_activity_name => NULL,
4903               p_attribute => 'GSA PRICE Violation',
4904               p_top_model_line_id => p_top_model_line_id
4905               );
4906 
4907 --bug 3735141
4908 EXCEPTION
4909   WHEN OTHERS THEN
4910     IF l_debug_level > 0 THEN
4911         oe_debug_pub.add('In OTHERS error - Apply GSA Hold ' ||
4912                           SUBSTR(sqlerrm,1,240), 1);
4913     END IF;
4914     x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
4915 --bug 3735141
4916 
4917 END Apply_GSA_Hold;
4918 
4919 PROCEDURE Extend_Hold_Source_Rec
4920 IS
4921 BEGIN
4922     g_hold_source_rec.HOLD_ID.EXTEND;
4923     g_hold_source_rec.HOLD_SOURCE_ID.EXTEND;
4924     g_hold_source_rec.HOLD_ENTITY_CODE.EXTEND;
4925     g_hold_source_rec.HOLD_ENTITY_ID.EXTEND;
4926 END Extend_Hold_Source_Rec;
4927 
4928 ------------------------------------------------------------------------
4929 -- FUNCTION Check_for_Holds
4930 -- This API is called by scheduling
4931 --
4932 -- Checks if there are any holds on the order or order line. If
4933 -- order line, then checks for holds on the order that it belongs to.
4934 -- If ATO line, then checks for holds on other lines belonging to the
4935 -- same ATO model. If SMC line, then checks for other lines in the SMC.
4936 -- If included item line then checks for hold on its immediate parent
4937 -- if included item flag is set appropriately in the hold definition.
4938 ------------------------------------------------------------------------
4939 FUNCTION Check_For_Holds(p_header_id IN NUMBER,
4940                          p_line_id IN NUMBER,
4941                          p_line_index IN NUMBER,
4942                          p_header_index IN NUMBER,
4943                          p_top_model_line_index IN NUMBER,
4944                          p_ship_model_complete_flag IN VARCHAR2,
4945                          p_ato_line_index IN NUMBER,
4946                          p_ii_parent_line_index IN NUMBER
4947                         ) RETURN BOOLEAN
4948 IS
4949 
4950 l_result BOOLEAN;
4951 l_header_hold_index BINARY_INTEGER;
4952 l_debug_level CONSTANT NUMBER := oe_debug_pub.g_debug_level;
4953 
4954 BEGIN
4955 
4956   IF l_debug_level  > 0 THEN
4957     oe_debug_pub.add(  'IN OE_BULK_HOLDS_PVT.Check_For_Holds');
4958     oe_debug_pub.add(  'p_line_index is '||p_line_index);
4959   END IF;
4960 
4961   -- Initialize API return value to False
4962   l_result := FALSE;
4963 
4964 -- First Check if the line is on generic HOLD
4965   IF G_Line_Holds_Tbl.EXISTS(p_line_index) THEN
4966     IF G_Line_Holds_Tbl(p_line_index).On_Generic_Hold = 'Y' THEN
4967 
4968       IF l_debug_level  > 0 THEN
4969           oe_debug_pub.add( 'Line on Generic Hold' ||p_line_id ) ;
4970       END IF;
4971       RETURN TRUE;
4972 
4973     END IF;
4974   END IF;
4975 
4976   -- Check if the header is on HOLD.
4977   l_result := Is_Header_On_Hold(p_header_id => p_header_id ,
4978                                  p_hold_index => l_header_hold_index );
4979 
4980   IF l_result THEN
4981       IF l_debug_level  > 0 THEN
4982           oe_debug_pub.add( 'HEADER LEVEL HOLD EXISTS' ) ;
4983       END IF;
4984       RETURN l_result;
4985   END IF;
4986 
4987   -- Check if the line is part of an ATO model.
4988   IF p_ato_line_index IS NOT NULL AND
4989      p_top_model_line_index IS NOT NULL
4990   THEN
4991       -- Check if the ato_line has been marked for Hold.
4992       IF G_Line_Holds_Tbl.EXISTS(p_ato_line_index) THEN
4993         IF G_Line_Holds_Tbl(p_ato_line_index).Any_ato_line_on_hold = 'Y' THEN
4994 
4995           IF l_debug_level  > 0 THEN
4996               oe_debug_pub.add( 'Line is part of ATO model and one of the lines
4997 is on Generic Hold') ;
4998           END IF;
4999           RETURN TRUE;
5000         END IF;
5001       END IF;
5002   END IF;
5003 
5004  -- Check if the line is part of an SMC Model or Kit-included items.
5005   IF p_top_model_line_index IS NOT NULL AND
5006      p_ship_model_complete_flag = 'Y'
5007   THEN
5008       -- Check if the Top Model line has been marked for Hold.
5009       IF G_Line_Holds_Tbl.EXISTS(p_top_model_line_index) THEN
5010         IF G_Line_Holds_Tbl(p_top_model_line_index).Any_SMC_Line_on_hold = 'Y'
5011         THEN
5012 
5013           IF l_debug_level  > 0 THEN
5014               oe_debug_pub.add( 'Line is part of SMC model and one of the lines
5015 is on Generic Hold') ;
5016           END IF;
5017           RETURN TRUE;
5018         END IF;
5019       END IF;
5020   END IF;
5021 
5022   -- Check if the line is an included item line.
5023   IF p_ii_parent_line_index IS NOT NULL THEN
5024       -- Check if the parent is on generic hold and hold source says that put
5025       -- included items also on hold
5026       IF G_Line_Holds_Tbl.EXISTS(p_ii_parent_line_index) THEN
5027 
5028         IF G_Line_Holds_Tbl(p_ii_parent_line_index).On_Generic_Hold = 'Y' AND
5029            G_Line_Holds_Tbl(p_ii_parent_line_index).hold_ii_flag = 'Y'
5030         THEN
5031           IF l_debug_level  > 0 THEN
5032               oe_debug_pub.add( 'II Parent line is on Generic Hold') ;
5033           END IF;
5034           RETURN TRUE;
5035         END IF;
5036       END IF;
5037   END IF;
5038   IF l_debug_level  > 0 THEN
5039     oe_debug_pub.add(  'Exiting OE_BULK_HOLDS_PVT.Check_For_Holds');
5040   END IF;
5041   RETURN FALSE;
5042 
5043 EXCEPTION
5044     WHEN OTHERS THEN
5045   IF l_debug_level  > 0 THEN
5046     oe_debug_pub.add(  'In others of OE_BULK_HOLDS_PVT.Check_For_Holds');
5047   END IF;
5048         IF OE_MSG_PUB.Check_Msg_Level(OE_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
5049         THEN
5050             OE_MSG_PUB.Add_Exc_Msg
5051             (   G_PKG_NAME
5052             ,   'Check_For_Holds'
5053             );
5054         END IF;
5055 
5056 END Check_For_Holds;
5057 
5058 END OE_Bulk_Holds_PVT;