DBA Data[Home] [Help]

PACKAGE BODY: APPS.OE_CREDIT_CHECK_UTIL

Source


1 PACKAGE BODY OE_CREDIT_CHECK_UTIL AS
2 -- $Header: OEXUCRCB.pls 120.31.12020000.2 2012/08/22 10:15:32 sujithku ship $
3 --+=======================================================================+
4 --|               Copyright (c) 2000 Oracle Corporation                   |
5 --|                       Redwood Shores, CA, USA                         |
6 --|                         All rights reserved.                          |
7 --+=======================================================================+
8 --| FILENAME                                                              |
9 --|    OEXUCRCB.pls                                                       |
10 --|                                                                       |
11 --| DESCRIPTION                                                           |
12 --|     Package Spec of OE_CREDIT_CHECK_UTIL                              |
13 --|                                                                       |
14 --| PROCEDURE LIST                                                        |
15 --|     Get_Credit_Check_Rule_ID                                          |
16 --|     Get_Credit_Check_Rule                                             |
17 --|     Get_Order_Exposure                                                |
18 --|     Get_Limit_Info                                                    |
19 --|     Get_System_Parameters                                             |
20 --|     Get_External_Trx_Amount                                           |
21 --|                                                                       |
22 --| HISTORY                                                               |
23 --|     Oct-30-2001 current order exposure global                         |
24 --|     FEB-06-2002 Multi org changes                                     |
25 --|     Feb-13-2002 Check External Credit API changes                     |
26 --|                 Added Get_external_trx_amount                         |
27 --|     Feb-20-2002 changed Get_Credit_Check_Rule for Manual Release Holds|
28 --|     Mar-15-2002 Modify get_order_exposure for external exposure.      |
29 --|     Mar-19-2002 Modify get_credit_check_rule to add new exposure col. |
30 --|     Mar-28-2002 add the changes for the BUG 2236276                   |
31 --|     Apr-17-2002 Bug 2328351                                           |
32 --|     Apr-30-2002 BUG 2352020                                           |
33 --|     Jun-17-2002 rajkrish 2pm Bug2417717                               |
34 --|     Jun-18-2002 rajkrish 2412678                                      |
35 --|     Aug-XX-2002          BUG2408466                                   |
36 --|     Sep-18-2002          5PM OM-I                                     |
37 --|     Nov-11-2002                                                       |
38 --|     Mar-31-2003 vto bug 2846473,2878410. Modified SEND_CREDIT_HLD_NTF |
39 --|     Apr-24-2003 vto bug 2921490.Performance fix for get_order_exposure|
40 --|                         2925739.                                      |
41 --|     May-27-2003 rajkrish BUG 2886786                                  |
42 --|     Jul-16-2003 tsimmond added code to Get_order_exposure and to      |
43 --|                         Get_Transaction_Amount for Returns FPJ project|
44 --|     Aug-11-2003 vto      Changed to remove NVL as much as possible:   |
45 --|                          Get_Order_Exposure.                          |
46 --|                          Also removed current order cursors from the  |
47 --|                          get_order_exposure.  They are ont used.      |
48 --|                          Modified get prepayments sql                 |
49 --|     Jan-15-2004 vto      3364726. Check G_crmgmt_installed directly   |
50 --|                          instead of = TRUE. Removed some unnec NVLs   |
51 --|     Jan-16-2004 tsimmond Bug fix #3377881. In get_transaction_amount  |
52 --|                          for order level credit check  in sql statmnts|
53 --|                       added join between ra_terms_b and oe_order_lines|
54 --|                       t.term_id = l.payment_term_id                   |
55 --|     Jan-21-2004 vto      3388857. Current order should not be limited |
56 --|                          by shipping horizon.                         |
57 --|     Feb-05-2004 vto      3426436: Fix 3377881 as it is complete.      |
58 --|                          Added check for t.credit_check_flag=Y also   |
59 --|     Feb-25-2004 vto      3449827,3463348: get_order_exposure details  |
60 --|     Jul-27-2004 vto      3818562. Add NVL on h.request_date           |
61 --+=======================================================================+
62 
63 --------------------
64 -- TYPE DECLARATIONS
65 --------------------
66 TYPE category_tmp_rec IS RECORD
67  ( item_category_id NUMBER
68  , profile_exist    VARCHAR2(1)
69  );
70 
71 
72 TYPE category_tmp_tbl_type  IS TABLE OF category_tmp_rec
73      INDEX BY BINARY_INTEGER;
74 
75 ------------
76 -- CONSTANTS
77 ------------
78 G_PKG_NAME CONSTANT VARCHAR2(30)   := 'OE_CREDIT_CHECK_UTIL';
79 G_DBG_MSG           VARCHAR2(200)  := NULL;
80 /* Start MOAC CREDIT CHECK CHANGE */
81 --G_ORG_ID            NUMBER         :=
82 --       NVL(TO_NUMBER(FND_PROFILE.value('ORG_ID')), -99);
83 /* End MOAC CREDIT CHECK CHANGE */
84 G_debug_flag        VARCHAR2(1)    :=
85        NVL( OE_CREDIT_CHECK_UTIL.check_debug_flag ,'N') ;
86 G_MULTIPLE_PAYMENTS_ENABLED BOOLEAN :=
87        OE_PrePayment_Util.IS_MULTIPLE_PAYMENTS_ENABLED;
88 
89 -------------------
90 -- PUBLIC GLOBAL VARIABLES
91 -------------------
92 G_category_set_id NUMBER ;
93 G_is_external_check BOOLEAN := FALSE;
94 
95 ---------------------------
96 -- PROCEDURES AND FUNCTIONS
97 ---------------------------
98 
99 FUNCTION check_debug_flag
100 RETURN VARCHAR2
101 IS
102 BEGIN
103   IF oe_debug_pub.g_debug_level > 0
104   THEN
105     RETURN('Y');
106   ELSE
107     RETURN('N') ;
108   END IF;
109 END check_debug_flag ;
110 
111 FUNCTION Check_drawee_exists
112 ( p_cust_account_id IN NUMBER )
113 RETURN VARCHAR2
114 IS
115  CURSOR
116   drawee_exists_C IS
117   SELECT su.site_use_id
118   FROM   hz_cust_site_uses su ,
119          hz_cust_acct_sites_all cas
120   WHERE  cas.cust_account_id  = p_cust_account_id
121     AND  su.site_use_code     = 'DRAWEE'
122     AND  su.cust_acct_site_id = cas.cust_acct_site_id ;  /* MOAC_SQL_CHANGE */
123 
124   l_exists VARCHAR2(1) := 'N' ;
125   l_id     NUMBER ;
126 BEGIN
127  IF G_debug_flag = 'Y'
128  THEN
129     OE_DEBUG_PUB.Add(' Into Check_drawee_exists ');
130  END IF;
131 
132  OPEN drawee_exists_C ;
133  FETCH drawee_exists_C INTO l_id ;
134 
135  IF l_id is not NULL
136  THEN
137    l_exists := 'Y' ;
138  ELSE
139   l_exists := 'N' ;
140  END IF;
141 
142  IF drawee_exists_C%NOTFOUND
143  THEN
144    l_exists := 'N' ;
145    l_id := NULL ;
146  END IF;
147 
148  CLOSE drawee_exists_C ;
149 
150  return(NVL(l_exists,'N')) ;
151 
152 EXCEPTION
153 WHEN OTHERS THEN
154       IF FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
155       THEN
156         FND_MSG_PUB.Add_Exc_Msg
157             (   G_PKG_NAME
158             ,   'Check_drawee_exists'
159             );
160       END IF;
161 END Check_drawee_exists ;
162 
163 ----------------------------------------------------
164 --- get_drawee_site_use_id
165 --- return the BR purpose drawee site use id
166 -----------------------------------------------------
167 FUNCTION get_drawee_site_use_id
168 ( p_site_use_id         IN NUMBER
169 ) RETURN NUMBER
170 IS
171 
172 l_site_use_id       NUMBER ;
173 l_cust_acct_site_id NUMBER;
174 BEGIN
175 
176  IF G_debug_flag = 'Y'
177  THEN
178     oe_debug_pub.add('get_drawee_site_use_id ');
179   END IF;
180 
181  BEGIN
182   SELECT cust_acct_site_id
183    INTO  l_cust_acct_site_id
184   FROM  hz_cust_site_uses su
185   WHERE su.site_use_id  = p_site_use_id ;
186 
187   SELECT su.site_use_id
188   INTO   l_site_use_id
189   FROM   hz_cust_acct_sites cas
190       , hz_cust_site_uses_all su
191   WHERE cas.cust_acct_site_id = su.cust_acct_site_id
192     AND su.cust_acct_site_id  = l_cust_acct_site_id
193     AND su.site_use_code      = 'DRAWEE' ;            /* MOAC_SQL_CHANGE */
194 
195    EXCEPTION
196    WHEN NO_DATA_FOUND
197    THEN
198       l_site_use_id := NULL ;
199 
200 
201       IF G_debug_flag = 'Y'
202       THEN
203         oe_debug_pub.add(' No Data found for BR in get_drawee_site_use_id ');
204       END IF;
205 
206    WHEN TOO_MANY_ROWS
207    THEN
208       l_site_use_id := NULL ;
209 
210       IF G_debug_flag = 'Y'
211       THEN
212         oe_debug_pub.add(' TOO_MANY_ROWS BR in get_drawee_site_use_id ');
213       END IF;
214   END ;
215  return ( l_site_use_id );
216 
217 EXCEPTION
218 WHEN OTHERS THEN
219       IF FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
220       THEN
221         FND_MSG_PUB.Add_Exc_Msg
222             (   G_PKG_NAME
223             ,   'get_drawee_site_use_id'
224             );
225       END IF;
226 
227 END get_drawee_site_use_id ;
228 
229 
230 --------------------------------------------------------------------
231 --FUNCTION: GET_hierarchy_party_limit
232 --COMMENTS:  Returns the party level credit profile
233 ----------------------------------------------------------------------
234 PROCEDURE GET_hierarchy_party_limit
235 ( p_party_id                IN NUMBER
236 , p_trx_curr_code           IN VARCHAR2
237 , x_limit_curr_code        OUT NOCOPY VARCHAR2
238 , x_trx_limit              OUT NOCOPY NUMBER
239 , x_overall_limit          OUT NOCOPY NUMBER
240 , x_return_status          OUT NOCOPY VARCHAR2
241 , x_credit_limit_entity_id OUT NOCOPY NUMBER
242 )
243 IS
244 
245 CURSOR party_hier_limit_no_incl_csr IS
246   SELECT cpa.currency_code currency_code
247   ,      cpa.overall_credit_limit * ((100 + NVL(cp.tolerance,0))/100)
248            overall_limit
249   ,      cpa.trx_credit_limit * ((100 + NVL(cp.tolerance,0))/100)
250            trx_limit
251   ,      cp.credit_checking credit_checking --bug 4967828
252   ,      cu.credit_usage_rule_set_id
253   ,      cp.party_id
254   FROM   hz_customer_profiles         cp
255   ,      hz_cust_profile_amts         cpa
256   ,      hz_credit_usages             cu
257   ,      hz_credit_usage_rules        cur
258   ,      hz_hierarchy_nodes           hn
259   WHERE  cp.party_id                  = hn.parent_id
260   AND    cp.cust_account_id           = -1
261   AND    cp.site_use_id               IS NULL
262   AND    cp.cust_account_profile_id   = cpa.cust_account_profile_id
263   AND    cpa.cust_acct_profile_amt_id = cu.cust_acct_profile_amt_id
264   AND    cu.credit_usage_rule_set_id  = cur.credit_usage_rule_set_id
265   AND    NVL(TRUNC(cpa.expiration_date) , TRUNC(SYSDATE) )
266              <= TRUNC(SYSDATE)
267   AND     NVL (cur.include_all_flag, 'N') = 'N'
268   AND     cur.usage_type                  = 'CURRENCY'
269   AND     cur.user_code                   = p_trx_curr_code
270   AND     NVL(cur.exclude_flag,'N')       = 'N'
271 --  AND     NVL(cp.credit_checking,'Y')     = 'Y'  --bug 4967828
272   AND     hn.child_id                     = p_party_id
273   AND     hn.parent_object_type           = 'ORGANIZATION'
274   and     hn.parent_table_name            = 'HZ_PARTIES'
275   and     hn.child_object_type            = 'ORGANIZATION'
276   and     hn.effective_start_date    <=  sysdate
277   and     hn.effective_end_date      >= SYSDATE
278   and     hn.hierarchy_type           = OE_CREDIT_CHECK_UTIL.G_hierarchy_type
279   ORDER BY hn.LEVEL_NUMBER DESC ;
280 
281 
282   party_hier_limit_no_incl_rec   party_hier_limit_no_incl_csr%ROWTYPE ;
283 
284 CURSOR party_hier_limit_incl_csr IS
285   SELECT cpa.currency_code currency_code
286   ,      cpa.overall_credit_limit * ((100 + NVL(cp.tolerance,0))/100)
287            overall_limit
288   ,      cpa.trx_credit_limit * ((100 + NVL(cp.tolerance,0))/100)
289            trx_limit
290   ,      cp.credit_checking credit_checking --bug 4967828
291   ,      cu.credit_usage_rule_set_id
292   ,      cp.party_id
293   FROM   hz_customer_profiles         cp
294   ,      hz_cust_profile_amts         cpa
295   ,      hz_credit_usages             cu
296   ,      hz_credit_usage_rules        cur
297   ,      hz_hierarchy_nodes           hn
298   WHERE  cp.party_id                  = hn.parent_id
299   AND    cp.cust_account_id           = -1
300   AND    cp.site_use_id               IS NULL
301   AND    cp.cust_account_profile_id   = cpa.cust_account_profile_id
302   AND    cpa.cust_acct_profile_amt_id = cu.cust_acct_profile_amt_id
303   AND    cu.credit_usage_rule_set_id  = cur.credit_usage_rule_set_id
304   AND    NVL(TRUNC(cpa.expiration_date) , TRUNC(SYSDATE) )
305              <= TRUNC(SYSDATE)
306   AND    cur.include_all_flag = 'Y'
307   AND    NOT EXISTS ( SELECT 'EXCLUDE'
308                       FROM   hz_credit_usage_rules cur2
309                       WHERE  cu.credit_usage_rule_set_id
310                              = cur2.credit_usage_rule_set_id
311                       AND    cur2.exclude_flag = 'Y'
312                       AND    cur2.usage_type  = 'CURRENCY'
313                       AND    cur2.user_code   = p_trx_curr_code
314                     )
315 --  AND  NVL(cp.credit_checking,'Y')    = 'Y'  --bug 4967828
316   AND hn.child_id                     = p_party_id
317   AND hn.parent_object_type           = 'ORGANIZATION'
318   and hn.parent_table_name            = 'HZ_PARTIES'
319   and hn.child_object_type            = 'ORGANIZATION'
320   and hn.effective_start_date  <=  sysdate
321   and hn.effective_end_date    >= SYSDATE
322   and  hn.hierarchy_type              = OE_CREDIT_CHECK_UTIL.G_hierarchy_type
323   ORDER BY hn.LEVEL_NUMBER DESC ;
324 
325 party_hier_limit_incl_rec party_hier_limit_incl_csr%ROWTYPE ;
326 
327 CURSOR party_hier_single_limit_csr IS
328   SELECT cpa.currency_code currency_code
329   ,      cpa.overall_credit_limit * ((100+nvl(cp.tolerance,0))/100)
330            overall_limit
331   ,      cpa.trx_credit_limit * ((100+nvl(cp.tolerance,0))/100)
332            trx_limit
333   ,      cp.credit_checking credit_checking  --bug 4967828
334   ,      cp.party_id
335   FROM   hz_customer_profiles         cp
336   ,      hz_cust_profile_amts         cpa
337   ,      hz_hierarchy_nodes           hn
338   WHERE  cp.party_id                  = hn.parent_id
339   AND    cp.cust_account_id           = -1
340   AND    cp.site_use_id               IS NULL
341   AND    cp.cust_account_profile_id   = cpa.cust_account_profile_id
342   AND    cpa.currency_code            = p_trx_curr_code
343 --  AND    cp.credit_checking          = 'Y'  --bug 4967828
344   AND  hn.child_id                     = p_party_id
345   AND hn.parent_object_type           = 'ORGANIZATION'
346   and hn.parent_table_name            = 'HZ_PARTIES'
347   and hn.child_object_type            = 'ORGANIZATION'
348   and hn.effective_start_date
349           <= sysdate
350   and hn.effective_end_date
351     >= SYSDATE
352   and  hn.hierarchy_type              = OE_CREDIT_CHECK_UTIL.G_hierarchy_type
353   ORDER BY hn.LEVEL_NUMBER DESC ;
354 
355 
356   party_hier_single_limit_rec  party_hier_single_limit_csr%ROWTYPE ;
357 
358 BEGIN
359 
360  IF G_debug_flag = 'Y'
361  THEN
362    OE_DEBUG_PUB.ADD('IN GET_hierarchy_party_limit');
363    OE_DEBUG_PUB.ADD('p_party_id ==> '|| p_party_id );
364    OE_DEBUG_PUB.ADD('p_trx_curr_code ==> '|| p_trx_curr_code );
365    OE_DEBUG_PUB.ADD('party_hier_limit_no_incl_csr ');
366  END IF;
367 
368   OPEN party_hier_limit_no_incl_csr ;
369   FETCH party_hier_limit_no_incl_csr
370   INTO  party_hier_limit_no_incl_rec ;
371 
372   IF party_hier_limit_no_incl_csr%NOTFOUND
373   THEN
374      x_return_status := NULL;  --bug 4967828
375   ELSIF party_hier_limit_no_incl_rec.credit_checking = 'N'
376   THEN
377      x_credit_limit_entity_id := NULL ;
378      x_return_status := 'N' ;
379   ELSE
380     x_limit_curr_code := party_hier_limit_no_incl_rec.currency_code;
381     x_overall_limit   := party_hier_limit_no_incl_rec.overall_limit;
382     x_trx_limit       := party_hier_limit_no_incl_rec.trx_limit;
383     x_credit_limit_entity_id :=
384           party_hier_limit_no_incl_rec.party_id ;
385     x_return_status   := 'Y' ;
386   END IF;
387 
388   CLOSE party_hier_limit_no_incl_csr ;
389 
390 
391   IF x_limit_curr_code IS NULL
392   THEN
393     IF G_debug_flag = 'Y'
394     THEN
395       OE_DEBUG_PUB.ADD('party_hier_limit_incl_csr ');
396     END IF;
397 
398     OPEN party_hier_limit_incl_csr ;
399     FETCH party_hier_limit_incl_csr
400     INTO  party_hier_limit_incl_rec ;
401 
402     IF party_hier_limit_incl_csr%NOTFOUND
403     THEN
404      x_return_status := NULL;  --bug 4967828
405     ELSIF party_hier_limit_incl_rec.credit_checking = 'N'
406     THEN
407      x_credit_limit_entity_id := NULL ;
408      x_return_status := 'N' ;
409     ELSE
410       x_limit_curr_code := party_hier_limit_incl_rec.currency_code;
411       x_overall_limit   := party_hier_limit_incl_rec.overall_limit;
412       x_trx_limit       := party_hier_limit_incl_rec.trx_limit;
413       x_credit_limit_entity_id :=
414           party_hier_limit_incl_rec.party_id ;
415       x_return_status   := 'Y' ;
416     END IF;
417 
418     CLOSE party_hier_limit_incl_csr ;
419   END IF;
420 
421   IF x_limit_curr_code IS NULL
422   THEN
423     IF G_debug_flag = 'Y'
424     THEN
425       OE_DEBUG_PUB.ADD('party_hier_single_limit_csr');
426     END IF;
427 
428     OPEN party_hier_single_limit_csr ;
429     FETCH party_hier_single_limit_csr
430     INTO  party_hier_single_limit_rec ;
431 
432     IF party_hier_single_limit_csr%NOTFOUND
433     THEN
434      x_return_status := NULL;  --bug 4967828
435     ELSIF party_hier_single_limit_rec.credit_checking = 'N'
436     THEN
437      x_credit_limit_entity_id := NULL ;
438      x_return_status := 'N' ;
439     ELSE
440       x_limit_curr_code := party_hier_single_limit_rec.currency_code;
441       x_overall_limit   := party_hier_single_limit_rec.overall_limit;
442       x_trx_limit       := party_hier_single_limit_rec.trx_limit;
443       x_credit_limit_entity_id :=
444           party_hier_single_limit_rec.party_id ;
445       x_return_status   := 'Y' ;
446     END IF;
447 
448     CLOSE party_hier_single_limit_csr ;
449   END IF;
450 
451  IF G_debug_flag = 'Y'
452  THEN
453 
454    OE_DEBUG_PUB.ADD('OUT GET_hierarchy_party_limit' );
455  END IF;
456 
457 EXCEPTION
458 WHEN OTHERS THEN
459       IF FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
460       THEN
461         FND_MSG_PUB.Add_Exc_Msg
462             (   G_PKG_NAME
463             ,   'GET_hierarchy_party_limit'
464             );
465       END IF;
466 
467 
468 END GET_hierarchy_party_limit ;
469 
470 --------------------------------------------------------------------
471 --FUNCTION: GET_single_party_limit
472 --COMMENTS:  Returns the party level credit profile
473 ----------------------------------------------------------------------
474 PROCEDURE GET_single_party_limit
475 ( p_party_id                IN NUMBER
476 , p_trx_curr_code           IN VARCHAR2
477 , x_limit_curr_code        OUT NOCOPY VARCHAR2
478 , x_trx_limit              OUT NOCOPY NUMBER
479 , x_overall_limit          OUT NOCOPY NUMBER
480 , x_return_status          OUT NOCOPY VARCHAR2
481 , x_credit_limit_entity_id OUT NOCOPY NUMBER
482 )
483 IS
484 CURSOR party_single_limit_csr IS
485   SELECT cpa.currency_code currency_code
486   ,      cpa.overall_credit_limit * ((100+nvl(cp.tolerance,0))/100)
487            overall_limit
488   ,      cpa.trx_credit_limit * ((100+nvl(cp.tolerance,0))/100)
489            trx_limit
490   ,      cp.credit_checking credit_checking  --bug 4967828
491   ,      cp.party_id
492   FROM   hz_customer_profiles         cp
493   ,      hz_cust_profile_amts         cpa
494   WHERE  cp.cust_account_id           = -1
495   AND    cp.site_use_id              IS NULL
496   AND    cp.party_id                  = p_party_id
497   AND    cp.cust_account_profile_id   = cpa.cust_account_profile_id
498   AND    cpa.currency_code            = p_trx_curr_code ;  --bug 4967828
499 --  AND    NVL(cp.credit_checking,'Y')  = 'Y' ;
500 
501   party_single_limit_rec  party_single_limit_csr%ROWTYPE ;
502 
503 BEGIN
504 
505  IF G_debug_flag = 'Y'
506  THEN
507 
508    OE_DEBUG_PUB.ADD('IN GET_single_party_limit');
509    OE_DEBUG_PUB.ADD('p_party_id ==> '|| p_party_id );
510    OE_DEBUG_PUB.ADD('p_trx_curr_code ==> '|| p_trx_curr_code );
511    OE_DEBUG_PUB.ADD(' party_single_limit_csr ');
512  END IF;
513 
514   OPEN party_single_limit_csr ;
515   FETCH party_single_limit_csr
516   INTO  party_single_limit_rec ;
517 
518   IF party_single_limit_csr%NOTFOUND
519   THEN
520      x_return_status := NULL;  --bug 4967828
521   ELSIF party_single_limit_rec.credit_checking = 'N'
522   THEN
523      x_credit_limit_entity_id := NULL ;
524      x_return_status := 'N' ;
525   ELSE
526     x_limit_curr_code := party_single_limit_rec.currency_code;
527     x_overall_limit   := party_single_limit_rec.overall_limit;
528     x_trx_limit       := party_single_limit_rec.trx_limit;
529     x_credit_limit_entity_id :=
530           party_single_limit_rec.party_id ;
531     x_return_status   := 'Y' ;
532   END IF;
533 
534   CLOSE party_single_limit_csr ;
535 
536 
537  IF G_debug_flag = 'Y'
538  THEN
539    OE_DEBUG_PUB.ADD('OUT GET_single_party_limit' );
540  END IF;
541 
542 EXCEPTION
543 WHEN OTHERS THEN
544       IF FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
545       THEN
546         FND_MSG_PUB.Add_Exc_Msg
547             (   G_PKG_NAME
548             ,   'GET_single_party_limit'
549             );
550       END IF;
551 
552 
553 END GET_single_party_limit ;
554 
555 --------------------------------------------------------------------
556 --FUNCTION: GET_multi_party_limit
557 --COMMENTS:  Returns the party level credit profile
558 ----------------------------------------------------------------------
559 PROCEDURE GET_multi_party_limit
560 ( p_party_id                IN NUMBER
561 , p_trx_curr_code           IN VARCHAR2
562 , x_limit_curr_code        OUT NOCOPY VARCHAR2
563 , x_trx_limit              OUT NOCOPY NUMBER
564 , x_overall_limit          OUT NOCOPY NUMBER
565 , x_return_status          OUT NOCOPY VARCHAR2
566 , x_credit_limit_entity_id OUT NOCOPY NUMBER
567 )
568 IS
569 CURSOR party_multi_limit_no_incl_csr IS
570   SELECT cpa.currency_code currency_code
571   ,      cpa.overall_credit_limit * ((100 + NVL(cp.tolerance,0))/100)
572            overall_limit
573   ,      cpa.trx_credit_limit * ((100 + NVL(cp.tolerance,0))/100)
574            trx_limit
575   ,      cp.credit_checking credit_checking  --bug 4967828
576   ,      cu.credit_usage_rule_set_id
577   ,      cp.party_id
578   FROM   hz_customer_profiles         cp
579   ,      hz_cust_profile_amts         cpa
580   ,      hz_credit_usages             cu
581   ,      hz_credit_usage_rules        cur
582   WHERE  cp.cust_account_id           = -1
583   AND    cp.site_use_id               IS NULL
584   AND    cp.party_id                  = p_party_id
585   AND    cp.cust_account_profile_id   = cpa.cust_account_profile_id
586   AND    cpa.cust_acct_profile_amt_id = cu.cust_acct_profile_amt_id
587   AND    cu.credit_usage_rule_set_id  = cur.credit_usage_rule_set_id
588   AND    NVL(TRUNC(cpa.expiration_date) , TRUNC(SYSDATE) )
589              <= TRUNC(SYSDATE)
590   AND     NVL (cur.include_all_flag, 'N') = 'N'
591   AND     cur.usage_type                  = 'CURRENCY'
592   AND     cur.user_code                   = p_trx_curr_code
593   AND     NVL(cur.exclude_flag,'N')       = 'N' ;  --bug 4967828
594 --  AND     NVL(cp.credit_checking,'Y')     = 'Y' ;
595 
596 
597   party_multi_limit_no_incl_rec   party_multi_limit_no_incl_csr%ROWTYPE ;
598 
599 
600 
601  CURSOR party_multi_limit_incl_csr IS
602   SELECT cpa.currency_code currency_code
603   ,      cpa.overall_credit_limit * ((100 + NVL(cp.tolerance,0))/100)
604            overall_limit
605   ,      cpa.trx_credit_limit * ((100 + NVL(cp.tolerance,0))/100)
606            trx_limit
607   ,      cp.credit_checking credit_checking  --bug 4967828
608   ,      cu.credit_usage_rule_set_id
609   ,      cp.party_id
610   FROM   hz_customer_profiles         cp
611   ,      hz_cust_profile_amts         cpa
612   ,      hz_credit_usages             cu
613   ,      hz_credit_usage_rules        cur
614   WHERE  cp.cust_account_id           = -1
615   AND    cp.site_use_id               IS NULL
616   AND    cp.party_id                   = p_party_id
617   AND    cp.cust_account_profile_id   = cpa.cust_account_profile_id
618   AND    cpa.cust_acct_profile_amt_id = cu.cust_acct_profile_amt_id
619   AND    cu.credit_usage_rule_set_id  = cur.credit_usage_rule_set_id
620   AND    NVL(TRUNC(cpa.expiration_date), TRUNC(SYSDATE)
621             )    <= TRUNC(SYSDATE)
622   AND    cur.include_all_flag = 'Y'
623 --  AND    NVL(cp.credit_checking,'Y')     = 'Y'  --bug 4967828
624   AND    NOT EXISTS ( SELECT 'EXCLUDE'
625                       FROM   hz_credit_usage_rules cur2
626                       WHERE  cu.credit_usage_rule_set_id
627                              = cur2.credit_usage_rule_set_id
628                       AND    cur2.exclude_flag = 'Y'
629                       AND    cur2.usage_type  = 'CURRENCY'
630                       AND    cur2.user_code   = p_trx_curr_code
631                     );
632 
633 
634   party_multi_limit_incl_rec party_multi_limit_incl_csr%ROWTYPE ;
635 
636 
637 BEGIN
638  IF G_debug_flag = 'Y'
639  THEN
640 
641    OE_DEBUG_PUB.ADD('IN GET_multi_party_limit ');
642    OE_DEBUG_PUB.ADD('p_party_id ==> '|| p_party_id );
643    OE_DEBUG_PUB.ADD('p_trx_curr_code ==> '|| p_trx_curr_code );
644    OE_DEBUG_PUB.ADD('party_multi_limit_no_incl_csr ');
645  END IF;
646 
647   OPEN party_multi_limit_no_incl_csr ;
648   FETCH party_multi_limit_no_incl_csr
649   INTO  party_multi_limit_no_incl_rec ;
650 
651   IF party_multi_limit_no_incl_csr%NOTFOUND
652   THEN
653      x_return_status := NULL;  --bug 4967828
654   ELSIF party_multi_limit_no_incl_rec.credit_checking = 'N'
655   THEN
656      x_credit_limit_entity_id := NULL ;
657      x_return_status := 'N' ;
658   ELSE
659     x_limit_curr_code := party_multi_limit_no_incl_rec.currency_code;
660     x_overall_limit   := party_multi_limit_no_incl_rec.overall_limit;
661     x_trx_limit       := party_multi_limit_no_incl_rec.trx_limit;
662     x_credit_limit_entity_id :=
663           party_multi_limit_no_incl_rec.party_id ;
664     x_return_status   := 'Y' ;
665   END IF;
666 
667   CLOSE party_multi_limit_no_incl_csr ;
668 
669 
670   IF x_limit_curr_code IS NULL
671   THEN
672    IF G_debug_flag = 'Y'
673    THEN
674      OE_DEBUG_PUB.ADD('party_multi_limit_incl_csr ');
675    END IF;
676 
677     OPEN party_multi_limit_incl_csr ;
678     FETCH party_multi_limit_incl_csr
679     INTO  party_multi_limit_incl_rec ;
680 
681     IF party_multi_limit_incl_csr%NOTFOUND
682     THEN
683      x_return_status := NULL;  --bug 4967828
684     ELSIF party_multi_limit_incl_rec.credit_checking = 'N'
685     THEN
686      x_credit_limit_entity_id := NULL ;
687      x_return_status := 'N' ;
688     ELSE
689       x_limit_curr_code := party_multi_limit_incl_rec.currency_code;
690       x_overall_limit   := party_multi_limit_incl_rec.overall_limit;
691       x_trx_limit       := party_multi_limit_incl_rec.trx_limit;
692       x_credit_limit_entity_id :=
693           party_multi_limit_incl_rec.party_id ;
694       x_return_status   := 'Y' ;
695     END IF;
696 
697   END IF;
698 
699  IF G_debug_flag = 'Y'
700  THEN
701 
702    OE_DEBUG_PUB.ADD('OUT GET_multi_party_limit ');
703  END IF;
704 
705 EXCEPTION
706 WHEN OTHERS THEN
707       IF FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
708       THEN
709         FND_MSG_PUB.Add_Exc_Msg
710             (   G_PKG_NAME
711             ,   'GET_multi_party_limit'
712             );
713       END IF;
714 
715 
716 END GET_multi_party_limit ;
717 
718 --------------------------------------------------------------------
719 --FUNCTION: GET_party_limit
720 --COMMENTS:  Returns the party level credit profile
721 ----------------------------------------------------------------------
722 PROCEDURE GET_party_limit
723 ( p_party_id                IN NUMBER
724 , p_trx_curr_code           IN VARCHAR2
725 , x_limit_curr_code        OUT NOCOPY VARCHAR2
726 , x_trx_limit              OUT NOCOPY NUMBER
727 , x_overall_limit          OUT NOCOPY NUMBER
728 , x_return_status          OUT NOCOPY VARCHAR2
729 , x_credit_limit_entity_id OUT NOCOPY NUMBER
730 )
731 IS
732 l_return_status            VARCHAR2(1);  --bug 4967828
733 BEGIN
734  IF G_debug_flag = 'Y'
735  THEN
736 
737    OE_DEBUG_PUB.ADD('IN GET_party_limit ');
738    OE_DEBUG_PUB.ADD('p_party_id ==> '|| p_party_id );
739    OE_DEBUG_PUB.ADD('p_trx_curr_code ==> '|| p_trx_curr_code );
740  END IF;
741 
742    x_return_status   := 'N' ;
743    x_limit_curr_code := NULL;
744    x_trx_limit       := NULL ;
745    x_overall_limit   := NULL ;
746 
747   BEGIN
748      GET_multi_party_limit
749      ( p_party_id               => p_party_id
750      , p_trx_curr_code          => p_trx_curr_code
751      , x_limit_curr_code        => x_limit_curr_code
752      , x_trx_limit              => x_trx_limit
753      , x_overall_limit          => x_overall_limit
754      , x_return_status          => l_return_status  --bug 4967828
755      , x_credit_limit_entity_id  => x_credit_limit_entity_id
756      );
757 
758     --Bug 4561384
759     IF G_debug_flag = 'Y'
760     THEN
761       OE_DEBUG_PUB.ADD(' Out GET_multi_party_Limit '|| l_return_status );  --bug 4967828
762       OE_DEBUG_PUB.ADD(' x_limit_curr_code = '|| x_limit_curr_code );
763       OE_DEBUG_PUB.ADD(' x_trx_limit = '|| x_trx_limit );
764       OE_DEBUG_PUB.ADD(' x_overall_limit = '|| x_overall_limit );
765     END IF;
766 
767     x_return_status := NVL(l_return_status, 'N');  --bug 4967828
768     IF l_return_status = 'Y'
769        AND x_trx_limit is NULL
770        AND x_overall_limit is NULL
771     THEN
772       l_return_status   := 'N' ;  --bug 4967828
773       x_limit_curr_code := NULL ;
774       OE_DEBUG_PUB.ADD(' Limits NULL for party MULTI ');
775     END IF;
776     --Bug 4561384
777 
778     IF NVL(l_return_status, 'N') = 'N'  --bug 4967828
779     THEN
780       GET_single_party_limit
781       ( p_party_id               => p_party_id
782       , p_trx_curr_code          => p_trx_curr_code
783       , x_limit_curr_code        => x_limit_curr_code
784       , x_trx_limit              => x_trx_limit
785       , x_overall_limit          => x_overall_limit
786       , x_return_status          => l_return_status  --bug 4967828
787       , x_credit_limit_entity_id  => x_credit_limit_entity_id
788       );
789 
790       --Bug 4561384
791       IF G_debug_flag = 'Y'
792       THEN
793         OE_DEBUG_PUB.ADD(' Out GET_single_party_Limit '|| l_return_status );  --bug 4967828
794         OE_DEBUG_PUB.ADD(' x_limit_curr_code = '|| x_limit_curr_code );
795         OE_DEBUG_PUB.ADD(' x_trx_limit = '|| x_trx_limit );
796         OE_DEBUG_PUB.ADD(' x_overall_limit = '|| x_overall_limit );
797       END IF;
798 
799       x_return_status := NVL(l_return_status, 'N');  --bug 4967828
800       IF l_return_status = 'Y'
801          AND x_trx_limit is NULL
802          AND x_overall_limit is NULL
803       THEN
804         l_return_status   := 'N' ;  --bug 4967828
805         x_limit_curr_code := NULL ;
806         OE_DEBUG_PUB.ADD(' Limits NULL for party SITE ');
807       END IF;
808     END IF;
809       --Bug 4561384
810 
811       OE_DEBUG_PUB.ADD('l_return_status '|| l_return_status );  --bug 4967828
812       OE_DEBUG_PUB.ADD('x_return_status '|| x_return_status );
813 
814       IF NVL(l_return_status, 'N') = 'N'  --bug 4967828
815       THEN
816         GET_hierarchy_party_limit
817         ( p_party_id               => p_party_id
818         , p_trx_curr_code          => p_trx_curr_code
819         , x_limit_curr_code        => x_limit_curr_code
820         , x_trx_limit              => x_trx_limit
821         , x_overall_limit          => x_overall_limit
822         , x_return_status          => l_return_status  --bug 4967828
823         , x_credit_limit_entity_id  => x_credit_limit_entity_id
824         );
825 
826       --Bug 4561384
827       IF G_debug_flag = 'Y'
828       THEN
829         OE_DEBUG_PUB.ADD(' Out GET_hierarchy_party_Limit '|| l_return_status );  --bug 4967828
830         OE_DEBUG_PUB.ADD(' x_limit_curr_code = '|| x_limit_curr_code );
831         OE_DEBUG_PUB.ADD(' x_trx_limit = '|| x_trx_limit );
832         OE_DEBUG_PUB.ADD(' x_overall_limit = '|| x_overall_limit );
833       END IF;
834 
835       x_return_status := NVL(l_return_status,'Y') ;  --bug 4967828
836       IF l_return_status = 'Y'
837          AND x_trx_limit is NULL
838          AND x_overall_limit is NULL
839       THEN
840         l_return_status   := 'N' ;  --bug 4967828
841         x_limit_curr_code := NULL ;
842         OE_DEBUG_PUB.ADD(' Limits NULL for party HIERARCHY ');
843       END IF;
844       --Bug 4561384
845 
846       END IF; -- hierarchy
847 
848 --    END IF; -- single party   -- Commented for bug 4561384
849 
850    END ;
851 
852  IF G_debug_flag = 'Y'
853  THEN
854 
855    OE_DEBUG_PUB.ADD('x_credit_limit_party ==> '|| x_credit_limit_entity_id );
856    OE_DEBUG_PUB.ADD('x_limit_curr_code ==> '|| x_limit_curr_code );
857    OE_DEBUG_PUB.ADD('x_trx_limit ==> '|| x_trx_limit );
858    OE_DEBUG_PUB.ADD('x_overall_limit ==> '|| x_overall_limit );
859    OE_DEBUG_PUB.ADD('x_return_status ==> '|| x_return_status );
860    OE_DEBUG_PUB.ADD('OUT GET_party_limit ');
861  END IF;
862 
863 EXCEPTION
864 WHEN OTHERS THEN
865       IF FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
866       THEN
867         FND_MSG_PUB.Add_Exc_Msg
868             (   G_PKG_NAME
869             ,   'GET_party_limit'
870             );
871       END IF;
872 
873 
874 END GET_party_limit ;
875 
876 
877 
878 --------------------------------------------------------------------
879 --FUNCTION: Get_global_exposure_flag
880 --COMMENTS: Returns the global exposure flag for a given
881 --          entity ID and limit currency
882 --          used by the credit exposure report
883 --          Multi org enhancement
884 --          Entity type is accepted but not used for validation
885 --------------------------------------------------------------------
886 FUNCTION Get_global_exposure_flag
887 (  p_entity_type                 IN VARCHAR2
888  , p_entity_id                   IN  NUMBER
889  , p_limit_curr_code             IN  VARCHAR2
890 ) RETURN VARCHAR2
891 IS
892 
893 CURSOR cust_global_exposure_csr IS
894   SELECT NVL(curs.global_exposure_flag,'N') global_exposure_flag
895   ,      curs.credit_usage_rule_set_id  credit_usage_rule_set_id
896   FROM   hz_customer_profiles         cp
897   ,      hz_cust_profile_amts         cpa
898   ,      hz_credit_usages             cu
899   ,      hz_credit_usage_rule_sets_B  curs
900   WHERE  cp.cust_account_id           = p_entity_id
901   AND    cp.site_use_id               IS NULL
902   AND    cp.cust_account_profile_id   = cpa.cust_account_profile_id
903   AND    cpa.cust_acct_profile_amt_id = cu.cust_acct_profile_amt_id
904   AND    cpa.currency_code            = p_limit_curr_code
905   AND    curs.credit_usage_rule_set_id = cu.credit_usage_rule_set_id
906   AND    curs.global_exposure_flag = 'Y' ;
907 
908   cust_global_exposure_rec cust_global_exposure_csr%ROWTYPE ;
909 
910 
911 CURSOR dflt_global_exposure_csr IS
912   SELECT NVL(curs.global_exposure_flag,'N') global_exposure_flag
913   ,      curs.credit_usage_rule_set_id  credit_usage_rule_set_id
914   FROM   hz_credit_profiles           cp
915   ,      hz_credit_profile_amts       cpa
916   ,      hz_credit_usages             cu
917   ,      hz_credit_usage_rule_sets_B  curs
918   WHERE  cp.organization_id           = p_entity_id
919   AND    cp.credit_profile_id         = cpa.credit_profile_id
920   AND    cpa.credit_profile_amt_id    = cu.credit_profile_amt_id
921   AND    cu.credit_usage_rule_set_id  = curs.credit_usage_rule_set_id
922   AND    cp.enable_flag               = 'Y'
923   AND    curs.global_exposure_flag    = 'Y'
924   AND    cpa.currency_code            = p_limit_curr_code
925   AND    ( TRUNC(SYSDATE)   BETWEEN
926                TRUNC( NVL(cp.effective_date_from, SYSDATE ))
927                   AND
928                TRUNC( NVL(cp.effective_date_to, SYSDATE ) )
929          );
930 
931   dflt_global_exposure_rec dflt_global_exposure_csr%ROWTYPE ;
932 
933   l_global_exposure_flag VARCHAR2(1);
934 BEGIN
935  IF G_debug_flag = 'Y'
936  THEN
937    OE_DEBUG_PUB.ADD('IN Get_global_exposure_flag ');
938  END IF;
939 
940   l_global_exposure_flag := 'N' ;
941 
942   IF p_entity_type = 'CUSTOMER'
943   THEN
944 
945     OPEN cust_global_exposure_csr ;
946     FETCH cust_global_exposure_csr
947     INTO  cust_global_exposure_rec ;
948 
949   IF G_debug_flag = 'Y'
950   THEN
951     OE_DEBUG_PUB.ADD( ' credit_usage_rule_set_id => '
952                || cust_global_exposure_rec.credit_usage_rule_set_id);
953     OE_DEBUG_PUB.ADD( ' global_exposure_flag => '
954                   || cust_global_exposure_rec.global_exposure_flag);
955   END IF;
956 
957     l_global_exposure_flag :=
958         cust_global_exposure_rec.global_exposure_flag;
959 
960     IF cust_global_exposure_csr%NOTFOUND
961     THEN
962       l_global_exposure_flag := 'N' ;
963 
964       IF G_debug_flag = 'Y'
965       THEN
966        OE_DEBUG_PUB.ADD( ' cust_global_exposure_csr NO FOUND ');
967       END IF;
968 
969     END IF;
970 
971     CLOSE cust_global_exposure_csr ;
972 
973   ELSIF p_entity_type = 'DEFAULT'
974   THEN
975     OPEN dflt_global_exposure_csr ;
976     FETCH dflt_global_exposure_csr
977     INTO  dflt_global_exposure_rec ;
978 
979     IF G_debug_flag = 'Y'
980     THEN
981 
982      OE_DEBUG_PUB.ADD( ' credit_usage_rule_set_id => '
983                || dflt_global_exposure_rec.credit_usage_rule_set_id);
984      OE_DEBUG_PUB.ADD( ' global_exposure_flag => '
985                   || dflt_global_exposure_rec.global_exposure_flag);
986     END IF;
987 
988     l_global_exposure_flag :=
989         dflt_global_exposure_rec.global_exposure_flag;
990 
991     IF dflt_global_exposure_csr%NOTFOUND
992     THEN
993       l_global_exposure_flag := 'N' ;
994       OE_DEBUG_PUB.ADD( ' dflt_global_exposure_csr NO FOUND ');
995     END IF;
996 
997     CLOSE dflt_global_exposure_csr ;
998   END IF;
999 
1000   IF G_debug_flag = 'Y'
1001   THEN
1002     OE_DEBUG_PUB.ADD('Return out NOCOPY from Get_global_exposure_flag  with '
1003       || l_global_exposure_flag );
1004   END IF;
1005 
1006   RETURN(l_global_exposure_flag);
1007 
1008 
1009 
1010 EXCEPTION
1011 WHEN OTHERS THEN
1012       IF FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
1013       THEN
1014         FND_MSG_PUB.Add_Exc_Msg
1015             (   G_PKG_NAME
1016             ,   'Get_global_exposure_flag'
1017             );
1018       END IF;
1019 
1020 
1021 END Get_global_exposure_flag ;
1022 
1023 
1024 
1025 ---------------------------------------------------------------------------
1026 --FUNCTION Get_global_exposure_ruleset
1027 --COMMENT:  REturns the global flag for a given rule set ID
1028 
1029 ---------------------------------------------------------------------------
1030 FUNCTION Get_global_exposure_ruleset
1031  (p_credit_usage_rule_set_id IN NUMBER)
1032 RETURN VARCHAR2
1033 IS
1034 
1035 l_global_exposure_flag VARCHAR2(1) := 'N' ;
1036 BEGIN
1037  IF G_debug_flag = 'Y'
1038  THEN
1039    OE_DEBUG_PUB.ADD('IN OEXUCRCB: Get_global_exposure_ruleset');
1040  END IF;
1041 
1042   BEGIN
1043    SELECT
1044      NVL(global_exposure_flag,'N')
1045    INTO
1046      l_global_exposure_flag
1047    FROM
1048     HZ_CREDIT_USAGE_RULE_SETS_B
1049    WHERE
1050      credit_usage_rule_set_id = p_credit_usage_rule_set_id ;
1051 
1052    EXCEPTION
1053    WHEN NO_DATA_FOUND
1054   THEN
1055     l_global_exposure_flag := 'N' ;
1056 
1057   END ;
1058 
1059  IF G_debug_flag = 'Y'
1060  THEN
1061    OE_DEBUG_PUB.ADD('OUT OEXUCRCB: Get_global_exposure_ruleset');
1062  END IF;
1063 
1064   RETURN( NVL(l_global_exposure_flag,'N') );
1065 
1066 EXCEPTION
1067   WHEN OTHERS THEN
1068     IF OE_MSG_PUB.Check_Msg_Level(OE_MSG_PUB.G_MSG_LVL_UNEXP_ERROR) THEN
1069       OE_MSG_PUB.Add_Exc_Msg
1070       (   G_PKG_NAME
1071       ,   'Get_global_exposure_ruleset'
1072       );
1073     END IF;
1074     RAISE ;
1075 END Get_global_exposure_ruleset;
1076 
1077 ---------------------------------------------------------------------------
1078 --FUNCTION GET_GL_currency
1079 --COMMENT:   Returns the SOB currency
1080 
1081 ---------------------------------------------------------------------------
1082 FUNCTION GET_GL_currency
1083 RETURN VARCHAR2
1084 IS
1085 
1086 l_gl_currency VARCHAR2(10);
1087 l_sob_id      NUMBER;
1088 
1089 BEGIN
1090  IF G_debug_flag = 'Y'
1091  THEN
1092    OE_DEBUG_PUB.ADD('OEXUCRCB: In Get_GL_currency ');
1093  END IF;
1094 
1095   BEGIN
1096     l_sob_id := FND_PROFILE.VALUE('GL_SET_OF_BKS_ID') ;
1097 
1098     IF G_debug_flag = 'Y'
1099     THEN
1100      OE_DEBUG_PUB.ADD('l_sob_id = '|| l_sob_id );
1101      OE_DEBUG_PUB.ADD('GET SOB currency ');
1102    END IF;
1103 
1104     SELECT
1105       currency_code
1106     INTO
1107       l_gl_currency
1108     FROM
1109       GL_sets_of_books
1110     WHERE set_of_books_id = l_sob_id ;
1111 
1112    IF G_debug_flag = 'Y'
1113    THEN
1114      OE_DEBUG_PUB.ADD('l_gl_currency = '|| l_gl_currency );
1115    END IF;
1116 
1117    EXCEPTION
1118    WHEN NO_DATA_FOUND
1119    THEN
1120      l_gl_currency := NULL ;
1121     OE_DEBUG_PUB.ADD('EXCEPTION: NO_DATA_FOUND ');
1122      l_gl_currency := NULL ;
1123    WHEN TOO_MANY_ROWS
1124    THEN
1125      l_gl_currency := NULL ;
1126     OE_DEBUG_PUB.ADD('EXCEPTION: TOO_MANY_ROWS');
1127      l_gl_currency := NULL ;
1128   END ;
1129 
1130  IF G_debug_flag = 'Y'
1131  THEN
1132     OE_DEBUG_PUB.ADD('OEXUCRCB: Out NOCOPY Get_GL_currency ');
1133  END IF;
1134   RETURN(l_GL_currency);
1135 EXCEPTION
1136   WHEN OTHERS THEN
1137     IF OE_MSG_PUB.Check_Msg_Level(OE_MSG_PUB.G_MSG_LVL_UNEXP_ERROR) THEN
1138       OE_MSG_PUB.Add_Exc_Msg
1139       (   G_PKG_NAME
1140       ,   'Get_GL_currency'
1141       );
1142     END IF;
1143     RAISE ;
1144 END Get_GL_currency ;
1145 
1146 
1147 
1148 
1149 ------------------------------------------------------------------------------
1150 --  FUNCTION   : GET_category_set_id                   PRIVATE
1151 --  COMMENT    : Returns the OE default category set ID
1152 --
1153 --------------------------------------------------------------------------------
1154 FUNCTION GET_category_set_id
1155 RETURN NUMBER
1156 IS
1157 
1158 
1159 l_category_set_id  NUMBER;
1160 
1161 BEGIN
1162 
1163   OE_DEBUG_PUB.ADD('OEXUCRCB: IN GET_category_set_id ' );
1164   BEGIN
1165 
1166     SELECT
1167       category_set_id
1168     INTO
1169       l_category_set_id
1170     FROM
1171       MTL_DEFAULT_CATEGORY_SEts
1172     WHERE functional_area_id = 7 ;
1173 
1174   EXCEPTION
1175   WHEN NO_DATA_FOUND
1176   THEN
1177     l_category_set_id  := NULL;
1178 
1179   END ;
1180 
1181   OE_DEBUG_PUB.ADD('OEXUCRCB: OUT NOCOPY GET_category_set_id '|| l_category_set_id );
1182   RETURN l_category_set_id  ;
1183 
1184 
1185  EXCEPTION
1186   WHEN OTHERS THEN
1187    G_DBG_MSG := SUBSTR(sqlerrm,1,200);
1188 
1189     IF FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
1190     THEN
1191       FND_MSG_PUB.Add_Exc_Msg
1192       ( G_PKG_NAME
1193       , ' GET_category_set_id '
1194       );
1195     END IF;
1196     RAISE;
1197 
1198 END GET_category_set_id ;
1199 
1200 
1201 ------------------------------------------------------------------------------
1202 --  FUNCTION   : GET_Credit_check_Flag                  PRIVATE
1203 --  COMMENT    : Returns the Credit Checking flag
1204 --               from HZ_CUSTOMER_PROFILES
1205 --
1206 --------------------------------------------------------------------------------
1207 FUNCTION GET_Credit_check_Flag
1208 ( p_entity_id   IN NUMBER
1209 , p_entity_type IN VARCHAR2 )
1210 RETURN VARCHAR2
1211 IS
1212 
1213 l_credit_checking   VARCHAR2(1);
1214 
1215 BEGIN
1216 
1217 
1218   IF p_entity_type = 'CUSTOMER'
1219   THEN
1220     BEGIN
1221       SELECT
1222         credit_checking
1223       INTO
1224         l_credit_checking
1225       FROM
1226         HZ_CUSTOMER_PROFILES
1227       WHERE cust_account_id = p_entity_id
1228              AND site_use_id IS NULL ;
1229 
1230        EXCEPTION
1231         WHEN NO_DATA_FOUND THEN
1232           l_credit_checking := NULL ;
1233 
1234     END;
1235 
1236   ELSIF p_entity_type = 'SITE'
1237   THEN
1238     BEGIN
1239       SELECT
1240         credit_checking
1241       INTO
1242         l_credit_checking
1243       FROM
1244         HZ_CUSTOMER_PROFILES
1245       WHERE site_use_id = p_entity_id  ;
1246 
1247       EXCEPTION
1248         WHEN NO_DATA_FOUND THEN
1249           l_credit_checking := NULL ;
1250     END;
1251   END IF;
1252 
1253 
1254  RETURN l_credit_checking ;
1255 
1256 
1257  EXCEPTION
1258   WHEN OTHERS THEN
1259    G_DBG_MSG := SUBSTR(sqlerrm,1,200);
1260     IF FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
1261     THEN
1262       FND_MSG_PUB.Add_Exc_Msg
1263       ( G_PKG_NAME
1264       , ' GET_Credit_check_Flag'
1265       );
1266     END IF;
1267     RAISE;
1268 
1269 END GET_Credit_check_Flag ;
1270 
1271 ------------------------------------------------------------------------------
1272 --  PROCEDURE  : GET_Single_Customer_Limit                  PRIVATE
1273 --  COMMENT    : PROFILE : SINGLE
1274 --               ENTITY  : CUSTOMER
1275 --               Returns the Limit from the Customer Profile Amount directly
1276 --------------------------------------------------------------------------------
1277 PROCEDURE GET_Single_Customer_Limit
1278 (  p_entity_id                   IN  NUMBER
1279  , p_trx_curr_code               IN
1280           HZ_CREDIT_PROFILE_AMTS.currency_code%TYPE
1281  , x_limit_curr_code             OUT NOCOPY
1282           HZ_CREDIT_PROFILE_AMTS.currency_code%TYPE
1283  , x_trx_limit                   OUT NOCOPY NUMBER
1284  , x_overall_limit               OUT NOCOPY NUMBER
1285  , x_return_status               OUT NOCOPY VARCHAR2
1286 )
1287 IS
1288 
1289 
1290 ----------------------------------------------------
1291 --  The cursor gets credit limit info for         --
1292 --  1. customer                                   --
1293 --  2. directly specified limit (not usage based) --
1294 --    SINGLE - CUSTOMER
1295 ----------------------------------------------------
1296 
1297 CURSOR cust_single_limit_csr IS
1298   SELECT cpa.currency_code currency_code
1299   ,	 cpa.overall_credit_limit * ((100+nvl(cp.tolerance,0))/100)
1300 	   overall_limit
1301   ,	 cpa.trx_credit_limit * ((100+nvl(cp.tolerance,0))/100)
1302 	   trx_limit
1303   ,	 cp.credit_checking credit_checking  --bug 5071518
1304   ,	 0 credit_usage_rule_set_id
1305   FROM   hz_customer_profiles         cp
1306   ,	 hz_cust_profile_amts         cpa
1307   WHERE  cp.cust_account_id           = p_entity_id
1308   AND    cp.site_use_id IS NULL
1309   AND    cp.cust_account_profile_id   = cpa.cust_account_profile_id
1310   AND    cpa.currency_code            = p_trx_curr_code ;
1311 --  AND    cp.credit_checking          = 'Y' ;  --bug 5071518
1312 
1313   cust_single_limit_rec  cust_single_limit_csr%ROWTYPE ;
1314 
1315 BEGIN
1316  IF G_debug_flag = 'Y'
1317  THEN
1318    OE_DEBUG_PUB.ADD('OEXUCRCB: IN GET_Single_Customer_Limit ' );
1319  END IF;
1320 
1321   OPEN cust_single_limit_csr;
1322   FETCH cust_single_limit_csr
1323   INTO  cust_single_limit_rec ;
1324 
1325   --Modified for Bug 5071518
1326   --If the customer profile is not created, then NULL should be returned.
1327   --If customer profile is created and credit check flag is not checked, only then 'N' should be returned
1328   IF cust_single_limit_csr%NOTFOUND
1329   THEN
1330      x_return_status := NULL ;
1331   ELSIF cust_single_limit_rec.credit_checking = 'N' THEN
1332      x_return_status := 'N' ;
1333   ELSE
1334     x_limit_curr_code      := cust_single_limit_rec.currency_code;
1335     x_overall_limit        := cust_single_limit_rec.overall_limit;
1336     x_trx_limit            := cust_single_limit_rec.trx_limit;
1337 
1338     x_return_status        := 'Y' ;
1339 
1340   END IF;
1341 
1342   CLOSE cust_single_limit_csr;
1343 
1344  IF G_debug_flag = 'Y'
1345  THEN
1346    OE_DEBUG_PUB.ADD('OEXUCRCB: OUT NOCOPY GET_Single_Customer_Limit ' );
1347  END IF;
1348 
1349  EXCEPTION
1350   WHEN OTHERS THEN
1351    G_DBG_MSG := SUBSTR(sqlerrm,1,200);
1352     IF FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
1353     THEN
1354       FND_MSG_PUB.Add_Exc_Msg
1355       ( G_PKG_NAME
1356       , ' GET_Single_Customer_Limit '
1357       );
1358     END IF;
1359     RAISE;
1360 
1361 END GET_Single_Customer_Limit ;
1362 
1363 
1364 ------------------------------------------------------------------------------
1365 --  PROCEDURE  : GET_Single_Site_Limit     PRIVATE
1366 --  COMMENT    : PROFILE : SINGLE
1367 --               ENTITY  : SITE
1368 --    Returns the Limit from the Customer Profile Amount directly for
1369 --     the site
1370 --------------------------------------------------------------------------------
1371 PROCEDURE GET_Single_Site_Limit
1372 (  p_entity_id                   IN  NUMBER
1373  , p_trx_curr_code               IN
1374           HZ_CREDIT_PROFILE_AMTS.currency_code%TYPE
1375  , x_limit_curr_code             OUT NOCOPY
1376           HZ_CREDIT_PROFILE_AMTS.currency_code%TYPE
1377  , x_trx_limit                   OUT NOCOPY NUMBER
1378  , x_overall_limit               OUT NOCOPY NUMBER
1379  , x_return_status               OUT NOCOPY VARCHAR2
1380 )
1381 IS
1382 
1383 
1384 ----------------------------------------------------
1385 --  The cursor gets credit limit info for         --
1386 --  1. Site                                       --
1387 --  2. directly specified limit (not usage based) --
1388 --    SINGLE - SITE
1389 ----------------------------------------------------
1390 
1391 CURSOR site_single_limit_csr IS
1392   SELECT cpa.currency_code currency_code
1393   ,	 cpa.overall_credit_limit * ((100+nvl(cp.tolerance,0))/100)
1394 	   overall_limit
1395   ,	 cpa.trx_credit_limit * ((100+nvl(cp.tolerance,0))/100)
1396 	   trx_limit
1397   ,	 cp.credit_checking credit_checking  --bug 4582292
1398   ,	 0 credit_usage_rule_set_id
1399   FROM   hz_customer_profiles         cp
1400   ,	 hz_cust_profile_amts         cpa
1401   WHERE  cp.site_use_id               = p_entity_id
1402   AND    cp.cust_account_profile_id   = cpa.cust_account_profile_id
1403   AND    cpa.currency_code            = p_trx_curr_code
1404 --  AND    cp.credit_checking  = 'Y' bug 4582292
1405   AND    NVL(TRUNC(cpa.expiration_date)
1406             , TRUNC(SYSDATE) )    <= TRUNC(SYSDATE);
1407 
1408 
1409   site_single_limit_rec  site_single_limit_csr%ROWTYPE ;
1410 
1411 
1412 BEGIN
1413  IF G_debug_flag = 'Y'
1414  THEN
1415    OE_DEBUG_PUB.ADD('OEXUCRCB: IN GET_Single_site_Limit ' );
1416  END IF;
1417 
1418   OPEN site_single_limit_csr ;
1419   FETCH site_single_limit_csr
1420   INTO  site_single_limit_rec ;
1421 
1422   --Modified for bug 4582292
1423   --If the site profile is not created, then NULL should be returned.
1424   --If site profile is created and credit check flag is not checked, only then 'N' should be returned
1425   IF site_single_limit_csr%NOTFOUND
1426   THEN
1427      x_return_status := NULL ;
1428   ELSIF site_single_limit_rec.credit_checking = 'N' THEN
1429      x_return_status := 'N' ;
1430   ELSE
1431     x_limit_curr_code      := site_single_limit_rec.currency_code;
1432     x_overall_limit := site_single_limit_rec.overall_limit;
1433     x_trx_limit     := site_single_limit_rec.trx_limit;
1434 
1435     x_return_status        := 'Y' ;
1436 
1437   END IF;
1438 
1439   CLOSE site_single_limit_csr ;
1440 
1441  IF G_debug_flag = 'Y'
1442  THEN
1443    OE_DEBUG_PUB.ADD('OEXUCRCB: OUT NOCOPY GET_Single_site_Limit ' );
1444  END IF;
1445 
1446 
1447  EXCEPTION
1448   WHEN OTHERS THEN
1449    G_DBG_MSG := SUBSTR(sqlerrm,1,200);
1450     IF FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
1451     THEN
1452       FND_MSG_PUB.Add_Exc_Msg
1453       ( G_PKG_NAME
1454       , ' GET_Single_Site_Limit '
1455       );
1456     END IF;
1457     RAISE;
1458 
1459 END GET_Single_Site_Limit ;
1460 
1461 
1462 -----------------------------------------------------------------------------
1463 --  PROCEDURE  : GET_multi_customer_Limit          PRIVATE
1464 --  COMMENT    : PROFILE : MULTI
1465 --               ENTITY  : CUSTOMER
1466 --    Returns the Limit from the Customer Profile Amount after
1467 --    using the credit usage rules
1468 --------------------------------------------------------------------------------
1469 PROCEDURE GET_multi_customer_Limit
1470 (  p_entity_id                   IN  NUMBER
1471  , p_trx_curr_code               IN
1472           HZ_CREDIT_PROFILE_AMTS.currency_code%TYPE
1473  , x_limit_curr_code             OUT NOCOPY
1474           HZ_CREDIT_PROFILE_AMTS.currency_code%TYPE
1475  , x_trx_limit                   OUT NOCOPY NUMBER
1476  , x_overall_limit               OUT NOCOPY NUMBER
1477  , x_return_status               OUT NOCOPY VARCHAR2
1478  , x_credit_usage_rule_set_id    OUT NOCOPY NUMBER
1479  , x_global_exposure_flag        OUT NOCOPY VARCHAR2
1480 )
1481 IS
1482 
1483 ---------------------------------------------
1484 --  The cursor gets credit limit info for  --
1485 --  1. customer                            --
1486 --  2. usage based limit                   --
1487 --  3. lowest available                    --
1488 
1489 --  MULTI  CUSTOMER
1490 ---------------------------------------------
1491 
1492 CURSOR cust_multi_limit_no_incl_csr IS
1493   SELECT cpa.currency_code currency_code
1494   ,	 cpa.overall_credit_limit * ((100 + NVL(cp.tolerance,0))/100)
1495 	   overall_limit
1496   ,	 cpa.trx_credit_limit * ((100 + NVL(cp.tolerance,0))/100)
1497 	   trx_limit
1498   ,	 cp.credit_checking credit_checking  --bug 5071518
1499   ,	 curs.credit_usage_rule_set_id
1500   ,      cu.credit_usage_id
1501   ,      NVL(curs.global_exposure_flag,'N') global_exposure_flag
1502   FROM   hz_customer_profiles         cp
1503   ,	 hz_cust_profile_amts         cpa
1504   ,	 hz_credit_usages             cu
1505   ,	 hz_credit_usage_rules        cur
1506   ,      hz_credit_usage_rule_sets_B   curs
1507   WHERE  cp.cust_account_id           = p_entity_id
1508   AND    cp.site_use_id               IS NULL
1509   AND    cp.cust_account_profile_id   = cpa.cust_account_profile_id
1510   AND    cpa.cust_acct_profile_amt_id = cu.cust_acct_profile_amt_id
1511   AND    cu.credit_usage_rule_set_id  = cur.credit_usage_rule_set_id
1512   AND    curs.credit_usage_rule_set_id = cu.credit_usage_rule_set_id
1513   AND    curs.credit_usage_rule_set_id = cur.credit_usage_rule_set_id
1514   AND    NVL(TRUNC(cpa.expiration_date) , TRUNC(SYSDATE) )
1515              <= TRUNC(SYSDATE)
1516   AND     NVL (cur.include_all_flag, 'N') = 'N'
1517   AND     cur.usage_type = 'CURRENCY'
1518   AND     cur.user_code = p_trx_curr_code
1519   AND     NVL(cur.exclude_flag,'N') = 'N' ;
1520 --  AND     cp.credit_checking = 'Y' ;  --bug 5071518
1521 
1522 
1523   cust_multi_limit_no_incl_rec   cust_multi_limit_no_incl_csr%ROWTYPE ;
1524 
1525 
1526   CURSOR cust_multi_limit_incl_csr IS
1527   SELECT cpa.currency_code currency_code
1528   ,	 cpa.overall_credit_limit * ((100 + NVL(cp.tolerance,0))/100)
1529 	   overall_limit
1530   ,	 cpa.trx_credit_limit * ((100 + NVL(cp.tolerance,0))/100)
1531 	   trx_limit
1532   ,	 cp.credit_checking credit_checking  --bug 5071518
1533   ,	 cu.credit_usage_rule_set_id
1534   ,      NVL(curs.global_exposure_flag,'N') global_exposure_flag
1535   FROM   hz_customer_profiles         cp
1536   ,	 hz_cust_profile_amts         cpa
1537   ,	 hz_credit_usages             cu
1538   ,	 hz_credit_usage_rules        cur
1539   ,      hz_credit_usage_rule_sets_B  curs
1540   WHERE  cp.cust_account_id           = p_entity_id
1541   AND    cp.site_use_id               IS NULL
1542   AND    cp.cust_account_profile_id   = cpa.cust_account_profile_id
1543   AND    cpa.cust_acct_profile_amt_id = cu.cust_acct_profile_amt_id
1544   AND    cu.credit_usage_rule_set_id  = cur.credit_usage_rule_set_id
1545   AND    curs.credit_usage_rule_set_id = cu.credit_usage_rule_set_id
1546   AND    curs.credit_usage_rule_set_id = cur.credit_usage_rule_set_id
1547   AND    NVL(TRUNC(cpa.expiration_date), TRUNC(SYSDATE)
1548             )    <= TRUNC(SYSDATE)
1549   AND    cur.include_all_flag = 'Y'
1550   AND    NOT EXISTS ( SELECT 'EXCLUDE'
1551 		      FROM   hz_credit_usage_rules cur2
1552 		      WHERE  cu.credit_usage_rule_set_id
1553 			     = cur2.credit_usage_rule_set_id
1554                       AND    cur2.exclude_flag = 'Y'
1555 		      AND    cur2.usage_type  = 'CURRENCY'
1556 		      AND    cur2.user_code   = p_trx_curr_code
1557                     ) ;
1558 --  AND  cp.credit_checking = 'Y' ;  --bug 5071518
1559 
1560 
1561   cust_multi_limit_incl_rec cust_multi_limit_incl_csr%ROWTYPE ;
1562 
1563 BEGIN
1564  IF G_debug_flag = 'Y'
1565  THEN
1566   OE_DEBUG_PUB.ADD('OEXUCRCB: IN GET_multi_Customer_Limit ' );
1567  END IF;
1568 
1569     x_credit_usage_rule_set_id := NULL ;
1570 
1571   -- The process will first try to find the limit avoiding the
1572   -- Include all factor.
1573   -- If not successful, the Include all is considered
1574 
1575   OPEN cust_multi_limit_no_incl_csr ;
1576   FETCH cust_multi_limit_no_incl_csr
1577   INTO  cust_multi_limit_no_incl_rec ;
1578 
1579 
1580   --Modified for Bug 5071518
1581   --If the customer profile is not created, then NULL should be returned.
1582   --If customer profile is created and credit check flag is not checked, only then 'N' should be returned
1583   IF cust_multi_limit_no_incl_csr%NOTFOUND
1584   THEN
1585     x_return_status := NULL ;
1586   ELSIF cust_multi_limit_no_incl_rec.credit_checking = 'N' THEN
1587      x_credit_usage_rule_set_id := NULL ;
1588      x_return_status := 'N' ;
1589   ELSE
1590     x_limit_curr_code := cust_multi_limit_no_incl_rec.currency_code;
1591     x_overall_limit   := cust_multi_limit_no_incl_rec.overall_limit;
1592     x_trx_limit       := cust_multi_limit_no_incl_rec.trx_limit;
1593     x_credit_usage_rule_set_id :=
1594           cust_multi_limit_no_incl_rec.credit_usage_rule_set_id ;
1595     x_global_exposure_flag := cust_multi_limit_no_incl_rec.global_exposure_flag ;
1596 
1597     x_return_status   := 'Y' ;
1598   END IF;
1599 
1600   CLOSE cust_multi_limit_no_incl_csr ;
1601 
1602   IF x_limit_curr_code  IS NULL
1603   THEN
1604     OPEN cust_multi_limit_incl_csr ;
1605     FETCH cust_multi_limit_incl_csr
1606     INTO   cust_multi_limit_incl_rec ;
1607 
1608     --Modified for Bug 5071518
1609     --If the customer profile is not created, then NULL should be returned.
1610     --If customer profile is created and credit check flag is not checked, only then 'N' should be returned
1611     IF cust_multi_limit_incl_csr%NOTFOUND
1612     THEN
1613        x_return_status := NULL ;
1614     ELSIF cust_multi_limit_incl_rec.credit_checking = 'N' THEN
1615        x_credit_usage_rule_set_id := NULL ;
1616        x_return_status := 'N' ;
1617     ELSE
1618       x_limit_curr_code :=  cust_multi_limit_incl_rec.currency_code;
1619       x_overall_limit   :=  cust_multi_limit_incl_rec.overall_limit;
1620       x_trx_limit       :=  cust_multi_limit_incl_rec.trx_limit;
1621       x_credit_usage_rule_set_id :=
1622              cust_multi_limit_incl_rec.credit_usage_rule_set_id ;
1623       x_global_exposure_flag :=
1624         cust_multi_limit_incl_rec.global_exposure_flag ;  --Bug 4703167
1625       x_return_status   := 'Y' ;
1626     END IF;
1627 
1628     CLOSE cust_multi_limit_incl_csr ;
1629 
1630   END IF;
1631  IF G_debug_flag = 'Y'
1632  THEN
1633   OE_DEBUG_PUB.ADD('OEXUCRCB: OUT NOCOPY GET_multi_Customer_Limit ' );
1634  END IF;
1635 
1636 
1637  EXCEPTION
1638   WHEN OTHERS THEN
1639    G_DBG_MSG := SUBSTR(sqlerrm,1,200);
1640     IF FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
1641     THEN
1642       FND_MSG_PUB.Add_Exc_Msg
1643       ( G_PKG_NAME
1644       , ' GET_multi_customer_Limit '
1645       );
1646     END IF;
1647     RAISE;
1648 
1649 END GET_multi_customer_Limit ;
1650 
1651 
1652 
1653 -----------------------------------------------------------------------------
1654 --  PROCEDURE  : GET_multi_site_Limit              PRIVATE
1655 --  COMMENT    : PROFILE : MULTI
1656 --               ENTITY  : SITE
1657 --    Returns the limit by using the Credit ussage rules
1658 --------------------------------------------------------------------------------
1659 PROCEDURE GET_multi_site_Limit
1660 (  p_entity_id                   IN  NUMBER
1661  , p_trx_curr_code               IN
1662           HZ_CREDIT_PROFILE_AMTS.currency_code%TYPE
1663  , x_limit_curr_code             OUT NOCOPY
1664           HZ_CREDIT_PROFILE_AMTS.currency_code%TYPE
1665  , x_trx_limit                   OUT NOCOPY NUMBER
1666  , x_overall_limit               OUT NOCOPY NUMBER
1667  , x_return_status               OUT NOCOPY VARCHAR2
1668 )
1669 IS
1670 
1671 ---------------------------------------------
1672 --  The cursor gets credit limit info for  --
1673 --  1. Site                                --
1674 --  2. usage based limit                   --
1675 --  3. lowest available                    --
1676 
1677 --  MULTI  SITE
1678 ---------------------------------------------
1679 
1680 CURSOR site_multi_limit_no_incl_csr IS
1681   SELECT cpa.currency_code currency_code
1682   ,	 cpa.overall_credit_limit * ((100 + NVL(cp.tolerance,0))/100)
1683 	   overall_limit
1684   ,	 cpa.trx_credit_limit * ((100 + NVL(cp.tolerance,0))/100)
1685 	   trx_limit
1686   ,	 cp.credit_checking credit_checking  --bug 4582292
1687   ,	 cu.credit_usage_rule_set_id
1688   FROM   hz_customer_profiles         cp
1689   ,	 hz_cust_profile_amts         cpa
1690   ,	 hz_credit_usages             cu
1691   ,	 hz_credit_usage_rules        cur
1692   WHERE  cp.site_use_id               = p_entity_id
1693   AND    cp.cust_account_profile_id   = cpa.cust_account_profile_id
1694   AND    cpa.cust_acct_profile_amt_id = cu.cust_acct_profile_amt_id
1695   AND    cu.credit_usage_rule_set_id  = cur.credit_usage_rule_set_id
1696   AND    NVL(TRUNC(cpa.expiration_date) , TRUNC(SYSDATE) )
1697              <= TRUNC(SYSDATE)
1698   AND     NVL (cur.include_all_flag, 'N') = 'N'
1699   AND     cur.usage_type = 'CURRENCY'
1700   AND     cur.user_code = p_trx_curr_code
1701 -- AND     cp.credit_checking     = 'Y' bug 4582292
1702  AND     NVL(cur.exclude_flag,'N') = 'N';
1703 
1704 
1705   site_multi_limit_no_incl_rec   site_multi_limit_no_incl_csr%ROWTYPE ;
1706 
1707 
1708   CURSOR site_multi_limit_incl_csr IS
1709   SELECT cpa.currency_code currency_code
1710   ,	 cpa.overall_credit_limit * ((100 + NVL(cp.tolerance,0))/100)
1711 	   overall_limit
1712   ,	 cpa.trx_credit_limit * ((100 + NVL(cp.tolerance,0))/100)
1713 	   trx_limit
1714   ,	 cp.credit_checking credit_checking --bug 4582292
1715   ,	 cu.credit_usage_rule_set_id
1716   FROM   hz_customer_profiles         cp
1717   ,	 hz_cust_profile_amts         cpa
1718   ,	 hz_credit_usages             cu
1719   ,	 hz_credit_usage_rules        cur
1720   WHERE  cp.site_use_id               = p_entity_id
1721   AND    cp.cust_account_profile_id   = cpa.cust_account_profile_id
1722   AND    cpa.cust_acct_profile_amt_id = cu.cust_acct_profile_amt_id
1723   AND    cu.credit_usage_rule_set_id  = cur.credit_usage_rule_set_id
1724   AND    NVL(TRUNC(cpa.expiration_date), TRUNC(SYSDATE)
1725             )    <= TRUNC(SYSDATE)
1726 --  AND     cp.credit_checking     = 'Y' bug 4582292
1727   AND   cur.include_all_flag = 'Y'
1728   AND   NOT EXISTS ( SELECT 'EXCLUDE'
1729 		      FROM   hz_credit_usage_rules cur2
1730 		      WHERE  cu.credit_usage_rule_set_id
1731 			     = cur2.credit_usage_rule_set_id
1732                       AND    cur2.exclude_flag = 'Y'
1733 		      AND    cur2.usage_type  = 'CURRENCY'
1734 		      AND    cur2.user_code   = p_trx_curr_code
1735                     );
1736 
1737  site_multi_limit_incl_rec   site_multi_limit_incl_csr%ROWTYPE ;
1738 
1739 BEGIN
1740   IF G_debug_flag = 'Y'
1741   THEN
1742    OE_DEBUG_PUB.ADD('OEXUCRCB: IN GET_multi_site_Limit ' );
1743   END IF;
1744 
1745   -- The process will first try to find the limit avoiding the
1746   -- Include all factor.
1747   -- If not successful, the Include all is considered
1748 
1749   OPEN site_multi_limit_no_incl_csr ;
1750   FETCH site_multi_limit_no_incl_csr
1751   INTO  site_multi_limit_no_incl_rec ;
1752 
1753   --Modified for Bug 4582292
1754   --If the site profile is not created, then NULL should be returned.
1755   --If site profile is created and credit check flag is not checked, only then 'N' should be returne
1756   IF site_multi_limit_no_incl_csr%NOTFOUND
1757   THEN
1758      x_return_status := NULL ;
1759   ELSIF site_multi_limit_no_incl_rec.credit_checking = 'N' THEN
1760      x_return_status := 'N';
1761   ELSE
1762     x_limit_curr_code  := site_multi_limit_no_incl_rec.currency_code;
1763     x_overall_limit    := site_multi_limit_no_incl_rec.overall_limit;
1764     x_trx_limit        := site_multi_limit_no_incl_rec.trx_limit;
1765     x_return_status    := 'Y' ;
1766 
1767   END IF;
1768 
1769   CLOSE site_multi_limit_no_incl_csr ;
1770 
1771   IF x_limit_curr_code  IS NULL
1772   THEN
1773     OPEN site_multi_limit_incl_csr ;
1774     FETCH site_multi_limit_incl_csr
1775     INTO  site_multi_limit_incl_rec ;
1776 
1777     --Modified for Bug 4582292
1778     --If the site profile is not created, then NULL should be returned.
1779   --If site profile is created and credit check flag is not checked, only then 'N' should be returned
1780     IF site_multi_limit_incl_csr%NOTFOUND
1781     THEN
1782        x_return_status := NULL ;
1783     ELSIF site_multi_limit_incl_rec.credit_checking = 'N' THEN
1784        x_return_status := 'N' ;
1785     ELSE
1786      x_limit_curr_code  := site_multi_limit_incl_rec.currency_code;
1787      x_overall_limit    := site_multi_limit_incl_rec.overall_limit;
1788      x_trx_limit        := site_multi_limit_incl_rec.trx_limit;
1789      x_return_status    := 'Y' ;
1790 
1791     END IF;
1792 
1793     CLOSE site_multi_limit_incl_csr ;
1794 
1795   END IF;
1796   IF G_debug_flag = 'Y'
1797   THEN
1798     OE_DEBUG_PUB.ADD('OEXUCRCB: OUT NOCOPY GET_multi_site_Limit ' );
1799   END IF ;
1800 
1801 
1802  EXCEPTION
1803   WHEN OTHERS THEN
1804    G_DBG_MSG := SUBSTR(sqlerrm,1,200);
1805     IF FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
1806     THEN
1807       FND_MSG_PUB.Add_Exc_Msg
1808       ( G_PKG_NAME
1809       , ' GET_multi_site_Limit '
1810       );
1811     END IF;
1812     RAISE;
1813 
1814 END GET_multi_site_Limit ;
1815 
1816 
1817 
1818 -----------------------------------------------------------------------------
1819 --  PROCEDURE  : GET_single_default_Limit            PRIVATE
1820 --  COMMENT    : PROFILE : SINGLE
1821 --               ENTITY  : DEFAULT ( Organization )
1822 --    Returns the limit from the Credit profile amounts directly
1823 --------------------------------------------------------------------------------
1824 PROCEDURE GET_single_default_Limit
1825 (  p_entity_id                   IN  NUMBER
1826  , p_trx_curr_code               IN
1827           HZ_CREDIT_PROFILE_AMTS.currency_code%TYPE
1828  , x_limit_curr_code             OUT NOCOPY
1829           HZ_CREDIT_PROFILE_AMTS.currency_code%TYPE
1830  , x_trx_limit                   OUT NOCOPY NUMBER
1831  , x_overall_limit               OUT NOCOPY NUMBER
1832  , x_return_status               OUT NOCOPY VARCHAR2
1833 )
1834 IS
1835 
1836 ---------------------------------------------------
1837 --  The cursor gets credit limit info for         --
1838 --  1. Organization                               --
1839 --  2. directly specified limit (not usage based) --
1840 --    SINGLE - DEFAULT
1841 ----------------------------------------------------
1842 
1843 CURSOR dflt_single_limit_csr IS
1844   SELECT cpa.currency_code   currency_code
1845   ,	 cpa.overall_credit_limit * ((100+nvl(cp.tolerance,0))/100)
1846 	   overall_limit
1847   ,	 cpa.trx_credit_limit * ((100+nvl(cp.tolerance,0))/100)
1848 	   trx_limit
1849   ,	 cp.credit_checking
1850   FROM   hz_credit_profiles         cp
1851   ,	 hz_credit_profile_amts     cpa
1852   WHERE  cp.organization_id           = G_ORG_ID
1853   AND    cp.credit_profile_id         = cpa.credit_profile_id
1854   AND    cpa.currency_code            = p_trx_curr_code
1855   AND    cp.enable_flag     = 'Y'
1856   AND    ( TRUNC(SYSDATE)   BETWEEN
1857                TRUNC( NVL(cp.effective_date_from, SYSDATE))
1858                   AND
1859                TRUNC( NVL(cp.effective_date_to, SYSDATE ))
1860          );
1861   dflt_single_limit_rec       dflt_single_limit_csr%ROWTYPE ;
1862 
1863 BEGIN
1864   IF G_debug_flag = 'Y'
1865   THEN
1866     OE_DEBUG_PUB.ADD('OEXUCRCB: IN GET_single_default_Limit ' );
1867   END IF ;
1868 
1869   OPEN dflt_single_limit_csr ;
1870   FETCH dflt_single_limit_csr
1871   INTO  dflt_single_limit_rec ;
1872 
1873   IF dflt_single_limit_csr%NOTFOUND
1874   THEN
1875 
1876     x_return_status := 'N' ;
1877   ELSE
1878 
1879     x_limit_curr_code      := dflt_single_limit_rec.currency_code;
1880     x_overall_limit := dflt_single_limit_rec.overall_limit;
1881     x_trx_limit     := dflt_single_limit_rec.trx_limit;
1882 
1883     x_return_status        := 'Y' ;
1884 
1885   END IF;
1886 
1887   CLOSE dflt_single_limit_csr ;
1888 
1889   IF G_debug_flag = 'Y'
1890   THEN
1891    OE_DEBUG_PUB.ADD('OEXUCRCB: OUT NOCOPY GET_single_default_Limit ' );
1892   END IF ;
1893 
1894  EXCEPTION
1895   WHEN OTHERS THEN
1896    G_DBG_MSG := SUBSTR(sqlerrm,1,200);
1897     IF FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
1898     THEN
1899       FND_MSG_PUB.Add_Exc_Msg
1900       ( G_PKG_NAME
1901       , ' GET_single_default_Limit '
1902       );
1903     END IF;
1904     RAISE;
1905 
1906 END GET_single_default_Limit ;
1907 
1908 
1909 
1910 -----------------------------------------------------------------------------
1911 --  PROCEDURE  : GET_multi_default_Limit           PRIVATE
1912 --  COMMENT    : PROFILE : SINGLE
1913 --               ENTITY  : DEFAULT ( Organization )
1914 --    Returns the limit using the usage rules
1915 --------------------------------------------------------------------------------
1916 PROCEDURE GET_multi_default_Limit
1917 (  p_entity_id                   IN  NUMBER
1918  , p_trx_curr_code               IN
1919           HZ_CREDIT_PROFILE_AMTS.currency_code%TYPE
1920  , x_limit_curr_code             OUT NOCOPY
1921           HZ_CREDIT_PROFILE_AMTS.currency_code%TYPE
1922  , x_trx_limit                   OUT NOCOPY NUMBER
1923  , x_overall_limit               OUT NOCOPY NUMBER
1924  , x_return_status               OUT NOCOPY VARCHAR2
1925  , x_credit_usage_rule_set_id    OUT NOCOPY NUMBER
1926  , x_global_exposure_flag        OUT NOCOPY VARCHAR2
1927 )
1928 IS
1929 
1930 ---------------------------------------------
1931 --  The cursor gets credit limit info for  --
1932 --  1. Organization                        --
1933 --  2. Default based limit                 --
1934 --  3. lowest available                    --
1935 
1936 --  MULTI  DEFAULT
1937 ---------------------------------------------
1938 
1939 
1940 CURSOR dflt_multi_limit_no_incl_csr IS
1941   SELECT cpa.currency_code currency_code
1942   ,	 cpa.overall_credit_limit * ((100 + NVL(cp.tolerance,0))/100)
1943 	   overall_limit
1944   ,	 cpa.trx_credit_limit * ((100 + NVL(cp.tolerance,0))/100)
1945 	   trx_limit
1946   ,	 cp.credit_checking
1947   ,	 cu.credit_usage_rule_set_id
1948   ,      NVL(curs.global_exposure_flag,'N') global_exposure_flag
1949   FROM   hz_credit_profiles           cp
1950   ,	 hz_credit_profile_amts       cpa
1951   ,	 hz_credit_usages             cu
1952   ,	 hz_credit_usage_rules        cur
1953   ,      hz_credit_usage_rule_sets_B  curs
1954   WHERE  cp.organization_id           = G_ORG_ID
1955   AND    cp.credit_profile_id         = cpa.credit_profile_id
1956   AND    cpa.credit_profile_amt_id    = cu.credit_profile_amt_id
1957   AND    cu.credit_usage_rule_set_id  = cur.credit_usage_rule_set_id
1958   AND    curs.credit_usage_rule_set_id = cu.credit_usage_rule_set_id
1959   AND    curs.credit_usage_rule_set_id = cur.credit_usage_rule_set_id
1960   AND    cp.enable_flag     = 'Y'
1961   AND    ( TRUNC(SYSDATE)   BETWEEN
1962                TRUNC( NVL(cp.effective_date_from, SYSDATE ))
1963                   AND
1964                TRUNC( NVL(cp.effective_date_to, SYSDATE ) )
1965          )
1966   AND  NVL (cur.include_all_flag, 'N') = 'N'
1967   AND  cur.usage_type = 'CURRENCY'
1968   AND  cur.user_code = p_trx_curr_code
1969  AND     NVL(cur.exclude_flag,'N') = 'N'
1970  AND   cp.credit_checking = 'Y' ;
1971 
1972 
1973   dflt_multi_limit_no_incl_rec       dflt_multi_limit_no_incl_csr%ROWTYPE ;
1974 
1975 
1976 
1977 CURSOR dflt_multi_limit_incl_csr   IS
1978   SELECT cpa.currency_code currency_code
1979   ,	 cpa.overall_credit_limit * ((100 + NVL(cp.tolerance,0))/100)
1980 	   overall_limit
1981   ,	 cpa.trx_credit_limit * ((100 + NVL(cp.tolerance,0))/100)
1982 	   trx_limit
1983   ,	 cp.credit_checking
1984   ,	 cu.credit_usage_rule_set_id
1985   ,      NVL(curs.global_exposure_flag,'N') global_exposure_flag
1986   FROM   hz_credit_profiles           cp
1987   ,	 hz_credit_profile_amts       cpa
1988   ,	 hz_credit_usages             cu
1989   ,	 hz_credit_usage_rules        cur
1990   ,      hz_credit_usage_rule_sets_B  curs
1991   WHERE  cp.organization_id           = G_ORG_ID
1992   AND    cp.credit_profile_id         = cpa.credit_profile_id
1993   AND    cpa.credit_profile_amt_id    = cu.credit_profile_amt_id
1994   AND    cu.credit_usage_rule_set_id  = cur.credit_usage_rule_set_id
1995   AND    curs.credit_usage_rule_set_id = cu.credit_usage_rule_set_id
1996   AND    curs.credit_usage_rule_set_id = cur.credit_usage_rule_set_id
1997   AND    cp.enable_flag      = 'Y'
1998   AND    ( TRUNC(SYSDATE)   BETWEEN
1999                TRUNC( NVL(cp.effective_date_from, SYSDATE ))
2000                   AND
2001                TRUNC( NVL(cp.effective_date_to, SYSDATE ) )
2002          )
2003   AND    cur.include_all_flag = 'Y'
2004   AND    cp.credit_checking = 'Y'
2005   AND    NOT EXISTS ( SELECT 'EXCLUDE'
2006 		      FROM   hz_credit_usage_rules cur2
2007 		      WHERE  cu.credit_usage_rule_set_id
2008 			     = cur2.credit_usage_rule_set_id
2009                       AND    cur2.exclude_flag = 'Y'
2010 		      AND    cur2.usage_type  = 'CURRENCY'
2011 		      AND    cur2.user_code   = p_trx_curr_code
2012                     );
2013 
2014 
2015   dflt_multi_limit_incl_rec          dflt_multi_limit_incl_csr%ROWTYPE ;
2016 
2017 BEGIN
2018 
2019   IF G_debug_flag = 'Y'
2020   THEN
2021     OE_DEBUG_PUB.ADD('OEXUCRCB: IN GET_multi_default_Limit ' );
2022   END IF;
2023 
2024   x_credit_usage_rule_set_id := NULL ;
2025   x_global_exposure_flag := 'N' ;
2026 
2027   -- The process will first try to find the limit avoiding the
2028   -- Include all factor.
2029   -- If not successful, the Include all is considered
2030 
2031   OPEN  dflt_multi_limit_no_incl_csr ;
2032   FETCH  dflt_multi_limit_no_incl_csr
2033   INTO   dflt_multi_limit_no_incl_rec ;
2034 
2035   IF  dflt_multi_limit_no_incl_csr%NOTFOUND
2036   THEN
2037      x_credit_usage_rule_set_id := NULL ;
2038      x_return_status := 'N' ;
2039   ELSE
2040     x_limit_curr_code  := dflt_multi_limit_no_incl_rec.currency_code;
2041     x_overall_limit    := dflt_multi_limit_no_incl_rec.overall_limit;
2042     x_trx_limit        := dflt_multi_limit_no_incl_rec.trx_limit;
2043     x_credit_usage_rule_set_id :=
2044                  dflt_multi_limit_no_incl_rec.credit_usage_rule_set_id ;
2045     x_return_status        := 'Y' ;
2046     x_global_exposure_flag := dflt_multi_limit_no_incl_rec.global_exposure_flag ;  --Bug 4703167
2047 
2048   END IF;
2049 
2050   CLOSE dflt_multi_limit_no_incl_csr ;
2051 
2052   IF x_limit_curr_code IS NULL
2053   THEN
2054 
2055     OPEN  dflt_multi_limit_incl_csr ;
2056     FETCH  dflt_multi_limit_incl_csr
2057     INTO   dflt_multi_limit_incl_rec ;
2058 
2059     IF dflt_multi_limit_incl_csr%NOTFOUND
2060     THEN
2061        x_credit_usage_rule_set_id := NULL ;
2062        x_return_status := 'N' ;
2063     ELSE
2064       x_limit_curr_code  := dflt_multi_limit_incl_rec.currency_code;
2065       x_overall_limit    := dflt_multi_limit_incl_rec.overall_limit;
2066       x_trx_limit        := dflt_multi_limit_incl_rec.trx_limit;
2067       x_credit_usage_rule_set_id :=
2068               dflt_multi_limit_incl_rec.credit_usage_rule_set_id ;
2069       x_return_status    := 'Y' ;
2070       x_global_exposure_flag := dflt_multi_limit_incl_rec.global_exposure_flag ;
2071 
2072     END IF;
2073 
2074     CLOSE dflt_multi_limit_incl_csr ;
2075   END IF;
2076 
2077   IF G_debug_flag = 'Y'
2078   THEN
2079     OE_DEBUG_PUB.ADD('OEXUCRCB: OUT NOCOPY GET_multi_default_Limit ' );
2080   END IF;
2081 
2082  EXCEPTION
2083   WHEN OTHERS THEN
2084    G_DBG_MSG := SUBSTR(sqlerrm,1,200);
2085     IF FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
2086     THEN
2087       FND_MSG_PUB.Add_Exc_Msg
2088       ( G_PKG_NAME
2089       , ' GET_multi_default_Limit '
2090       );
2091     END IF;
2092     RAISE;
2093 
2094 END GET_multi_default_Limit ;
2095 
2096 
2097 ----------------------------------------------------------------------------
2098 --  PROCEDURE  : GET_single_Item_Limit           PRIVATE
2099 --  COMMENT    : Returns the limit associated with the Items.
2100 --
2101 ----------------------------------------------------------------------------
2102 PROCEDURE  GET_single_Item_Limit
2103 ( p_category_id                IN NUMBER
2104 , p_trx_curr_code              IN VARCHAR2
2105 , x_limit_curr_code           OUT NOCOPY VARCHAR2
2106 , x_trx_limit                 OUT NOCOPY NUMBER
2107 , x_return_status             OUT NOCOPY VARCHAR2
2108 )
2109 IS
2110 
2111 
2112 ---------------------------------------------------
2113 --  The cursor gets credit limit info for         --
2114 --  1. Item categories
2115 ----------------------------------------------------
2116 
2117 CURSOR  single_Item_limit_csr   IS
2118   SELECT cpa.currency_code  limit_curr_code
2119   ,	 cpa.trx_credit_limit * ((100+nvl(cp.tolerance,0))/100)
2120 	   trx_limit
2121   FROM   hz_credit_profiles         cp
2122   ,	 hz_credit_profile_amts     cpa
2123   WHERE  cp.item_category_id        = p_category_id
2124   AND    cp.credit_profile_id       = cpa.credit_profile_id
2125   AND    cpa.currency_code          = p_trx_curr_code
2126   AND    cp.enable_flag    = 'Y'
2127   AND    ( TRUNC(SYSDATE)           BETWEEN
2128                TRUNC( NVL(cp.effective_date_from, SYSDATE ) )
2129           AND  TRUNC( NVL(cp.effective_date_to, SYSDATE ) )
2130          ) ;
2131 
2132  l_single_Item_limit_csr_VAL   single_Item_limit_csr%ROWTYPE ;
2133 
2134 
2135 BEGIN
2136 
2137   OE_DEBUG_PUB.ADD('OEXUCRCB: IN GET_single_Item_Limit ' );
2138 
2139   OPEN  single_Item_limit_csr;
2140   FETCH single_Item_limit_csr
2141   INTO  l_single_Item_limit_csr_VAL ;
2142 
2143   IF single_Item_limit_csr%NOTFOUND
2144   THEN
2145     x_return_status := 'N' ;
2146 
2147   ELSE
2148     x_trx_limit
2149                := l_single_Item_limit_csr_VAL.trx_limit ;
2150     x_limit_curr_code
2151                 := l_single_Item_limit_csr_VAL.limit_curr_code   ;
2152 
2153     x_return_status := 'Y' ;
2154 
2155   END IF;
2156 
2157   OE_DEBUG_PUB.ADD('OEXUCRCB: OUT NOCOPY GET_single_Item_Limit ' );
2158 
2159  EXCEPTION
2160   WHEN OTHERS THEN
2161    G_DBG_MSG := SUBSTR(sqlerrm,1,200);
2162     IF FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
2163     THEN
2164       FND_MSG_PUB.Add_Exc_Msg
2165       ( G_PKG_NAME
2166       , '  GET_single_Item_Limit'
2167       );
2168     END IF;
2169     RAISE;
2170 
2171 END  GET_single_Item_Limit ;
2172 
2173 -----------------------------------------------------------------------------
2174 --  PROCEDURE  : GET_multi_Item_Limit           PRIVATE
2175 --  COMMENT    : Returns the limit associated with the Items.
2176 --
2177 -----------------------------------------------
2178 PROCEDURE GET_multi_Item_Limit
2179 ( p_category_id                IN NUMBER
2180 , p_trx_curr_code              IN VARCHAR2
2181 , x_limit_curr_code           OUT NOCOPY VARCHAR2
2182 , x_trx_limit                 OUT NOCOPY NUMBER
2183 , x_return_status             OUT NOCOPY VARCHAR2
2184 )
2185 IS
2186 
2187 
2188 CURSOR multi_Item_limit_no_incl_csr   IS
2189   SELECT cpa.currency_code  limit_curr_code
2190   ,	 cpa.trx_credit_limit * ((100+nvl(cp.tolerance,0))/100)
2191 	   trx_limit
2192   ,	 cu.credit_usage_rule_set_id
2193   FROM   hz_credit_profiles           cp
2194   ,	 hz_credit_profile_amts       cpa
2195   ,	 hz_credit_usages             cu
2196   ,	 hz_credit_usage_rules        cur
2197   WHERE  cp.credit_profile_id         = cpa.credit_profile_id
2198   AND    cpa.credit_profile_amt_id    = cu.credit_profile_amt_id
2199   AND    cu.credit_usage_rule_set_id  = cur.credit_usage_rule_set_id
2200   AND    cp.enable_flag      = 'Y'
2201   AND    cp.item_category_id          = p_category_id
2202   AND    ( TRUNC(SYSDATE)           BETWEEN
2203                TRUNC( NVL(cp.effective_date_from, SYSDATE ) )
2204           AND   TRUNC( NVL(cp.effective_date_to, SYSDATE ) )
2205          )
2206   AND  NVL (cur.include_all_flag, 'N') = 'N'
2207   AND  cur.usage_type         = 'CURRENCY'
2208   AND  cur.user_code          = p_trx_curr_code
2209  AND     NVL(cur.exclude_flag,'N') = 'N'
2210    ORDER BY cpa.overall_credit_limit;
2211 
2212   l_multi_Item_limit_no_incl_VAL  multi_Item_limit_no_incl_csr%ROWTYPE ;
2213 
2214 
2215 
2216 CURSOR multi_Item_limit_incl_csr   IS
2217   SELECT cpa.currency_code  limit_curr_code
2218   ,	 cpa.trx_credit_limit * ((100+nvl(cp.tolerance,0))/100)
2219 	   trx_limit
2220   ,	 cu.credit_usage_rule_set_id
2221   FROM   hz_credit_profiles           cp
2222   ,	 hz_credit_profile_amts       cpa
2223   ,	 hz_credit_usages             cu
2224   ,	 hz_credit_usage_rules        cur
2225   WHERE  cp.credit_profile_id         = cpa.credit_profile_id
2226   AND    cpa.credit_profile_amt_id    = cu.credit_profile_amt_id
2227   AND    cu.credit_usage_rule_set_id  = cur.credit_usage_rule_set_id
2228   AND    cp.enable_flag      = 'Y'
2229   AND    cp.item_category_id          = p_category_id
2230   AND    ( TRUNC(SYSDATE)           BETWEEN
2231                TRUNC( NVL(cp.effective_date_from, SYSDATE ) )
2232           AND   TRUNC( NVL(cp.effective_date_to, SYSDATE ) )
2233          )
2234   AND    cur.include_all_flag = 'Y'
2235   AND    NOT EXISTS ( SELECT 'EXCLUDE'
2236 		      FROM   hz_credit_usage_rules cur2
2237 		      WHERE  cu.credit_usage_rule_set_id
2238 			     = cur2.credit_usage_rule_set_id
2239                       AND    cur2.exclude_flag = 'Y'
2240 		      AND    cur2.usage_type  = 'CURRENCY'
2241 		      AND    cur2.user_code   = p_trx_curr_code
2242                     )
2243    ORDER BY cpa.overall_credit_limit;
2244 
2245   l_multi_Item_limit_incl_VAL   multi_Item_limit_incl_csr%ROWTYPE ;
2246 
2247 BEGIN
2248 
2249    OE_DEBUG_PUB.ADD('OEXUCRCB: IN GET_multi_item_Limit ' );
2250 
2251     x_return_status := 'N' ;
2252 
2253     OPEN multi_Item_limit_no_incl_csr ;
2254     FETCH multi_Item_limit_no_incl_csr
2255     INTO  l_multi_Item_limit_no_incl_VAL ;
2256 
2257     IF multi_Item_limit_no_incl_csr%NOTFOUND
2258     THEN
2259       x_return_status := 'N' ;
2260 
2261       OPEN multi_Item_limit_incl_csr ;
2262       FETCH multi_Item_limit_incl_csr
2263       INTO  l_multi_Item_limit_incl_VAL ;
2264 
2265       IF multi_Item_limit_incl_csr%NOTFOUND
2266       THEN
2267         x_return_status := 'N' ;
2268 
2269       ELSE
2270         x_trx_limit
2271                := l_multi_Item_limit_incl_VAL.trx_limit ;
2272         x_limit_curr_code
2273                 := l_multi_Item_limit_incl_VAL.limit_curr_code   ;
2274         x_return_status := 'Y' ;
2275 
2276       END IF;
2277     ELSE
2278        x_trx_limit
2279                := l_multi_Item_limit_no_incl_VAL.trx_limit ;
2280        x_limit_curr_code
2281                 := l_multi_Item_limit_no_incl_VAL.limit_curr_code   ;
2282 
2283        x_return_status := 'Y' ;
2284 
2285     END IF;
2286 
2287    OE_DEBUG_PUB.ADD('OEXUCRCB: OUT NOCOPY GET_multi_item_Limit ' );
2288 
2289  EXCEPTION
2290   WHEN OTHERS THEN
2291    G_DBG_MSG := SUBSTR(sqlerrm,1,200);
2292 
2293     IF FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
2294     THEN
2295       FND_MSG_PUB.Add_Exc_Msg
2296       ( G_PKG_NAME
2297       , '  GET_multi_Item_Limit '
2298       );
2299     END IF;
2300     RAISE;
2301 
2302 END  GET_multi_Item_Limit ;
2303 
2304 
2305 -----------------------------------------------------------------------------
2306 --  FUNCTION   : check_category           PRIVATE
2307 --  COMMENT    : Returns YES of category exist in the tmp table
2308 --
2309 ------------------------------------------------------------------------------
2310 FUNCTION check_category
2311 ( p_category_id      IN NUMBER
2312 , p_category_tmp_tbl IN category_tmp_tbl_type
2313 )
2314 RETURN VARCHAR2
2315 IS
2316 
2317  l_return_status VARCHAR2(1) := 'N' ;
2318 
2319 BEGIN
2320 
2321  FOR I IN 1..p_category_tmp_tbl.COUNT
2322  LOOP
2323    IF p_category_tmp_tbl(I).item_category_id = p_category_id
2324    THEN
2325      l_return_status := 'Y' ;
2326      EXIT;
2327    ELSE
2328      l_return_status := 'N' ;
2329    END IF;
2330 
2331  END LOOP;
2332 
2333  RETURN l_return_status ;
2334 
2335  EXCEPTION
2336   WHEN OTHERS THEN
2337    G_DBG_MSG := SUBSTR(sqlerrm,1,200);
2338 
2339     IF FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
2340     THEN
2341       FND_MSG_PUB.Add_Exc_Msg
2342       ( G_PKG_NAME
2343       , 'check_category '
2344       );
2345     END IF;
2346     RAISE;
2347 
2348 END check_category ;
2349 
2350 
2351 -----------------------------------------------------------------------------
2352 --  PROCEDURE  : GET_Item_Limit           PUBLIC
2353 --  COMMENT    : Returns the limit associated with the Items.
2354 --
2355 ------------------------------------------------------------------------------
2356 PROCEDURE GET_Item_Limit
2357 ( p_header_id                  IN NUMBER
2358 , p_trx_curr_code              IN VARCHAR2
2359 , p_site_use_id                IN NUMBER
2360 , p_include_tax_flag           IN VARCHAR2
2361 , x_item_limits_tbl            OUT NOCOPY
2362                   OE_CREDIT_CHECK_UTIL.item_limits_tbl_type
2363 , x_lines_tbl                  OUT NOCOPY
2364                   OE_CREDIT_CHECK_UTIL.lines_Rec_tbl_type
2365 )
2366 IS
2367 
2368  l_site_use_id        NUMBER ;
2369  l_include_tax_flag   VARCHAR2(1) := 'N' ;
2370  l_tmp_lines_tbl      OE_CREDIT_CHECK_UTIL.lines_Rec_tbl_type ;
2371  l_tmp_category_tbl   category_tmp_tbl_type ;
2372  l_selling_price      NUMBER;
2373  l_tax_value          NUMBER;
2374  l_ordered_quantity   NUMBER;
2375  l_credit_profile_id  NUMBER;
2376  l_ctg_profile_exist  VARCHAR2(1) := 'N' ;
2377 
2378  CURSOR C_SELECT_CTG_CREDIT_PROFILE IS
2379  SELECT
2380        cp.credit_profile_id
2381  FROM
2382       hz_credit_profiles cp
2383   WHERE    cp.item_category_id is NOT NULL
2384     AND    cp.enable_flag    = 'Y'
2385     AND    ( TRUNC(SYSDATE)           BETWEEN
2386                TRUNC( NVL(cp.effective_date_from, SYSDATE ) )
2387            AND  TRUNC( NVL(cp.effective_date_to, SYSDATE ) )
2388          ) ;
2389 
2390  l_SELECT_CTG_CREDIT_PROFILE C_SELECT_CTG_CREDIT_PROFILE%ROWTYPE ;
2391 
2392 
2393  CURSOR C_SELECT_LINES_CSR IS
2394  SELECT
2395    ln.line_id            line_id
2396  , ln.inventory_item_id  item_id
2397  , ctg.category_id       category_id
2398  , ln.ordered_quantity   ordered_quantity
2399  , ln.unit_selling_price selling_price
2400  , ln.tax_value          tax_value
2401  FROM
2402    OE_ORDER_LINES    ln
2403  , mtl_item_categories   ctg
2404  , ra_terms_b            trm
2405  WHERE ln.header_id            = p_header_id
2406    AND ln.invoice_to_org_id    = NVL(l_site_use_id, ln.invoice_to_org_id )
2407    AND ln.open_flag            = 'Y'
2408    AND (ln.invoiced_quantity IS NULL OR ln.invoiced_quantity = 0)
2409    AND ctg.category_set_id     = G_category_set_id
2410    --Bug 7651089
2411    AND ctg.organization_id     = oe_sys_parameters.value('MASTER_ORGANIZATION_ID', G_ORG_ID) --G_ORG_ID
2412    AND ctg.inventory_item_id   = ln.inventory_item_id
2413    AND trm.term_id             = ln.payment_term_id
2414    AND ln.line_category_code   = 'ORDER'
2415    AND trm.credit_check_flag   = 'Y'
2416    AND EXISTS
2417         (SELECT NULL
2418          FROM   oe_payment_types_all pt,
2419                 oe_order_headers_all h
2420          WHERE  pt.credit_check_flag = 'Y'
2421          AND    h.header_id = p_header_id
2422          AND    ln.header_id = h.header_id
2423          AND    NVL(pt.org_id, -99) = G_ORG_ID
2424          AND    pt.payment_type_code =
2425                   DECODE(ln.payment_type_code, NULL,
2426                      DECODE(h.payment_type_code, NULL, pt.payment_type_code,
2427                             h.payment_type_code),
2428                          ln.payment_type_code)
2429         );
2430 
2431 
2432  L_SELECT_LINES_VAL  C_SELECT_LINES_CSR%ROWTYPE ;
2433 
2434  l_return_status       VARCHAR2(1);
2435  I                     NUMBER ; -- INDEX
2436 
2437  l_item_id             NUMBER;
2438  l_line_id             NUMBER;
2439  l_trx_limit           NUMBER;
2440  l_limit_curr_code     VARCHAR2(15) ;
2441  l_category_id         NUMBER;
2442  l_curr_category_id    NUMBER;
2443  l_count               NUMBER := 0 ;
2444 
2445  l_ln_count            NUMBER := 0;
2446  l_grouping_id         NUMBER := 0;
2447  l_ctg_count           NUMBER := 0;
2448  l_line_value          NUMBER := 0 ;
2449 BEGIN
2450 
2451   OE_DEBUG_PUB.ADD('OEXUCRCB: IN GET_Item_Limit ');
2452 
2453 ----------------------------------------------------
2454 -- Two PL/SQL tables are used to maintain the limits
2455 -- associated with the Item categories.
2456 -- Header table with the Item category ID
2457 -- details table that contains the oe lines for that
2458 -- Item category within a bill to site for line level
2459 -- The credit checking Engine will use the information
2460 -- returned in the PL/SQL tables to CC check
2461 
2462 -----------------------------------------------------
2463 
2464   l_site_use_id := p_site_use_id ;
2465   l_tmp_lines_tbl.DELETE ;
2466   l_tmp_category_tbl.DELETE ;
2467 
2468   g_category_set_id     := NULL;
2469   l_ctg_profile_exist   := 'N' ;
2470 
2471   OE_DEBUG_PUB.ADD('Initial g_category_set_id ' || g_category_set_id   );
2472 --  OE_DEBUG_PUB.ADD(' G_profile ' || G_profile );
2473 
2474   -- For each Line ID/Item, the limits are selected
2475   -- using the Category.
2476   -- The similar selection pattern in coordination
2477   -- with the profile is used,
2478   -- that is being used for selecting the
2479   -- default limit.
2480 
2481   -- First verify if any category exist with a profile
2482 
2483   BEGIN
2484     OE_DEBUG_PUB.ADD(' Cusror select to check CTG profile exist ');
2485 
2486     OPEN C_SELECT_CTG_CREDIT_PROFILE ;
2487 
2488     FETCH C_SELECT_CTG_CREDIT_PROFILE
2489     INTO l_SELECT_CTG_CREDIT_PROFILE ;
2490 
2491     IF C_SELECT_CTG_CREDIT_PROFILE%NOTFOUND
2492     THEN
2493      l_ctg_profile_exist := 'N' ;
2494      OE_DEBUG_PUB.ADD(' Category profile do NOT exist ');
2495     ELSE
2496       l_credit_profile_id :=
2497                   l_SELECT_CTG_CREDIT_PROFILE.credit_profile_id ;
2498       l_ctg_profile_exist := 'Y' ;
2499      OE_DEBUG_PUB.ADD(' Category profile exist ');
2500     END IF;
2501     CLOSE C_SELECT_CTG_CREDIT_PROFILE ;
2502 
2503   END ;
2504 
2505 
2506    OE_DEBUG_PUB.ADD('  Out NOCOPY of CTG profile check cursor ');
2507    OE_DEBUG_PUB.ADD(' l_ctg_profile_exist = '|| l_ctg_profile_exist );
2508 
2509    IF l_ctg_profile_exist = 'Y'
2510    THEN
2511 
2512    OE_DEBUG_PUB.ADD(' Continue Item category credit get limit ');
2513 
2514     g_category_set_id   := GET_category_set_id ;
2515     OE_DEBUG_PUB.ADD('g_category_set_id ' || g_category_set_id   );
2516 
2517     FOR L_SELECT_LINES_VAL  IN  C_SELECT_LINES_CSR
2518     LOOP
2519       l_line_id          := L_SELECT_LINES_VAL.line_id ;
2520       l_item_id          := L_SELECT_LINES_VAL.item_id ;
2521       l_category_id      := L_SELECT_LINES_VAL.category_id ;
2522       l_selling_price    := L_SELECT_LINES_VAL.selling_price ;
2523       l_tax_value        := L_SELECT_LINES_VAL.tax_value ;
2524       l_ordered_quantity := L_SELECT_LINES_VAL.ordered_quantity ;
2525       l_count            := NVL(l_count,0) + 1 ;
2526 
2527       -- Insert into the TMP PL/SQL table.
2528 
2529       l_tmp_lines_tbl(l_count).grouping_id         := NULL;
2530       l_tmp_lines_tbl(l_count).item_category_id    := l_category_id ;
2531       l_tmp_lines_tbl(l_count).line_id             := l_line_id ;
2532       l_tmp_lines_tbl(l_count).unit_selling_price  := l_selling_price ;
2533       l_tmp_lines_tbl(l_count).tax_value           := l_tax_value ;
2534       l_tmp_lines_tbl(l_count).ordered_quantity    := l_ordered_quantity ;
2535 
2536       l_line_id           := NULL;
2537       l_item_id           := NULL;
2538       l_category_id       := NULL;
2539       l_selling_price     := NULL;
2540       l_tax_value         := NULL;
2541       l_ordered_quantity  := NULL;
2542 
2543     END LOOP;  -- CTG cursor loop
2544 
2545     OE_DEBUG_PUB.ADD('  Out NOCOPY of category cursor ');
2546 
2547     OE_DEBUG_PUB.ADD(' l_tmp_lines_tbl.COUNT ' || l_tmp_lines_tbl.COUNT );
2548     -- Now the TMP table needs to be scannned and relocated into
2549     -- the main table with category check.
2550 
2551     FOR I IN 1.. l_tmp_lines_tbl.COUNT
2552     LOOP
2553       IF check_category
2554       ( p_category_id       => l_tmp_lines_tbl(i).item_category_id
2555       , p_category_tmp_tbl  => l_tmp_category_tbl
2556       ) = 'N'
2557       THEN
2558 
2559         l_ctg_count := NVL(l_ctg_count,0) + 1 ;
2560 
2561         -- Always get multi first and get single if no usages found
2562 
2563           OE_DEBUG_PUB.ADD(' GET_multi_Item_Limit ');
2564 
2565           GET_multi_Item_Limit
2566           ( p_category_id         => l_tmp_lines_tbl(i).item_category_id
2567           , p_trx_curr_code       => p_trx_curr_code
2568           , x_limit_curr_code     => l_limit_curr_code
2569           , x_trx_limit           => l_trx_limit
2570           , x_return_status       => l_return_status
2571           );
2572 
2573           IF l_return_status  = 'N'
2574           THEN
2575             OE_DEBUG_PUB.ADD(' Call GET_single_Item_Limit ');
2576             GET_single_Item_Limit
2577             ( p_category_id         => l_tmp_lines_tbl(i).item_category_id
2578             , p_trx_curr_code       => p_trx_curr_code
2579             , x_limit_curr_code     => l_limit_curr_code
2580             , x_trx_limit           => l_trx_limit
2581             , x_return_status       => l_return_status
2582             );
2583 
2584           END IF;
2585 --        END IF;
2586 
2587          IF G_debug_flag = 'Y'
2588          THEN
2589             OE_DEBUG_PUB.ADD(' after getting the limits ');
2590             OE_DEBUG_PUB.ADD(' l_return_status '|| l_return_status);
2591             OE_DEBUG_PUB.ADD(' l_trx_limit '|| l_trx_limit);
2592             OE_DEBUG_PUB.ADD(' l_limit_curr_code '|| l_limit_curr_code );
2593             OE_DEBUG_PUB.ADD(' p_trx_curr_code '|| p_trx_curr_code );
2594         END IF;
2595 
2596         l_curr_category_id := l_tmp_lines_tbl(i).item_category_id ;
2597 
2598         l_tmp_category_tbl(l_ctg_count).item_category_id
2599                := l_tmp_lines_tbl(i).item_category_id ;
2600 
2601         l_tmp_category_tbl(l_ctg_count).profile_exist
2602                := l_return_status ;
2603 
2604         IF l_return_status = 'Y'
2605         THEN
2606           l_grouping_id := NVL(l_grouping_id,0) + 1;
2607 
2608           x_item_limits_tbl(l_grouping_id).grouping_id :=
2609                  l_grouping_id ;
2610 
2611           x_item_limits_tbl(l_grouping_id).item_category_id :=
2612                 l_curr_category_id ;
2613 
2614           x_item_limits_tbl(l_grouping_id).limit_curr_code :=
2615                l_limit_curr_code ;
2616 
2617           x_item_limits_tbl(l_grouping_id).item_limit :=
2618                      l_trx_limit ;
2619         END IF;
2620 
2621       END IF;
2622      -- end category_exist IF
2623 
2624      l_line_id         := NULL;
2625      l_trx_limit       := NULL;
2626      l_limit_curr_code := NULL;
2627      l_return_status   := NULL;
2628      l_curr_category_id := NULL;
2629 
2630 
2631    END LOOP;
2632 
2633    -- assign the values to the output table
2634 
2635    l_grouping_id      := NULL;
2636    l_curr_category_id := NULL;
2637 
2638    FOR ctg_id IN 1 .. x_item_limits_tbl.COUNT
2639    LOOP
2640      l_grouping_id :=
2641            x_item_limits_tbl(ctg_id).grouping_id ;
2642 
2643      l_curr_category_id := x_item_limits_tbl(ctg_id).item_category_id ;
2644 
2645      FOR ln_id IN 1 .. l_tmp_lines_tbl.COUNT
2646      LOOP
2647        IF l_tmp_lines_tbl(ln_id).item_category_id =
2648             l_curr_category_id
2649        THEN
2650          l_ln_count := NVL(l_ln_count,0) + 1 ;
2651          x_lines_tbl(l_ln_count).grouping_id        := l_grouping_id ;
2652          x_lines_tbl(l_ln_count).item_category_id   := l_curr_category_id ;
2653          x_lines_tbl(l_ln_count).line_id            :=
2654                           l_tmp_lines_tbl(ln_id).line_id ;
2655          x_lines_tbl(l_ln_count).unit_selling_price :=
2656                           l_tmp_lines_tbl(ln_id).unit_selling_price ;
2657          x_lines_tbl(l_ln_count).tax_value          :=
2658                           l_tmp_lines_tbl(ln_id).tax_value ;
2659          x_lines_tbl(l_ln_count).ordered_quantity   :=
2660                  l_tmp_lines_tbl(ln_id).ordered_quantity ;
2661 
2662          IF p_include_tax_flag = 'Y'
2663          THEN
2664            l_line_value := NVL(l_line_value,0) +
2665            ( NVL(l_tmp_lines_tbl(ln_id).tax_value,0 ) +
2666                       (  l_tmp_lines_tbl(ln_id).ordered_quantity
2667                       * l_tmp_lines_tbl(ln_id).unit_selling_price
2668                       )
2669            );
2670          ELSE
2671           l_line_value := NVL(l_line_value,0) +
2672                      (  l_tmp_lines_tbl(ln_id).ordered_quantity
2673                       * l_tmp_lines_tbl(ln_id).unit_selling_price
2674                       );
2675           END IF;
2676         END IF;
2677       END LOOP;
2678 
2679      x_item_limits_tbl(ctg_id).ctg_line_amount := NVL(l_line_value,0) ;
2680      l_line_value := NULL;
2681 
2682     END LOOP;
2683 
2684   ELSE
2685 
2686    OE_DEBUG_PUB.ADD(' No CTG credit profile found - No Item CC required ');
2687 
2688 
2689   END IF;  -- Profile check IF
2690 
2691 
2692    OE_DEBUG_PUB.ADD('OEXUCRCB: OUT NOCOPY GET_Item_Limit ');
2693 
2694 
2695   EXCEPTION
2696   WHEN OTHERS THEN
2697    G_DBG_MSG := SUBSTR(sqlerrm,1,200);
2698 
2699     IF FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
2700     THEN
2701       FND_MSG_PUB.Add_Exc_Msg
2702       ( G_PKG_NAME
2703       , ' GET_Item_Limit '
2704       );
2705     END IF;
2706     RAISE;
2707 
2708 
2709 END GET_Item_Limit ;
2710 
2711 
2712 
2713 -----------------------------------------------------------------------------
2714 --  PROCEDURE  : Get_Multi_Limit    PRIVATE
2715 --  COMMENT    :
2716 --
2717 ---------------------------------------------------------------------------
2718 PROCEDURE Get_Multi_Limit (
2719    p_entity_type                 IN  VARCHAR2
2720  , p_entity_id                   IN  NUMBER
2721  , p_trx_curr_code               IN
2722                            HZ_CREDIT_PROFILE_AMTS.currency_code%TYPE
2723  , x_limit_curr_code             OUT NOCOPY
2724                            HZ_CREDIT_PROFILE_AMTS.currency_code%TYPE
2725  , x_trx_limit                   OUT NOCOPY NUMBER
2726  , x_overall_limit               OUT NOCOPY NUMBER
2727  , x_global_exposure_flag        OUT NOCOPY VARCHAR2
2728 --bug 4212981
2729  , x_site_cc_flag                OUT NOCOPY VARCHAR2
2730  , x_cust_cc_flag                OUT NOCOPY VARCHAR2
2731 )
2732 IS
2733 
2734 l_return_status            VARCHAR2(1);
2735 l_credit_usage_rule_set_id NUMBER;
2736 
2737 BEGIN
2738 
2739   IF G_debug_flag = 'Y'
2740   THEN
2741     OE_DEBUG_PUB.ADD('OEXUCRCB: IN Get_Multi_Limit ');
2742   END IF;
2743 
2744    x_global_exposure_flag     := 'N' ;
2745 
2746    l_credit_usage_rule_set_id := NULL ;
2747 
2748    IF P_entity_Type = 'CUSTOMER'
2749    THEN
2750       GET_multi_customer_Limit
2751       ( p_entity_id       => p_entity_id
2752       , p_trx_curr_code   => p_trx_curr_code
2753       , x_limit_curr_code => x_limit_curr_code
2754       , x_trx_limit       => x_trx_limit
2755       , x_overall_limit   => x_overall_limit
2756       , x_return_status   => l_return_status
2757       , x_credit_usage_rule_set_id
2758                 => l_credit_usage_rule_set_id
2759       , x_global_exposure_flag => x_global_exposure_flag
2760       );
2761 
2762       IF G_debug_flag = 'Y'
2763       THEN
2764         OE_DEBUG_PUB.ADD(' Out NOCOPY GET_multi_customer_Limit '|| l_return_status );
2765         OE_DEBUG_PUB.ADD(' x_limit_curr_code = '|| x_limit_curr_code );
2766         OE_DEBUG_PUB.ADD(' x_trx_limit = '|| x_trx_limit );
2767         OE_DEBUG_PUB.ADD(' x_overall_limit = '|| x_overall_limit );
2768       END IF;
2769 
2770     x_cust_cc_flag := l_return_status;  --bug 4582292
2771 
2772     -- BUG 2236276
2773     -- roll up to next level if limits are NULL
2774 
2775       IF     l_return_status = 'Y'
2776          AND x_trx_limit is NULL
2777          AND x_overall_limit is NULL
2778       THEN
2779         l_return_status   := 'N' ;
2780         x_limit_curr_code := NULL ;
2781         x_global_exposure_flag := 'N' ;
2782 
2783         OE_DEBUG_PUB.ADD(' Limits NULL for customer MULTI ');
2784 
2785       END IF;
2786 
2787       IF NVL(l_return_status, 'N') = 'N' --bug 5071518
2788       THEN
2789         x_global_exposure_flag := 'N' ;
2790         l_credit_usage_rule_set_id := NULL ;
2791 
2792         IF G_debug_flag = 'Y'
2793         THEN
2794           OE_DEBUG_PUB.ADD(' Calling GET_Single_Customer_Limit ');
2795         END IF;
2796 
2797         GET_Single_Customer_Limit
2798         ( p_entity_id       => p_entity_id
2799         , p_trx_curr_code   => p_trx_curr_code
2800         , x_limit_curr_code => x_limit_curr_code
2801         , x_trx_limit       => x_trx_limit
2802         , x_overall_limit   => x_overall_limit
2803         , x_return_status   => l_return_status
2804         );
2805 
2806         IF G_debug_flag = 'Y'
2807         THEN
2808          OE_DEBUG_PUB.ADD(' Out NOCOPY GET_Single_Customer_Limit '
2809                      || l_return_status );
2810          OE_DEBUG_PUB.ADD(' x_limit_curr_code = '
2811                  || x_limit_curr_code );
2812          OE_DEBUG_PUB.ADD(' x_trx_limit = '|| x_trx_limit );
2813          OE_DEBUG_PUB.ADD(' x_overall_limit = '|| x_overall_limit );
2814         END IF;
2815 
2816         x_cust_cc_flag := l_return_status; -- bug 4582292
2817 
2818           IF     l_return_status = 'Y'
2819               AND x_trx_limit is NULL
2820               AND x_overall_limit is NULL
2821           THEN
2822             l_return_status   := 'N' ;
2823             x_limit_curr_code := NULL ;
2824             x_global_exposure_flag := 'N' ;
2825           END IF;
2826       END IF;
2827 
2828 
2829 ------------------------- Site level -------------------------
2830 
2831     ELSIF P_entity_Type = 'SITE'
2832     THEN
2833       x_global_exposure_flag := 'N' ;
2834 
2835       IF G_debug_flag = 'Y'
2836       THEN
2837         OE_DEBUG_PUB.ADD(' Call GET_multi_site_Limit ');
2838       END IF;
2839 
2840       GET_multi_site_Limit
2841       ( p_entity_id       => p_entity_id
2842       , p_trx_curr_code   => p_trx_curr_code
2843       , x_limit_curr_code => x_limit_curr_code
2844       , x_trx_limit       => x_trx_limit
2845       , x_overall_limit   => x_overall_limit
2846       , x_return_status   => l_return_status
2847       );
2848 
2849       IF G_debug_flag = 'Y'
2850       THEN
2851          OE_DEBUG_PUB.ADD(' Out NOCOPY GET_multi_site_Limit '|| l_return_status );
2852          OE_DEBUG_PUB.ADD(' x_limit_curr_code = '|| x_limit_curr_code );
2853          OE_DEBUG_PUB.ADD(' x_trx_limit = '|| x_trx_limit );
2854          OE_DEBUG_PUB.ADD(' x_overall_limit = '|| x_overall_limit );
2855       END IF;
2856 
2857     x_site_cc_flag := l_return_status;  --bug 4212981
2858     -- BUG 4158439
2859     -- roll up to next level if limits are NULL
2860 
2861       IF     l_return_status = 'Y'
2862          AND x_trx_limit is NULL
2863          AND x_overall_limit is NULL
2864       THEN
2865         l_return_status   := 'N' ;
2866         x_limit_curr_code := NULL ;
2867 
2868         OE_DEBUG_PUB.ADD(' Limits NULL for site MULTI ');
2869 
2870       END IF;
2871 
2872       IF NVL(l_return_status, 'N') = 'N'  --bug 4582292
2873       THEN
2874         GET_Single_Site_Limit
2875         ( p_entity_id       => p_entity_id
2876         , p_trx_curr_code   => p_trx_curr_code
2877         , x_limit_curr_code => x_limit_curr_code
2878         , x_trx_limit       => x_trx_limit
2879         , x_overall_limit   => x_overall_limit
2880         , x_return_status   => l_return_status
2881         );
2882 
2883         IF G_debug_flag = 'Y'
2884         THEN
2885           OE_DEBUG_PUB.ADD(' Out NOCOPY GET_Single_Site_Limit '|| l_return_status );
2886           OE_DEBUG_PUB.ADD(' x_limit_curr_code = '|| x_limit_curr_code );
2887           OE_DEBUG_PUB.ADD(' x_trx_limit = '|| x_trx_limit );
2888           OE_DEBUG_PUB.ADD(' x_overall_limit = '|| x_overall_limit );
2889         END IF;
2890 
2891         x_site_cc_flag := l_return_status; --bug 4212981
2892 
2893           -- BUG 4158439
2894           IF     l_return_status = 'Y'
2895               AND x_trx_limit is NULL
2896               AND x_overall_limit is NULL
2897           THEN
2898             l_return_status   := 'N' ;
2899             x_limit_curr_code := NULL ;
2900             OE_DEBUG_PUB.ADD(' Limits NULL for site SINGLE ');
2901           END IF;
2902 
2903       END IF;
2904 
2905     ELSE
2906       NULL;
2907     END IF;
2908 
2909     IF G_debug_flag = 'Y'
2910     THEN
2911       OE_DEBUG_PUB.ADD('OEXUCRCB: OUT NOCOPY Get_Multi_Limit ');
2912     END IF;
2913 
2914   EXCEPTION
2915   WHEN OTHERS THEN
2916    G_DBG_MSG := SUBSTR(sqlerrm,1,200);
2917 
2918     IF FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
2919     THEN
2920       FND_MSG_PUB.Add_Exc_Msg
2921       ( G_PKG_NAME
2922       , ' Get_Multi_Limit '
2923       );
2924     END IF;
2925     RAISE;
2926 
2927 
2928 END Get_Multi_Limit ;
2929 
2930 
2931 
2932 -----------------------------------------------------------------------------
2933 --  PROCEDURE  : Get_SIngle_Limit    PRIVATE
2934 --  COMMENT    : Returns the Limit for the SINGLE profile
2935 --
2936 ---------------------------------------------------------------------------
2937 PROCEDURE Get_SIngle_Limit (
2938    p_entity_type                 IN  VARCHAR2
2939  , p_entity_id                   IN  NUMBER
2940  , p_trx_curr_code               IN
2941                            HZ_CREDIT_PROFILE_AMTS.currency_code%TYPE
2942  , x_limit_curr_code             OUT NOCOPY
2943                            HZ_CREDIT_PROFILE_AMTS.currency_code%TYPE
2944  , x_trx_limit                   OUT NOCOPY NUMBER
2945  , x_overall_limit               OUT NOCOPY NUMBER
2946  , x_default_limit_flag          OUT NOCOPY VARCHAR2
2947 )
2948 IS
2949 
2950 l_return_status    VARCHAR2(1);
2951 
2952 BEGIN
2953 
2954   IF G_debug_flag = 'Y'
2955   THEN
2956     OE_DEBUG_PUB.ADD('OEXUCRCB: IN Get_SIngle_Limit ');
2957   END IF;
2958 
2959     IF P_entity_Type = 'CUSTOMER'
2960     THEN
2961       GET_Single_Customer_Limit
2962       ( p_entity_id       => p_entity_id
2963       , p_trx_curr_code   => p_trx_curr_code
2964       , x_limit_curr_code => x_limit_curr_code
2965       , x_trx_limit       => x_trx_limit
2966       , x_overall_limit   => x_overall_limit
2967       , x_return_status   => l_return_status
2968       );
2969 
2970       IF l_return_status = 'N'
2971       THEN
2972         GET_single_default_Limit
2973         ( p_entity_id       => p_entity_id
2974         , p_trx_curr_code   => p_trx_curr_code
2975         , x_limit_curr_code => x_limit_curr_code
2976         , x_trx_limit       => x_trx_limit
2977         , x_overall_limit   => x_overall_limit
2978         , x_return_status   => x_default_limit_flag
2979         );
2980 
2981       ELSE
2982        x_default_limit_flag  := 'N' ;
2983       END IF;
2984 
2985     ELSIF P_entity_Type = 'SITE'
2986     THEN
2987       GET_Single_Site_Limit
2988       ( p_entity_id       => p_entity_id
2989       , p_trx_curr_code   => p_trx_curr_code
2990       , x_limit_curr_code => x_limit_curr_code
2991       , x_trx_limit       => x_trx_limit
2992       , x_overall_limit   => x_overall_limit
2993       , x_return_status   => l_return_status
2994       );
2995 
2996      x_default_limit_flag  := 'N' ;
2997 
2998     ELSE
2999       NULL;
3000     END IF;
3001 
3002   IF G_debug_flag = 'Y'
3003   THEN
3004     OE_DEBUG_PUB.ADD('OEXUCRCB: OUT NOCOPY Get_SIngle_Limit ');
3005   END IF;
3006 
3007 
3008   EXCEPTION
3009   WHEN OTHERS THEN
3010    G_DBG_MSG := SUBSTR(sqlerrm,1,200);
3011 
3012     IF FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
3013     THEN
3014       FND_MSG_PUB.Add_Exc_Msg
3015       ( G_PKG_NAME
3016       , ' Get_SIngle_Limit '
3017       );
3018     END IF;
3019     RAISE;
3020 
3021 
3022 END Get_SIngle_Limit ;
3023 
3024 
3025 ------------------------------------------------------------------------------
3026 --  PROCEDURE  : Get_Usages     PUBLIC
3027 --  COMMENT    : Returns the Usages associated with a given
3028 --               profile amount currency
3029 --
3030 ------------------------------------------------------------------------------
3031 PROCEDURE Get_Usages (
3032   p_entity_type                 IN  VARCHAR2
3033 , p_entity_id                   IN  NUMBER
3034 , p_limit_curr_code             IN
3035                        HZ_CREDIT_PROFILE_AMTS.currency_code%TYPE
3036 , p_suppress_unused_usages_flag IN  VARCHAR2 := 'N'
3037 , p_default_limit_flag          IN  VARCHAR2 := 'N'
3038 , p_global_exposure_flag        IN  VARCHAR2 := 'N'
3039 , x_include_all_flag           OUT  NOCOPY VARCHAR2
3040 , x_usage_curr_tbl             OUT  NOCOPY OE_CREDIT_CHECK_UTIL.curr_tbl_type
3041 )
3042 IS
3043 
3044   l_count  NUMBER;
3045 
3046 --------------------------------------------------------
3047 --  This cursor identifies the usage rule sets for    --
3048 --  usages credit limit.                                     --
3049 --------------------------------------------------------
3050 
3051 CURSOR   party_rule_set_csr IS
3052   SELECT credit_usage_rule_set_id
3053   FROM   hz_credit_usages usg,
3054          hz_customer_profiles prf,
3055          hz_cust_profile_amts amt
3056   WHERE  usg.cust_acct_profile_amt_id   = amt.cust_acct_profile_amt_id
3057   AND    prf.cust_account_profile_id    = amt.cust_account_profile_id
3058   AND    amt.currency_code              = p_limit_curr_code
3059   AND    prf.cust_account_id            = -1
3060   AND    prf.site_use_id    IS NULL
3061   AND    prf.party_id                   = p_entity_id ;
3062 
3063 CURSOR   cust_rule_set_csr IS
3064   SELECT credit_usage_rule_set_id
3065   FROM   hz_credit_usages usg,
3066          hz_customer_profiles prf,
3067          hz_cust_profile_amts amt
3068   WHERE  usg.cust_acct_profile_amt_id   = amt.cust_acct_profile_amt_id
3069   AND    prf.cust_account_profile_id    = amt.cust_account_profile_id
3070   AND    amt.currency_code              = p_limit_curr_code
3071   AND    prf.cust_account_id            = p_entity_id
3072   AND    prf.site_use_id    IS NULL;
3073 
3074 CURSOR   site_rule_set_csr IS
3075   SELECT credit_usage_rule_set_id
3076   FROM   hz_credit_usages usg,
3077          hz_customer_profiles prf,
3078          hz_cust_profile_amts amt
3079   WHERE  usg.cust_acct_profile_amt_id   = amt.cust_acct_profile_amt_id
3080   AND    prf.cust_account_profile_id    = amt.cust_account_profile_id
3081   AND    amt.currency_code              = p_limit_curr_code
3082   AND    prf.site_use_id    = p_entity_id ;
3083 
3084 
3085 --------------------------------------------------------
3086 --  This cursor identifies the usage rule sets for    --
3087 --  Default credit limit.                                     --
3088 --------------------------------------------------------
3089 CURSOR   dflt_rule_set_csr IS
3090   SELECT credit_usage_rule_set_id
3091   FROM   hz_credit_usages usg,
3092          hz_credit_profiles prf,
3093          hz_credit_profile_amts amt
3094   WHERE  usg.credit_profile_amt_id      = amt.credit_profile_amt_id
3095   AND    prf.credit_profile_id          = amt.credit_profile_id
3096   AND    amt.currency_code              = p_limit_curr_code
3097   AND    prf.organization_id            = G_ORG_ID ;
3098 
3099 
3100 
3101 --------------------------------------------------------
3102 --  This cursor identifies if the include all flag    --
3103 --  is set for this usage rule set .                  --
3104 --------------------------------------------------------
3105 
3106 CURSOR   include_all_csr (c_credit_usage_rule_set_id IN NUMBER) IS
3107   SELECT 'X'
3108   FROM   hz_credit_usage_rules
3109   WHERE  credit_usage_rule_set_id = c_credit_usage_rule_set_id
3110   AND    usage_type = 'CURRENCY'
3111   AND    include_all_flag = 'Y';
3112 
3113 --------------------------------------------------------
3114 --  This cursor identifies all included usages        --
3115 --  for this usage rule set .                         --
3116 --------------------------------------------------------
3117 
3118 CURSOR   incl_curr_csr (c_credit_usage_rule_set_id IN NUMBER) IS
3119   SELECT user_code
3120   FROM   hz_credit_usage_rules cur
3121   WHERE  cur.credit_usage_rule_set_id = c_credit_usage_rule_set_id
3122   AND    cur.usage_type               = 'CURRENCY'
3123   AND    cur.user_code                IS NOT NULL
3124   AND    NVL(cur.exclude_flag,'N')    = 'N';
3125 
3126 --------------------------------------------------------
3127 --  This cursor identifies all excluded usages        --
3128 --  for this usage rule set .                         --
3129 --------------------------------------------------------
3130 
3131 CURSOR   excl_curr_csr (c_credit_usage_rule_set_id IN NUMBER) IS
3132   SELECT user_code
3133   FROM   hz_credit_usage_rules cur
3134   WHERE  cur.credit_usage_rule_set_id = c_credit_usage_rule_set_id
3135   AND    cur.usage_type               = 'CURRENCY'
3136   AND    cur.user_code                IS NOT NULL
3137   AND    cur.exclude_flag         = 'Y';
3138 
3139 --------------------------------------------------------
3140 --  This cursor identifies all currencies in which    --
3141 --  transactions are available for this entity        --
3142 --------------------------------------------------------
3143 --- BUG 2352020
3144 -- Bug 2417717 AR relationshops
3145 
3146 CURSOR   trx_curr_csr_customer IS
3147   SELECT soh.transactional_curr_code user_code
3148   FROM   oe_order_headers    soh
3149      ,   hz_cust_acct_sites_all  cas
3150      ,   hz_cust_site_uses_all   su
3151   WHERE  soh.org_id            = su.org_id
3152     AND  soh.invoice_to_org_id = su.site_use_id
3153     AND  cas.cust_acct_site_id = su.cust_acct_site_id
3154     AND  cas.cust_account_id   = p_entity_id
3155   GROUP  BY transactional_curr_code
3156   UNION
3157   SELECT pay.invoice_currency_code user_code
3158   FROM   ar_payment_schedules pay
3159      ,   hz_cust_acct_sites_all  cas
3160      ,   hz_cust_site_uses_all   su
3161   WHERE  pay.org_id               = su.org_id
3162     AND  pay.customer_site_use_id = su.site_use_id
3163     AND  cas.cust_acct_site_id = su.cust_acct_site_id
3164     AND  cas.cust_account_id   = p_entity_id
3165   GROUP  BY invoice_currency_code
3166   UNION
3167   SELECT exs.currency_code
3168   FROM   oe_credit_summaries exs
3169   WHERE  exs.balance_type     = 18
3170    AND   exs.cust_account_id  = p_entity_id
3171    AND   NVL(exs.org_id,-99)  = G_ORG_ID;              /* MOAC_SQL_CHANGE */
3172 
3173 
3174 
3175 CURSOR   trx_curr_csr_customer_global IS
3176   SELECT soh.transactional_curr_code user_code
3177   FROM   oe_order_headers_ALL     soh
3178     ,   hz_cust_acct_sites_ALL  cas
3179      ,   hz_cust_site_uses_ALL   su
3180   WHERE  soh.invoice_to_org_id = su.site_use_id
3181     AND  cas.cust_acct_site_id = su.cust_acct_site_id
3182     AND  cas.cust_account_id   = p_entity_id
3183   GROUP  BY transactional_curr_code
3184   UNION
3185   SELECT pay.invoice_currency_code user_code
3186   FROM   ar_payment_schedules_ALL pay
3187     ,   hz_cust_acct_sites_ALL  cas
3188      ,   hz_cust_site_uses_ALL   su
3189   WHERE  pay.customer_site_use_id = su.site_use_id
3190     AND  cas.cust_acct_site_id = su.cust_acct_site_id
3191     AND  cas.cust_account_id   = p_entity_id
3192   GROUP  BY invoice_currency_code
3193   UNION
3194   SELECT exs.currency_code
3195   FROM   oe_credit_summaries exs
3196   WHERE  exs.balance_type     = 18
3197    AND   exs.cust_account_id  = p_entity_id ;
3198 
3199 
3200 
3201 CURSOR   trx_curr_csr_site IS
3202   SELECT soh.transactional_curr_code user_code
3203   FROM   oe_order_headers     soh
3204   WHERE  soh.invoice_to_org_id = p_entity_id
3205   GROUP  BY transactional_curr_code
3206   UNION
3207   SELECT pay.invoice_currency_code user_code
3208   FROM   ar_payment_schedules pay
3209   WHERE  pay.customer_site_use_id = p_entity_id
3210   GROUP  BY invoice_currency_code
3211   UNION
3212   SELECT exs.currency_code
3213   FROM   oe_credit_summaries exs
3214   WHERE  balance_type  = 18
3215    AND   site_use_id   = p_entity_id ;
3216 
3217 
3218 
3219 
3220   CURSOR C_g_use_party_hierarchy IS
3221   SELECT
3222     'Y'
3223    FROM
3224     hz_hierarchy_nodes hn
3225    WHERE  hn.parent_id                     = p_entity_id
3226   AND     hn.parent_object_type           = 'ORGANIZATION'
3227   and     hn.parent_table_name            = 'HZ_PARTIES'
3228   and     hn.child_object_type            = 'ORGANIZATION'
3229   and     hn.effective_start_date  <=  sysdatE
3230   and     hn.effective_end_date    >= SYSDATE
3231   and     hn.hierarchy_type
3232                 = OE_CREDIT_CHECK_UTIL.G_hierarchy_type ;
3233 
3234   CURSOR party_txn_cur IS
3235   SELECT distinct ( currency_code)   user_code
3236   FROM   oe_credit_summaries
3237   WHERE  party_id  =  p_entity_id
3238     AND  bucket_duration     = OE_CREDIT_EXPOSURE_PVT.G_MAX_BUCKET_LENGTH ;
3239 
3240 
3241  CURSOR party_h_txn_cur IS
3242   SELECT distinct ( oes.currency_code) user_code
3243   FROM   oe_credit_summaries oes
3244      ,   hz_hierarchy_nodes hn
3245   WHERE  hn.parent_id                    = p_entity_id
3246   AND  hn.parent_object_type           = 'ORGANIZATION'
3247   and  hn.parent_table_name            = 'HZ_PARTIES'
3248   and  hn.child_object_type            = 'ORGANIZATION'
3249   and  hn.effective_start_date  <=  sysdate
3250   and  hn.effective_end_date    >= SYSDATE
3251   and  hn.hierarchy_type
3252                 = OE_CREDIT_CHECK_UTIL.G_hierarchy_type
3253   AND  oes.party_id                        =  hn.child_id
3254   AND  oes.bucket_duration     = OE_CREDIT_EXPOSURE_PVT.G_MAX_BUCKET_LENGTH ;
3255 
3256 
3257 include_all_rec         include_all_csr%rowtype;
3258 l_credit_limit_exist    VARCHAR2(1) ;
3259 
3260 
3261 l_limit_flag           VARCHAR2(1) := 'N';
3262 i                      NUMBER := 0;
3263 j                      NUMBER := 1;
3264 l_return_status        NUMBER;
3265 l_credit_check_flag    VARCHAR2(2);
3266 l_overall_limit        NUMBER;
3267 l_trx_limit            NUMBER;
3268 
3269 l_arrsize              NUMBER;
3270 
3271 l_incl_curr_list       VARCHAR2(2000);
3272 l_excl_curr_list       VARCHAR2(2000);
3273 l_trx_curr_list        VARCHAR2(2000);
3274 l_seperator            VARCHAR2(1) := '#';
3275 l_currency             VARCHAR2(10);
3276 
3277 l_start                NUMBER := 1;
3278 l_end                  NUMBER := 1;
3279 
3280 l_exclude_flag         VARCHAR2(1) := 'N' ;
3281 l_use_party_hierarchy  VARCHAR2(1) ;
3282 
3283 l_include_all_flag     VARCHAR2(1) := 'N' ;
3284 
3285 BEGIN
3286 
3287   IF G_debug_flag = 'Y'
3288   THEN
3289     OE_DEBUG_PUB.ADD('OEXUCRCB: IN get_usages ');
3290     OE_DEBUG_PUB.ADD(' p_entity_type     = '|| p_entity_type );
3291     OE_DEBUG_PUB.ADD(' p_entity_id       = '|| p_entity_id   );
3292     OE_DEBUG_PUB.ADD(' p_limit_curr_code = '|| p_limit_curr_code );
3293     OE_DEBUG_PUB.ADD(' p_suppress_unused_usages_flag = '||
3294          p_suppress_unused_usages_flag );
3295     OE_DEBUG_PUB.ADD(' p_global_exposure_flag '||
3296              p_global_exposure_flag );
3297 
3298     OE_DEBUG_PUB.ADD(' ---------------------------------------------- ');
3299 
3300   END IF;
3301 
3302   OE_CREDIT_CHECK_UTIL.G_excl_curr_list := NULL ;
3303   l_exclude_flag := 'N' ;
3304 
3305   IF G_debug_flag = 'Y'
3306   THEN
3307     OE_DEBUG_PUB.ADD(' Credit Limit found ');
3308   END IF;
3309 
3310   ---------------------------------------------------
3311   -- First get all usage rule sets for this limit  --
3312   ---------------------------------------------------
3313 
3314   IF NVL(p_default_limit_flag,'N')  = 'N'
3315   THEN
3316     IF G_debug_flag = 'Y'
3317     THEN
3318       OE_DEBUG_PUB.ADD(' Into Default limit = N ');
3319     END IF;
3320 
3321     IF p_entity_type = 'PARTY'
3322     THEN
3323       FOR rule_set_rec IN party_rule_set_csr
3324       LOOP
3325         OPEN include_all_csr
3326           (rule_set_rec.credit_usage_rule_set_id);
3327 
3328         FETCH include_all_csr
3329         INTO  include_all_rec;
3330 
3331         IF include_all_csr%FOUND
3332         THEN
3333           l_include_all_flag := 'Y';
3334         ELSE
3335           l_include_all_flag := 'N';
3336         END IF;
3337 
3338         CLOSE include_all_csr;
3339 
3340         --------------------------------------------------------
3341         -- identify the included currencies for each rule set --
3342         --------------------------------------------------------
3343           FOR incl_curr_rec
3344           IN  incl_curr_csr
3345               (rule_set_rec.credit_usage_rule_set_id)
3346           LOOP
3347             l_incl_curr_list :=
3348             l_incl_curr_list || l_seperator || incl_curr_rec.user_code;
3349           END LOOP;
3350 
3351         --------------------------------------------------------
3352         -- identify the excluded currencies for each rule set --
3353         --------------------------------------------------------
3354 
3355         FOR excl_curr_rec
3356         IN  excl_curr_csr
3357               (rule_set_rec.credit_usage_rule_set_id)
3358         LOOP
3359             l_excl_curr_list :=
3360             l_excl_curr_list || l_seperator || excl_curr_rec.user_code;
3361             l_exclude_flag := 'Y' ;
3362         END LOOP;
3363       END LOOP;
3364     ELSIF p_entity_type = 'CUSTOMER'
3365     THEN
3366       FOR rule_set_rec IN cust_rule_set_csr
3367       LOOP
3368           OPEN include_all_csr
3369              (rule_set_rec.credit_usage_rule_set_id);
3370 
3371           FETCH include_all_csr
3372           INTO  include_all_rec;
3373 
3374           IF include_all_csr%FOUND
3375           THEN
3376             l_include_all_flag := 'Y';
3377           ELSE
3378             l_include_all_flag := 'N';
3379           END IF;
3380 
3381           CLOSE include_all_csr;
3382 
3383         --------------------------------------------------------
3384         -- identify the included currencies for each rule set --
3385         --------------------------------------------------------
3386           FOR incl_curr_rec
3387           IN  incl_curr_csr
3388               (rule_set_rec.credit_usage_rule_set_id)
3389           LOOP
3390             l_incl_curr_list :=
3391             l_incl_curr_list || l_seperator || incl_curr_rec.user_code;
3392           END LOOP;
3393 
3394         --------------------------------------------------------
3395         -- identify the excluded currencies for each rule set --
3396         --------------------------------------------------------
3397 
3398           FOR excl_curr_rec
3399           IN  excl_curr_csr
3400                 (rule_set_rec.credit_usage_rule_set_id)
3401           LOOP
3402             l_excl_curr_list :=
3403             l_excl_curr_list || l_seperator || excl_curr_rec.user_code;
3404             l_exclude_flag := 'Y' ;
3405           END LOOP;
3406       END LOOP;
3407       -- End rule_set_rec
3408 
3409     ELSE   --- SITE level
3410       FOR rule_set_rec IN site_rule_set_csr
3411       LOOP
3412           OPEN include_all_csr
3413              (rule_set_rec.credit_usage_rule_set_id);
3414 
3415           FETCH include_all_csr
3416           INTO  include_all_rec;
3417 
3418           IF include_all_csr%FOUND
3419           THEN
3420             l_include_all_flag := 'Y';
3421           ELSE
3422             l_include_all_flag := 'N';
3423           END IF;
3424           CLOSE include_all_csr;
3425 
3426         --------------------------------------------------------
3427         -- identify the included currencies for each rule set --
3428         --------------------------------------------------------
3429           FOR incl_curr_rec
3430           IN  incl_curr_csr
3431             (rule_set_rec.credit_usage_rule_set_id)
3432           LOOP
3433             l_incl_curr_list :=
3434             l_incl_curr_list || l_seperator || incl_curr_rec.user_code;
3435           END LOOP;
3436 
3437         --------------------------------------------------------
3438         -- identify the excluded currencies for each rule set --
3439         --------------------------------------------------------
3440 
3441           FOR excl_curr_rec
3442           IN  excl_curr_csr
3443               (rule_set_rec.credit_usage_rule_set_id)
3444           LOOP
3445             l_excl_curr_list :=
3446             l_excl_curr_list || l_seperator || excl_curr_rec.user_code;
3447             l_exclude_flag := 'Y' ;
3448           END LOOP;
3449 
3450       END LOOP;
3451       -- End rule_set_rec
3452     END IF;
3453     -- end entity type IF
3454 
3455   ELSE
3456     -- Default limit = 'Y'
3457 
3458     IF G_debug_flag = 'Y'
3459     THEN
3460         OE_DEBUG_PUB.ADD(' Into Default limit = Y ');
3461     END IF ;
3462 
3463     FOR rule_set_rec IN dflt_rule_set_csr
3464     LOOP
3465         OPEN include_all_csr
3466              (rule_set_rec.credit_usage_rule_set_id);
3467 
3468         FETCH include_all_csr
3469         INTO  include_all_rec;
3470 
3471         IF include_all_csr%FOUND
3472         THEN
3473           l_include_all_flag := 'Y';
3474         ELSE
3475           l_include_all_flag := 'N';
3476         END IF;
3477 
3478         CLOSE include_all_csr;
3479 
3480       --------------------------------------------------------
3481       -- identify the included currencies for each rule set --
3482       --------------------------------------------------------
3483 
3484       FOR incl_curr_rec
3485       IN  incl_curr_csr
3486               (rule_set_rec.credit_usage_rule_set_id)
3487       LOOP
3488           l_incl_curr_list :=
3489 	  l_incl_curr_list || l_seperator || incl_curr_rec.user_code;
3490       END LOOP;
3491 
3492       --------------------------------------------------------
3493       -- identify the excluded currencies for each rule set --
3494       --------------------------------------------------------
3495 
3496       FOR excl_curr_rec
3497       IN  excl_curr_csr
3498               (rule_set_rec.credit_usage_rule_set_id)
3499       LOOP
3500           l_excl_curr_list :=
3501 	  l_excl_curr_list || l_seperator || excl_curr_rec.user_code;
3502           l_exclude_flag := 'Y' ;
3503       END LOOP;
3504     END LOOP;
3505       -- End dflt_rule_set_csr
3506   END IF;
3507   -- End default flag IF
3508 
3509   OE_CREDIT_CHECK_UTIL.G_excl_curr_list := l_excl_curr_list ;
3510 
3511   IF G_debug_flag = 'Y'
3512   THEN
3513     OE_DEBUG_PUB.ADD(' G_excl_curr_list => '||
3514     OE_CREDIT_CHECK_UTIL.G_excl_curr_list );
3515   END IF;
3516 -----------------------------------------------------------
3517   ---------------------------------------------
3518   -- identify all the transaction currencies
3519   --  This is required if we need to eliminate the
3520   -- currencies that were never used for any Orders
3521   -- or if Include all is set to Yes, as we need to
3522   -- find out NOCOPY the actual currencies
3523   ---------------------------------------------
3524 
3525   -- p_suppress_unused_usages_flag is used in conjunction
3526   -- with the l_include_all_flag
3527   -- The purpose of this flag is to get the transaction curr
3528   -- list even if the INCLUDE_ALL currency is set to Y
3529   -- For pre-calculated exposure, the include all flag alone
3530   -- is enough. But for online exposure calc, the transaction curr
3531   -- list is crucial even if include all currency is set to Y
3532   -- The reason being, the exposure calculation must know
3533   -- what currencies actualy have transactions against to avoid
3534   -- scanning the order tables for all currencies
3535 
3536   l_use_party_hierarchy := 'N' ;
3537   IF l_include_all_flag = 'Y' AND p_suppress_unused_usages_flag = 'Y'
3538   THEN
3539     IF p_entity_type = 'PARTY'
3540     THEN
3541       OPEN C_g_use_party_hierarchy ;
3542       FETCH C_g_use_party_hierarchy
3543       INTO l_use_party_hierarchy ;
3544       CLOSE C_g_use_party_hierarchy ;
3545 
3546       IF l_use_party_hierarchy = 'Y'
3547       THEN
3548         FOR trx_curr_rec
3549           IN party_h_txn_cur
3550         LOOP
3551           l_trx_curr_list :=
3552           l_trx_curr_list || l_seperator || trx_curr_rec.user_code;
3553         END LOOP;
3554       ELSE
3555         FOR trx_curr_rec
3556         IN party_txn_cur
3557         LOOP
3558           l_trx_curr_list :=
3559           l_trx_curr_list || l_seperator || trx_curr_rec.user_code;
3560         END LOOP;
3561       END IF; --- global
3562     END IF;
3563 
3564     IF p_entity_type = 'CUSTOMER'
3565     THEN
3566       IF p_global_exposure_flag = 'Y'
3567       THEN
3568           FOR trx_curr_rec
3569             IN trx_curr_csr_customer_global
3570           LOOP
3571             l_trx_curr_list :=
3572             l_trx_curr_list || l_seperator || trx_curr_rec.user_code;
3573           END LOOP;
3574       ELSE
3575           FOR trx_curr_rec
3576           IN trx_curr_csr_customer
3577           LOOP
3578             l_trx_curr_list :=
3579             l_trx_curr_list || l_seperator || trx_curr_rec.user_code;
3580           END LOOP;
3581       END IF; --- global
3582     END IF;
3583 
3584     IF p_entity_type = 'SITE'
3585     THEN
3586         FOR trx_curr_rec
3587         IN trx_curr_csr_site
3588         LOOP
3589           l_trx_curr_list :=
3590             l_trx_curr_list || l_seperator || trx_curr_rec.user_code;
3591         END LOOP;
3592     END IF;
3593 
3594   END IF;
3595     -- end l_include_all_flag, p_suppress IF
3596 
3597 
3598 ----------------- Start creating the usages curr table list ------
3599 
3600     IF p_suppress_unused_usages_flag = 'Y'
3601        AND l_include_all_flag = 'Y'
3602     THEN
3603 
3604       IF G_debug_flag = 'Y'
3605       THEN
3606         OE_DEBUG_PUB.ADD(' into suppress = Y ');
3607       END IF;
3608 
3609       -------------------------------------------------------
3610       -- include only the intersection of incl currencies  --
3611       -- and transaction currencies                        --
3612       -------------------------------------------------------
3613       l_start := 1;
3614       l_end   := 1;
3615 
3616       LOOP
3617         l_start := INSTRB (l_trx_curr_list,l_seperator,l_end,1);
3618         l_end   := INSTRB (l_trx_curr_list,l_seperator,l_start+1,1);
3619 
3620         IF NVL(l_start,0) = 0
3621         THEN
3622           -- List completed
3623           EXIT;
3624         END IF;
3625 
3626         IF NVL(l_end,0) = 0
3627         THEN
3628           l_end := LENGTHB (l_trx_curr_list) + 1;
3629         END IF;
3630 
3631         l_currency := SUBSTRB ( l_trx_curr_list
3632 			    , ( l_start + 1 )
3633 			    , ( l_end - l_start - 1 )
3634 			    );
3635         IF  NVL(INSTRB (l_incl_curr_list,l_currency,1,1),0) <> 0
3636           AND NVL(INSTRB (l_excl_curr_list,l_currency,1,1),0) = 0
3637         THEN
3638           i := i + 1;
3639           x_usage_curr_tbl(i).usage_curr_code := l_currency;
3640 
3641           IF l_currency = p_limit_curr_code
3642           THEN
3643             l_limit_flag := 'Y';
3644           END IF;
3645         END IF;
3646       END LOOP;
3647 
3648     ELSE
3649       IF G_debug_flag = 'Y'
3650       THEN
3651         OE_DEBUG_PUB.ADD(' into suppress = N ');
3652       END IF;
3653 
3654       -------------------------------------------------------
3655       -- first include all incl currencies (minus excl)    --
3656       -------------------------------------------------------
3657       l_start := 1;
3658       l_end   := 1;
3659 
3660       LOOP
3661         l_start := INSTRB (l_incl_curr_list,l_seperator,l_end,1);
3662         l_end   := INSTRB (l_incl_curr_list,l_seperator,l_start+1,1);
3663 
3664         IF NVL(l_start,0) = 0
3665         THEN
3666           EXIT;
3667         END IF;
3668 
3669         IF NVL(l_end,0) = 0
3670         THEN
3671           l_end := LENGTHB (l_incl_curr_list) + 1;
3672         END IF;
3673 
3674         l_currency := SUBSTRB ( l_incl_curr_list
3675                             , ( l_start + 1 )
3676   			    , ( l_end - l_start - 1 )
3677 			    );
3678 
3679         IF NVL(INSTRB (l_excl_curr_list,l_currency,1,1),0) = 0
3680         THEN
3681           i := i + 1;
3682           x_usage_curr_tbl(i).usage_curr_code := l_currency;
3683 
3684           IF l_currency = p_limit_curr_code
3685           THEN
3686             l_limit_flag := 'Y';
3687           END IF;
3688         END IF;
3689       END LOOP;
3690     END IF;
3691     -- end suppress flag IF
3692 
3693     IF l_include_all_flag = 'Y'
3694     THEN
3695       --------------------------------------------------------------
3696       -- include all trx currencies that are not already included --
3697       --------------------------------------------------------------
3698       l_start := 1;
3699       l_end   := 1;
3700 
3701       LOOP
3702         l_start := INSTRB (l_trx_curr_list,l_seperator,l_end,1);
3703         l_end   := INSTRB ( l_trx_curr_list ,l_seperator,l_start+1,1);
3704 
3705         IF NVL(l_start,0) = 0
3706         THEN
3707           EXIT;
3708         END IF;
3709 
3710         IF NVL(l_end,0) = 0
3711         THEN
3712           l_end := LENGTHB (l_trx_curr_list) + 1;
3713         END IF;
3714 
3715         l_currency := SUBSTRB ( l_trx_curr_list
3716 			      , ( l_start + 1 )
3717 			      , ( l_end - l_start - 1 )
3718 			      );
3719         IF NVL(INSTRB (l_incl_curr_list,l_currency,1,1),0) = 0
3720           AND NVL(INSTRB (l_excl_curr_list,l_currency,1,1),0) = 0
3721         THEN
3722           i := i + 1;
3723           x_usage_curr_tbl(i).usage_curr_code := l_currency;
3724 
3725           IF l_currency = p_limit_curr_code
3726           THEN
3727             l_limit_flag := 'Y';
3728           END IF;
3729         END IF;
3730       END LOOP;
3731 
3732     END IF;
3733     -- end l_include_all_flag IF
3734 
3735   -------------------------------------
3736   -- if the limit currency code is   --
3737   -- not already included, do it now --
3738   -------------------------------------
3739   IF l_limit_flag = 'N'
3740   THEN
3741     i := NVL(i,0) + 1;
3742     x_usage_curr_tbl(i).usage_curr_code := p_limit_curr_code;
3743   END IF;
3744 
3745   IF l_exclude_flag = 'Y'
3746   THEN
3747     IF p_suppress_unused_usages_flag = 'Y' THEN
3748       l_include_all_flag := 'N' ;
3749     END IF;
3750   END IF;
3751 
3752   x_include_all_flag := l_include_all_flag;
3753 
3754   IF G_debug_flag = 'Y'
3755   THEN
3756    OE_DEBUG_PUB.ADD('OEXUCRCB: OUT get_usages ');
3757   END IF;
3758 
3759 EXCEPTION
3760   WHEN OTHERS THEN
3761    G_DBG_MSG := SUBSTR(sqlerrm,1,200);
3762 
3763     IF FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
3764     THEN
3765       FND_MSG_PUB.Add_Exc_Msg
3766       ( G_PKG_NAME
3767       , 'get_usages'
3768       );
3769     END IF;
3770     RAISE;
3771 
3772 END get_usages ;
3773 
3774 
3775 -----------------------------------------------------------------------------
3776 --  PROCEDURE: GET_System_parameters           PUBLIC
3777 --  COMMENT    : Returns the OE system parameter info for the current org
3778 --  MODIFICATION:
3779 --  02/12/2002 vto Added NVL on org_id to handle multi-org/non multi-org setup
3780 ------------------------------------------------------------------------------
3781 PROCEDURE GET_System_parameters
3782 ( x_system_parameter_rec OUT NOCOPY
3783              OE_CREDIT_CHECK_UTIL.OE_systems_param_rec_type
3784 )
3785 IS
3786 BEGIN
3787   IF G_debug_flag = 'Y'
3788   THEN
3789     OE_DEBUG_PUB.ADD('OEXUCRCB: IN GET_System_parameters');
3790   END IF;
3791 
3792 --  BEGIN   /* MOAC CREDIT CHECK CHANGE */
3793   -- Start Sys Param Change
3794   /*
3795     SELECT
3796       org_id
3797     , master_organization_id
3798     , customer_relationships_flag
3799     INTO
3800       x_system_parameter_rec.org_id
3801     , x_system_parameter_rec.master_organization_id
3802     , x_system_parameter_rec.customer_relationships_flag
3803   FROM
3804     OE_system_parameters_all
3805   WHERE NVL(org_id,-99) = G_ORG_ID;
3806   */
3807 
3808   /* Start MOAC CREDIT CHECK CHANGE */
3809   /*
3810   x_system_parameter_rec.org_id := G_ORG_ID;
3811   x_system_parameter_rec.master_organization_id
3812                  := oe_sys_parameters.value('MASTER_ORGANIZATION_ID', G_ORG_ID);
3813   x_system_parameter_rec.customer_relationships_flag
3814                  :=oe_sys_parameters.value('CUSTOMER_RELATIONSHIPS_FLAG', G_ORG_ID);
3815   -- End Sys Param Change
3816 
3817     EXCEPTION
3818     WHEN NO_DATA_FOUND
3819     THEN
3820       x_system_parameter_rec := NULL ;
3821       OE_DEBUG_PUB.ADD(' Exception Get Syetem parameters');
3822   END ;
3823   */
3824   /* End MOAC CREDIT CHECK CHANGE */
3825 
3826   IF G_debug_flag = 'Y'
3827   THEN
3828     OE_DEBUG_PUB.ADD('OEXUCRCB: OUT GET_System_parameters');
3829   END IF;
3830  EXCEPTION
3831   WHEN OTHERS THEN
3832    G_DBG_MSG := SUBSTR(sqlerrm,1,200);
3833 
3834     IF FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
3835     THEN
3836       FND_MSG_PUB.Add_Exc_Msg
3837       ( G_PKG_NAME
3838       , 'GET_System_parameters'
3839       );
3840     END IF;
3841     RAISE;
3842 
3843 END GET_System_parameters ;
3844 
3845 ---------------------------------------------------------------------------
3846 --PROCEDURE: Get_Credit_Check_Rule_ID
3847 --COMMENT:   Returns the credit check rule id attached with
3848 --          the order trn type
3849 ---------------------------------------------------------------------------
3850 PROCEDURE Get_Credit_Check_Rule_ID
3851 ( p_calling_action       IN VARCHAR2
3852 , p_order_type_id        IN OE_ORDER_HEADERS.order_type_id%TYPE
3853 , x_credit_rule_id      OUT NOCOPY
3854                             OE_Credit_check_rules.credit_check_rule_id%TYPE
3855 )
3856 IS
3857 BEGIN
3858   IF G_debug_flag = 'Y'
3859   THEN
3860     OE_DEBUG_PUB.ADD('OEXUCRCB: In Get_Credit_Check_Rule_ID ');
3861     OE_DEBUG_PUB.ADD('p_order_type_id = '|| p_order_type_id );
3862     OE_DEBUG_PUB.ADD('p_calling_action = '|| p_calling_action );
3863   END IF;
3864 
3865   x_credit_rule_id := NULL ;
3866 
3867   IF p_calling_action in ('BOOKING','BOOKING_INLINE','AUTO','UPDATE')
3868   THEN
3869     IF G_debug_flag = 'Y'
3870     THEN
3871       OE_DEBUG_PUB.ADD('Selecting the order entry credit check rule');
3872     END IF;
3873 /*7194250
3874     SELECT ENTRY_CREDIT_CHECK_RULE_ID
3875     INTO   x_credit_rule_id
3876     FROM   OE_ORDER_TYPES_V
3877     WHERE  ORDER_TYPE_ID = p_order_type_id;
3878 7194250*/
3879 --7194250
3880     SELECT NVL(ENTRY_CREDIT_CHECK_RULE_ID, -1)
3881     INTO x_credit_rule_id
3882     FROM OE_ORDER_TYPES_V OT,OE_CREDIT_CHECK_RULES CCR
3883     WHERE OT.ORDER_TYPE_ID = p_order_type_id
3884     AND   ENTRY_CREDIT_CHECK_RULE_ID=CCR.CREDIT_CHECK_RULE_ID
3885     AND Trunc(SYSDATE) BETWEEN NVL(CCR.START_DATE_ACTIVE, Trunc(SYSDATE)) AND NVL(CCR.END_DATE_ACTIVE, Trunc(SYSDATE));
3886 --7194250
3887 
3888     OE_Verify_Payment_PUB.G_credit_check_rule := 'Ordering';   --ER#7479609
3889 
3890   ELSIF p_calling_action = 'SHIPPING'
3891    THEN
3892     IF G_debug_flag = 'Y'
3893     THEN
3894       OE_DEBUG_PUB.Add('Selecting the shipping credit check rule');
3895     END IF;
3896 
3897 /*7194250
3898     SELECT SHIPPING_CREDIT_CHECK_RULE_ID
3899     INTO   x_credit_rule_id
3900     FROM   OE_ORDER_TYPES_V
3901     WHERE  ORDER_TYPE_ID = p_order_type_id;
3902 7194250*/
3903 --7194250
3904     SELECT NVL(SHIPPING_CREDIT_CHECK_RULE_ID, -1)
3905     INTO x_credit_rule_id
3906     FROM OE_ORDER_TYPES_V OT,OE_CREDIT_CHECK_RULES CCR
3907     WHERE OT.ORDER_TYPE_ID = p_order_type_id
3908     AND   SHIPPING_CREDIT_CHECK_RULE_ID=CCR.CREDIT_CHECK_RULE_ID
3909     AND Trunc(SYSDATE) BETWEEN NVL(CCR.START_DATE_ACTIVE, Trunc(SYSDATE)) AND NVL(CCR.END_DATE_ACTIVE, Trunc(SYSDATE));
3910 --7194250
3911 
3912     OE_Verify_Payment_PUB.G_credit_check_rule := 'Shipping';   --ER#7479609
3913 
3914   ELSIF p_calling_action = 'PICKING'
3915   THEN
3916 
3917     IF G_debug_flag = 'Y'
3918     THEN
3919       OE_DEBUG_PUB.Add('Selecting the picking credit check rule');
3920     END IF;
3921 
3922 /*7194250
3923     SELECT PICKING_CREDIT_CHECK_RULE_ID
3924     INTO   x_credit_rule_id
3925     FROM   OE_ORDER_TYPES_V
3926     WHERE  ORDER_TYPE_ID = p_order_type_id;
3927 7194250*/
3928 --7194250
3929    SELECT NVL(PICKING_CREDIT_CHECK_RULE_ID, -1)
3930     INTO x_credit_rule_id
3931     FROM OE_ORDER_TYPES_V OT,OE_CREDIT_CHECK_RULES CCR
3932     WHERE OT.ORDER_TYPE_ID = p_order_type_id
3933     AND   PICKING_CREDIT_CHECK_RULE_ID=CCR.CREDIT_CHECK_RULE_ID
3934     AND Trunc(SYSDATE) BETWEEN NVL(CCR.START_DATE_ACTIVE, Trunc(SYSDATE)) AND NVL(CCR.END_DATE_ACTIVE, Trunc(SYSDATE));
3935 --7194250
3936 
3937     OE_Verify_Payment_PUB.G_credit_check_rule := 'Picking/Purchase Release';   --ER#7479609
3938 
3939   ELSIF p_calling_action = 'PACKING'
3940   THEN
3941     IF G_debug_flag = 'Y'
3942     THEN
3943       OE_DEBUG_PUB.Add('Selecting the packing credit check rule');
3944     END IF;
3945 
3946 /*7194250
3947     SELECT PACKING_CREDIT_CHECK_RULE_ID
3948     INTO   x_credit_rule_id
3949     FROM   OE_ORDER_TYPES_V
3950     WHERE  ORDER_TYPE_ID = p_order_type_id;
3951 7194250*/
3952 --7194250
3953     SELECT NVL(PACKING_CREDIT_CHECK_RULE_ID, -1)
3954     INTO x_credit_rule_id
3955     FROM OE_ORDER_TYPES_V OT,OE_CREDIT_CHECK_RULES CCR
3956     WHERE OT.ORDER_TYPE_ID = p_order_type_id
3957     AND   PACKING_CREDIT_CHECK_RULE_ID=CCR.CREDIT_CHECK_RULE_ID
3958     AND Trunc(SYSDATE) BETWEEN NVL(CCR.START_DATE_ACTIVE, Trunc(SYSDATE)) AND NVL(CCR.END_DATE_ACTIVE, Trunc(SYSDATE));
3959 --7194250
3960   END IF;
3961     OE_Verify_Payment_PUB.G_credit_check_rule := 'Packing';   --ER#7479609
3962 
3963   IF G_debug_flag = 'Y'
3964   THEN
3965 
3966     OE_DEBUG_PUB.ADD('OEXUCRCB: Credit Check Rule ID: '
3967        ||TO_CHAR(x_credit_rule_id) );
3968 
3969     OE_DEBUG_PUB.ADD('OEXUCRCB: Out NOCOPY Get_Credit_Check_Rule_ID');
3970   END IF;
3971 
3972 
3973 EXCEPTION
3974   WHEN NO_DATA_FOUND
3975   THEN
3976    x_credit_rule_id := NULL ;
3977    OE_DEBUG_PUB.ADD('EXCEPTION:No credit check rule found');
3978   WHEN OTHERS THEN
3979     IF OE_MSG_PUB.Check_Msg_Level(OE_MSG_PUB.G_MSG_LVL_UNEXP_ERROR) THEN
3980       OE_MSG_PUB.Add_Exc_Msg
3981       (   G_PKG_NAME
3982       ,   'Get_Credit_Check_Rule_ID'
3983       );
3984     END IF;
3985     RAISE ;
3986 END Get_Credit_Check_Rule_ID ;
3987 
3988 
3989 
3990 -----------------------------------------------------------------------------
3991 --  FUNCTION   : GET_credit_check_level
3992 --  COMMENT    : Returns ORDER or LINE
3993 --  BUG 2114156
3994 ------------------------------------------------------------------------------
3995 FUNCTION GET_credit_check_level
3996 ( p_calling_action     IN VARCHAR2
3997 , p_order_type_id      IN NUMBER
3998 ) RETURN VARCHAR2
3999 IS
4000 
4001 l_level VARCHAR2(30);
4002 l_credit_check_rule_id NUMBER;
4003 l_credit_check_rule_rec
4004         OE_CREDIT_CHECK_UTIL.OE_credit_rules_rec_type ;
4005 
4006 BEGIN
4007   IF G_debug_flag = 'Y'
4008   THEN
4009     OE_DEBUG_PUB.ADD('OEXUCRCB: IN GET_credit_check_level ');
4010     OE_DEBUG_PUB.ADD('p_calling_action = '|| p_calling_action );
4011     OE_DEBUG_PUB.ADD('p_order_type_id = '|| p_order_type_id );
4012   END IF;
4013 
4014   l_level := NULL ;
4015   l_credit_check_rule_id := NULL ;
4016 
4017   IF G_debug_flag = 'Y'
4018   THEN
4019     OE_DEBUG_PUB.ADD('  Calling Get_Credit_Check_Rule_ID ');
4020   END IF;
4021 
4022   OE_Credit_CHECK_UTIL.Get_Credit_Check_Rule_ID
4023   ( p_calling_action        => p_calling_action
4024   , p_order_type_id         => p_order_type_id
4025   , x_credit_rule_id        => l_credit_check_rule_id
4026   );
4027 
4028   IF G_debug_flag = 'Y'
4029   THEN
4030     OE_DEBUG_PUB.ADD(' out NOCOPY l_credit_check_rule_id = '||
4031        l_credit_check_rule_id );
4032   END IF;
4033 
4034   IF l_credit_check_rule_id is NULL
4035   THEN
4036     IF G_debug_flag = 'Y'
4037     THEN
4038       OE_DEBUG_PUB.ADD(' No credit check attached ');
4039     END IF;
4040 
4041     l_level := NULL ;
4042 
4043   ELSE
4044 
4045   IF G_debug_flag = 'Y'
4046   THEN
4047     OE_DEBUG_PUB.ADD('OEXUCRCB: Call GET_credit_check_rule ');
4048   END IF;
4049 
4050      OE_CREDIT_CHECK_UTIL.GET_credit_check_rule
4051     ( p_credit_check_rule_id   => l_credit_check_rule_id
4052     , x_credit_check_rules_rec => l_credit_check_rule_rec
4053     );
4054 
4055     IF G_debug_flag = 'Y'
4056     THEN
4057       OE_DEBUG_PUB.ADD('credit_check_level_code = '||
4058        l_credit_check_rule_rec.credit_check_level_code );
4059     END IF;
4060 
4061        l_level := l_credit_check_rule_rec.credit_check_level_code ;
4062 
4063   END IF;
4064 
4065   IF G_debug_flag = 'Y'
4066   THEN
4067     OE_DEBUG_PUB.ADD('OEXUCRCB: OUT NOCOPY GET_credit_check_level ' || l_level);
4068   END IF;
4069 
4070   RETURN( l_level ) ;
4071 
4072  EXCEPTION
4073   WHEN OTHERS THEN
4074    G_DBG_MSG := SUBSTR(sqlerrm,1,200);
4075 
4076     IF FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
4077     THEN
4078       FND_MSG_PUB.Add_Exc_Msg
4079       ( G_PKG_NAME
4080       , 'GET_credit_check_level'
4081       );
4082     END IF;
4083     RAISE;
4084 
4085 END GET_credit_check_level ;
4086 
4087 -----------------------------------------------------------------------------
4088 --  PROCEDURE: GET_credit_check_rule           PUBLIC
4089 --  COMMENT    : Returns the OE credit check rules info for the current org
4090 --
4091 ------------------------------------------------------------------------------
4092 PROCEDURE GET_credit_check_rule
4093 ( p_header_id              IN NUMBER := NULL
4094 , p_credit_check_rule_id   IN NUMBER
4095 , x_credit_check_rules_rec OUT NOCOPY
4096              OE_CREDIT_CHECK_UTIL.OE_credit_rules_rec_type
4097 )
4098 IS
4099 
4100 BEGIN
4101 
4102   IF G_debug_flag = 'Y'
4103   THEN
4104     OE_DEBUG_PUB.ADD('OEXUCRCB: IN GET_credit_check_rule ' );
4105   END IF;
4106 
4107   BEGIN
4108     IF G_debug_flag = 'Y'
4109     THEN
4110       OE_DEBUG_PUB.ADD(' Select for ID ' || p_credit_check_rule_id );
4111     END IF;
4112 
4113 
4114     SELECT
4115       credit_check_rule_id
4116     , name
4117     , failure_result_code
4118     , open_ar_balance_flag
4119     , uninvoiced_orders_flag
4120     , orders_on_hold_flag
4121     , shipping_interval
4122     , open_ar_days
4123     , start_date_active
4124     , end_date_active
4125     , include_payments_at_risk_flag
4126     , NVL(include_tax_flag,'N')
4127     , maximum_days_past_due
4128     , NVL(QUICK_CR_CHECK_FLAG,'N')
4129     , NVL(incl_freight_charges_flag,'N')
4130     , DECODE( shipping_interval, NULL,
4131               TO_DATE('31/12/4712','DD/MM/YYYY'), shipping_interval + SYSDATE
4132             )
4133     , NVL(credit_check_level_code,'ORDER')
4134     , NVL(credit_hold_level_code,'ORDER')
4135     , conversion_type
4136     , NVL(check_item_categories_flag,'N')
4137     , NVL(send_hold_notifications_flag,'N')
4138     , days_honor_manual_release
4139     , NVL(include_external_exposure_flag, 'N')
4140     ,  NVL(include_returns_flag, 'N')
4141       --ER 12363706 start
4142     ,  Tolerance_Percentage
4143     ,  Tolerance_Curr_Code
4144     ,  Tolerance_Amount
4145       --ER 12363706 end
4146     INTO x_credit_check_rules_rec.credit_check_rule_id
4147     ,  x_credit_check_rules_rec.name
4148     ,  x_credit_check_rules_rec.failure_result_code
4149     ,  x_credit_check_rules_rec.open_ar_balance_flag
4150     ,  x_credit_check_rules_rec.uninvoiced_orders_flag
4151     ,  x_credit_check_rules_rec.orders_on_hold_flag
4152     ,  x_credit_check_rules_rec.shipping_interval
4153     ,  x_credit_check_rules_rec.open_ar_days
4154     ,  x_credit_check_rules_rec.start_date_active
4155     ,  x_credit_check_rules_rec.end_date_active
4156     ,  x_credit_check_rules_rec.include_payments_at_risk_flag
4157     ,  x_credit_check_rules_rec.include_tax_flag
4158     ,  x_credit_check_rules_rec.maximum_days_past_due
4159     ,  x_credit_check_rules_rec.QUICK_CR_CHECK_FLAG
4160     ,  x_credit_check_rules_rec.incl_freight_charges_flag
4161     ,  x_credit_check_rules_rec.shipping_horizon
4162     ,  x_credit_check_rules_rec.credit_check_level_code
4163     ,  x_credit_check_rules_rec.credit_hold_level_code
4164     ,  x_credit_check_rules_rec.conversion_type
4165     ,  x_credit_check_rules_rec.check_item_categories_flag
4166     ,  x_credit_check_rules_rec.send_hold_notifications_flag
4167     ,  x_credit_check_rules_rec.days_honor_manual_release
4168     ,  x_credit_check_rules_rec.include_external_exposure_flag
4169     ,  x_credit_check_rules_rec.include_returns_flag
4170       --ER 12363706 start
4171     ,  x_credit_check_rules_rec.Tolerance_Percentage
4172     ,  x_credit_check_rules_rec.Tolerance_Curr_Code
4173     ,  x_credit_check_rules_rec.Tolerance_Amount
4174       --ER 12363706 end
4175     FROM
4176       OE_Credit_Check_rules
4177     WHERE credit_check_rule_id = p_credit_check_rule_id ;
4178 
4179       --bug 5031301
4180       /*The Include Open Recaivables cursors which we use includes payments at risk also.
4181         This will make the cursors behave as follows:
4182 	If open_ar_balance_flag = 'Y' AND include_risk_flag ='Y' then
4183 		Just consider AR balance, as it already includes payments at risk.
4184 		Ignore payments at risk cursor value
4185 	Else if open_ar_balance_flag = 'Y' AND include_risk_flag ='N' then
4186 		Consider both AR balance and payments at risk, so that it nullifies the effect.
4187 		As such we are not considering payments at risk.
4188 	Else (both are 'N')
4189 		Do Nothing.
4190 	End if*/
4191 	IF x_credit_check_rules_rec.open_ar_balance_flag ='Y'
4192 	   AND x_credit_check_rules_rec.include_payments_at_risk_flag = 'Y'
4193 	THEN
4194 	   x_credit_check_rules_rec.include_payments_at_risk_flag := 'N';
4195 	ELSIF x_credit_check_rules_rec.open_ar_balance_flag ='Y'
4196 	   AND x_credit_check_rules_rec.include_payments_at_risk_flag = 'N'
4197 	THEN
4198 	   x_credit_check_rules_rec.include_payments_at_risk_flag := 'Y';
4199 	END IF;
4200 
4201     EXCEPTION
4202     WHEN NO_DATA_FOUND
4203     THEN
4204       x_credit_check_rules_rec := NULL ;
4205       OE_DEBUG_PUB.ADD(' Get credit check rule No_Data_Found exception ' );
4206 
4207     WHEN TOO_MANY_ROWS
4208     THEN
4209       x_credit_check_rules_rec := NULL ;
4210       OE_DEBUG_PUB.ADD(' Get credit check rule TOO_MANY_ROWS ');
4211   END ;
4212 
4213   IF G_debug_flag = 'Y'
4214   THEN
4215     OE_DEBUG_PUB.ADD(' conversion_type = '
4216       || x_credit_check_rules_rec.conversion_type );
4217   END IF;
4218 
4219   BEGIN
4220     IF NVL(x_credit_check_rules_rec.conversion_type,'Corporate')
4221      NOT IN ('Corporate','User')
4222     THEN
4223       BEGIN
4224         IF G_debug_flag = 'Y'
4225         THEN
4226           OE_DEBUG_PUB.ADD(' Select user_conversion_type ');
4227         END IF;
4228 
4229         SELECT
4230           user_conversion_type
4231         INTO
4232           x_credit_check_rules_rec.user_conversion_type
4233         FROM
4234          GL_DAILY_CONVERSION_TYPES
4235         WHERE conversion_type =  x_credit_check_rules_rec.conversion_type ;
4236 
4237         EXCEPTION
4238 
4239         WHEN NO_DATA_FOUND
4240         THEN
4241           x_credit_check_rules_rec.user_conversion_type :=
4242               x_credit_check_rules_rec.conversion_type ;
4243           OE_DEBUG_PUB.ADD(' conversion type NO_DATA_FOUND ');
4244 
4245         WHEN TOO_MANY_ROWS
4246         THEN
4247            x_credit_check_rules_rec.user_conversion_type :=
4248               x_credit_check_rules_rec.conversion_type ;
4249           OE_DEBUG_PUB.ADD(' conversion type TOO_MANY_ROWS ');
4250      END ;
4251 
4252    ELSE
4253      IF G_debug_flag = 'Y'
4254      THEN
4255       OE_DEBUG_PUB.ADD(' No need for selct user_conversion_type ');
4256      END IF;
4257 
4258     x_credit_check_rules_rec.user_conversion_type :=
4259           x_credit_check_rules_rec.conversion_type ;
4260    END IF;
4261 
4262 
4263   END ;
4264 
4265   IF G_debug_flag = 'Y'
4266   THEN
4267     OE_DEBUG_PUB.ADD('Conversion type = '
4268            || x_credit_check_rules_rec.conversion_type );
4269 
4270     OE_DEBUG_PUB.ADD('User Conversion type = '
4271            || x_credit_check_rules_rec.user_conversion_type );
4272 
4273     OE_DEBUG_PUB.ADD('OEXUCRCB: OUT NOCOPY GET_credit_check_rule ' );
4274   END IF;
4275 
4276  EXCEPTION
4277   WHEN OTHERS THEN
4278    G_DBG_MSG := SUBSTR(sqlerrm,1,200);
4279 
4280     IF FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
4281     THEN
4282       FND_MSG_PUB.Add_Exc_Msg
4283       ( G_PKG_NAME
4284       , 'GET_credit_check_rule'
4285       );
4286     END IF;
4287     RAISE;
4288 
4289 END GET_credit_check_rule ;
4290 
4291 -----------------------------------------------------------------------------
4292 --  PROCEDURE  : Rounded_Amount    PUBLIC
4293 --  COMMENT    : Returns rounded amount
4294 --  BUG  4320650
4295 ---------------------------------------------------------------------------
4296 
4297 PROCEDURE Rounded_Amount
4298 (  p_currency_code      IN   VARCHAR2
4299 ,  p_unrounded_amount   IN   NUMBER
4300 ,  x_rounded_amount     OUT NOCOPY NUMBER
4301 )
4302 IS
4303 l_precision         NUMBER;
4304 l_ext_precision     NUMBER;
4305 l_min_acct_unit     NUMBER;
4306 --
4307 l_debug_level CONSTANT NUMBER := oe_debug_pub.g_debug_level;
4308 --
4309 BEGIN
4310 
4311      IF l_debug_level  > 0 THEN
4312          oe_debug_pub.add(  'OEXUCRCB: IN  ROUNDED_AMOUNT ( )  WITH AMOUNT : ' ||P_UNROUNDED_AMOUNT , 5 ) ;
4313      END IF;
4314      FND_CURRENCY.GET_INFO(Currency_Code => p_currency_code,
4315                            precision     => l_precision,
4316                            ext_precision => l_ext_precision,
4317                            min_acct_unit => l_min_acct_unit);
4318 
4319      IF (l_min_acct_unit = 0 OR l_min_acct_unit IS NULL) THEN
4320           x_rounded_amount := ROUND(p_unrounded_amount, l_precision);
4321      ELSE
4322           x_rounded_amount := ROUND(p_unrounded_amount/l_min_acct_unit)*l_min_acct_unit;
4323      END IF;
4324      IF l_debug_level  > 0 THEN
4325          oe_debug_pub.add(  'OEXUCRCB: OUT ROUNDED AMOUNT ( ) WITH AMOUNT : '||X_ROUNDED_AMOUNT , 5 ) ;
4326      END IF;
4327 END Rounded_Amount;
4328 --ER 12363706 start
4329 --------------------------------------------------------------------------------------------
4330 -- Procedure Update_Released_Amount
4331 -- This procedure is added to update the OCM released amount in OE_HOLD_RELEASES table
4332 -- that will be used for Tolerance Check.
4333 --------------------------------------------------------------------------------------------
4334 PROCEDURE Update_Released_Amount(
4335     p_header_id       NUMBER,
4336     p_hold_release_id NUMBER)
4337 IS
4338   l_credit_check_rule_id NUMBER;
4339   l_credit_check_rule_rec OE_CREDIT_CHECK_UTIL.OE_credit_rules_rec_type ;
4340   l_header_rec OE_Order_PUB.Header_Rec_Type;
4341   l_released_amount NUMBER;
4342   l_calling_action  VARCHAR2(30);
4343   l_conversion_status OE_CREDIT_CHECK_UTIL.CURR_TBL_TYPE;
4344   l_return_status VARCHAR2(30);
4345 BEGIN
4346   IF G_debug_flag = 'Y' THEN
4347     oe_debug_pub.add('Starting Update_Released_Amount');
4348     oe_debug_pub.add('Header ID:'||p_header_id);
4349     oe_debug_pub.add('Hold Release ID:'||p_hold_release_id);
4350   END IF;
4351   l_calling_action := OE_Verify_Payment_PUB.Which_Rule(p_header_id => p_header_id);
4352   oe_debug_pub.add('slagiset: l_calling_action ' || l_calling_action);
4353   OE_HEADER_UTIL.QUERY_ROW ( p_header_id => p_header_id, x_header_rec => l_header_rec);
4354   OE_CREDIT_CHECK_UTIL.Get_Credit_Check_Rule_ID ( p_calling_action => l_calling_action , p_order_type_id => l_header_rec.order_type_id , x_credit_rule_id => l_credit_check_rule_id );
4355   oe_debug_pub.add('slagiset: l_credit_check_rule_id ' || l_credit_check_rule_id);
4356 
4357   OE_CREDIT_CHECK_UTIL.GET_credit_check_rule ( p_header_id => p_header_id ,
4358    					       p_credit_check_rule_id => l_credit_check_rule_id ,
4359 					       x_credit_check_rules_rec => l_credit_check_rule_rec );
4360 
4361   l_credit_check_rule_rec.credit_check_level_code := 'ORDER';
4362 
4363   OE_CREDIT_CHECK_UTIL.GET_transaction_amount ( p_header_id => p_header_id ,
4364   						p_transaction_curr_code => l_header_rec.transactional_curr_code ,
4365 						p_credit_check_rule_rec => l_credit_check_rule_rec ,
4366 						p_system_parameter_rec => NULL ,
4367 						p_customer_id => NULL ,
4368 						p_site_use_id => NULL ,
4369 						p_limit_curr_code => l_header_rec.transactional_curr_code ,
4370 						p_all_lines => 'Y' ,
4371 						x_amount => l_released_amount ,
4372 						x_conversion_status => l_conversion_status ,
4373 						x_return_status => l_return_status );
4374   oe_debug_pub.add('slagiset: l_released_amount ' || l_released_amount);
4375   oe_debug_pub.add('slagiset: l_return_status ' || l_return_status);
4376   UPDATE OE_HOLD_RELEASES
4377   SET Released_Order_Amount=l_released_amount,
4378     Released_Curr_code     =l_header_rec.transactional_curr_code
4379   WHERE hold_release_id    =p_hold_release_id;
4380   IF G_debug_flag          = 'Y' THEN
4381     oe_debug_pub.add('Ending Update_Released_Amount');
4382   END IF;
4383 EXCEPTION
4384 WHEN OTHERS THEN
4385   IF G_debug_flag = 'Y' THEN
4386     oe_debug_pub.add('Error in Update_Released_Amount:'||SUBSTR(SQLERRM,1,250));
4387   END IF;
4388   RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
4389 END Update_Released_Amount;
4390 
4391 --------------------------------------------------------------------------------------------
4392 -- Procedure Update_Credit_Profile_Level
4393 -- This procedure is added to update the Credit Profile Lvel in OE_ORDER_HOLDS_ALL table
4394 -- that will be used to decide if the Bill to Change should trigger Credit Checing or not.
4395 --------------------------------------------------------------------------------------------
4396 PROCEDURE Update_Credit_Profile_Level(
4397     p_hold_source_rec IN  OE_HOLDS_PVT.Hold_Source_Rec_Type)
4398 IS
4399   l_hold_source_id NUMBER;
4400 BEGIN
4401 	IF G_debug_flag = 'Y' THEN
4402 		oe_debug_pub.add('Starting Update_Credit_Profile_Level');
4403 		oe_debug_pub.add('OEXUCRCB: OE_Credit_Engine_GRP.G_Credit_Profile_Level ' || OE_Credit_Engine_GRP.G_Credit_Profile_Level);
4404 	END IF;
4405 
4406 	IF p_hold_source_rec.hold_source_id IS NOT NULL
4407 	THEN
4408 		l_hold_source_id	:=	p_hold_source_rec.hold_source_id;
4409 		IF G_debug_flag         = 'Y' THEN
4410 			oe_debug_pub.add('OEXUCRCB: Hold Source Id is passed: '||p_hold_source_rec.hold_source_id);
4411 		END IF;
4412 
4413 	ELSIF p_hold_source_rec.HOLD_ENTITY_CODE is NOT NULL AND
4414 	      p_hold_source_rec.HOLD_ENTITY_ID is NOT NULL
4415 	THEN
4416 		IF G_debug_flag         = 'Y' THEN
4417 			oe_debug_pub.add('OEXUCRCB: Retrieving Hold Source Id');
4418 		END IF;
4419 
4420 		BEGIN
4421 			IF  p_hold_source_rec.line_id IS NOT NULL THEN
4422 			      SELECT hold_source_id
4423 			      INTO l_hold_source_id
4424 			       FROM OE_HOLD_SOURCES_ALL HS
4425 			       WHERE HOLD_ENTITY_CODE = p_hold_source_rec.HOLD_ENTITY_CODE
4426 				  AND HOLD_ENTITY_ID   = p_hold_source_rec.HOLD_ENTITY_ID
4427 				  AND HOLD_ID           = p_hold_source_rec.hold_id
4428 				  AND RELEASED_FLAG = 'N'
4429 				  AND  NVL(HOLD_UNTIL_DATE, SYSDATE + 1) > SYSDATE
4430 				  AND exists (SELECT 'x'
4431 						  FROM OE_ORDER_HOLDS OH
4432 						 WHERE OH.LINE_ID = p_hold_source_rec.line_id
4433 						   AND OH.HOLD_SOURCE_ID =  HS.HOLD_SOURCE_ID);
4434 			ELSE
4435 			      SELECT hold_source_id
4436 			      INTO l_hold_source_id
4437 			       FROM OE_HOLD_SOURCES_ALL
4438 			       WHERE HOLD_ENTITY_CODE = p_hold_source_rec.HOLD_ENTITY_CODE
4439 				  AND HOLD_ENTITY_ID   = p_hold_source_rec.HOLD_ENTITY_ID
4440 				  AND HOLD_ID           = p_hold_source_rec.hold_id
4441 				  AND RELEASED_FLAG = 'N'
4442 				  AND  NVL(HOLD_UNTIL_DATE, SYSDATE + 1) > SYSDATE;
4443 			END IF;
4444 		EXCEPTION
4445 			WHEN OTHERS THEN
4446 				oe_debug_pub.ADD('OEXUCRCB: Exception raised!');
4447 				-- RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
4448 
4449 		END;
4450 		IF G_debug_flag         = 'Y' THEN
4451 			oe_debug_pub.add('OEXUCRCB: Retrieved Hold Source Id: '|| l_hold_source_id);
4452 		END IF;
4453 	END IF;
4454 
4455 	UPDATE OE_ORDER_HOLDS_ALL
4456 	SET Credit_Profile_Level=OE_Credit_Engine_GRP.G_Credit_Profile_Level,
4457 	    Last_Update_Date = SYSDATE,
4458 	    Last_Updated_By  = FND_GLOBAL.user_id
4459 	WHERE hold_source_id    = l_hold_source_id;
4460 
4461 	IF G_debug_flag         = 'Y' THEN
4462 		oe_debug_pub.add('OEXUCRCB: Ending Update_Credit_Profile_Level');
4463 	END IF;
4464 
4465 EXCEPTION
4466 	WHEN OTHERS THEN
4467 		IF G_debug_flag         = 'Y' THEN
4468 			oe_debug_pub.add('Error in Update_Credit_Profile_Level:'||SUBSTR(SQLERRM,1,250));
4469 		END IF;
4470 		RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
4471 END Update_Credit_Profile_Level;
4472 --ER 12363706 end
4473 
4474 -----------------------------------------------------------------------------
4475 --  PROCEDURE: GET_transaction_amount           PUBLIC
4476 --  COMMENT    : Returns the transaction amount for a given order. If the
4477 --               p_site_use_id IS null, the entire order is considered
4478 --               x_conversion_status provides any currency conversion
4479 --               error.
4480 -- BUG 2056412 Freights include
4481 -- BUG 4320650 Rounded the transaction amount
4482 ------------------------------------------------------------------------------
4483 PROCEDURE GET_transaction_amount
4484 ( p_header_id              IN  NUMBER
4485 , p_transaction_curr_code  IN  VARCHAR2
4486 , p_credit_check_rule_rec IN
4487              OE_CREDIT_CHECK_UTIL.OE_credit_rules_rec_type
4488 , p_system_parameter_rec   IN
4489              OE_CREDIT_CHECK_UTIL.OE_systems_param_rec_type
4490 , p_customer_id            IN   NUMBER
4491 , p_site_use_id            IN   NUMBER
4492 , p_limit_curr_code        IN   VARCHAR2
4493 , p_all_lines             IN VARCHAR2 := 'N' --ER 12363706
4494 , x_amount                 OUT  NOCOPY NUMBER
4495 , x_conversion_status      OUT  NOCOPY OE_CREDIT_CHECK_UTIL.CURR_TBL_TYPE
4496 , x_return_status          OUT  NOCOPY VARCHAR2
4497 )
4498 IS
4499 
4500 l_order_value       NUMBER := 0;
4501 L_LIMIT_ORDER_VALUE NUMBER := 0;
4502 l_commitment        NUMBER := 0;
4503 l_freights          NUMBER := 0;
4504 l_freights_hdr_1    NUMBER := 0;
4505 l_freights_hdr_2    NUMBER := 0;
4506 l_prepayment        NUMBER := 0;
4507 
4508 BEGIN
4509 
4510   IF G_debug_flag = 'Y'
4511   THEN
4512     OE_DEBUG_PUB.ADD('OEXUCRCB: IN GET_transaction_amount for '
4513         || p_header_id );
4514   END IF;
4515 
4516  -- For line level, if it is customer level credit check
4517  -- all the lines belonging to the sites owned by the
4518  -- customer  in the order needs to be considered as per the RDD
4519 
4520  -- Bug 2328351 check for line ctg code as well
4521 
4522   x_return_status     := FND_API.G_RET_STS_SUCCESS;
4523 
4524   OE_CREDIT_CHECK_UTIL.g_current_order_value := NULL ;
4525 
4526   IF p_credit_check_rule_rec.credit_check_level_code = 'LINE'
4527   THEN
4528     IF G_debug_flag = 'Y'
4529     THEN
4530       OE_DEBUG_PUB.ADD('In Line level ');
4531     END IF;
4532 
4533     IF p_customer_id IS NOT NULL -- line level CC
4534     THEN
4535       -----added for Returns
4536       IF NVL(p_credit_check_rule_rec.include_returns_flag,'N')='N'
4537       THEN
4538         ---returns are not included
4539 
4540         IF G_debug_flag = 'Y'
4541         THEN
4542           OE_DEBUG_PUB.ADD('Line - Customer level select,no returns ');
4543         END IF;
4544 
4545         SELECT SUM ( DECODE( p_credit_check_rule_rec.include_tax_flag , 'Y',
4546                          NVL(NVL(l.tax_line_value,l.tax_value),0), 0 )  --TaxER
4547                + ( l.unit_selling_price * l.ordered_quantity )
4548                )
4549         INTO   l_order_value
4550         FROM   oe_order_lines l,
4551                oe_order_headers_all h,
4552                ra_terms_b t,
4553                HZ_CUST_SITE_USES_ALL su,
4554                HZ_CUST_ACCT_SITES_ALL cas
4555         WHERE  h.header_id                   = p_header_id
4556           AND  h.org_id                      = l.org_id                      /* MOAC_SQL_CHANGE */
4557           AND  h.header_id                   = l.header_id
4558           AND  l.invoice_to_org_id           = su.site_use_id
4559           AND  su.CUST_ACCT_SITE_ID          = cas.CUST_ACCT_SITE_ID
4560           AND  cas.cust_account_id           = p_customer_id
4561           --ER 12363706 AND  l.open_flag                   = 'Y'
4562           AND l.open_flag           = DECODE(p_all_lines,'Y',l.open_flag,'Y') --ER 12363706
4563           AND  (l.invoiced_quantity IS NULL OR l.invoiced_quantity = 0)
4564           AND  t.term_id                     = l.payment_term_id
4565           AND  l.line_category_code          = 'ORDER'
4566           AND  t.credit_check_flag           = 'Y'
4567           AND  (EXISTS
4568                  (SELECT NULL
4569                   FROM   oe_payment_types_all pt
4570                   WHERE  pt.payment_type_code = NVL(l.payment_type_code,
4571                                                 NVL(h.payment_type_code, 'BME'))
4572                   AND    pt.credit_check_flag = 'Y'
4573                   AND    NVL(pt.org_id, -99)  = G_ORG_ID)
4574                 OR
4575                 (l.payment_type_code IS NULL AND h.payment_type_code IS NULL));
4576 
4577       ELSE
4578         ---returns are included
4579 
4580         IF G_debug_flag = 'Y'
4581         THEN
4582           OE_DEBUG_PUB.ADD('Line - Customer level select,with returns ');
4583         END IF;
4584 
4585         SELECT
4586           SUM ( DECODE( p_credit_check_rule_rec.include_tax_flag , 'Y',
4587             NVL(DECODE(l.line_category_code,'RETURN',(-1)*NVL(l.tax_line_value,l.tax_value),NVL(l.tax_line_value,l.tax_value)),0), 0 )  --TaxER
4588             + ( l.unit_selling_price *
4589             (DECODE(l.line_category_code,'RETURN',(-1)*l.ordered_quantity,
4590             l.ordered_quantity) )
4591               ))
4592         INTO   l_order_value
4593         FROM   oe_order_lines l,
4594                oe_order_headers_all h,
4595                ra_terms_b t,
4596                HZ_CUST_SITE_USES_ALL su,
4597                HZ_CUST_ACCT_SITES_ALL cas
4598         WHERE  h.header_id                   = p_header_id
4599           AND  h.org_id                      = l.org_id                       /* MOAC_SQL_CHANGE */
4600           AND  h.header_id                   = l.header_id
4601           AND  l.invoice_to_org_id           = su.site_use_id
4602           AND  su.CUST_ACCT_SITE_ID          = cas.CUST_ACCT_SITE_ID
4603           AND  cas.cust_account_id           = p_customer_id
4604           --ER 12363706 AND  l.open_flag                   = 'Y'
4605           AND l.open_flag           = DECODE(p_all_lines,'Y',l.open_flag,'Y') --ER 12363706
4606           AND  (l.invoiced_quantity IS NULL OR l.invoiced_quantity = 0)
4607           AND  t.term_id                     = l.payment_term_id
4608           AND  t.credit_check_flag           = 'Y'
4609           AND  (EXISTS
4610                  (SELECT NULL
4611                   FROM   oe_payment_types_all pt
4612                   WHERE  pt.payment_type_code = NVL(l.payment_type_code,
4613                                                 NVL(h.payment_type_code, 'BME'))
4614                   AND    pt.credit_check_flag = 'Y'
4615                   AND    NVL(pt.org_id, -99)  = G_ORG_ID)
4616                 OR
4617                 (l.payment_type_code IS NULL AND h.payment_type_code IS NULL));
4618 
4619 
4620       END IF; ----end for checking if returns are included
4621 
4622      IF G_debug_flag = 'Y'
4623      THEN
4624        OE_DEBUG_PUB.ADD('Check for Committment profile ');
4625      END IF;
4626 
4627      IF OE_Commitment_PVT.Do_Commitment_Sequencing THEN
4628        BEGIN
4629          IF G_debug_flag = 'Y'
4630          THEN
4631            OE_DEBUG_PUB.ADD('Customer level commitment select ');
4632          END IF;
4633 
4634            SELECT NVL(SUM(P.commitment_applied_amount), 0)
4635            INTO   l_commitment
4636 	     FROM   OE_PAYMENTS P, OE_ORDER_HEADERS_ALL H, OE_ORDER_LINES L ,
4637                   HZ_CUST_SITE_USES_ALL su,
4638                   HZ_CUST_ACCT_SITES_ALL cas,
4639                   ra_terms_b t
4640            WHERE  h.header_id                 = p_header_id
4641            AND  h.org_id                      = l.org_id                       /* MOAC_SQL_CHANGE */
4642            AND  h.header_id                   = l.header_id
4643            AND  l.invoice_to_org_id           = su.site_use_id
4644            AND  su.CUST_ACCT_SITE_ID          = cas.CUST_ACCT_SITE_ID
4645            AND  cas.cust_account_id           = p_customer_id
4646             --ER 12363706 AND  l.open_flag                   = 'Y'
4647            AND l.open_flag           = DECODE(p_all_lines,'Y',l.open_flag,'Y') --ER 12363706
4648            AND  (l.invoiced_quantity IS NULL OR l.invoiced_quantity = 0)
4649            AND  t.term_id                     = l.payment_term_id
4650            AND  t.credit_check_flag           = 'Y'
4651            AND  p.header_id                   = p_header_id
4652            AND  p.line_id                     = l.line_id
4653            AND  l.line_category_code          = 'ORDER'
4654            AND  p.header_id                   = h.header_id
4655            AND  (EXISTS
4656                  (SELECT NULL
4657                   FROM   oe_payment_types_all pt
4658                   WHERE  pt.payment_type_code = NVL(l.payment_type_code,
4659                                                 NVL(h.payment_type_code, 'BME'))
4660                   AND    pt.credit_check_flag = 'Y'
4661                   AND    NVL(pt.org_id, -99)  = G_ORG_ID)
4662                 OR
4663                 (l.payment_type_code IS NULL AND h.payment_type_code IS NULL));
4664 
4665              EXCEPTION
4666              WHEN NO_DATA_FOUND
4667              THEN
4668                OE_DEBUG_PUB.ADD(' NO commitment-1 found ');
4669                l_commitment := 0 ;
4670 
4671              WHEN TOO_MANY_ROWS
4672              THEN
4673                OE_DEBUG_PUB.ADD(' Too many rows exception NO commtment-1');
4674                l_commitment := 0 ;
4675          END ;
4676        END IF; --- commitment
4677 
4678 
4679        IF  p_credit_check_rule_rec.incl_freight_charges_flag
4680               = 'Y'
4681        THEN
4682          -----added for Returns
4683          IF NVL(p_credit_check_rule_rec.include_returns_flag,'N')='N'
4684          THEN
4685            ---returns are not included
4686            IF G_debug_flag = 'Y'
4687            THEN
4688              OE_DEBUG_PUB.ADD(' Process trx freights - Line level customer without returns ');
4689            END IF;
4690 
4691            BEGIN
4692              SELECT
4693               SUM
4694               ( DECODE(p.list_line_type_code,'TAX',0,DECODE( p.credit_or_charge_flag, 'C', (-1), (+1) )
4695               * DECODE( p.arithmetic_operator, 'LUMPSUM',          --bug 4295299
4696                         p.operand, (l.ordered_quantity * p.adjusted_amount)))
4697 	      --TaxER Start
4698 	      + DECODE(p_credit_check_rule_rec.include_tax_flag ,'Y',DECODE(p.list_line_type_code,'TAX',p.adjusted_amount,0),0)
4699 	      --TaxER End
4700               )
4701              INTO l_freights
4702              FROM oe_order_lines l,
4703                   oe_order_headers_all h,
4704                   ra_terms_b t,
4705                   HZ_CUST_SITE_USES_ALL su,
4706                   HZ_CUST_ACCT_SITES_ALL cas,
4707                   oe_price_adjustments p
4708              WHERE  h.header_id                  = p_header_id
4709                AND  h.org_id                     = l.org_id                       /* MOAC_SQL_CHANGE */
4710                AND  h.header_id                  = l.header_id
4711                AND  p.line_id                    =  l.line_id
4712                AND  p.header_id                  =  l.header_id
4713                AND  p.header_id                  =  h.header_id
4714                AND  l.invoice_to_org_id          = su.site_use_id
4715 	       --TaxER  AND  p.applied_flag        =  'Y'
4716   	       --TaxER AND  p.list_line_type_code =  'FREIGHT_CHARGE'
4717   	       AND  ((p.list_line_type_code =  'FREIGHT_CHARGE' and p.applied_flag =  'Y') OR (p.list_line_type_code = 'TAX' and p.applied_flag =  'N' and p.parent_adjustment_id IS NOT NULL))  --TaxER  --12895421
4718                AND  (p.invoiced_flag IS NULL OR p.invoiced_flag =  'N' )
4719                AND  su.CUST_ACCT_SITE_ID         = cas.CUST_ACCT_SITE_ID
4720                AND  cas.cust_account_id          = p_customer_id
4721               --ER 12363706 AND  l.open_flag                  = 'Y'
4722                AND l.open_flag           = DECODE(p_all_lines,'Y',l.open_flag,'Y') --ER 12363706
4723                AND  (l.invoiced_quantity IS NULL OR l.invoiced_quantity = 0)
4724                AND  t.term_id                    = l.payment_term_id
4725                AND  l.line_category_code         = 'ORDER'
4726                AND  t.credit_check_flag          = 'Y'
4727                AND  (EXISTS
4728                      (SELECT NULL
4729                       FROM   oe_payment_types_all pt
4730                       WHERE  pt.payment_type_code = NVL(l.payment_type_code,
4731                                                 NVL(h.payment_type_code, 'BME'))
4732                       AND    pt.credit_check_flag = 'Y'
4733                       AND    NVL(pt.org_id, -99)  = G_ORG_ID)
4734                     OR
4735                     (l.payment_type_code IS NULL AND h.payment_type_code IS NULL));
4736 
4737            EXCEPTION
4738               WHEN NO_DATA_FOUND
4739               THEN
4740                 OE_DEBUG_PUB.ADD(' NO Freights found ');
4741                 l_freights := 0 ;
4742 
4743            END ;
4744          ELSE
4745            ---returns are included
4746            IF G_debug_flag = 'Y'
4747            THEN
4748              OE_DEBUG_PUB.ADD(' Process trx freights - Line level customer,with returns ');
4749            END IF;
4750 
4751            BEGIN
4752              SELECT
4753               SUM
4754               ( DECODE(p.list_line_type_code,'TAX',0,DECODE( p.credit_or_charge_flag, 'C', (-1), (+1) )
4755               * DECODE( p.arithmetic_operator, 'LUMPSUM',          --bug 4295299
4756                         p.operand, (l.ordered_quantity * p.adjusted_amount)))
4757 	      --TaxER Start
4758 	      + DECODE(p_credit_check_rule_rec.include_tax_flag ,'Y',DECODE(p.list_line_type_code,'TAX',p.adjusted_amount,0),0)
4759 	      --TaxER End
4760               )
4761              INTO l_freights
4762              FROM oe_order_lines l,
4763                   oe_order_headers_all h,
4764                   ra_terms_b t,
4765                   HZ_CUST_SITE_USES_ALL su,
4766                   HZ_CUST_ACCT_SITES_ALL cas,
4767                   oe_price_adjustments p
4768              WHERE  h.header_id                  = p_header_id
4769                AND  h.org_id                     = l.org_id                      /* MOAC_SQL_CHANGE */
4770                AND  h.header_id                  = l.header_id
4771                AND  p.line_id                    =  l.line_id
4772                AND  p.header_id                  =  l.header_id
4773                AND  p.header_id                  =  h.header_id
4774                AND  l.invoice_to_org_id          = su.site_use_id
4775 	       --TaxER  AND  p.applied_flag        =  'Y'
4776   	       --TaxER AND  p.list_line_type_code =  'FREIGHT_CHARGE'
4777   	       AND  ((p.list_line_type_code =  'FREIGHT_CHARGE' and p.applied_flag =  'Y') OR (p.list_line_type_code = 'TAX' and p.applied_flag =  'N' and p.parent_adjustment_id IS NOT NULL))  --TaxER  --12895421
4778                 AND  (p.invoiced_flag IS NULL OR p.invoiced_flag =  'N' )
4779                AND  su.CUST_ACCT_SITE_ID         = cas.CUST_ACCT_SITE_ID
4780                AND  cas.cust_account_id          = p_customer_id
4781                --ER 12363706 AND  l.open_flag                  = 'Y'
4782                AND l.open_flag           = DECODE(p_all_lines,'Y',l.open_flag,'Y') --ER 12363706
4783                AND  (l.invoiced_quantity IS NULL OR l.invoiced_quantity = 0)
4784                AND  t.term_id                    = l.payment_term_id
4785                AND  t.credit_check_flag          = 'Y'
4786                AND  (EXISTS
4787                      (SELECT NULL
4788                       FROM   oe_payment_types_all pt
4789                       WHERE  pt.payment_type_code = NVL(l.payment_type_code,
4790                                                 NVL(h.payment_type_code, 'BME'))
4791                       AND    pt.credit_check_flag = 'Y'
4792                       AND    NVL(pt.org_id, -99)  = G_ORG_ID)
4793                     OR
4794                     (l.payment_type_code IS NULL AND h.payment_type_code IS NULL));
4795            EXCEPTION
4796               WHEN NO_DATA_FOUND
4797               THEN
4798                 OE_DEBUG_PUB.ADD(' NO Freights found ');
4799                 l_freights := 0 ;
4800 
4801            END ;
4802 
4803          END IF; ----end of checking if returns are included
4804 
4805        END IF; -- Freights
4806 
4807 
4808 
4809      ELSE
4810        -----added for Returns
4811        IF NVL(p_credit_check_rule_rec.include_returns_flag,'N')='N'
4812        THEN
4813          ---returns are not included
4814 
4815          IF G_debug_flag = 'Y'
4816          THEN
4817            OE_DEBUG_PUB.ADD('Line - Site level select ');
4818          END IF;
4819 
4820          SELECT SUM ( DECODE( p_credit_check_rule_rec.include_tax_flag , 'Y',
4821                     NVL(NVL(l.tax_line_value,l.tax_value),0), 0 )  --TaxER
4822              + ( l.unit_selling_price * l.ordered_quantity )
4823                )
4824          INTO   l_order_value
4825          FROM   oe_order_lines l,
4826                 oe_order_headers_all h,
4827                 ra_terms_b t
4828          WHERE  h.header_id                   = p_header_id
4829            AND  h.org_id                      = l.org_id            /* MOAC_SQL_CHANGE */
4830            AND  h.header_id                   = l.header_id
4831            AND  l.invoice_to_org_id           = p_site_use_id
4832            --ER 12363706 AND  l.open_flag                   = 'Y'
4833            AND l.open_flag           = DECODE(p_all_lines,'Y',l.open_flag,'Y') --ER 12363706
4834            AND  l.line_category_code          = 'ORDER'
4835            AND  (l.invoiced_quantity IS NULL OR l.invoiced_quantity = 0)
4836            AND  t.term_id                     = l.payment_term_id
4837            AND  t.credit_check_flag           = 'Y'
4838            AND  (EXISTS
4839                    (SELECT NULL
4840                     FROM   oe_payment_types_all pt
4841                     WHERE  pt.payment_type_code = NVL(l.payment_type_code,
4842                                               NVL(h.payment_type_code, 'BME'))
4843                     AND    pt.credit_check_flag = 'Y'
4844                     AND    NVL(pt.org_id, -99)  = G_ORG_ID)
4845                  OR
4846                 (l.payment_type_code IS NULL AND h.payment_type_code IS NULL));
4847 
4848        ELSE
4849          ---returns are included
4850 
4851          IF G_debug_flag = 'Y'
4852          THEN
4853            OE_DEBUG_PUB.ADD('Line - Site level select,including returns ');
4854          END IF;
4855 
4856          SELECT
4857            SUM ( DECODE( p_credit_check_rule_rec.include_tax_flag , 'Y',
4858            NVL(DECODE(l.line_category_code,'RETURN',(-1)*NVL(l.tax_line_value,l.tax_value),NVL(l.tax_line_value,l.tax_value)),0), 0 )  --TaxER
4859            + (l.unit_selling_price * DECODE(l.line_category_code,'RETURN',
4860            (-1)*l.ordered_quantity,l.ordered_quantity))
4861               )
4862          INTO   l_order_value
4863          FROM   oe_order_lines l,
4864                 oe_order_headers_all h,
4865                 ra_terms_b t
4866          WHERE  h.header_id                   = p_header_id
4867            AND  h.org_id                      = l.org_id            /* MOAC_SQL_CHANGE */
4868            AND  h.header_id                   = l.header_id
4869            AND  l.invoice_to_org_id           = p_site_use_id
4870           --ER 12363706 AND  l.open_flag                   = 'Y'
4871            AND l.open_flag           = DECODE(p_all_lines,'Y',l.open_flag,'Y') --ER 12363706
4872            AND  (l.invoiced_quantity IS NULL OR l.invoiced_quantity = 0)
4873            AND  t.term_id                     = l.payment_term_id
4874            AND  t.credit_check_flag           = 'Y'
4875            AND  (EXISTS
4876                    (SELECT NULL
4877                     FROM   oe_payment_types_all pt
4878                     WHERE  pt.payment_type_code = NVL(l.payment_type_code,
4879                                               NVL(h.payment_type_code, 'BME'))
4880                     AND    pt.credit_check_flag = 'Y'
4881                     AND    NVL(pt.org_id, -99)  = G_ORG_ID)
4882                  OR
4883                 (l.payment_type_code IS NULL AND h.payment_type_code IS NULL));
4884 
4885        END IF; ---end of checking for returns
4886 
4887        IF G_debug_flag = 'Y'
4888        THEN
4889          OE_DEBUG_PUB.ADD('Check for Committment ');
4890        END IF;
4891 
4892      IF OE_Commitment_PVT.Do_Commitment_Sequencing THEN
4893        BEGIN
4894            SELECT NVL(SUM(P.commitment_applied_amount), 0)
4895            INTO   l_commitment
4896 	     FROM   OE_PAYMENTS P,
4897                   OE_ORDER_HEADERS_ALL H,
4898                   OE_ORDER_LINES L,
4899                   ra_terms_b t
4900            WHERE  h.header_id                   = p_header_id
4901              AND  h.org_id                      = l.org_id            /* MOAC_SQL_CHANGE */
4902              AND  h.header_id                   = l.header_id
4903              AND  l.invoice_to_org_id           = p_site_use_id
4904             --ER 12363706 AND  l.open_flag                   = 'Y'
4905              AND l.open_flag           = DECODE(p_all_lines,'Y',l.open_flag,'Y') --ER 12363706
4906              AND  l.line_category_code   = 'ORDER'
4907              AND  (l.invoiced_quantity IS NULL OR l.invoiced_quantity = 0)
4908              AND  t.term_id                     = l.payment_term_id
4909              AND  t.credit_check_flag           = 'Y'
4910              AND  p.header_id                   = p_header_id
4911              AND  l.line_id                     = p.line_id
4912              AND  p.header_id                   = h.header_id
4913              AND  (EXISTS
4914                    (SELECT NULL
4915                     FROM   oe_payment_types_all pt
4916                     WHERE  pt.payment_type_code = NVL(l.payment_type_code,
4917                                               NVL(h.payment_type_code, 'BME'))
4918                     AND    pt.credit_check_flag = 'Y'
4919                     AND    NVL(pt.org_id, -99)  = G_ORG_ID)
4920                    OR
4921                    (l.payment_type_code IS NULL AND h.payment_type_code IS NULL));
4922 
4923            EXCEPTION
4924            WHEN NO_DATA_FOUND
4925            THEN
4926              OE_DEBUG_PUB.ADD(' NO commitment-1 found ');
4927              l_commitment := 0 ;
4928 
4929            WHEN TOO_MANY_ROWS
4930            THEN
4931           OE_DEBUG_PUB.ADD(' Too many rows excepn NO commitment-1 found ');
4932              l_commitment := 0 ;
4933          END ;
4934        END IF; --- commitment
4935 
4936        IF  p_credit_check_rule_rec.incl_freight_charges_flag
4937               = 'Y'
4938        THEN
4939 
4940          -----added for Returns
4941          IF NVL(p_credit_check_rule_rec.include_returns_flag,'N')='N'
4942          THEN
4943            ---returns are not included
4944 
4945            IF G_debug_flag = 'Y'
4946            THEN
4947              OE_DEBUG_PUB.ADD(' Process trx freights - Line level site,no returns ');
4948            END IF;
4949 
4950            BEGIN
4951              SELECT
4952               SUM
4953               ( DECODE(p.list_line_type_code,'TAX',0,DECODE( p.credit_or_charge_flag, 'C', (-1), (+1) )
4954               * DECODE( p.arithmetic_operator, 'LUMPSUM',          --bug 4295299
4955                         p.operand, (l.ordered_quantity * p.adjusted_amount)))
4956 	      --TaxER Start
4957 	      + DECODE(p_credit_check_rule_rec.include_tax_flag ,'Y',DECODE(p.list_line_type_code,'TAX',p.adjusted_amount,0),0)
4958 	      --TaxER End
4959               )
4960              INTO l_freights
4961              FROM oe_order_lines l,
4962                   oe_order_headers_all h,
4963                   ra_terms_b t,
4964                   oe_price_adjustments p
4965              WHERE  h.header_id                  = p_header_id
4966                AND  h.org_id                     = l.org_id           /* MOAC_SQL_CHANGE */
4967                AND  h.header_id                  = l.header_id
4968                AND  p.line_id                    =  l.line_id
4969                AND  p.header_id                  =  l.header_id
4970                AND  p.header_id                  =  h.header_id
4971                AND  l.invoice_to_org_id          = p_site_use_id
4972 	       --TaxER  AND  p.applied_flag        =  'Y'
4973   	       --TaxER AND  p.list_line_type_code =  'FREIGHT_CHARGE'
4974   	       AND  ((p.list_line_type_code =  'FREIGHT_CHARGE' and p.applied_flag =  'Y') OR (p.list_line_type_code = 'TAX' and p.applied_flag =  'N' and p.parent_adjustment_id IS NOT NULL))  --TaxER  --12895421
4975                AND  (p.invoiced_flag IS NULL OR p.invoiced_flag = 'N')
4976               --ER 12363706 AND  l.open_flag                  = 'Y'
4977                AND l.open_flag           = DECODE(p_all_lines,'Y',l.open_flag,'Y') --ER 12363706
4978                AND  l.line_category_code         = 'ORDER'
4979                AND  (l.invoiced_quantity IS NULL OR l.invoiced_quantity = 0)
4980                AND  t.term_id                    = l.payment_term_id
4981                AND  t.credit_check_flag          = 'Y'
4982                AND  (EXISTS
4983                       (SELECT NULL
4984                        FROM   oe_payment_types_all pt
4985                        WHERE  pt.payment_type_code = NVL(l.payment_type_code,
4986                                               NVL(h.payment_type_code, 'BME'))
4987                        AND    pt.credit_check_flag = 'Y'
4988                        AND    NVL(pt.org_id, -99)  = G_ORG_ID)
4989                      OR
4990                      (l.payment_type_code IS NULL AND h.payment_type_code IS NULL));
4991            EXCEPTION
4992              WHEN NO_DATA_FOUND
4993              THEN
4994                OE_DEBUG_PUB.ADD(' NO Freights found ');
4995                l_freights := 0 ;
4996 
4997            END ;
4998 
4999          ELSE
5000            ---returns are included
5001 
5002            IF G_debug_flag = 'Y'
5003            THEN
5004              OE_DEBUG_PUB.ADD(' Process trx freights - Line level site, with returns ');
5005            END IF;
5006 
5007            BEGIN
5008              SELECT
5009               SUM
5010               ( DECODE(p.list_line_type_code,'TAX',0,DECODE( p.credit_or_charge_flag, 'C', (-1), (+1) )
5011               * DECODE( p.arithmetic_operator, 'LUMPSUM',          --bug 4295299
5012                         p.operand, (l.ordered_quantity * p.adjusted_amount)))
5013 	      --TaxER Start
5014 	      + DECODE(p_credit_check_rule_rec.include_tax_flag ,'Y',DECODE(p.list_line_type_code,'TAX',p.adjusted_amount,0),0)
5015 	      --TaxER End
5016               )
5017              INTO l_freights
5018              FROM oe_order_lines l,
5019                   oe_order_headers_all h,
5020                   ra_terms_b t,
5021                   oe_price_adjustments p
5022              WHERE  h.header_id                  = p_header_id
5023                AND  h.org_id                     = l.org_id           /* MOAC_SQL_CHANGE */
5024                AND  h.header_id                  = l.header_id
5025                AND  p.line_id                    =  l.line_id
5026                AND  p.header_id                  =  l.header_id
5027                AND  p.header_id                  =  h.header_id
5028                AND  l.invoice_to_org_id          = p_site_use_id
5029 	       --TaxER  AND  p.applied_flag        =  'Y'
5030   	       --TaxER AND  p.list_line_type_code =  'FREIGHT_CHARGE'
5031   	       AND  ((p.list_line_type_code =  'FREIGHT_CHARGE' and p.applied_flag =  'Y') OR (p.list_line_type_code = 'TAX' and p.applied_flag =  'N' and p.parent_adjustment_id IS NOT NULL))  --TaxER --12895421
5032                AND  (p.invoiced_flag IS NULL OR p.invoiced_flag = 'N')
5033               --ER 12363706 AND  l.open_flag                  = 'Y'
5034                AND l.open_flag           = DECODE(p_all_lines,'Y',l.open_flag,'Y') --ER 12363706
5035                AND  (l.invoiced_quantity IS NULL OR l.invoiced_quantity = 0)
5036                AND  t.term_id                    = l.payment_term_id
5037                AND  t.credit_check_flag          = 'Y'
5038                AND  (EXISTS
5039                       (SELECT NULL
5040                        FROM   oe_payment_types_all pt
5041                        WHERE  pt.payment_type_code = NVL(l.payment_type_code,
5042                                               NVL(h.payment_type_code, 'BME'))
5043                        AND    pt.credit_check_flag = 'Y'
5044                        AND    NVL(pt.org_id, -99)  = G_ORG_ID)
5045                      OR
5046                      (l.payment_type_code IS NULL AND h.payment_type_code IS NULL));
5047 
5048            EXCEPTION
5049              WHEN NO_DATA_FOUND
5050              THEN
5051                OE_DEBUG_PUB.ADD(' NO Freights found ');
5052                l_freights := 0 ;
5053 
5054            END ;
5055 
5056          END IF; ---end for checking if returns are included
5057 
5058        END IF; -- Freights
5059 
5060     END IF; -- site or cust line level
5061 
5062   ELSE --- Header level CC
5063     -----added for Returns
5064     -----exclude prepayments if any
5065     IF NVL(p_credit_check_rule_rec.include_returns_flag,'N')='N'
5066     THEN
5067       ---returns are not included
5068 
5069       IF G_debug_flag = 'Y'
5070       THEN
5071         OE_DEBUG_PUB.ADD('In Order header level select ');
5072       END IF;
5073 
5074       SELECT SUM ( DECODE( p_credit_check_rule_rec.include_tax_flag , 'Y',
5075                         NVL(NVL(l.tax_line_value,l.tax_value),0), 0 )  --TaxER
5076                + ( l.unit_selling_price * l.ordered_quantity )
5077              )
5078       INTO   l_order_value
5079       FROM   oe_order_lines l,
5080              oe_order_headers_all h,
5081              ra_terms_b t
5082       WHERE  h.header_id                   = p_header_id
5083         AND  h.org_id                      = l.org_id           /* MOAC_SQL_CHANGE */
5084         AND  h.header_id                   = l.header_id
5085         --ER 12363706 AND  l.open_flag                   = 'Y'
5086         AND l.open_flag           = DECODE(p_all_lines,'Y',l.open_flag,'Y') --ER 12363706
5087         AND  l.line_category_code   = 'ORDER'
5088         AND  (l.invoiced_quantity IS NULL OR l.invoiced_quantity = 0)
5089         AND  t.term_id                     = l.payment_term_id
5090         AND  t.credit_check_flag           = 'Y'
5091         AND  (EXISTS
5092                (SELECT NULL
5093                 FROM   oe_payment_types_all pt
5094                 WHERE  pt.payment_type_code = NVL(l.payment_type_code,
5095                                               NVL(h.payment_type_code, 'BME'))
5096                 AND    pt.credit_check_flag = 'Y'
5097                 AND    NVL(pt.org_id, -99)  = G_ORG_ID)
5098               OR
5099               (l.payment_type_code IS NULL AND h.payment_type_code IS NULL));
5100 
5101     ELSE
5102       ---returns are included
5103 
5104       IF G_debug_flag = 'Y'
5105       THEN
5106         OE_DEBUG_PUB.ADD('In Order header level select, with returns ');
5107       END IF;
5108 
5109       SELECT
5110         SUM ( DECODE( p_credit_check_rule_rec.include_tax_flag , 'Y',
5111          NVL(DECODE(l.line_category_code,'RETURN',(-1)*NVL(l.tax_line_value,l.tax_value),NVL(l.tax_line_value,l.tax_value)),0), 0 )  --TaxER
5112         + (l.unit_selling_price * DECODE(l.line_category_code,'RETURN',
5113          (-1)*l.ordered_quantity,l.ordered_quantity))
5114         )
5115       INTO   l_order_value
5116       FROM   oe_order_lines l,
5117              oe_order_headers_all h,
5118              ra_terms_b t
5119       WHERE  h.header_id                   = p_header_id
5120         AND  h.org_id                      = l.org_id           /* MOAC_SQL_CHANGE */
5121         AND  h.header_id                   = l.header_id
5122         --ER 12363706 AND  l.open_flag                   = 'Y'
5123         AND l.open_flag           = DECODE(p_all_lines,'Y',l.open_flag,'Y') --ER 12363706
5124         AND  (l.invoiced_quantity IS NULL OR l.invoiced_quantity = 0)
5125         AND  t.term_id                     = l.payment_term_id
5126         AND  t.credit_check_flag           = 'Y'
5127         AND  (EXISTS
5128                (SELECT NULL
5129                 FROM   oe_payment_types_all pt
5130                 WHERE  pt.payment_type_code = NVL(l.payment_type_code,
5131                                               NVL(h.payment_type_code, 'BME'))
5132                 AND    pt.credit_check_flag = 'Y'
5133                 AND    NVL(pt.org_id, -99)  = G_ORG_ID)
5134               OR
5135               (l.payment_type_code IS NULL AND h.payment_type_code IS NULL));
5136 
5137 
5138     END IF; ---end for checking if returns are included
5139 
5140      IF G_debug_flag = 'Y'
5141      THEN
5142        OE_DEBUG_PUB.ADD('Check for Committment ');
5143      END IF ;
5144 
5145      IF OE_Commitment_PVT.Do_Commitment_Sequencing
5146      THEN
5147        BEGIN
5148          IF G_debug_flag = 'Y'
5149          THEN
5150            OE_DEBUG_PUB.ADD('In Order header commitment');
5151          END IF;
5152 
5153          SELECT NVL(SUM(P.commitment_applied_amount), 0)
5154          INTO   l_commitment
5155          FROM   oe_order_lines l,
5156                 oe_order_headers_all h,
5157                 ra_terms_b t,
5158                 oe_payments p
5159          WHERE  h.header_id                   = p_header_id
5160            AND  h.org_id                      = l.org_id           /* MOAC_SQL_CHANGE */
5161            AND  h.header_id                   = l.header_id
5162            AND  p.header_id                   = p_header_id
5163            AND  p.header_id                   = h.header_id
5164            AND  p.line_id                     = l.line_id
5165           --ER 12363706 AND  l.open_flag                   = 'Y'
5166            AND l.open_flag           = DECODE(p_all_lines,'Y',l.open_flag,'Y') --ER 12363706
5167            AND  l.line_category_code          = 'ORDER'
5168            AND  (l.invoiced_quantity IS NULL OR l.invoiced_quantity = 0)
5169            AND  t.term_id                     = l.payment_term_id
5170            AND  t.credit_check_flag           = 'Y'
5171            AND  (EXISTS
5172                   (SELECT NULL
5173                    FROM   oe_payment_types_all pt
5174                    WHERE  pt.payment_type_code = NVL(l.payment_type_code,
5175                                                  NVL(h.payment_type_code,'BME'))
5176                    AND    pt.credit_check_flag = 'Y'
5177                    AND    NVL(pt.org_id, -99)  = G_ORG_ID)
5178                  OR
5179                  (l.payment_type_code IS NULL AND h.payment_type_code IS NULL));
5180 
5181          EXCEPTION
5182            WHEN NO_DATA_FOUND
5183            THEN
5184              OE_DEBUG_PUB.ADD(' NO commitment-1 found ');
5185              l_commitment := 0 ;
5186 
5187             WHEN TOO_MANY_ROWS
5188             THEN
5189               OE_DEBUG_PUB.ADD(' Too many rows excepn NO commitment-1 found ');
5190               l_commitment := 0 ;
5191          END ;
5192      END IF; -- commitment
5193 
5194      --
5195      -- Get prepayment amount if prepayment is used
5196      -- the order is assumed to have at least one line with
5197      -- payment type with credit_check_flag = Y since it passes
5198      -- check the check to determine if credit check is required
5199      --
5200      IF G_MULTIPLE_PAYMENTS_ENABLED THEN
5201        IF G_debug_flag = 'Y' THEN
5202          OE_DEBUG_PUB.ADD('In Order header prepayment');
5203        END IF;
5204 
5205        SELECT SUM(P.prepaid_amount)
5206        INTO   l_prepayment
5207        FROM   oe_payments p
5208        WHERE  p.header_id   = p_header_id
5209        AND    p.line_id IS NULL;
5210 
5211      END IF; -- prepayment
5212 
5213      IF  p_credit_check_rule_rec.incl_freight_charges_flag = 'Y'
5214      THEN
5215 
5216        -----added for Returns
5217        IF NVL(p_credit_check_rule_rec.include_returns_flag,'N')='N'
5218        THEN
5219          ---returns are not included
5220 
5221          IF G_debug_flag = 'Y'
5222          THEN
5223            OE_DEBUG_PUB.ADD(' Process trx freights - order level ');
5224          END IF;
5225 
5226          BEGIN
5227 
5228             SELECT
5229               SUM
5230               ( DECODE(p.list_line_type_code,'TAX',0,DECODE( P.CREDIT_OR_CHARGE_FLAG, 'C', (-1), (+1) )
5231               * DECODE( p.arithmetic_operator, 'LUMPSUM',          --bug 4295299
5232                         p.operand, (l.ordered_quantity * p.adjusted_amount)))
5233 	      --TaxER Start
5234 	      + DECODE(p_credit_check_rule_rec.include_tax_flag ,'Y',DECODE(p.list_line_type_code,'TAX',p.adjusted_amount,0),0)
5235 	      --TaxER End
5236               )
5237             INTO l_freights_hdr_1
5238             FROM   oe_price_adjustments p
5239                  , oe_order_lines   l
5240                  , oe_order_headers_all h
5241                  , ra_terms_b t
5242             WHERE  h.header_id           = p_header_id
5243               AND  h.org_id              = l.org_id           /* MOAC_SQL_CHANGE */
5244               AND  p.line_id             =  l.line_id
5245               AND  p.header_id           =  l.header_id
5246               AND  p.header_id           =  h.header_id
5247               AND  h.booked_flag         =  'Y'
5248               AND  h.open_flag           =  'Y'
5249             --ER 12363706 AND  l.open_flag           =  'Y'
5250               AND l.open_flag          = DECODE(p_all_lines,'Y',l.open_flag,'Y') --ER 12363706
5251               AND  l.line_category_code  =  'ORDER'
5252 	      --TaxER  AND  p.applied_flag        =  'Y'
5253   	      --TaxER AND  p.list_line_type_code =  'FREIGHT_CHARGE'
5254   	      AND  ((p.list_line_type_code =  'FREIGHT_CHARGE' and p.applied_flag =  'Y') OR (p.list_line_type_code = 'TAX' and p.applied_flag =  'N'  and p.parent_adjustment_id IS NOT NULL))  --TaxER  --12895421
5255               AND  (p.invoiced_flag IS NULL OR p.invoiced_flag = 'N')
5256               AND  (l.invoiced_quantity IS NULL OR l.invoiced_quantity = 0)
5257               AND  t.term_id             = l.payment_term_id
5258               AND  t.credit_check_flag   = 'Y'
5259               AND  (EXISTS
5260                      (SELECT NULL
5261                       FROM   oe_payment_types_all pt
5262                       WHERE  pt.payment_type_code = NVL(l.payment_type_code,
5263                                                     NVL(h.payment_type_code,'BME'))
5264                       AND    pt.credit_check_flag = 'Y'
5265                       AND    NVL(pt.org_id, -99)  = G_ORG_ID)
5266                     OR
5267                     (l.payment_type_code IS NULL AND h.payment_type_code IS NULL));
5268 
5269            SELECT
5270             SUM(DECODE(p.list_line_type_code,'TAX',0,DECODE(P.CREDIT_OR_CHARGE_FLAG, 'C', (-1), (+1) ) * P.OPERAND )
5271             --TaxER Start
5272  	    + DECODE(p_credit_check_rule_rec.include_tax_flag ,'Y',DECODE(p.list_line_type_code,'TAX',p.adjusted_amount,0),0))
5273 	    --TaxER End
5274            INTO l_freights_hdr_2
5275            FROM
5276                oe_price_adjustments p
5277              , oe_order_headers h
5278            WHERE  h.header_id           = p_header_id
5279              AND  p.line_id             IS NULL
5280              AND  p.header_id           =  h.header_id
5281              AND  h.order_category_code IN ('ORDER','MIXED')
5282              AND  h.open_flag  =  'Y'
5283              AND  h.booked_flag         =  'Y'
5284 	     --TaxER  AND  p.applied_flag        =  'Y'
5285  	     --TaxER AND  p.list_line_type_code =  'FREIGHT_CHARGE'
5286 	     AND  ((p.list_line_type_code =  'FREIGHT_CHARGE' and p.applied_flag =  'Y') OR (p.list_line_type_code = 'TAX' and p.applied_flag =  'N'  and p.parent_adjustment_id IS NOT NULL))  --TaxER  --12895421
5287              AND  (p.invoiced_flag IS NULL OR p.invoiced_flag = 'N');
5288 
5289 
5290            l_freights := NVL(l_freights_hdr_2,0) + NVL(l_freights_hdr_1,0) ;
5291 
5292           EXCEPTION
5293             WHEN NO_DATA_FOUND
5294             THEN
5295              l_freights := 0 ;
5296           END ;
5297       ELSE
5298         ---returns are included
5299 
5300          IF G_debug_flag = 'Y'
5301          THEN
5302            OE_DEBUG_PUB.ADD(' Process trx freights - order level,with returns ');
5303          END IF;
5304 
5305          BEGIN
5306             SELECT
5307               SUM
5308               (DECODE(p.list_line_type_code,'TAX',0, DECODE( P.CREDIT_OR_CHARGE_FLAG, 'C', (-1), (+1) )
5309               * DECODE( p.arithmetic_operator, 'LUMPSUM',          --bug 4295299
5310                         p.operand, (l.ordered_quantity * p.adjusted_amount)))
5311             --TaxER Start
5312             + DECODE(p_credit_check_rule_rec.include_tax_flag ,'Y',DECODE(p.list_line_type_code,'TAX',p.adjusted_amount,0),0)
5313             --TaxER End
5314               )
5315             INTO l_freights_hdr_1
5316             FROM oe_price_adjustments p
5317                , oe_order_lines   l
5318                , oe_order_headers_all h
5319                , ra_terms_b t
5320             WHERE  h.header_id           = p_header_id
5321               AND  h.org_id              = l.org_id           /* MOAC_SQL_CHANGE */
5322               AND  p.line_id             =  l.line_id
5323               AND  p.header_id           =  l.header_id
5324               AND  p.header_id           =  h.header_id
5325               AND  h.booked_flag         =  'Y'
5326               AND  h.open_flag           =  'Y'
5327             --ER 12363706 AND  l.open_flag           =  'Y'
5328               AND l.open_flag = DECODE(p_all_lines,'Y',l.open_flag,'Y') --ER 12363706
5329               --TaxER  AND  p.applied_flag        =  'Y'
5330               --TaxER AND  p.list_line_type_code =  'FREIGHT_CHARGE'
5331               AND  ((p.list_line_type_code =  'FREIGHT_CHARGE' and p.applied_flag =  'Y') OR (p.list_line_type_code = 'TAX' and p.applied_flag =  'N' and p.parent_adjustment_id IS NOT NULL))  --TaxER  --12895421
5332               AND  (p.invoiced_flag IS NULL OR p.invoiced_flag = 'N' )
5333               AND  (l.invoiced_quantity IS NULL OR l.invoiced_quantity = 0)
5334               AND  t.term_id             = l.payment_term_id
5335               AND  t.credit_check_flag   = 'Y'
5336               AND  (EXISTS
5337                      (SELECT NULL
5338                       FROM   oe_payment_types_all pt
5339                       WHERE  pt.payment_type_code = NVL(l.payment_type_code,
5340                                                NVL(h.payment_type_code, 'BME'))
5341                       AND    pt.credit_check_flag = 'Y'
5342                       AND    NVL(pt.org_id, -99)  = G_ORG_ID)
5343                    OR
5344                  (l.payment_type_code IS NULL AND h.payment_type_code IS NULL));
5345 
5346          -- no need to check for credit_check_flag since the order
5347          -- already have at least one line with the flag set.
5348          SELECT
5349             SUM(DECODE(p.list_line_type_code,'TAX',0,DECODE(P.CREDIT_OR_CHARGE_FLAG, 'C', (-1), (+1) ) * P.OPERAND )
5350             --TaxER Start
5351             + DECODE(p_credit_check_rule_rec.include_tax_flag ,'Y',DECODE(p.list_line_type_code,'TAX',p.adjusted_amount,0),0))
5352             --TaxER End
5353            INTO l_freights_hdr_2
5354            FROM
5355                oe_price_adjustments p
5356              , oe_order_headers h
5357            WHERE  h.header_id           = p_header_id
5358              AND  p.line_id             IS NULL
5359              AND  p.header_id           =  h.header_id
5360              AND  h.order_category_code IN ('ORDER','MIXED','RETURN')
5361              AND  h.open_flag  =  'Y'
5362              AND  h.booked_flag         =  'Y'
5363              --TaxER  AND  p.applied_flag        =  'Y'
5364              --TaxER AND  p.list_line_type_code =  'FREIGHT_CHARGE'
5365              AND  ((p.list_line_type_code =  'FREIGHT_CHARGE' and p.applied_flag =  'Y') OR (p.list_line_type_code = 'TAX' and p.applied_flag =  'N' and p.parent_adjustment_id IS NOT NULL))  --TaxER  --12895421
5366              AND  (p.invoiced_flag IS NULL OR p.invoiced_flag = 'N');
5367 
5368 
5369            l_freights := NVL(l_freights_hdr_2,0) + NVL(l_freights_hdr_1,0) ;
5370 
5371           EXCEPTION
5372             WHEN NO_DATA_FOUND
5373             THEN
5374              l_freights := 0 ;
5375           END ;
5376 
5377       END IF; --end of checkig if returns are included
5378     END IF; -- freights
5379 
5380   END IF; -- Hdr or line
5381 
5382   IF G_debug_flag = 'Y'
5383   THEN
5384     OE_DEBUG_PUB.ADD(' l_order_value = '|| l_order_value );
5385     OE_DEBUG_PUB.ADD(' l_commitment  = '|| l_commitment  );
5386     OE_DEBUG_PUB.ADD(' l_freights    = ' || l_freights );
5387   END IF;
5388 
5389 
5390   -- convert amount
5391  BEGIN
5392   IF G_debug_flag = 'Y'
5393   THEN
5394     OE_DEBUG_PUB.Add(' GL_CURRENCY = '||
5395            OE_Credit_Engine_GRP.GL_currency );
5396   END IF;
5397  -- Bug 8249878
5398  /*    l_order_value :=   NVL(l_order_value,0)
5399                       - NVL(l_commitment,0)
5400                       - NVL(l_prepayment,0)
5401                       + NVL(l_freights,0); */
5402        l_order_value :=   NVL(l_order_value,0)
5403                       - NVL(l_commitment,0)
5404                       + NVL(l_freights,0);
5405   IF G_debug_flag = 'Y'
5406   THEN
5407     OE_DEBUG_PUB.ADD(' Total order amount = '|| l_order_value );
5408   END IF;
5409 
5410   l_limit_order_value :=
5411         OE_CREDIT_CHECK_UTIL.CONVERT_CURRENCY_AMOUNT
5412         ( p_amount	           => l_order_value
5413         , p_transactional_currency => p_transaction_curr_code
5414         , p_limit_currency	   => p_limit_curr_code
5415         , p_functional_currency	   => OE_Credit_Engine_GRP.GL_currency
5416         , p_conversion_date	   => SYSDATE
5417         , p_conversion_type	   => p_credit_check_rule_rec.conversion_type
5418         );
5419 
5420 
5421  END ;
5422 
5423 -- x_amount := NVL(l_limit_order_value,0) ;
5424 
5425   OE_CREDIT_CHECK_UTIL.Rounded_Amount(p_currency_code => p_limit_curr_code
5426 			,p_unrounded_amount =>  NVL(l_limit_order_value,0)
5427 			,x_rounded_amount => x_amount);
5428 
5429   OE_CREDIT_CHECK_UTIL.g_current_order_value := x_amount ;
5430 
5431   IF G_debug_flag = 'Y'
5432   THEN
5433     OE_DEBUG_PUB.Add(' g_current_order_value = '||
5434        OE_CREDIT_CHECK_UTIL.g_current_order_value );
5435     OE_DEBUG_PUB.Add(' Final trx check order amount = '|| x_amount,1 );
5436     OE_DEBUG_PUB.Add(' ====================================');
5437   END IF;
5438 
5439   IF G_debug_flag = 'Y'
5440   THEN
5441     OE_DEBUG_PUB.ADD('OEXUCRCB: OUT NOCOPY GET_transaction_amount ');
5442   END IF;
5443 
5444 EXCEPTION
5445    WHEN  GL_CURRENCY_API.NO_RATE
5446    THEN
5447     OE_DEBUG_PUB.ADD('EXCEPTION: GL_CURRENCY_API.NO_RATE ');
5448     x_conversion_status(1).usage_curr_code := p_transaction_curr_code;
5449     fnd_message.set_name('ONT', 'OE_CONVERSION_ERROR');
5450     OE_DEBUG_PUB.ADD('Exception table added ');
5451 
5452   WHEN NO_DATA_FOUND
5453   THEN
5454     x_amount := 0 ;
5455     OE_DEBUG_PUB.ADD('EXCEPTION: NO_DATA_FOUND ');
5456 
5457   WHEN TOO_MANY_ROWS
5458   THEN
5459     x_amount := 0 ;
5460     OE_DEBUG_PUB.ADD('EXCEPTION: TOO_MANY_ROWS ');
5461 
5462   WHEN OTHERS THEN
5463    G_DBG_MSG := SUBSTR(sqlerrm,1,200);
5464     OE_DEBUG_PUB.ADD('EXCEPTION = '||
5465 SUBSTR(sqlerrm,1,200) );
5466    x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
5467 
5468     IF FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
5469     THEN
5470       FND_MSG_PUB.Add_Exc_Msg
5471       ( G_PKG_NAME
5472       , 'GET_transaction_amount'
5473       );
5474     END IF;
5475     RAISE;
5476 END GET_transaction_amount ;
5477 
5478 
5479 --========================================================================
5480 -- PROCEDURE : Get_Past_Due_Invoice
5481 -- Comments  : for pre-claculated cc the check will be made
5482 --             from summary table
5483 -- Parameters:
5484 --
5485 --========================================================================
5486 PROCEDURE Get_Past_Due_Invoice
5487 ( p_customer_id        IN   NUMBER
5488 , p_site_use_id        IN   NUMBER
5489 , p_party_id           IN   NUMBER
5490 , p_credit_check_rule_rec IN
5491              OE_CREDIT_CHECK_UTIL.OE_credit_rules_rec_type
5492 , p_system_parameter_rec   IN
5493              OE_CREDIT_CHECK_UTIL.OE_systems_param_rec_type
5494 , p_credit_level       IN   VARCHAR2
5495 , p_usage_curr         IN   oe_credit_check_util.curr_tbl_type
5496 , p_include_all_flag   IN   VARCHAR2
5497 , p_global_exposure_flag IN VARCHAR2 := 'N'
5498 , x_exist_flag         OUT  NOCOPY VARCHAR2
5499 , x_return_status      OUT  NOCOPY VARCHAR2
5500 )
5501 IS
5502   l_maximum_days_past_due   NUMBER;
5503   l_dummy                   VARCHAR2(30);
5504 BEGIN
5505   IF G_debug_flag = 'Y'
5506   THEN
5507     OE_DEBUG_PUB.ADD('OEXUCRCB: In Get_Past_Due_Invoice');
5508   END IF;
5509 
5510   -- Initialize return status to success
5511   x_return_status := FND_API.G_RET_STS_SUCCESS;
5512 
5513   IF NVL(p_credit_check_rule_rec.quick_cr_check_flag,'N')  = 'N'
5514   THEN
5515  -- Bug2408466
5516  -- REmove the OLD code with DECODES
5517   IF G_debug_flag = 'Y'
5518   THEN
5519     OE_DEBUG_PUB.ADD('maximum_days_past_due ==> '||
5520          p_credit_check_rule_rec.maximum_days_past_due,1 );
5521 
5522     OE_DEBUG_PUB.ADD('p_credit_level ==> '|| p_credit_level );
5523     OE_DEBUG_PUB.ADD('p_include_all_flag ==> '|| p_include_all_flag);
5524     OE_DEBUG_PUB.ADD('p_global_exposure_flag ==> '||
5525        p_global_exposure_flag );
5526   END IF;
5527 
5528   IF NVL(p_global_exposure_flag,'N') = 'N'
5529   THEN
5530    BEGIN
5531      IF G_debug_flag = 'Y'
5532      THEN
5533        OE_DEBUG_PUB.Add(' Into NOT Global ');
5534      END IF;
5535     --bug 4174163
5536     --IF NVL(p_credit_check_rule_rec.maximum_days_past_due,0) > 0
5537     IF p_credit_check_rule_rec.maximum_days_past_due is not null
5538 	and p_credit_check_rule_rec.maximum_days_past_due >= 0
5539     THEN
5540       IF p_credit_level = 'CUSTOMER'
5541       THEN
5542         BEGIN
5543           IF G_debug_flag = 'Y'
5544           THEN
5545             OE_DEBUG_PUB.Add(' Into CUSTOMER ');
5546           END IF;
5547 
5548             FOR i IN 1..p_usage_curr.count
5549             LOOP
5550               IF G_debug_flag = 'Y'
5551               THEN
5552                 OE_DEBUG_PUB.Add('Currency code = '
5553                           || p_usage_curr(i).usage_curr_code );
5554               END IF;
5555               BEGIN
5556                 SELECT 'Y'
5557                 INTO   x_exist_flag
5558                 FROM   ar_payment_schedules
5559                 WHERE  customer_id = p_customer_id
5560                   AND  ( invoice_currency_code
5561                             = p_usage_curr(i).usage_curr_code
5562                    OR p_include_all_flag = 'Y' )
5563                   AND  NVL(receipt_confirmed_flag, 'Y') = 'Y'
5564                   AND    gl_date_closed = to_date( '31-12-4712', 'DD-MM-YYYY')
5565                   AND  amount_due_remaining > 0
5566                   AND  due_date <
5567                    sysdate - p_credit_check_rule_rec.maximum_days_past_due;
5568 
5569                   -- Invoices found
5570                   x_exist_flag := 'Y' ;
5571 
5572                  IF G_debug_flag = 'Y'
5573                  THEN
5574                    OE_DEBUG_PUB.Add('Invoices found ' );
5575                  END IF;
5576 
5577                  EXIT;
5578 
5579               EXCEPTION
5580               WHEN NO_DATA_FOUND THEN
5581                  OE_DEBUG_PUB.Add(' No Invoices Past due found ' );
5582 
5583                  x_exist_flag  := 'N' ;
5584 
5585               WHEN TOO_MANY_ROWS THEN
5586                  OE_DEBUG_PUB.Add('Invoices found ' );
5587                 x_exist_flag  := 'Y' ;
5588                 EXIT;
5589             END;
5590           END LOOP;
5591         END ;
5592 
5593       ELSE
5594         BEGIN
5595           IF G_debug_flag = 'Y'
5596           THEN
5597             OE_DEBUG_PUB.Add(' Into SITE ');
5598           END IF;
5599 
5600           FOR i IN 1..p_usage_curr.count
5601           LOOP
5602             IF G_debug_flag = 'Y'
5603             THEN
5604               OE_DEBUG_PUB.Add(' Currency code = '
5605                  || p_usage_curr(i).usage_curr_code );
5606             END IF;
5607             BEGIN
5608               SELECT 'Y'
5609               INTO   x_exist_flag
5610               FROM   ar_payment_schedules
5611               WHERE  customer_site_use_id = p_site_use_id
5612                 AND  ( invoice_currency_code  = p_usage_curr(i).usage_curr_code
5613                      OR p_include_all_flag = 'Y' )
5614                 AND  NVL(receipt_confirmed_flag, 'Y') = 'Y'
5615                 AND  gl_date_closed = to_date( '31-12-4712', 'DD-MM-YYYY')
5616                 AND  amount_due_remaining > 0
5617                 AND  due_date <
5618                 sysdate - p_credit_check_rule_rec.maximum_days_past_due;
5619 
5620                -- Invoices found
5621                x_exist_flag := 'Y' ;
5622 
5623                IF G_debug_flag = 'Y'
5624                THEN
5625                  OE_DEBUG_PUB.Add('Invoices found ' );
5626                END IF;
5627 
5628              EXIT;
5629 
5630              EXCEPTION
5631              WHEN NO_DATA_FOUND THEN
5632                OE_DEBUG_PUB.Add('No Invoices Past due found in this curr' );
5633               x_exist_flag  := 'N' ;
5634              WHEN TOO_MANY_ROWS THEN
5635               OE_DEBUG_PUB.Add('Invoices found ' );
5636               x_exist_flag  := 'Y' ;
5637               EXIT;
5638             END;
5639           END LOOP;
5640         END ;
5641       END IF;
5642 
5643     ELSE
5644       IF G_debug_flag = 'Y'
5645       THEN
5646         OE_DEBUG_PUB.Add(' No need to check ' );
5647       END IF;
5648       x_exist_flag := 'N' ;
5649     END IF;
5650   END;
5651 
5652  ELSIF p_global_exposure_flag = 'Y'
5653  THEN
5654    BEGIN
5655      IF G_debug_flag = 'Y'
5656      THEN
5657        OE_DEBUG_PUB.Add(' Into GLOBAL checking ');
5658      END IF;
5659     --bug 4174163
5660     --IF NVL(p_credit_check_rule_rec.maximum_days_past_due,0) > 0
5661     IF p_credit_check_rule_rec.maximum_days_past_due is not null
5662 	and p_credit_check_rule_rec.maximum_days_past_due >= 0
5663     THEN
5664       IF p_credit_level = 'CUSTOMER'
5665       THEN
5666         BEGIN
5667           IF G_debug_flag = 'Y'
5668           THEN
5669             OE_DEBUG_PUB.Add(' Into CUSTOMER ');
5670           END IF;
5671 
5672             FOR i IN 1..p_usage_curr.count
5673             LOOP
5674                IF G_debug_flag = 'Y'
5675                THEN
5676                 OE_DEBUG_PUB.Add('Currency code = '
5677                           || p_usage_curr(i).usage_curr_code );
5678                END IF;
5679 
5680               BEGIN
5681                 SELECT 'Y'
5682                 INTO   x_exist_flag
5683                 FROM   ar_payment_schedules_ALL
5684                 WHERE  customer_id = p_customer_id
5685                   AND  ( invoice_currency_code
5686                             = p_usage_curr(i).usage_curr_code
5687                    OR p_include_all_flag = 'Y' )
5688                   AND  NVL(receipt_confirmed_flag, 'Y') = 'Y'
5689                   AND    gl_date_closed = to_date( '31-12-4712', 'DD-MM-YYYY')
5690                   AND  amount_due_remaining > 0
5691                   AND  due_date <
5692                    sysdate - p_credit_check_rule_rec.maximum_days_past_due;
5693 
5694                   -- Invoices found
5695                   x_exist_flag := 'Y' ;
5696 
5697                   IF G_debug_flag = 'Y'
5698                   THEN
5699                     OE_DEBUG_PUB.Add('Invoices found ' );
5700                  end if;
5701 
5702                  EXIT;
5703 
5704               EXCEPTION
5705               WHEN NO_DATA_FOUND THEN
5706                  OE_DEBUG_PUB.Add(' No Invoices Past due found ' );
5707 
5708                  x_exist_flag  := 'N' ;
5709 
5710               WHEN TOO_MANY_ROWS THEN
5711                  OE_DEBUG_PUB.Add('Invoices found ' );
5712                 x_exist_flag  := 'Y' ;
5713                 EXIT;
5714             END;
5715           END LOOP;
5716         END ;
5717       END IF;
5718     ELSE
5719      OE_DEBUG_PUB.Add(' No need to check ' );
5720       x_exist_flag := 'N' ;
5721     END IF;
5722 
5723 
5724   END ;
5725   END IF;
5726   ---- End Global
5727 
5728 ELSE
5729   --bug 4174163
5730   --IF NVL(p_credit_check_rule_rec.maximum_days_past_due,0) > 0
5731   IF p_credit_check_rule_rec.maximum_days_past_due is not null
5732 	and p_credit_check_rule_rec.maximum_days_past_due >= 0
5733   THEN
5734     IF G_debug_flag = 'Y'
5735     THEN
5736       oe_debug_pub.add('calling get_invoices_over_duedate ');
5737     END IF;
5738 
5739      OE_CREDIT_EXPOSURE_PVT.get_invoices_over_duedate
5740      ( p_customer_id          => p_customer_id
5741      , p_site_use_id          => p_site_use_id
5742      , p_party_id             => p_party_id
5743      , p_credit_check_rule_rec => p_credit_check_rule_rec
5744      , p_credit_level         => p_credit_level
5745      , p_usage_curr           => p_usage_curr
5746      , p_include_all_flag     => NVL(p_include_all_flag,'N')
5747      , p_global_exposure_flag => NVL(p_global_exposure_flag,'N')
5748      , p_org_id               => G_org_id   --bug# 5031301
5749      , x_exist_flag           => x_exist_flag
5750      );
5751   ELSE
5752     x_exist_flag := 'N' ;
5753   END IF;
5754 
5755 END IF; -- precalc
5756 
5757  IF x_exist_flag IS NULL
5758  THEN
5759    x_exist_flag := 'N' ;
5760   END IF ;
5761 
5762   IF G_debug_flag = 'Y'
5763   THEN
5764     OE_DEBUG_PUB.Add(' x_exist_flag = '|| x_exist_flag );
5765     OE_DEBUG_PUB.ADD('OEXUCRCB: Out NOCOPY Get_Past_Due_Invoice');
5766   END IF;
5767 
5768  EXCEPTION
5769   WHEN OTHERS THEN
5770      x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
5771      IF OE_MSG_PUB.Check_Msg_Level(OE_MSG_PUB.G_MSG_LVL_UNEXP_ERROR) THEN
5772         OE_MSG_PUB.Add_Exc_Msg (G_PKG_NAME, 'Get_Past_Due_Invoice');
5773      END IF;
5774      RAISE;
5775 END Get_Past_Due_Invoice ;
5776 
5777 
5778 
5779 
5780 --========================================================================
5781 -- PROCEDURE : Get_order_exposure
5782 -- Comments  : Returns the exposure in the limit currency
5783 --             used for online/Header level credit checking
5784 -- BUG 3449827,3463348: return correct values when p_need_exposure_flag enabled
5785 --========================================================================
5786 PROCEDURE Get_order_exposure
5787 ( p_header_id              IN  NUMBER
5788 , p_transaction_curr_code  IN  VARCHAR2
5789 , p_customer_id            IN  NUMBER
5790 , p_site_use_id            IN  NUMBER
5791 , p_credit_check_rule_rec IN
5792              OE_CREDIT_CHECK_UTIL.OE_credit_rules_rec_type
5793 , p_system_parameter_rec   IN
5794              OE_CREDIT_CHECK_UTIL.OE_systems_param_rec_type
5795 , p_credit_level           IN  VARCHAR2
5796 , p_limit_curr_code        IN  VARCHAR2
5797 , p_usage_curr             IN  oe_credit_check_util.curr_tbl_type
5798 , p_include_all_flag       IN  VARCHAR2
5799 , p_global_exposure_flag   IN  VARCHAR2 := 'N'
5800 , p_need_exposure_details  IN  VARCHAR2 := 'N'
5801 , x_total_exposure         OUT NOCOPY NUMBER
5802 , x_ar_amount              OUT NOCOPY NUMBER
5803 , x_order_amount           OUT NOCOPY NUMBER
5804 , x_order_hold_amount      OUT NOCOPY NUMBER
5805 , x_conversion_status      OUT NOCOPY CURR_TBL_TYPE
5806 , x_return_status          OUT NOCOPY VARCHAR2
5807 )
5808 IS
5809 
5810 l_est_valid_days NUMBER :=
5811      to_number(nvl(fnd_profile.value('ONT_EST_AUTH_VALID_DAYS'),'0'));
5812 
5813 
5814 l_total_from_ar             NUMBER := 0 ;
5815 l_total_from_br             NUMBER := 0 ;
5816 l_total_on_order            NUMBER := 0 ;
5817 l_total_commitment          NUMBER := 0 ;
5818 l_total_exposure            NUMBER := 0 ;
5819 
5820 l_total_on_hold             NUMBER := 0 ;
5821 
5822 l_total_no_hold             NUMBER := 0 ;
5823 
5824 l_limit_total_exposure      NUMBER := 0 ;
5825 l_limit_current_order       NUMBER := 0 ;
5826 
5827 l_usage_total_commitment    NUMBER := 0 ;
5828 l_usage_total_exposure      NUMBER := 0 ;
5829 
5830 l_uninvoiced_hdr_freight1  NUMBER := 0 ;
5831 l_uninvoiced_hdr_freight2  NUMBER := 0 ;
5832 l_uninvoiced_line_freight1 NUMBER := 0 ;
5833 
5834 l_hold_hdr_freight1        NUMBER := 0 ;
5835 l_hold_hdr_freight2        NUMBER := 0 ;
5836 
5837 l_no_hold_hdr_freight1     NUMBER := 0 ;
5838 l_no_hold_hdr_freight2     NUMBER := 0 ;
5839 l_external_exposure        NUMBER := 0 ;
5840 
5841 l_cum_total_from_ar       NUMBER := 0 ;
5842 l_cum_payments_at_risk    NUMBER := 0 ;
5843 l_cum_total_on_order      NUMBER := 0 ;
5844 l_cum_total_on_hold       NUMBER := 0 ;
5845 l_cum_total_no_hold       NUMBER := 0;
5846 l_cum_total_commitment    NUMBER := 0;
5847 l_cum_external_exposure   NUMBER := 0;
5848 l_cum_uninv_order_total   NUMBER := 0;
5849 
5850 l_payments_at_risk        NUMBER := 0 ;
5851 l_payments_at_risk_br     NUMBER := 0 ;
5852 
5853 l_exposure_amount         NUMBER := 0 ; --bug 2714553
5854 
5855 -----------------------------------------
5856 ------ Variables for setting default values
5857 ------------------------------------------
5858 
5859 l_open_ar_days            NUMBER;
5860 l_uninvoiced_orders_flag  VARCHAR2(1) ;
5861 l_orders_on_hold_flag     VARCHAR2(1) ;
5862 l_include_tax_flag        VARCHAR2(1) ;
5863 l_shipping_horizon        DATE        := TO_DATE('31/12/4712', 'DD/MM/YYYY');
5864 l_include_risk_flag       VARCHAR2(1) ;
5865 l_quick_cr_check_flag     VARCHAR2(1) ;
5866 l_freight_charges_flag    VARCHAR2(1) ;
5867 l_open_ar_balance_flag    VARCHAR2(1) ;
5868 l_current_usage_cur       VARCHAR2(100);
5869 l_incl_external_exposure_flag VARCHAR2(1);
5870 l_drawee_site_use_id      NUMBER;
5871 l_need_exposure_details   VARCHAR2(1) := NVL(p_need_exposure_details, 'N');
5872 l_include_returns_flag    VARCHAR2(1);
5873 l_header_id               NUMBER;
5874 ---------------------------------------------------------------
5875 -- Cursor definitions
5876 -- a) In order related cursors, use l_header_id instead of
5877 --    p_header_id. This is done to remove the NVL on p_header_id
5878 --    as p_header_id will be coming in as NULL for the
5879 --    exposure reports.
5880 --
5881 -- b) Removed NVL on ordered_quantity and unit_selling_price as these
5882 --    will always have a value for booked orders.
5883 ---------------------------------------------------------------
5884 --- CUSTOMER LEVEL CURSORS
5885 
5886 -- External exposure cursor
5887 CURSOR cust_external_exposure_csr (p_curr_code IN VARCHAR2 default NULL) IS
5888    SELECT SUM(balance)
5889    FROM   oe_credit_summaries
5890    WHERE  balance_type     = 18
5891    AND    cust_account_id  = p_customer_id
5892    AND    NVL(org_id,-99)  = G_ORG_ID
5893    AND    currency_code    = p_curr_code;
5894 
5895 CURSOR cust_external_csr_global
5896  (p_curr_code IN VARCHAR2 default NULL) IS
5897    SELECT SUM(balance)
5898    FROM   oe_credit_summaries
5899    WHERE  balance_type     = 18
5900    AND    cust_account_id  = p_customer_id
5901    AND    currency_code    = p_curr_code;
5902 
5903 
5904 -- AR BALANCE
5905 -- Bug2417717 Support customer relationships
5906 -- The exposure must include transactions where
5907 -- created by the bill to sites owned by the customer
5908 
5909    CURSOR cust_ar_balance (p_curr_code IN VARCHAR2 default NULL) IS
5910     SELECT SUM(NVL(ps.amount_due_remaining,0))
5911     FROM   ar_payment_schedules ps
5912         ,  hz_cust_site_uses_all su
5913         -- ,  hz_cust_acct_sites_all cas                      -- Commented Bug#11827225
5914     WHERE  ps.CUSTOMER_SITE_USE_ID = su.site_use_id
5915       AND  ps.org_id               = su.org_id                   /* MOAC_SQL_CHANGE */
5916       AND  ps.status               = 'OP'
5917       --AND  su.cust_acct_site_id  =  cas.cust_acct_site_id  -- Commented Bug#11827225
5918       --AND  cas.cust_account_id   = p_customer_id           -- Commented Bug#11827225
5919       AND  ps.customer_id =   p_customer_id                  -- Added for Bug#11827225
5920       AND  su.site_use_code       =
5921            DECODE(l_open_ar_days,0,site_use_code,'BILL_TO' )
5922       AND  ps.invoice_currency_code =
5923            p_curr_code
5924       AND  NVL(ps.receipt_confirmed_flag, 'Y') = 'Y'
5925       AND  ps.gl_date_closed = to_date( '31-12-4712', 'DD-MM-YYYY')
5926       AND  sysdate - ps.trx_date >
5927    NVL(p_credit_check_rule_rec.OPEN_AR_DAYS, sysdate - ps.trx_date - 1);
5928 
5929 ---------------------- BR support -------------------
5930 
5931 CURSOR cust_BR_balance (p_curr_code IN VARCHAR2 default NULL) IS
5932     SELECT SUM(NVL(ps.amount_due_remaining,0))
5933     FROM   ar_payment_schedules ps
5934         ,  hz_cust_site_uses_all su
5935         -- ,  hz_cust_acct_sites_all cas                         -- Commented Bug#11827225
5936     WHERE  ps.CUSTOMER_SITE_USE_ID = su.site_use_id
5937       AND  ps.org_id               = su.org_id                    /* MOAC_SQL_CHANGE */
5938       AND  ps.status               = 'OP'
5939       --AND  su.cust_acct_site_id    =  cas.cust_acct_site_id   -- Commented Bug#11827225
5940       --AND  cas.cust_account_id     = p_customer_id            -- Commented Bug#11827225
5941       AND  ps.customer_id =   p_customer_id                     -- Added for Bug#11827225
5942       AND  ps.invoice_currency_code =
5943            p_curr_code
5944       AND    NVL(ps.receipt_confirmed_flag, 'Y') = 'Y'
5945       AND  su.site_use_code        = 'DRAWEE'
5946       AND    ps.gl_date_closed = to_date( '31-12-4712', 'DD-MM-YYYY') ;
5947 
5948 --  PAY AT RISK
5949 
5950 CURSOR cust_pay_risk (p_curr_code IN VARCHAR2 default NULL) IS
5951 SELECT SUM(NVL(crh.amount,0))
5952     FROM   ar_cash_receipt_history crh
5953          , ar_cash_receipts_all cr
5954          ,  hz_cust_site_uses_all su
5955          ,  hz_cust_acct_sites_all cas
5956     WHERE  crh.cash_receipt_id        = cr.cash_receipt_id
5957     AND    crh.org_id                 = cr.org_id                    /* MOAC_SQL_CHANGE */
5958     AND    NVL(cr.confirmed_flag,'Y') = 'Y'
5959     AND    crh.current_record_flag    = 'Y'
5960     AND    crh.status <> DECODE ( crh.factor_flag
5961                                 , 'Y', 'RISK_ELIMINATED'
5962                                 , 'CLEARED')
5963     AND    NVL( cr.reversal_category, cr.status||'X' )  <>  cr.status
5964     AND    crh.status <> 'REVERSED'
5965     AND    cr.currency_code           =
5966               p_curr_code
5967     AND    cr.pay_from_customer    = cas.cust_account_id
5968     AND    cr.org_id               = cas.org_id
5969     AND    cr.CUSTOMER_SITE_USE_ID = su.site_use_id
5970     AND    su.cust_acct_site_id    = cas.cust_acct_site_id
5971     AND    cas.cust_account_id     = p_customer_id
5972     AND   su.site_use_code        =
5973                 DECODE(l_open_ar_days,0,
5974            site_use_code,'BILL_TO' )
5975     AND    sysdate - cr.receipt_date >
5976            NVL(p_credit_check_rule_rec.OPEN_AR_DAYS,
5977               sysdate - cr.receipt_date - 1)
5978     AND  NOT EXISTS
5979            (
5980            SELECT
5981              'X'
5982            FROM
5983              ar_receivable_applications rap
5984            WHERE
5985                   rap.cash_receipt_id  =  cr.cash_receipt_id
5986              AND  rap.applied_payment_schedule_id  =  -2
5987              AND  rap.display  =  'Y'
5988          ) ;
5989 
5990 
5991 CURSOR cust_br_pay_risk (p_curr_code IN VARCHAR2 default NULL) IS
5992 SELECT SUM(NVL(crh.amount,0))
5993     FROM   ar_cash_receipt_history crh
5994          , ar_cash_receipts_all cr
5995          ,  hz_cust_site_uses_all su
5996          ,  hz_cust_acct_sites_all cas
5997     WHERE  crh.cash_receipt_id        = cr.cash_receipt_id
5998     AND    crh.org_id                 = cr.org_id                    /* MOAC_SQL_CHANGE */
5999     AND    NVL(cr.confirmed_flag,'Y') = 'Y'
6000     AND    crh.current_record_flag    = 'Y'
6001     AND    crh.status <> DECODE ( crh.factor_flag
6002                                 , 'Y', 'RISK_ELIMINATED'
6003                                 , 'CLEARED')
6004     AND    NVL( cr.reversal_category, cr.status||'X' )  <>  cr.status
6005     AND    crh.status <> 'REVERSED'
6006     AND    cr.currency_code           =
6007               p_curr_code
6008     AND    cr.pay_from_customer    = cas.cust_account_id
6009     AND    cr.org_id               = cas.org_id
6010     AND    cr.CUSTOMER_SITE_USE_ID = su.site_use_id
6011     AND    su.cust_acct_site_id    = cas.cust_acct_site_id
6012     AND    cas.cust_account_id     = p_customer_id
6013      AND  su.site_use_code        = 'DRAWEE'
6014     AND  NOT EXISTS
6015            (
6016            SELECT
6017              'X'
6018            FROM
6019              ar_receivable_applications rap
6020            WHERE
6021                   rap.cash_receipt_id  =  cr.cash_receipt_id
6022              AND  rap.applied_payment_schedule_id  =  -2
6023              AND  rap.display  =  'Y' );
6024 
6025 
6026 
6027 ---CUSTOMER UNINVOICED ORDERS
6028 
6029 CURSOR cust_uninvoiced_orders (p_curr_code IN VARCHAR2 default NULL) IS
6030     SELECT SUM (
6031                  ( l.ordered_quantity * l.unit_selling_price )
6032                +   DECODE(l_include_tax_flag, 'Y',
6033                     NVL(NVL(l.tax_line_value,l.tax_value),0), 0   )   --TaxER
6034                )
6035     FROM    oe_order_lines_all l
6036           , oe_order_headers h
6037           , hz_cust_site_uses_all su
6038           , hz_cust_acct_sites_all cas
6039     WHERE  h.invoice_to_org_id     = su.site_use_id
6040     AND    h.org_id                = su.org_id
6041     AND    su.cust_acct_site_id    = cas.cust_acct_site_id
6042     AND    cas.cust_account_id     = p_customer_id
6043     AND    h.header_id             = l.header_id
6044     AND    h.org_id                = l.org_id                   /* MOAC_SQL_CHANGE */
6045     AND    NVL(L.SCHEDULE_SHIP_DATE,NVL(L.REQUEST_DATE,NVL(H.REQUEST_DATE,H.CREATION_DATE)))
6046            <= l_shipping_horizon
6047     AND    (l.invoiced_quantity IS NULL OR l.invoiced_quantity = 0)
6048     AND    h.open_flag   = 'Y'
6049     AND    l.line_category_code = 'ORDER'
6050     AND    h.booked_flag = 'Y'
6051     AND    l.open_flag = 'Y'
6052     AND    h.header_id <> l_header_id
6053     AND    h.transactional_curr_code = p_curr_code
6054     AND    (EXISTS
6055              (SELECT NULL
6056               FROM   oe_payment_types_all pt
6057               WHERE  pt.payment_type_code = NVL(l.payment_type_code,
6058                                             NVL(h.payment_type_code, 'BME'))
6059               AND    pt.credit_check_flag = 'Y'
6060               AND    NVL(pt.org_id, -99)  = G_ORG_ID)
6061            OR
6062            (l.payment_type_code IS NULL AND h.payment_type_code IS NULL));
6063 
6064 ---CUSTOMER UNINVOICED ORDERS, including Returns
6065 
6066 CURSOR cust_uninv_orders_ret(p_curr_code IN VARCHAR2 default NULL) IS
6067     SELECT
6068       SUM (
6069       ( DECODE(l.line_category_code,'RETURN',(-1)*l.ordered_quantity,l.ordered_quantity)
6070       * l.unit_selling_price )
6071       +   DECODE(l_include_tax_flag, 'Y',
6072       NVL(DECODE(l.line_category_code,'RETURN',(-1)*NVL(l.tax_line_value,l.tax_value),NVL(l.tax_line_value,l.tax_value)),0),0 --TaxER
6073           ))
6074     FROM   oe_order_lines l
6075          , oe_order_headers_all h
6076          ,  hz_cust_site_uses_all su
6077          ,  hz_cust_acct_sites_all cas
6078     WHERE  h.invoice_to_org_id     = su.site_use_id
6079     AND    h.org_id                = su.org_id
6080     AND    su.cust_acct_site_id    = cas.cust_acct_site_id
6081     AND    cas.cust_account_id     = p_customer_id
6082     AND    h.header_id             = l.header_id
6083     AND    h.org_id                = l.org_id                     /* MOAC_SQL_CHANGE */
6084     AND    NVL(L.SCHEDULE_SHIP_DATE,NVL(L.REQUEST_DATE,NVL(H.REQUEST_DATE,H.CREATION_DATE)))
6085            <= l_shipping_horizon
6086     AND    (l.invoiced_quantity IS NULL OR l.invoiced_quantity = 0)
6087     AND    h.open_flag   = 'Y'
6088     AND    h.booked_flag = 'Y'
6089     AND    l.open_flag = 'Y'
6090     AND    h.header_id <> l_header_id
6091     AND    h.transactional_curr_code = p_curr_code
6092     AND    (EXISTS
6093              (SELECT NULL
6094               FROM   oe_payment_types_all pt
6095               WHERE  pt.payment_type_code = NVL(l.payment_type_code,
6096                                             NVL(h.payment_type_code, 'BME'))
6097               AND    pt.credit_check_flag = 'Y'
6098               AND    NVL(pt.org_id, -99)  = G_ORG_ID)
6099            OR
6100            (l.payment_type_code IS NULL AND h.payment_type_code IS NULL));
6101 
6102 
6103 -------------------------------------------------
6104 ------- commitments -- Exsiting code enhancement
6105 ------------------------------------------------
6106 
6107 Cursor customer_commitment_total (p_curr_code IN VARCHAR2 default NULL) IS
6108        SELECT NVL(SUM(P.commitment_applied_amount), 0)
6109         FROM  OE_PAYMENTS P, OE_ORDER_HEADERS_ALL H, OE_ORDER_LINES L
6110             , hz_cust_site_uses_all su
6111             , hz_cust_acct_sites_all cas
6112 	WHERE H.invoice_to_org_id     = su.site_use_id
6113         AND   h.org_id                = su.org_id
6114         AND   su.cust_acct_site_id    = cas.cust_acct_site_id
6115         AND   cas.cust_account_id     = p_customer_id
6116         AND   H.TRANSACTIONAL_CURR_CODE = p_curr_code
6117 	AND   H.OPEN_FLAG      = 'Y'
6118 	AND   H.BOOKED_FLAG    = 'Y'
6119 	AND   H.HEADER_ID      = P.HEADER_ID
6120 	AND   H.HEADER_ID      <> l_header_id
6121         AND   L.HEADER_ID                = H.HEADER_ID
6122         AND   L.ORG_ID                   = H.ORG_ID             /* MOAC_SQL_CHANGE */
6123         AND   L.LINE_ID                  = P.LINE_ID
6124         AND   (l.invoiced_quantity IS NULL OR l.invoiced_quantity = 0)
6125 	AND   L.OPEN_FLAG                = 'Y'
6126 	AND   L.LINE_CATEGORY_CODE       = 'ORDER'
6127 	AND   NVL(L.SCHEDULE_SHIP_DATE,NVL(L.REQUEST_DATE,NVL(H.REQUEST_DATE,H.CREATION_DATE)))
6128 	         	        <= l_shipping_horizon
6129         AND    (EXISTS
6130                  (SELECT NULL
6131                   FROM   oe_payment_types_all pt
6132                   WHERE  pt.payment_type_code = NVL(l.payment_type_code,
6133                                                 NVL(h.payment_type_code, 'BME'))
6134                   AND    pt.credit_check_flag = 'Y'
6135                   AND    NVL(pt.org_id, -99)  = G_ORG_ID)
6136                 OR
6137                 (l.payment_type_code IS NULL AND h.payment_type_code IS NULL));
6138 Cursor site_commitment_total (p_curr_code IN VARCHAR2 default NULL)  IS
6139       SELECT NVL(SUM(P.commitment_applied_amount), 0)
6140 	FROM   OE_PAYMENTS P, OE_ORDER_HEADERS_ALL H, OE_ORDER_LINES L
6141 	WHERE  H.INVOICE_TO_ORG_ID = p_site_use_id
6142         AND    H.TRANSACTIONAL_CURR_CODE = p_curr_code
6143 	AND    H.OPEN_FLAG      = 'Y'
6144 	AND    H.BOOKED_FLAG    = 'Y'
6145 	AND    H.HEADER_ID      = P.HEADER_ID
6146         AND    H.ORG_ID         = L.ORG_ID               /* MOAC_SQL_CHANGE */
6147 	AND    H.HEADER_ID      <> l_header_id
6148         AND    L.HEADER_ID                = H.HEADER_ID
6149         AND    L.LINE_ID                  = P.LINE_ID
6150         AND    (l.invoiced_quantity IS NULL OR l.invoiced_quantity = 0)
6151 	AND    L.OPEN_FLAG                = 'Y'
6152 	AND    L.LINE_CATEGORY_CODE       = 'ORDER'
6153 	AND    NVL(L.SCHEDULE_SHIP_DATE,NVL(L.REQUEST_DATE,NVL(H.REQUEST_DATE,H.CREATION_DATE)))
6154 	         	        <= l_shipping_horizon
6155         AND    (EXISTS
6156                  (SELECT NULL
6157                   FROM   oe_payment_types_all pt
6158                   WHERE  pt.payment_type_code = NVL(l.payment_type_code,
6159                                                 NVL(h.payment_type_code, 'BME'))
6160                   AND    pt.credit_check_flag = 'Y'
6161                   AND    NVL(pt.org_id, -99)  = G_ORG_ID)
6162                 OR
6163                 (l.payment_type_code IS NULL AND h.payment_type_code IS NULL));
6164 
6165 -------------------- End commitment cursors -----------------
6166 
6167 -- Customer orders not on hold
6168 
6169   CURSOR cust_orders_not_on_hold (p_curr_code IN VARCHAR2 default NULL) IS
6170     SELECT SUM (
6171                  (l.ordered_quantity * l.unit_selling_price )
6172                +   DECODE(l_include_tax_flag, 'Y',
6173                     NVL(NVL(l.tax_line_value,l.tax_value),0), 0   )   --TaxER
6174                )
6175     FROM   oe_order_lines l
6176          , oe_order_headers_all h
6177          , hz_cust_site_uses_all su
6178          , hz_cust_acct_sites_all cas
6179     WHERE  h.invoice_to_org_id     = su.site_use_id
6180     AND    h.org_id                = su.org_id
6181     AND    su.cust_acct_site_id    = cas.cust_acct_site_id
6182     AND    cas.cust_account_id     = p_customer_id
6183     AND    h.header_id = l.header_id
6184     AND    h.org_id    = l.org_id                           /* MOAC_SQL_CHANGE */
6185     AND    NVL(L.SCHEDULE_SHIP_DATE,NVL(L.REQUEST_DATE,NVL(H.REQUEST_DATE,H.CREATION_DATE)))
6186            <= l_shipping_horizon
6187     AND    (l.invoiced_quantity IS NULL OR l.invoiced_quantity = 0)
6188     AND    h.open_flag = 'Y'
6189     AND    l.line_category_code = 'ORDER'
6190     AND    h.booked_flag = 'Y'
6191     AND    l.open_flag = 'Y'
6192     AND    h.header_id <> l_header_id
6193     AND    NOT EXISTS ( SELECT  1
6194                     FROM    oe_order_holds_all oh --Performance issue (SQL ID-14880589 FTS on OE_ORDER_HOLDS_ALL)
6195                     WHERE   h.header_id  = oh.header_id
6196                      AND     oh.hold_release_id IS NULL )
6197     AND    h.transactional_curr_code = p_curr_code
6198     AND    (EXISTS
6199              (SELECT NULL
6200               FROM   oe_payment_types_all pt
6201               WHERE  pt.payment_type_code = NVL(l.payment_type_code,
6202                                             NVL(h.payment_type_code, 'BME'))
6203               AND    pt.credit_check_flag = 'Y'
6204               AND    NVL(pt.org_id, -99)  = G_ORG_ID)
6205            OR
6206            (l.payment_type_code IS NULL AND h.payment_type_code IS NULL));
6207 
6208 -- Customer orders not on hold including Returns
6209 
6210   CURSOR cust_ord_not_on_hold_ret (p_curr_code IN VARCHAR2 default NULL) IS
6211     SELECT
6212       SUM (
6213       ( DECODE(l.line_category_code,'RETURN',(-1)*l.ordered_quantity,l.ordered_quantity)
6214       * l.unit_selling_price )
6215       +   DECODE(l_include_tax_flag, 'Y',
6216       NVL(DECODE(l.line_category_code,'RETURN',(-1)*NVL(l.tax_line_value,l.tax_value),NVL(l.tax_line_value,l.tax_value)),0),0 )  --TaxER
6217            )
6218     FROM   oe_order_lines l
6219          , oe_order_headers_all h
6220          , hz_cust_site_uses_all su
6221          , hz_cust_acct_sites_all cas
6222     WHERE  h.invoice_to_org_id     = su.site_use_id
6223     AND    h.org_id                = su.org_id
6224     AND    su.cust_acct_site_id    = cas.cust_acct_site_id
6225     AND    cas.cust_account_id     = p_customer_id
6226     AND    h.header_id = l.header_id
6227     AND    h.org_id    = l.org_id                           /* MOAC_SQL_CHANGE */
6228     AND    NVL(L.SCHEDULE_SHIP_DATE,NVL(L.REQUEST_DATE,NVL(H.REQUEST_DATE,H.CREATION_DATE)))
6229            <= l_shipping_horizon
6230     AND    (l.invoiced_quantity IS NULL OR l.invoiced_quantity = 0)
6231     AND    h.open_flag = 'Y'
6232     AND    h.booked_flag = 'Y'
6233     AND    l.open_flag = 'Y'
6234     AND    h.header_id <> l_header_id
6235     AND    NOT EXISTS ( SELECT  1
6236                     FROM    oe_order_holds_all oh --Performance issue (SQL ID-14880618 FTS on OE_ORDER_HOLDS_ALL)
6237 		    WHERE   h.header_id  = oh.header_id
6238                      AND     oh.hold_release_id IS NULL )
6239     AND    h.transactional_curr_code = p_curr_code
6240     AND    (EXISTS
6241              (SELECT NULL
6242               FROM   oe_payment_types_all pt
6243               WHERE  pt.payment_type_code = NVL(l.payment_type_code,
6244                                             NVL(h.payment_type_code, 'BME'))
6245               AND    pt.credit_check_flag = 'Y'
6246               AND    NVL(pt.org_id, -99)  = G_ORG_ID)
6247            OR
6248            (l.payment_type_code IS NULL AND h.payment_type_code IS NULL));
6249 
6250 -- Customer orders on hold
6251   CURSOR cust_orders_on_hold (p_curr_code IN VARCHAR2 default NULL) IS
6252     SELECT SUM (
6253                  (l.ordered_quantity * l.unit_selling_price )
6254                +   DECODE(l_include_tax_flag, 'Y',
6255                     NVL(NVL(l.tax_line_value,l.tax_value),0), 0   )  --TaxER
6256                )
6257     FROM   oe_order_lines l
6258          , oe_order_headers_all h
6259          , hz_cust_site_uses_all su
6260          , hz_cust_acct_sites_all cas
6261     WHERE  h.invoice_to_org_id     = su.site_use_id
6262     AND    h.org_id                = su.org_id
6263     AND    su.cust_acct_site_id    = cas.cust_acct_site_id
6264     AND    cas.cust_account_id     = p_customer_id
6265     AND    h.header_id = l.header_id
6266     AND    h.org_id    = l.org_id                           /* MOAC_SQL_CHANGE */
6267     AND    NVL(L.SCHEDULE_SHIP_DATE,NVL(L.REQUEST_DATE,NVL(H.REQUEST_DATE,H.CREATION_DATE)))
6268            <= l_shipping_horizon
6269     AND    (l.invoiced_quantity IS NULL OR l.invoiced_quantity = 0)
6270     AND    h.open_flag = 'Y'
6271     AND    l.line_category_code = 'ORDER'
6272     AND    h.booked_flag = 'Y'
6273     AND    l.open_flag = 'Y'
6274     AND    h.header_id <> l_header_id
6275     AND    EXISTS ( SELECT  1
6276                     FROM    oe_order_holds_all oh
6277                     WHERE   h.header_id  = oh.header_id
6278                      AND     oh.hold_release_id IS NULL )
6279     AND    h.transactional_curr_code = p_curr_code
6280     AND    (EXISTS
6281              (SELECT NULL
6282               FROM   oe_payment_types_all pt
6283               WHERE  pt.payment_type_code = NVL(l.payment_type_code,
6284                                             NVL(h.payment_type_code, 'BME'))
6285               AND    pt.credit_check_flag = 'Y'
6286               AND    NVL(pt.org_id, -99)  = G_ORG_ID)
6287            OR
6288            (l.payment_type_code IS NULL AND h.payment_type_code IS NULL));
6289 
6290 -- Customer orders on hold including Returns
6291 
6292   CURSOR cust_ord_on_hold_ret (p_curr_code IN VARCHAR2 default NULL) IS
6293     SELECT
6294       SUM (
6295       ( DECODE(l.line_category_code,'RETURN',(-1)*l.ordered_quantity,l.ordered_quantity)
6296       * l.unit_selling_price )
6297       +   DECODE(l_include_tax_flag, 'Y',
6298       NVL(DECODE(l.line_category_code,'RETURN',(-1)*NVL(l.tax_line_value,l.tax_value),NVL(l.tax_line_value,l.tax_value)),0),0 )  --TaxER
6299            )
6300     FROM   oe_order_lines l
6301          , oe_order_headers_all h
6302          , hz_cust_site_uses_all su
6303          , hz_cust_acct_sites_all cas
6304     WHERE  h.invoice_to_org_id     = su.site_use_id
6305     AND    h.org_id                = su.org_id
6306     AND    su.cust_acct_site_id    = cas.cust_acct_site_id
6307     AND    su.org_id               = cas.org_id
6308     AND    cas.cust_account_id     = p_customer_id
6309     AND    h.header_id = l.header_id
6310     AND    h.org_id    = l.org_id
6311     AND    NVL(L.SCHEDULE_SHIP_DATE,NVL(L.REQUEST_DATE,NVL(H.REQUEST_DATE,H.CREATION_DATE)))
6312            <= l_shipping_horizon
6313     AND    (l.invoiced_quantity IS NULL OR l.invoiced_quantity = 0)
6314     AND    h.open_flag = 'Y'
6315     AND    h.booked_flag = 'Y'
6316     AND    l.open_flag = 'Y'
6317     AND    h.header_id <> l_header_id
6318     AND    EXISTS ( SELECT  1
6319                     FROM    oe_order_holds_all oh
6320                     WHERE   h.header_id  = oh.header_id
6321                      AND     oh.hold_release_id IS NULL )
6322     AND    h.transactional_curr_code = p_curr_code
6323     AND    (EXISTS
6324              (SELECT NULL
6325               FROM   oe_payment_types_all pt
6326               WHERE  pt.payment_type_code = NVL(l.payment_type_code,
6327                                             NVL(h.payment_type_code, 'BME'))
6328               AND    pt.credit_check_flag = 'Y'
6329               AND    NVL(pt.org_id, -99)  = G_ORG_ID)
6330            OR
6331            (l.payment_type_code IS NULL AND h.payment_type_code IS NULL));
6332 
6333 -------------------------------------------------
6334 --Fix Freight charges CURSORS for shipping Horizons
6335 -------------------------------------------------
6336 -- customer hdr freights , Does not include curr order
6337 CURSOR cust_uninv_hdr_freight1 (p_curr_code IN VARCHAR2 default null) IS
6338 SELECT
6339       SUM
6340       ( DECODE(p.list_line_type_code,'TAX',0,DECODE( P.CREDIT_OR_CHARGE_FLAG, 'C', (-1), (+1) )
6341       * DECODE( p.arithmetic_operator, 'LUMPSUM',          --bug 4295299
6342                 p.operand, (l.ordered_quantity * p.adjusted_amount)))
6343       --TaxER Start
6344       + DECODE(l_include_tax_flag,'Y',DECODE(p.list_line_type_code,'TAX',p.adjusted_amount,0),0)
6345       --TaxER End
6346       )
6347 FROM   oe_price_adjustments p
6348      , oe_order_lines   l
6349      , oe_order_headers_all h
6350      , hz_cust_site_uses_all su
6351      , hz_cust_acct_sites_all cas
6352 WHERE  h.invoice_to_org_id   = su.site_use_id
6353   AND  h.org_id              = su.org_id
6354   AND  su.cust_acct_site_id  = cas.cust_acct_site_id
6355   AND  cas.cust_account_id   = p_customer_id
6356   AND  p.line_id             =  l.line_id
6357   AND  NVL(L.SCHEDULE_SHIP_DATE,NVL(L.REQUEST_DATE,NVL(H.REQUEST_DATE,H.CREATION_DATE)))
6358            <= l_shipping_horizon
6359   AND  (l.invoiced_quantity IS NULL OR l.invoiced_quantity = 0)
6360   AND  p.header_id           =  l.header_id
6361   AND  p.header_id           =  h.header_id
6362   AND  h.header_id           =  l.header_id
6363   AND  h.org_id              =  l.org_id                     /* MOAC_SQL_CHANGE */
6364   AND  h.booked_flag         =  'Y'
6365   AND  h.open_flag  = 'Y'
6366   AND  l.open_flag  =  'Y'
6367   AND  l.line_category_code  =  'ORDER'
6368   --TaxER  AND  p.applied_flag        =  'Y'
6369   --TaxER AND  p.list_line_type_code =  'FREIGHT_CHARGE'
6370   AND  ((p.list_line_type_code =  'FREIGHT_CHARGE' and p.applied_flag =  'Y') OR (p.list_line_type_code = 'TAX' and p.applied_flag =  'N' and p.parent_adjustment_id IS NOT NULL))  --TaxER --12895421
6371   AND  (p.invoiced_flag IS NULL OR p.invoiced_flag = 'N')
6372   AND  h.transactional_curr_code = p_curr_code
6373   AND  h.header_id           <> l_header_id
6374   AND  (EXISTS
6375          (SELECT NULL
6376           FROM   oe_payment_types_all pt
6377           WHERE  pt.payment_type_code = NVL(l.payment_type_code,
6378                                         NVL(h.payment_type_code, 'BME'))
6379           AND    pt.credit_check_flag = 'Y'
6380           AND    NVL(pt.org_id, -99)  = G_ORG_ID)
6381         OR
6382         (l.payment_type_code IS NULL AND h.payment_type_code IS NULL));
6383 
6384 -- customer hdr freights , Does not include curr order,
6385 -- including Returns
6386 
6387 CURSOR cust_uninv_hdr_freight1_ret (p_curr_code IN VARCHAR2 default null) IS
6388 SELECT
6389       SUM
6390       ( DECODE(p.list_line_type_code,'TAX',0,DECODE( P.CREDIT_OR_CHARGE_FLAG, 'C', (-1), (+1) )
6391       * DECODE( p.arithmetic_operator, 'LUMPSUM',          --bug 4295299
6392                 p.operand, (l.ordered_quantity * p.adjusted_amount)))
6393       --TaxER Start
6394       + DECODE(l_include_tax_flag,'Y',DECODE(p.list_line_type_code,'TAX',p.adjusted_amount,0),0)
6395       --TaxER End
6396       )
6397 FROM   oe_price_adjustments p
6398      , oe_order_lines   l
6399      , oe_order_headers_all h
6400      , hz_cust_site_uses_all su
6401      , hz_cust_acct_sites_all cas
6402 WHERE  h.invoice_to_org_id   = su.site_use_id
6403   AND  h.org_id              = su.org_id
6404   AND  su.cust_acct_site_id  = cas.cust_acct_site_id
6405   AND  cas.cust_account_id   = p_customer_id
6406   AND  p.line_id             =  l.line_id
6407   AND  NVL(L.SCHEDULE_SHIP_DATE,NVL(L.REQUEST_DATE,NVL(H.REQUEST_DATE,H.CREATION_DATE)))
6408            <= l_shipping_horizon
6409   AND  (l.invoiced_quantity IS NULL OR l.invoiced_quantity = 0)
6410   AND  p.header_id           =  l.header_id
6411   AND  p.header_id           =  h.header_id
6412   AND  h.header_id           =  l.header_id
6413   AND  h.org_id              =  l.org_id                     /* MOAC_SQL_CHANGE */
6414   AND  h.booked_flag         =  'Y'
6415   AND  h.open_flag  = 'Y'
6416   AND  l.open_flag  =  'Y'
6417   --TaxER  AND  p.applied_flag        =  'Y'
6418   --TaxER AND  p.list_line_type_code =  'FREIGHT_CHARGE'
6419   AND  ((p.list_line_type_code =  'FREIGHT_CHARGE' and p.applied_flag =  'Y') OR (p.list_line_type_code = 'TAX' and p.applied_flag =  'N' and p.parent_adjustment_id IS NOT NULL))  --TaxER  --12895421
6420   AND  ( p.invoiced_flag IS NULL OR p.invoiced_flag = 'N')
6421   AND  h.transactional_curr_code = p_curr_code
6422   AND  h.header_id           <> l_header_id
6423   AND  (EXISTS
6424          (SELECT NULL
6425           FROM   oe_payment_types_all pt
6426           WHERE  pt.payment_type_code = NVL(l.payment_type_code,
6427                                         NVL(h.payment_type_code, 'BME'))
6428           AND    pt.credit_check_flag = 'Y'
6429           AND    NVL(pt.org_id, -99)  = G_ORG_ID)
6430         OR
6431         (l.payment_type_code IS NULL AND h.payment_type_code IS NULL));
6432 
6433 
6434 -- customer freights 2
6435 -- check if there is at least on line with credit check flag = Y, then
6436 -- include the header freight.
6437 CURSOR cust_uninv_hdr_freight2 (p_curr_code IN VARCHAR2 default null) IS
6438 SELECT
6439       SUM( DECODE(p.list_line_type_code,'TAX',0,DECODE( P.CREDIT_OR_CHARGE_FLAG, 'C', (-1), (+1) ) * P.OPERAND)
6440       --TaxER Start
6441       + DECODE(l_include_tax_flag,'Y',DECODE(p.list_line_type_code,'TAX',p.adjusted_amount,0),0))
6442       --TaxER End
6443 FROM
6444        oe_price_adjustments p
6445      , oe_order_headers h
6446      , hz_cust_site_uses_all su
6447      , hz_cust_acct_sites_all cas
6448 WHERE  h.invoice_to_org_id   = su.site_use_id
6449   AND  h.org_id              = su.org_id                       /* MOAC_SQL_CHANGE */
6450   AND  su.cust_acct_site_id  = cas.cust_acct_site_id
6451   AND  cas.cust_account_id   = p_customer_id
6452   AND  NVL(h.request_date, h.creation_date) <= l_shipping_horizon
6453   AND  h.transactional_curr_code = p_curr_code
6454   AND  p.line_id IS NULL
6455   AND  p.header_id           =  h.header_id
6456   AND  h.order_category_code IN ('ORDER','MIXED')
6457   AND  open_flag  =  'Y'
6458   AND  h.booked_flag         =  'Y'
6459   --TaxER  AND  p.applied_flag        =  'Y'
6460   AND  (p.invoiced_flag IS NULL OR p.invoiced_flag = 'N')
6461   --TaxER AND  p.list_line_type_code =  'FREIGHT_CHARGE'
6462   AND  ((p.list_line_type_code =  'FREIGHT_CHARGE' and p.applied_flag =  'Y') OR (p.list_line_type_code = 'TAX' and p.applied_flag =  'N' and p.parent_adjustment_id IS NOT NULL))  --TaxER  --12895421
6463   AND  h.header_id           <> l_header_id
6464   AND  EXISTS
6465         (SELECT NULL
6466          FROM   oe_payment_types_all pt,
6467                 oe_order_lines l
6468          WHERE  pt.credit_check_flag = 'Y'
6469          AND    l.header_id = h.header_id
6470          AND    l.org_id    = pt.org_id                       /* MOAC_SQL_CHANGE */
6471          AND    NVL(pt.org_id, -99) = G_ORG_ID
6472          AND    pt.payment_type_code =
6473                   DECODE(l.payment_type_code, NULL,
6474                      DECODE(h.payment_type_code, NULL, pt.payment_type_code,
6475                             h.payment_type_code),
6476                          l.payment_type_code)
6477         );
6478 
6479 
6480 -- customer freights 2 including Returns
6481 -- check if there is at least on line with credit check flag = Y, then
6482 -- include the header freight.
6483 
6484 CURSOR cust_uninv_hdr_freight2_ret (p_curr_code IN VARCHAR2 default null) IS
6485 SELECT
6486       SUM( DECODE(p.list_line_type_code,'TAX',0,DECODE( P.CREDIT_OR_CHARGE_FLAG, 'C', (-1), (+1) ) * P.OPERAND )
6487       --TaxER Start
6488       + DECODE(l_include_tax_flag,'Y',DECODE(p.list_line_type_code,'TAX',p.adjusted_amount,0),0))
6489       --TaxER End
6490 FROM
6491        oe_price_adjustments p
6492      , oe_order_headers_all h
6493      , hz_cust_site_uses_all su
6494      , hz_cust_acct_sites_all cas
6495 WHERE  h.invoice_to_org_id   = su.site_use_id
6496   AND  h.org_id              = su.org_id                     /* MOAC_SQL_CHANGE */
6497   AND  su.cust_acct_site_id  = cas.cust_acct_site_id
6498   AND  cas.cust_account_id   = p_customer_id
6499   AND  NVL(h.request_date, h.creation_date) <= l_shipping_horizon
6500   AND  h.transactional_curr_code = p_curr_code
6501   AND  p.line_id IS NULL
6502   AND  p.header_id           =  h.header_id
6503   AND  h.order_category_code IN ('ORDER','MIXED','RETURN')
6504   AND  open_flag  =  'Y'
6505   AND  h.booked_flag         =  'Y'
6506   --TaxER  AND  p.applied_flag        =  'Y'
6507   --TaxER AND  p.list_line_type_code =  'FREIGHT_CHARGE'
6508   AND  ((p.list_line_type_code =  'FREIGHT_CHARGE' and p.applied_flag =  'Y') OR (p.list_line_type_code = 'TAX' and p.applied_flag =  'N' and p.parent_adjustment_id IS NOT NULL))  --TaxER  --12895421
6509   AND  (p.invoiced_flag IS NULL OR p.invoiced_flag = 'N')
6510   AND  h.header_id           <> l_header_id
6511   AND  EXISTS
6512         (SELECT NULL
6513          FROM   oe_payment_types_all pt,
6514                 oe_order_lines l
6515          WHERE  pt.credit_check_flag = 'Y'
6516          AND    l.header_id = h.header_id
6517          AND    l.org_id    = pt.org_id                     /* MOAC_SQL_CHANGE */
6518          AND    NVL(pt.org_id, -99) = G_ORG_ID
6519          AND    pt.payment_type_code =
6520                   DECODE(l.payment_type_code, NULL,
6521                      DECODE(h.payment_type_code, NULL, pt.payment_type_code,
6522                             h.payment_type_code),
6523                          l.payment_type_code)
6524         );
6525 
6526 
6527 -- customer freights not on hold 1
6528  CURSOR cust_no_hold_hdr_freight1 (p_curr_code IN VARCHAR2 default null) IS
6529 SELECT
6530       SUM
6531       ( DECODE(p.list_line_type_code,'TAX',0,DECODE( P.CREDIT_OR_CHARGE_FLAG, 'C', (-1), (+1) )
6532       * DECODE( p.arithmetic_operator, 'LUMPSUM',          --bug 4295299
6533                 p.operand, (l.ordered_quantity * p.adjusted_amount)))
6534       --TaxER Start
6535       + DECODE(l_include_tax_flag,'Y',DECODE(p.list_line_type_code,'TAX',p.adjusted_amount,0),0)
6536       --TaxER End
6537       )
6538 FROM   oe_price_adjustments p
6539      , oe_order_lines   l
6540      , oe_order_headers_all h
6541      , hz_cust_site_uses_all su
6542      , hz_cust_acct_sites_all cas
6543 WHERE  h.invoice_to_org_id   = su.site_use_id
6544   AND  h.org_id              = su.org_id
6545   AND  su.cust_acct_site_id  = cas.cust_acct_site_id
6546   AND  cas.cust_account_id   = p_customer_id
6547   AND  p.line_id             =  l.line_id
6548   AND  NVL(L.SCHEDULE_SHIP_DATE,NVL(L.REQUEST_DATE,NVL(H.REQUEST_DATE,H.CREATION_DATE)))
6549            <= l_shipping_horizon
6550   AND  (l.invoiced_quantity IS NULL OR l.invoiced_quantity = 0)
6551   AND  l.header_id          = h.header_id
6552   AND  l.org_id             = h.org_id                  /* MOAC_SQL_CHANGE */
6553   AND  p.header_id           =  l.header_id
6554   AND  p.header_id           =  h.header_id
6555   AND  h.booked_flag         =  'Y'
6556   AND  h.open_flag  = 'Y'
6557   AND  l.open_flag  =  'Y'
6558   AND  l.line_category_code  =  'ORDER'
6559   --TaxER  AND  p.applied_flag        =  'Y'
6560   --TaxER AND  p.list_line_type_code =  'FREIGHT_CHARGE'
6561   AND  ((p.list_line_type_code =  'FREIGHT_CHARGE' and p.applied_flag =  'Y') OR (p.list_line_type_code = 'TAX' and p.applied_flag =  'N' and p.parent_adjustment_id IS NOT NULL))  --TaxER  --12895421
6562   AND  (p.invoiced_flag IS NULL OR p.invoiced_flag = 'N')
6563   AND  h.transactional_curr_code = p_curr_code
6564   AND  h.header_id           <> l_header_id
6565   AND  NOT EXISTS ( SELECT  1
6566                     FROM    oe_order_holds_all oh --Performance issue (SQL ID-14880775 FTS on OE_ORDER_HOLDS_ALL)
6567                     WHERE   h.header_id = oh.header_id
6568                     AND     oh.line_id IS NULL
6569                     AND     oh.hold_release_id IS NULL )
6570   AND (EXISTS
6571          (SELECT NULL
6572           FROM   oe_payment_types_all pt
6573           WHERE  pt.payment_type_code = NVL(l.payment_type_code,
6574                                         NVL(h.payment_type_code, 'BME'))
6575           AND    pt.credit_check_flag = 'Y'
6576           AND    NVL(pt.org_id, -99)  = G_ORG_ID)
6577        OR
6578        (l.payment_type_code IS NULL AND h.payment_type_code IS NULL));
6579 
6580 
6581 -- customer freights not on hold 1
6582  CURSOR cust_no_hold_hdr_freight1_ret (p_curr_code IN VARCHAR2 default null) IS
6583 SELECT
6584       SUM
6585       ( DECODE(p.list_line_type_code,'TAX',0,DECODE( P.CREDIT_OR_CHARGE_FLAG, 'C', (-1), (+1) )
6586       * DECODE( p.arithmetic_operator, 'LUMPSUM',          --bug 4295299
6587                 p.operand, (l.ordered_quantity * p.adjusted_amount)))
6588       --TaxER Start
6589       + DECODE(l_include_tax_flag,'Y',DECODE(p.list_line_type_code,'TAX',p.adjusted_amount,0),0)
6590       --TaxER End
6591       )
6592 FROM   oe_price_adjustments p
6593      , oe_order_lines   l
6594      , oe_order_headers_all h
6595      , hz_cust_site_uses_all su
6596      , hz_cust_acct_sites_all cas
6597 WHERE  h.invoice_to_org_id   = su.site_use_id
6598   AND  h.org_id              = su.org_id
6599   AND  su.cust_acct_site_id  = cas.cust_acct_site_id
6600   AND  cas.cust_account_id   = p_customer_id
6601   AND  p.line_id             =  l.line_id
6602   AND  NVL(L.SCHEDULE_SHIP_DATE,NVL(L.REQUEST_DATE,NVL(H.REQUEST_DATE,H.CREATION_DATE)))
6603            <= l_shipping_horizon
6604   AND  (l.invoiced_quantity IS NULL OR l.invoiced_quantity = 0)
6605   AND  l.header_id          = h.header_id
6606   AND  l.org_id             = h.org_id                     /* MOAC_SQL_CHANGE */
6607   AND  p.header_id           =  l.header_id
6608   AND  p.header_id           =  h.header_id
6609   AND  h.booked_flag         =  'Y'
6610   AND  h.open_flag  = 'Y'
6611   AND  l.open_flag  =  'Y'
6612   --TaxER  AND  p.applied_flag        =  'Y'
6613   --TaxER AND  p.list_line_type_code =  'FREIGHT_CHARGE'
6614   AND  ((p.list_line_type_code =  'FREIGHT_CHARGE' and p.applied_flag =  'Y') OR (p.list_line_type_code = 'TAX' and p.applied_flag =  'N' and p.parent_adjustment_id IS NOT NULL))  --TaxER  --12895421
6615   AND  ( p.invoiced_flag IS NULL OR p.invoiced_flag = 'N')
6616   AND  h.transactional_curr_code = p_curr_code
6617   AND  h.header_id           <> l_header_id
6618   AND  NOT EXISTS ( SELECT  1
6619                     FROM    oe_order_holds_all oh --Performance issue (SQL ID-14880801 FTS on OE_ORDER_HOLDS_ALL)
6620                     WHERE   h.header_id = oh.header_id
6621                     AND     oh.line_id IS NULL
6622                     AND     oh.hold_release_id IS NULL )
6623   AND (EXISTS
6624          (SELECT NULL
6625           FROM   oe_payment_types_all pt
6626           WHERE  pt.payment_type_code = NVL(l.payment_type_code,
6627                                         NVL(h.payment_type_code, 'BME'))
6628           AND    pt.credit_check_flag = 'Y'
6629           AND    NVL(pt.org_id, -99)  = G_ORG_ID)
6630        OR
6631        (l.payment_type_code IS NULL AND h.payment_type_code IS NULL));
6632 
6633 -- customer freights on hold 1
6634 
6635  CURSOR cust_hold_hdr_freight1 (p_curr_code IN VARCHAR2 default null) IS
6636 SELECT
6637       SUM
6638       ( DECODE(p.list_line_type_code,'TAX',0,DECODE( P.CREDIT_OR_CHARGE_FLAG, 'C', (-1), (+1) )
6639       * DECODE( p.arithmetic_operator, 'LUMPSUM',          --bug 4295299
6640                 p.operand, (l.ordered_quantity * p.adjusted_amount)))
6641       --TaxER Start
6642       + DECODE(l_include_tax_flag,'Y',DECODE(p.list_line_type_code,'TAX',p.adjusted_amount,0),0)
6643       --TaxER End
6644       )
6645 FROM   oe_price_adjustments p
6646      , oe_order_lines   l
6647      , oe_order_headers_all h
6648      , hz_cust_site_uses_all su
6649      , hz_cust_acct_sites_all cas
6650 WHERE  h.invoice_to_org_id   = su.site_use_id
6651   AND  h.org_id              = su.org_id
6652   AND  su.cust_acct_site_id  = cas.cust_acct_site_id
6653   AND  cas.cust_account_id   = p_customer_id
6654   AND  p.line_id             =  l.line_id
6655   AND  NVL(L.SCHEDULE_SHIP_DATE,NVL(L.REQUEST_DATE,NVL(H.REQUEST_DATE,H.CREATION_DATE)))
6656            <= l_shipping_horizon
6657   AND  (l.invoiced_quantity IS NULL OR l.invoiced_quantity = 0)
6658   AND  l.header_id          = h.header_id
6659   AND  l.org_id             = h.org_id                    /* MOAC_SQL_CHANGE */
6660   AND  p.header_id           =  l.header_id
6661   AND  p.header_id           =  h.header_id
6662   AND  h.booked_flag         =  'Y'
6663   AND  h.open_flag  = 'Y'
6664   AND  l.open_flag  =  'Y'
6665   AND  l.line_category_code  =  'ORDER'
6666   --TaxER  AND  p.applied_flag        =  'Y'
6667   --TaxER AND  p.list_line_type_code =  'FREIGHT_CHARGE'
6668   AND  ((p.list_line_type_code =  'FREIGHT_CHARGE' and p.applied_flag =  'Y') OR (p.list_line_type_code = 'TAX' and p.applied_flag =  'N' and p.parent_adjustment_id IS NOT NULL))  --TaxER  --12895421
6669   AND  (p.invoiced_flag IS NULL OR p.invoiced_flag = 'N')
6670   AND  h.transactional_curr_code = p_curr_code
6671   AND  h.header_id           <> l_header_id
6672   AND  EXISTS ( SELECT  1
6673                     FROM    oe_order_holds_all oh
6674                     WHERE   h.header_id = oh.header_id
6675                     AND     oh.line_id IS NULL
6676                     AND     oh.hold_release_id IS NULL )
6677   AND (EXISTS
6678          (SELECT NULL
6679           FROM   oe_payment_types_all pt
6680           WHERE  pt.payment_type_code = NVL(l.payment_type_code,
6681                                         NVL(h.payment_type_code, 'BME'))
6682           AND    pt.credit_check_flag = 'Y'
6683           AND    NVL(pt.org_id, -99)  = G_ORG_ID)
6684        OR
6685        (l.payment_type_code IS NULL AND h.payment_type_code IS NULL));
6686 
6687 
6688 -- customer freights on hold 1 with returns
6689 
6690  CURSOR cust_hold_hdr_freight1_ret (p_curr_code IN VARCHAR2 default null) IS
6691 SELECT
6692       SUM
6693       ( DECODE(p.list_line_type_code,'TAX',0,DECODE( P.CREDIT_OR_CHARGE_FLAG, 'C', (-1), (+1) )
6694       * DECODE( p.arithmetic_operator, 'LUMPSUM',          --bug 4295299
6695                 p.operand, (l.ordered_quantity * p.adjusted_amount)))
6696       --TaxER Start
6697       + DECODE(l_include_tax_flag,'Y',DECODE(p.list_line_type_code,'TAX',p.adjusted_amount,0),0)
6698       --TaxER End
6699       )
6700 FROM   oe_price_adjustments p
6701      , oe_order_lines   l
6702      , oe_order_headers_all h
6703      , hz_cust_site_uses_all su
6704      , hz_cust_acct_sites_all cas
6705 WHERE  h.invoice_to_org_id   = su.site_use_id
6706   AND  h.org_id              = su.org_id
6707   AND  su.cust_acct_site_id  = cas.cust_acct_site_id
6708   AND  su.org_id             = cas.org_id
6709   AND  cas.cust_account_id   = p_customer_id
6710   AND  p.line_id             =  l.line_id
6711   AND  NVL(L.SCHEDULE_SHIP_DATE,NVL(L.REQUEST_DATE,NVL(H.REQUEST_DATE,H.CREATION_DATE)))
6712            <= l_shipping_horizon
6713   AND  (l.invoiced_quantity IS NULL OR l.invoiced_quantity = 0)
6714   AND  l.header_id          = h.header_id
6715   AND  l.org_id             = h.org_id
6716   AND  p.header_id           =  l.header_id
6717   AND  p.header_id           =  h.header_id
6718   AND  h.booked_flag         =  'Y'
6719   AND  h.open_flag  = 'Y'
6720   AND  l.open_flag  =  'Y'
6721   --TaxER  AND  p.applied_flag        =  'Y'
6722   --TaxER AND  p.list_line_type_code =  'FREIGHT_CHARGE'
6723   AND  ((p.list_line_type_code =  'FREIGHT_CHARGE' and p.applied_flag =  'Y') OR (p.list_line_type_code = 'TAX' and p.applied_flag =  'N' and p.parent_adjustment_id IS NOT NULL))  --TaxER  --12895421
6724   AND  ( p.invoiced_flag IS NULL OR p.invoiced_flag = 'N')
6725   AND  h.transactional_curr_code = p_curr_code
6726   AND  h.header_id           <> l_header_id
6727   AND  EXISTS ( SELECT  1
6728                     FROM    oe_order_holds_all oh
6729                     WHERE   h.header_id = oh.header_id
6730                     AND     oh.line_id IS NULL
6731                     AND     oh.hold_release_id IS NULL )
6732   AND (EXISTS
6733          (SELECT NULL
6734           FROM   oe_payment_types_all pt
6735           WHERE  pt.payment_type_code = NVL(l.payment_type_code,
6736                                         NVL(h.payment_type_code, 'BME'))
6737           AND    pt.credit_check_flag = 'Y'
6738           AND    NVL(pt.org_id, -99)  = G_ORG_ID)
6739        OR
6740        (l.payment_type_code IS NULL AND h.payment_type_code IS NULL));
6741 
6742 -- customer not on hold freight 2
6743  CURSOR cust_no_hold_hdr_freight2 (p_curr_code IN VARCHAR2 default null) IS
6744 SELECT
6745       SUM( DECODE(p.list_line_type_code,'TAX',0,DECODE( P.CREDIT_OR_CHARGE_FLAG, 'C', (-1), (+1) ) * P.OPERAND )
6746       --TaxER Start
6747       + DECODE(l_include_tax_flag,'Y',DECODE(p.list_line_type_code,'TAX',p.adjusted_amount,0),0))
6748       --TaxER End
6749 FROM
6750        oe_price_adjustments p
6751      , oe_order_headers h
6752      , hz_cust_site_uses_all su
6753      , hz_cust_acct_sites_all cas
6754 WHERE  h.invoice_to_org_id   = su.site_use_id
6755   AND  h.org_id              = su.org_id
6756   AND  su.cust_acct_site_id  = cas.cust_acct_site_id
6757   AND  cas.cust_account_id   = p_customer_id
6758   AND  NVL(h.request_date, h.creation_date) <= l_shipping_horizon
6759   AND  h.transactional_curr_code = p_curr_code
6760   AND  p.line_id IS NULL
6761   AND  p.header_id           =  h.header_id
6762   AND  h.order_category_code IN ('ORDER','MIXED')
6763   AND  h.open_flag  =  'Y'
6764   AND  h.booked_flag         =  'Y'
6765   --TaxER  AND  p.applied_flag        =  'Y'
6766   --TaxER AND  p.list_line_type_code =  'FREIGHT_CHARGE'
6767   AND  ((p.list_line_type_code =  'FREIGHT_CHARGE' and p.applied_flag =  'Y') OR (p.list_line_type_code = 'TAX' and p.applied_flag =  'N' and p.parent_adjustment_id IS NOT NULL))  --TaxER  --12895421
6768   AND  (p.invoiced_flag IS NULL OR p.invoiced_flag = 'N')
6769   AND  h.header_id           <> l_header_id
6770   AND  NOT EXISTS ( SELECT  1
6771                     FROM    oe_order_holds_all oh --Performance issue (SQL ID-14880869 FTS on OE_ORDER_HOLDS_ALL)
6772                     WHERE   h.header_id = oh.header_id
6773                     AND     oh.line_id IS NULL
6774                     AND     oh.hold_release_id IS NULL )
6775   AND  EXISTS
6776         (SELECT NULL
6777          FROM   oe_payment_types_all pt,
6778                 oe_order_lines_all l --Performance issue (SQL ID-14880869 FTS on OE_ORDER_HOLDS_ALL)
6779          WHERE  pt.credit_check_flag = 'Y'
6780          AND    l.header_id = h.header_id
6781          AND    l.org_id    = pt.org_id                     /* MOAC_SQL_CHANGE */
6782          AND    NVL(pt.org_id, -99) = G_ORG_ID
6783          AND    pt.payment_type_code =
6784                   DECODE(l.payment_type_code, NULL,
6785                      DECODE(h.payment_type_code, NULL, pt.payment_type_code,
6786                             h.payment_type_code),
6787                          l.payment_type_code)
6788         );
6789 
6790 -- customer not on hold freight 2 including Returns
6791 
6792  CURSOR cust_no_hold_hdr_freight2_ret (p_curr_code IN VARCHAR2 default null) IS
6793 SELECT
6794       SUM( DECODE(p.list_line_type_code,'TAX',0,DECODE( P.CREDIT_OR_CHARGE_FLAG, 'C', (-1), (+1) ) * P.OPERAND )
6795       --TaxER Start
6796       + DECODE(l_include_tax_flag,'Y',DECODE(p.list_line_type_code,'TAX',p.adjusted_amount,0),0))
6797       --TaxER End
6798 FROM
6799        oe_price_adjustments p
6800      , oe_order_headers h
6801      , hz_cust_site_uses_all su
6802      , hz_cust_acct_sites_all cas
6803 WHERE  h.invoice_to_org_id   = su.site_use_id
6804   AND  h.org_id              = su.org_id
6805   AND  su.cust_acct_site_id  = cas.cust_acct_site_id
6806   AND  cas.cust_account_id   = p_customer_id
6807   AND  NVL(h.request_date, h.creation_date) <= l_shipping_horizon
6808   AND  h.transactional_curr_code = p_curr_code
6809   AND  p.line_id IS NULL
6810   AND  p.header_id           =  h.header_id
6811   AND  h.order_category_code IN ('ORDER','MIXED','RETURN')
6812   AND  h.open_flag  =  'Y'
6813   AND  h.booked_flag         =  'Y'
6814   --TaxER  AND  p.applied_flag        =  'Y'
6815   --TaxER AND  p.list_line_type_code =  'FREIGHT_CHARGE'
6816   AND  ((p.list_line_type_code =  'FREIGHT_CHARGE' and p.applied_flag =  'Y') OR (p.list_line_type_code = 'TAX' and p.applied_flag =  'N' and p.parent_adjustment_id IS NOT NULL))  --TaxER  --12895421
6817   AND  ( p.invoiced_flag IS NULL OR p.invoiced_flag = 'N')
6818   AND  h.header_id           <> l_header_id
6819   AND  NOT EXISTS ( SELECT  1
6820                     FROM    oe_order_holds_all oh --Performance issue (SQL ID-14880892 FTS on OE_ORDER_HOLDS_ALL)
6821                     WHERE   h.header_id = oh.header_id
6822                     AND     oh.line_id IS NULL
6823                     AND     oh.hold_release_id IS NULL )
6824   AND  EXISTS
6825         (SELECT NULL
6826          FROM   oe_payment_types_all pt,
6827                 oe_order_lines_all l --Performance issue (SQL ID-14880892 FTS on OE_ORDER_HOLDS_ALL)
6828          WHERE  pt.credit_check_flag = 'Y'
6829          AND    l.header_id = h.header_id
6830          AND    l.org_id    = pt.org_id                  /* MOAC_SQL_CHANGE */
6831          AND    NVL(pt.org_id, -99) = G_ORG_ID
6832          AND    pt.payment_type_code =
6833                   DECODE(l.payment_type_code, NULL,
6834                      DECODE(h.payment_type_code, NULL, pt.payment_type_code,
6835                             h.payment_type_code),
6836                          l.payment_type_code)
6837         );
6838 
6839 -- customer on hold  freight 2
6840  CURSOR cust_hold_hdr_freight2 (p_curr_code IN VARCHAR2 default null) IS
6841 SELECT
6842       SUM( DECODE(p.list_line_type_code,'TAX',0,DECODE( P.CREDIT_OR_CHARGE_FLAG, 'C', (-1), (+1) ) * P.OPERAND )
6843       --TaxER Start
6844       + DECODE(l_include_tax_flag,'Y',DECODE(p.list_line_type_code,'TAX',p.adjusted_amount,0),0))
6845       --TaxER End
6846 FROM
6847        oe_price_adjustments p
6848      , oe_order_headers h
6849      , hz_cust_site_uses_all su
6850      , hz_cust_acct_sites_all cas
6851 WHERE  h.invoice_to_org_id   = su.site_use_id
6852   AND  h.org_id              = su.org_id
6853   AND  su.cust_acct_site_id  = cas.cust_acct_site_id
6854   AND  cas.cust_account_id   = p_customer_id
6855   AND  NVL(h.request_date, h.creation_date) <= l_shipping_horizon
6856   AND  h.transactional_curr_code = p_curr_code
6857   AND  p.line_id IS NULL
6858   AND  p.header_id           =  h.header_id
6859   AND  h.order_category_code IN ('ORDER','MIXED')
6860   AND  h.open_flag  =  'Y'
6861   AND  h.booked_flag         =  'Y'
6862   --TaxER  AND  p.applied_flag        =  'Y'
6863   --TaxER AND  p.list_line_type_code =  'FREIGHT_CHARGE'
6864   AND  ((p.list_line_type_code =  'FREIGHT_CHARGE' and p.applied_flag =  'Y') OR (p.list_line_type_code = 'TAX' and p.applied_flag =  'N' and p.parent_adjustment_id IS NOT NULL))  --TaxER  --12895421
6865   AND  (p.invoiced_flag IS NULL OR p.invoiced_flag = 'N')
6866   AND  h.header_id           <> l_header_id
6867   AND  EXISTS ( SELECT  1
6868                     FROM    oe_order_holds_all oh --Performance issue (SQL ID-14880915 FTS on OE_ORDER_HOLDS_ALL)
6869                     WHERE   h.header_id = oh.header_id
6870                     AND     oh.line_id IS NULL
6871                     AND     oh.hold_release_id IS NULL )
6872   AND  EXISTS
6873         (SELECT NULL
6874          FROM   oe_payment_types_all pt,
6875                 oe_order_lines_all l --Performance issue (SQL ID-14880915 FTS on OE_ORDER_HOLDS_ALL)
6876          WHERE  pt.credit_check_flag = 'Y'
6877          AND    l.header_id = h.header_id
6878          AND    l.org_id    = pt.org_id                   /* MOAC_SQL_CHANGE */
6879          AND    NVL(pt.org_id, -99) = G_ORG_ID
6880          AND    pt.payment_type_code =
6881                   DECODE(l.payment_type_code, NULL,
6882                      DECODE(h.payment_type_code, NULL, pt.payment_type_code,
6883                             h.payment_type_code),
6884                          l.payment_type_code)
6885         );
6886 
6887 -- customer on hold freight 2 including Returns
6888 
6889  CURSOR cust_hold_hdr_freight2_ret (p_curr_code IN VARCHAR2 default null) IS
6890 SELECT
6891       SUM( DECODE(p.list_line_type_code,'TAX',0,DECODE( P.CREDIT_OR_CHARGE_FLAG, 'C', (-1), (+1) ) * P.OPERAND )
6892       --TaxER Start
6893       + DECODE(l_include_tax_flag,'Y',DECODE(p.list_line_type_code,'TAX',p.adjusted_amount,0),0))
6894       --TaxER End
6895 FROM
6896        oe_price_adjustments p
6897      , oe_order_headers h
6898      , hz_cust_site_uses_all su
6899      , hz_cust_acct_sites_all cas
6900 WHERE  h.invoice_to_org_id   = su.site_use_id
6901   AND  h.org_id              = su.org_id
6902   AND  su.cust_acct_site_id  = cas.cust_acct_site_id
6903   AND  cas.cust_account_id   = p_customer_id
6904   AND  NVL(h.request_date, h.creation_date) <= l_shipping_horizon
6905   AND  h.transactional_curr_code = p_curr_code
6906   AND  p.line_id IS NULL
6907   AND  p.header_id           =  h.header_id
6908   AND  h.order_category_code IN ('ORDER','MIXED','RETURN')
6909   AND  h.open_flag  =  'Y'
6910   AND  h.booked_flag         =  'Y'
6911   --TaxER  AND  p.applied_flag        =  'Y'
6912   --TaxER AND  p.list_line_type_code =  'FREIGHT_CHARGE'
6913   AND  ((p.list_line_type_code =  'FREIGHT_CHARGE' and p.applied_flag =  'Y') OR (p.list_line_type_code = 'TAX' and p.applied_flag =  'N' and p.parent_adjustment_id IS NOT NULL))  --TaxER  --12895421
6914   AND  ( p.invoiced_flag IS NULL OR p.invoiced_flag = 'N')
6915   AND  h.header_id           <> l_header_id
6916   AND  EXISTS ( SELECT  1
6917                     FROM    oe_order_holds_all oh
6918                     WHERE   h.header_id = oh.header_id
6919                     AND     oh.line_id IS NULL
6920                     AND     oh.hold_release_id IS NULL )
6921   AND  EXISTS
6922         (SELECT NULL
6923          FROM   oe_payment_types_all pt,
6924                 oe_order_lines l
6925          WHERE  pt.credit_check_flag = 'Y'
6926          AND    l.header_id = h.header_id
6927          AND    l.org_id    = pt.org_id                      /* MOAC_SQL_CHANGE */
6928          AND    NVL(pt.org_id, -99) = G_ORG_ID
6929          AND    pt.payment_type_code =
6930                   DECODE(l.payment_type_code, NULL,
6931                      DECODE(h.payment_type_code, NULL, pt.payment_type_code,
6932                             h.payment_type_code),
6933                          l.payment_type_code)
6934         );
6935 
6936 ------------------------
6937 --- SITE LEVEL CURSORS
6938 -------------------------
6939 
6940 -- site external exposure cursor
6941 CURSOR site_external_exposure_csr (p_curr_code IN VARCHAR2 default NULL) IS
6942    SELECT SUM(balance)
6943    FROM   oe_credit_summaries
6944    WHERE  balance_type  = 18
6945    AND    site_use_id   = p_site_use_id
6946    AND    currency_code = p_curr_code;
6947 
6948 
6949 CURSOR site_ar_balance (p_curr_code IN VARCHAR2 default NULL) IS
6950 SELECT SUM(NVL(amount_due_remaining,0) )
6951     FROM   ar_payment_schedules
6952     WHERE  customer_site_use_id = p_site_use_id
6953     AND    status               = 'OP'
6954     AND    invoice_currency_code =
6955             p_curr_code
6956     AND    (receipt_confirmed_flag IS NULL OR receipt_confirmed_flag = 'Y')
6957     AND    gl_date_closed = to_date( '31-12-4712', 'DD-MM-YYYY')
6958     AND    sysdate - trx_date >
6959           NVL(p_credit_check_rule_rec.OPEN_AR_DAYS, sysdate - trx_date - 1);
6960 
6961   -- PAY AT RISK
6962 
6963 CURSOR site_pay_risk (p_curr_code IN VARCHAR2 default NULL) IS
6964 SELECT SUM(NVL(crh.amount,0))
6965     FROM   ar_cash_receipt_history crh
6966          , ar_cash_receipts_all cr
6967          , hz_cust_site_uses_all s
6968          , hz_cust_acct_sites_all a
6969      WHERE  crh.cash_receipt_id = cr.cash_receipt_id
6970     AND    crh.org_id           = cr.org_id
6971     AND    crh.current_record_flag = 'Y'
6972     AND    crh.status <> DECODE ( crh.factor_flag
6973                                 , 'Y', 'RISK_ELIMINATED'
6974                                 , 'CLEARED' )
6975     AND    NVL( cr.reversal_category, cr.status||'X' )  <>  cr.status
6976     AND    crh.status <> 'REVERSED'
6977     AND    cr.currency_code =
6978            p_curr_code
6979     AND    cr.customer_site_use_id = s.site_use_id
6980     AND    cr.org_id               = s.org_id                    /* MOAC_SQL_CHANGE */
6981     AND    cr.pay_from_customer    = a.cust_account_id
6982     AND    s.cust_acct_site_id     = a.cust_acct_site_id
6983     AND    s.site_use_id           = p_site_use_id
6984     AND    sysdate - cr.receipt_date
6985            > NVL(p_credit_check_rule_rec.OPEN_AR_DAYS,
6986                sysdate - cr.receipt_date - 1)
6987    AND  NOT EXISTS
6988          (
6989            SELECT
6990              'X'
6991            FROM
6992              ar_receivable_applications rap
6993            WHERE
6994                   rap.cash_receipt_id  =  cr.cash_receipt_id
6995              AND  rap.applied_payment_schedule_id  =  -2
6996              AND  rap.display  =  'Y'
6997          ) ;
6998 
6999 
7000 ------------------------ SITE BR ------------------------------
7001 CURSOR site_br_balance (p_curr_code IN VARCHAR2 default NULL) IS
7002 SELECT SUM(NVL(amount_due_remaining,0) )
7003     FROM   ar_payment_schedules
7004     WHERE  customer_site_use_id = l_drawee_site_use_id
7005     AND    status               = 'OP'
7006     AND    invoice_currency_code = p_curr_code
7007     AND    (receipt_confirmed_flag IS NULL OR receipt_confirmed_flag = 'Y')
7008     AND    gl_date_closed = to_date( '31-12-4712', 'DD-MM-YYYY');
7009 
7010 CURSOR site_br_pay_risk (p_curr_code IN VARCHAR2 default NULL) IS
7011 SELECT SUM(NVL(crh.amount,0))
7012     FROM   ar_cash_receipt_history crh
7013          , ar_cash_receipts_all cr
7014     WHERE  crh.cash_receipt_id = cr.cash_receipt_id
7015     AND    crh.org_id          = cr.org_id                      /* MOAC_SQL_CHANGE */
7016     AND    crh.current_record_flag = 'Y'
7017     AND    crh.status <> DECODE ( crh.factor_flag
7018                                 , 'Y', 'RISK_ELIMINATED'
7019                                 , 'CLEARED' )
7020     AND    NVL( cr.reversal_category, cr.status||'X' )  <>  cr.status
7021     AND    crh.status <> 'REVERSED'
7022     AND    cr.currency_code        = p_curr_code
7023     AND    cr.pay_from_customer    = p_customer_id
7024     AND    cr.customer_site_use_id = l_drawee_site_use_id
7025     AND  NOT EXISTS
7026          (
7027            SELECT
7028              'X'
7029            FROM
7030              ar_receivable_applications rap
7031            WHERE
7032                   rap.cash_receipt_id  =  cr.cash_receipt_id
7033              AND  rap.applied_payment_schedule_id  =  -2
7034              AND  rap.display  =  'Y'
7035          ) ;
7036 
7037 
7038 
7039 -- SITE UNINVOICED ORDERS
7040 
7041 CURSOR site_uninvoiced_orders (p_curr_code IN VARCHAR2 default NULL) IS
7042     SELECT SUM (
7043                  ( l.ordered_quantity * l.unit_selling_price )
7044                +   DECODE(l_include_tax_flag, 'Y',
7045                     NVL(NVL(l.tax_line_value,l.tax_value),0), 0   ) --TaxER
7046                )
7047     FROM   oe_order_lines l
7048          , oe_order_headers_all h
7049     WHERE  h.invoice_to_org_id = p_site_use_id
7050     AND    h.header_id      = l.header_id
7051     AND    h.org_id         = l.org_id           /* MOAC_SQL_CHANGE */
7052     AND    NVL(L.SCHEDULE_SHIP_DATE,NVL(L.REQUEST_DATE,NVL(H.REQUEST_DATE,H.CREATION_DATE)))
7053            <= l_shipping_horizon
7054     AND    (l.invoiced_quantity IS NULL OR l.invoiced_quantity = 0)
7055     AND    h.open_flag   = 'Y'
7056     AND    l.line_category_code = 'ORDER'
7057     AND    h.booked_flag = 'Y'
7058     AND    l.open_flag = 'Y'
7059     AND    h.header_id <> l_header_id
7060     AND    h.transactional_curr_code = p_curr_code
7061     AND    (EXISTS
7062              (SELECT NULL
7063               FROM   oe_payment_types_all pt
7064               WHERE  pt.payment_type_code = NVL(l.payment_type_code,
7065                                             NVL(h.payment_type_code, 'BME'))
7066               AND    pt.credit_check_flag = 'Y'
7067               AND    NVL(pt.org_id, -99)  = G_ORG_ID)
7068             OR
7069             (l.payment_type_code IS NULL AND h.payment_type_code IS NULL));
7070 
7071 
7072 
7073 -- SITE UNINVOICED ORDERS including RETURNS
7074 
7075   CURSOR site_uninvoiced_orders_ret (p_curr_code IN VARCHAR2 default NULL) IS
7076     SELECT
7077       SUM (
7078       ( DECODE(l.line_category_code,'RETURN',(-1)*l.ordered_quantity,l.ordered_quantity)
7079       * l.unit_selling_price )
7080       +   DECODE(l_include_tax_flag, 'Y',
7081       NVL(DECODE(l.line_category_code,'RETURN',(-1)*NVL(l.tax_line_value,l.tax_value),NVL(l.tax_line_value,l.tax_value)),0),0 )  --TaxER
7082            )
7083     FROM   oe_order_lines l
7084          , oe_order_headers_all h
7085     WHERE  h.invoice_to_org_id = p_site_use_id
7086     AND    h.header_id      = l.header_id
7087     AND    h.org_id         = l.org_id                    /* MOAC_SQL_CHANGE */
7088     AND    NVL(L.SCHEDULE_SHIP_DATE,NVL(L.REQUEST_DATE,NVL(H.REQUEST_DATE,H.CREATION_DATE)))
7089            <= l_shipping_horizon
7090     AND    (l.invoiced_quantity IS NULL OR l.invoiced_quantity = 0)
7091     AND    h.open_flag   = 'Y'
7092     AND    h.booked_flag = 'Y'
7093     AND    l.open_flag = 'Y'
7094     AND    h.header_id <> l_header_id
7095     AND    h.transactional_curr_code = p_curr_code
7096     AND    (EXISTS
7097              (SELECT NULL
7098               FROM   oe_payment_types_all pt
7099               WHERE  pt.payment_type_code = NVL(l.payment_type_code,
7100                                             NVL(h.payment_type_code, 'BME'))
7101               AND    pt.credit_check_flag = 'Y'
7102               AND    NVL(pt.org_id, -99)  = G_ORG_ID)
7103             OR
7104             (l.payment_type_code IS NULL AND h.payment_type_code IS NULL));
7105 
7106 
7107   -- site orders not on hold
7108 
7109   CURSOR site_orders_not_on_hold (p_curr_code IN VARCHAR2 default NULL) IS
7110     SELECT SUM( (l.ordered_quantity * l.unit_selling_price )
7111                +   DECODE( l_include_tax_flag, 'Y',
7112                            NVL(NVL(l.tax_line_value,l.tax_value),0), 0  --TaxER
7113                          )
7114                )
7115     FROM   oe_order_lines l
7116          , oe_order_headers_all h
7117     WHERE  h.invoice_to_org_id = p_site_use_id
7118     AND    h.header_id         = l.header_id
7119     AND    h.org_id            = l.org_id                 /* MOAC_SQL_CHANGE */
7120     AND    NVL(L.SCHEDULE_SHIP_DATE,NVL(L.REQUEST_DATE,NVL(H.REQUEST_DATE,H.CREATION_DATE)))
7121            <= l_shipping_horizon
7122     AND    (l.invoiced_quantity IS NULL OR l.invoiced_quantity = 0)
7123     AND    h.open_flag                = 'Y'
7124     AND    l.line_category_code       = 'ORDER'
7125     AND    h.booked_flag              = 'Y'
7126     AND    l.open_flag  = 'Y'
7127     AND    h.header_id <> l_header_id
7128     AND    NOT EXISTS ( SELECT  1
7129                     FROM    oe_order_holds_all oh
7130                     WHERE   h.header_id  = oh.header_id
7131                      AND     oh.hold_release_id IS NULL )
7132     AND    h.transactional_curr_code = p_curr_code
7133     AND    (EXISTS
7134              (SELECT NULL
7135               FROM   oe_payment_types_all pt
7136               WHERE  pt.payment_type_code = NVL(l.payment_type_code,
7137                                             NVL(h.payment_type_code, 'BME'))
7138               AND    pt.credit_check_flag = 'Y'
7139               AND    NVL(pt.org_id, -99)  = G_ORG_ID)
7140             OR
7141             (l.payment_type_code IS NULL AND h.payment_type_code IS NULL));
7142 
7143 
7144 
7145 -- site orders not on hold including Returns
7146 
7147   CURSOR site_orders_not_on_hold_ret (p_curr_code IN VARCHAR2 default NULL) IS
7148     SELECT
7149       SUM (
7150       ( DECODE(l.line_category_code,'RETURN',(-1)*l.ordered_quantity,l.ordered_quantity)
7151       * l.unit_selling_price )
7152       +   DECODE(l_include_tax_flag, 'Y',
7153       NVL(DECODE(l.line_category_code,'RETURN',(-1)*NVL(l.tax_line_value,l.tax_value),NVL(l.tax_line_value,l.tax_value)),0),0 )  --TaxER
7154            )
7155     FROM   oe_order_lines l
7156          , oe_order_headers_all h
7157     WHERE  h.invoice_to_org_id = p_site_use_id
7158     AND    h.header_id         = l.header_id
7159     AND    h.org_id            = l.org_id          /* MOAC_SQL_CHANGE */
7160     AND    NVL(L.SCHEDULE_SHIP_DATE,NVL(L.REQUEST_DATE,NVL(H.REQUEST_DATE,H.CREATION_DATE)))
7161            <= l_shipping_horizon
7162     AND    (l.invoiced_quantity IS NULL OR l.invoiced_quantity = 0)
7163     AND    h.open_flag                = 'Y'
7164     AND    h.booked_flag              = 'Y'
7165     AND    l.open_flag  = 'Y'
7166     AND    h.header_id <> l_header_id
7167     AND    NOT EXISTS ( SELECT  1
7168                     FROM    oe_order_holds_all oh
7169                     WHERE   h.header_id  = oh.header_id
7170                     AND     oh.hold_release_id IS NULL )
7171     AND    h.transactional_curr_code = p_curr_code
7172     AND    (EXISTS
7173              (SELECT NULL
7174               FROM   oe_payment_types_all pt
7175               WHERE  pt.payment_type_code = NVL(l.payment_type_code,
7176                                             NVL(h.payment_type_code, 'BME'))
7177               AND    pt.credit_check_flag = 'Y'
7178               AND    NVL(pt.org_id, -99)  = G_ORG_ID)
7179             OR
7180             (l.payment_type_code IS NULL AND h.payment_type_code IS NULL));
7181 
7182 -- site orders on hold
7183   CURSOR site_orders_on_hold (p_curr_code IN VARCHAR2 default NULL) IS
7184     SELECT SUM( (l.ordered_quantity * l.unit_selling_price )
7185                +   DECODE( l_include_tax_flag, 'Y',
7186                            NVL(NVL(l.tax_line_value,l.tax_value),0), 0  --TaxER
7187                          )
7188                )
7189     FROM   oe_order_lines l
7190          , oe_order_headers_all h
7191     WHERE  h.invoice_to_org_id = p_site_use_id
7192     AND    h.header_id         = l.header_id
7193     AND    h.org_id            = l.org_id           /* MOAC_SQL_CHANGE */
7194     AND    NVL(L.SCHEDULE_SHIP_DATE,NVL(L.REQUEST_DATE,NVL(H.REQUEST_DATE,H.CREATION_DATE)))
7195            <= l_shipping_horizon
7196     AND    (l.invoiced_quantity IS NULL OR l.invoiced_quantity = 0)
7197     AND    h.open_flag                = 'Y'
7198     AND    l.line_category_code       = 'ORDER'
7199     AND    h.booked_flag              = 'Y'
7200     AND    l.open_flag  = 'Y'
7201     AND    h.header_id <> l_header_id
7202     AND    EXISTS ( SELECT  1
7203                     FROM    oe_order_holds_all oh
7204                     WHERE   h.header_id  = oh.header_id
7205                      AND     oh.hold_release_id IS NULL )
7206     AND    h.transactional_curr_code = p_curr_code
7207     AND    (EXISTS
7208              (SELECT NULL
7209               FROM   oe_payment_types_all pt
7210               WHERE  pt.payment_type_code = NVL(l.payment_type_code,
7211                                             NVL(h.payment_type_code, 'BME'))
7212               AND    pt.credit_check_flag = 'Y'
7213               AND    NVL(pt.org_id, -99)  = G_ORG_ID)
7214             OR
7215             (l.payment_type_code IS NULL AND h.payment_type_code IS NULL));
7216 
7217 -- site orders on hold including Returns
7218 
7219   CURSOR site_orders_on_hold_ret (p_curr_code IN VARCHAR2 default NULL) IS
7220     SELECT
7221       SUM (
7222       ( DECODE(l.line_category_code,'RETURN',(-1)*l.ordered_quantity,l.ordered_quantity)      * l.unit_selling_price )
7223       +   DECODE(l_include_tax_flag, 'Y',
7224       NVL(DECODE(l.line_category_code,'RETURN',(-1)*NVL(l.tax_line_value,l.tax_value),NVL(l.tax_line_value,l.tax_value)),0),0 )  --TaxER
7225            )
7226     FROM   oe_order_lines l
7227          , oe_order_headers_all h
7228     WHERE  h.invoice_to_org_id = p_site_use_id
7229     AND    h.header_id         = l.header_id
7230     AND    h.org_id            = l.org_id               /* MOAC_SQL_CHANGE */
7231     AND    NVL(L.SCHEDULE_SHIP_DATE,NVL(L.REQUEST_DATE,NVL(H.REQUEST_DATE,H.CREATION_DATE)))
7232            <= l_shipping_horizon
7233     AND    (l.invoiced_quantity IS NULL OR l.invoiced_quantity = 0)
7234     AND    h.open_flag                = 'Y'
7235     AND    h.booked_flag              = 'Y'
7236     AND    l.open_flag  = 'Y'
7237     AND    h.header_id <> l_header_id
7238     AND    EXISTS ( SELECT  1
7239                     FROM    oe_order_holds_all oh --Performance issue (SQL ID-14881132 FTS on OE_ORDER_HOLDS_ALL)
7240                     WHERE   h.header_id  = oh.header_id
7241                     AND     oh.hold_release_id IS NULL )
7242     AND    h.transactional_curr_code = p_curr_code
7243     AND    (EXISTS
7244              (SELECT NULL
7245               FROM   oe_payment_types_all pt
7246               WHERE  pt.payment_type_code = NVL(l.payment_type_code,
7247                                             NVL(h.payment_type_code, 'BME'))
7248               AND    pt.credit_check_flag = 'Y'
7249               AND    NVL(pt.org_id, -99)  = G_ORG_ID)
7250             OR
7251             (l.payment_type_code IS NULL AND h.payment_type_code IS NULL));
7252 
7253 -- site hdr freights , Does not include curr order
7254 CURSOR site_uninv_hdr_freight1 (p_curr_code IN VARCHAR2 default null) IS
7255 SELECT
7256       SUM
7257       ( DECODE(p.list_line_type_code,'TAX',0,DECODE( P.CREDIT_OR_CHARGE_FLAG, 'C', (-1), (+1) )
7258       * DECODE( p.arithmetic_operator, 'LUMPSUM',          --bug 4295299
7259                 p.operand, (l.ordered_quantity * p.adjusted_amount)))
7260       --TaxER Start
7261       + DECODE(l_include_tax_flag,'Y',DECODE(p.list_line_type_code,'TAX',p.adjusted_amount,0),0)
7262       --TaxER End
7263       )
7264 FROM   oe_price_adjustments p
7265      , oe_order_lines   l
7266      , oe_order_headers_all h
7267 WHERE  h.invoice_to_org_id   = p_site_use_id
7268   AND  p.line_id             =  l.line_id
7269   AND    NVL(L.SCHEDULE_SHIP_DATE,NVL(L.REQUEST_DATE,NVL(H.REQUEST_DATE,H.CREATION_DATE)))
7270            <= l_shipping_horizon
7271   AND  (l.invoiced_quantity IS NULL OR l.invoiced_quantity = 0)
7272   AND  l.header_id          = h.header_id
7273   AND  l.org_id             = h.org_id           /* MOAC_SQL_CHANGE */
7274   AND  p.header_id           =  l.header_id
7275   AND  p.header_id           =  h.header_id
7276   AND  h.booked_flag         =  'Y'
7277   AND  h.open_flag  = 'Y'
7278   AND  l.open_flag  =  'Y'
7279   AND  l.line_category_code  =  'ORDER'
7280   --TaxER  AND  p.applied_flag        =  'Y'
7281   --TaxER AND  p.list_line_type_code =  'FREIGHT_CHARGE'
7282   AND  ((p.list_line_type_code =  'FREIGHT_CHARGE' and p.applied_flag =  'Y') OR (p.list_line_type_code = 'TAX' and p.applied_flag =  'N' and p.parent_adjustment_id IS NOT NULL))  --TaxER  --12895421
7283   AND  (p.invoiced_flag IS NULL OR p.invoiced_flag = 'N')
7284   AND  h.transactional_curr_code = p_curr_code
7285   AND  h.header_id           <> l_header_id
7286   AND  (EXISTS
7287          (SELECT NULL
7288           FROM   oe_payment_types_all pt
7289           WHERE  pt.payment_type_code = NVL(l.payment_type_code,
7290                                         NVL(h.payment_type_code, 'BME'))
7291           AND    pt.credit_check_flag = 'Y'
7292           AND    NVL(pt.org_id, -99)  = G_ORG_ID)
7293         OR
7294         (l.payment_type_code IS NULL AND h.payment_type_code IS NULL));
7295 
7296 
7297 -- sitehdr freights , Does not include curr order
7298 -- Including Returns
7299 
7300 CURSOR site_uninv_hdr_freight1_ret (p_curr_code IN VARCHAR2 default null) IS
7301 SELECT
7302       SUM
7303       ( DECODE(p.list_line_type_code,'TAX',0,DECODE( P.CREDIT_OR_CHARGE_FLAG, 'C', (-1), (+1) )
7304       * DECODE( p.arithmetic_operator, 'LUMPSUM',          --bug 4295299
7305                 p.operand, (l.ordered_quantity * p.adjusted_amount)))
7306       --TaxER Start
7307       + DECODE(l_include_tax_flag,'Y',DECODE(p.list_line_type_code,'TAX',p.adjusted_amount,0),0)
7308       --TaxER End
7309       )
7310 FROM   oe_price_adjustments p
7311      , oe_order_lines   l
7312      , oe_order_headers_all h
7313 WHERE  h.invoice_to_org_id   = p_site_use_id
7314   AND  p.line_id             =  l.line_id
7315   AND    NVL(L.SCHEDULE_SHIP_DATE,NVL(L.REQUEST_DATE,NVL(H.REQUEST_DATE,H.CREATION_DATE)))
7316            <= l_shipping_horizon
7317   AND  (l.invoiced_quantity IS NULL OR l.invoiced_quantity = 0)
7318   AND  l.header_id          = h.header_id
7319   AND  l.org_id             = h.org_id           /* MOAC_SQL_CHANGE */
7320   AND  p.header_id           =  l.header_id
7321   AND  p.header_id           =  h.header_id
7322   AND  h.booked_flag         =  'Y'
7323   AND  h.open_flag  = 'Y'
7324   AND  l.open_flag  =  'Y'
7325   --TaxER  AND  p.applied_flag        =  'Y'
7326   --TaxER AND  p.list_line_type_code =  'FREIGHT_CHARGE'
7327   AND  ((p.list_line_type_code =  'FREIGHT_CHARGE' and p.applied_flag =  'Y') OR (p.list_line_type_code = 'TAX' and p.applied_flag =  'N' and p.parent_adjustment_id IS NOT NULL))  --TaxER  --12895421
7328   AND  (p.invoiced_flag IS NULL OR p.invoiced_flag = 'N')
7329   AND  h.transactional_curr_code = p_curr_code
7330   AND  h.header_id           <> l_header_id
7331   AND  (EXISTS
7332          (SELECT NULL
7333           FROM   oe_payment_types_all pt
7334           WHERE  pt.payment_type_code = NVL(l.payment_type_code,
7335                                         NVL(h.payment_type_code, 'BME'))
7336           AND    pt.credit_check_flag = 'Y'
7337           AND    NVL(pt.org_id, -99)  = G_ORG_ID)
7338         OR
7339         (l.payment_type_code IS NULL AND h.payment_type_code IS NULL));
7340 
7341 -- sitefreights 2
7342 CURSOR site_uninv_hdr_freight2 (p_curr_code IN VARCHAR2 default null) IS
7343 SELECT
7344       SUM( DECODE(p.list_line_type_code,'TAX',0,DECODE( P.CREDIT_OR_CHARGE_FLAG, 'C', (-1), (+1) ) * P.OPERAND )
7345       --TaxER Start
7346       + DECODE(l_include_tax_flag,'Y',DECODE(p.list_line_type_code,'TAX',p.adjusted_amount,0),0))
7347       --TaxER End
7348 FROM
7349        oe_price_adjustments p
7350      , oe_order_headers h
7351 WHERE  h.invoice_to_org_id   = p_site_use_id
7352   AND  NVL(h.request_date, h.creation_date) <= l_shipping_horizon
7353   AND  h.transactional_curr_code = p_curr_code
7354   AND  p.line_id IS NULL
7355   AND  p.header_id           =  h.header_id
7356   AND  h.order_category_code IN ('ORDER','MIXED')
7357   AND  h.open_flag  =  'Y'
7358   AND  h.booked_flag         =  'Y'
7359   --TaxER  AND  p.applied_flag        =  'Y'
7360   --TaxER AND  p.list_line_type_code =  'FREIGHT_CHARGE'
7361   AND  ((p.list_line_type_code =  'FREIGHT_CHARGE' and p.applied_flag =  'Y') OR (p.list_line_type_code = 'TAX' and p.applied_flag =  'N' and p.parent_adjustment_id IS NOT NULL))  --TaxER  --12895421
7362   AND  (p.invoiced_flag IS NULL OR p.invoiced_flag = 'N')
7363   AND  h.header_id           <> l_header_id
7364   AND  EXISTS
7365         (SELECT NULL
7366          FROM   oe_payment_types_all pt,
7367                 oe_order_lines l
7368          WHERE  pt.credit_check_flag = 'Y'
7369          AND    l.header_id = h.header_id
7370          AND    l.org_id    = pt.org_id          /* MOAC_SQL_CHANGE */
7371          AND    NVL(pt.org_id, -99) = G_ORG_ID
7372          AND    pt.payment_type_code =
7373                   DECODE(l.payment_type_code, NULL,
7374                      DECODE(h.payment_type_code, NULL, pt.payment_type_code,
7375                             h.payment_type_code),
7376                          l.payment_type_code)
7377         );
7378 
7379 -- sitefreights 2 including Returns
7380 
7381 CURSOR site_uninv_hdr_freight2_ret (p_curr_code IN VARCHAR2 default null) IS
7382 SELECT
7383       SUM( DECODE(p.list_line_type_code,'TAX',0,DECODE( P.CREDIT_OR_CHARGE_FLAG, 'C', (-1), (+1) ) * P.OPERAND )
7384       --TaxER Start
7385       + DECODE(l_include_tax_flag,'Y',DECODE(p.list_line_type_code,'TAX',p.adjusted_amount,0),0))
7386       --TaxER End
7387 FROM
7388        oe_price_adjustments p
7389      , oe_order_headers h
7390 WHERE  h.invoice_to_org_id   = p_site_use_id
7391   AND  NVL(h.request_date, h.creation_date) <= l_shipping_horizon
7392   AND  h.transactional_curr_code = p_curr_code
7393   AND  p.line_id IS NULL
7394   AND  p.header_id           =  h.header_id
7395   AND  h.order_category_code IN ('ORDER','MIXED','RETURN')
7396   AND  h.open_flag  =  'Y'
7397   AND  h.booked_flag         =  'Y'
7398   --TaxER  AND  p.applied_flag        =  'Y'
7399   --TaxER AND  p.list_line_type_code =  'FREIGHT_CHARGE'
7400   AND  ((p.list_line_type_code =  'FREIGHT_CHARGE' and p.applied_flag =  'Y') OR (p.list_line_type_code = 'TAX' and p.applied_flag =  'N' and p.parent_adjustment_id IS NOT NULL))  --TaxER --12895421
7401   AND  (p.invoiced_flag IS NULL OR p.invoiced_flag = 'N')
7402   AND  h.header_id           <> l_header_id
7403   AND  EXISTS
7404         (SELECT NULL
7405          FROM   oe_payment_types_all pt,
7406                 oe_order_lines l
7407          WHERE  pt.credit_check_flag = 'Y'
7408          AND    l.header_id = h.header_id
7409          AND    l.org_id    = pt.org_id          /* MOAC_SQL_CHANGE */
7410          AND    NVL(pt.org_id, -99) = G_ORG_ID
7411          AND    pt.payment_type_code =
7412                   DECODE(l.payment_type_code, NULL,
7413                      DECODE(h.payment_type_code, NULL, pt.payment_type_code,
7414                             h.payment_type_code),
7415                          l.payment_type_code)
7416        );
7417 
7418 -- site freights not on hold 1
7419  CURSOR site_no_hold_hdr_freight1 (p_curr_code IN VARCHAR2 default null) IS
7420 SELECT
7421       SUM
7422       ( DECODE(p.list_line_type_code,'TAX',0,DECODE( P.CREDIT_OR_CHARGE_FLAG, 'C', (-1), (+1) )
7423       * DECODE( p.arithmetic_operator, 'LUMPSUM',          --bug 4295299
7424                 p.operand, (l.ordered_quantity * p.adjusted_amount)))
7425       --TaxER Start
7426       + DECODE(l_include_tax_flag,'Y',DECODE(p.list_line_type_code,'TAX',p.adjusted_amount,0),0)
7427       --TaxER End
7428       )
7429 FROM   oe_price_adjustments p
7430      , oe_order_lines   l
7431      , oe_order_headers_all h
7432 WHERE  h.invoice_to_org_id   = p_site_use_id
7433   AND  p.line_id             =  l.line_id
7434   AND  NVL(L.SCHEDULE_SHIP_DATE,NVL(L.REQUEST_DATE,NVL(H.REQUEST_DATE,H.CREATION_DATE)))
7435            <= l_shipping_horizon
7436   AND  (l.invoiced_quantity IS NULL OR l.invoiced_quantity = 0)
7437   AND  l.header_id          = h.header_id
7438   AND  l.org_id             = h.org_id                 /* MOAC_SQL_CHANGE */
7439   AND  p.header_id           =  l.header_id
7440   AND  p.header_id           =  h.header_id
7441   AND  h.booked_flag         =  'Y'
7442   AND  h.open_flag  = 'Y'
7443   AND  l.open_flag  =  'Y'
7444   AND  l.line_category_code  =  'ORDER'
7445   --TaxER  AND  p.applied_flag        =  'Y'
7446   --TaxER AND  p.list_line_type_code =  'FREIGHT_CHARGE'
7447   AND  ((p.list_line_type_code =  'FREIGHT_CHARGE' and p.applied_flag =  'Y') OR (p.list_line_type_code = 'TAX' and p.applied_flag =  'N' and p.parent_adjustment_id IS NOT NULL))  --TaxER  --12895421
7448   AND  (p.invoiced_flag IS NULL OR p.invoiced_flag = 'N')
7449   AND  h.transactional_curr_code = p_curr_code
7450   AND  h.header_id           <> l_header_id
7451   AND  NOT EXISTS ( SELECT  1
7452                     FROM    oe_order_holds_all oh --Modified the query to access oe_order_holds_all
7453                     WHERE   h.header_id = oh.header_id --instead of oe_order_holds to avoid FTS (SQL ID#14881276)
7454                     AND     oh.line_id IS NULL
7455                     AND     oh.hold_release_id IS NULL )
7456   AND (EXISTS
7457              (SELECT NULL
7458               FROM   oe_payment_types_all pt
7459               WHERE  pt.payment_type_code = NVL(l.payment_type_code,
7460                                             NVL(h.payment_type_code, 'BME'))
7461               AND    pt.credit_check_flag = 'Y'
7462               AND    NVL(pt.org_id, -99)  = G_ORG_ID)
7463        OR
7464        (l.payment_type_code IS NULL AND h.payment_type_code IS NULL));
7465 
7466 
7467 -- sitefreights not on hold 1 including Returns
7468 
7469  CURSOR site_no_hold_hdr_freight1_ret (p_curr_code IN VARCHAR2 default null) IS
7470 SELECT
7471       SUM
7472       ( DECODE(p.list_line_type_code,'TAX',0,DECODE( P.CREDIT_OR_CHARGE_FLAG, 'C', (-1), (+1) )
7473       * DECODE( p.arithmetic_operator, 'LUMPSUM',          --bug 4295299
7474                 p.operand, (l.ordered_quantity * p.adjusted_amount)))
7475       --TaxER Start
7476       + DECODE(l_include_tax_flag,'Y',DECODE(p.list_line_type_code,'TAX',p.adjusted_amount,0),0)
7477       --TaxER End
7478       )
7479 FROM   oe_price_adjustments p
7480      , oe_order_lines   l
7481      , oe_order_headers_all h
7482 WHERE  h.invoice_to_org_id   = p_site_use_id
7483   AND  p.line_id             =  l.line_id
7484   AND  NVL(L.SCHEDULE_SHIP_DATE,NVL(L.REQUEST_DATE,NVL(H.REQUEST_DATE,H.CREATION_DATE)))
7485            <= l_shipping_horizon
7486   AND  (l.invoiced_quantity IS NULL OR l.invoiced_quantity = 0)
7487   AND  l.header_id          = h.header_id
7488   AND  l.org_id             = h.org_id                 /* MOAC_SQL_CHANGE */
7489   AND  p.header_id           =  l.header_id
7490   AND  p.header_id           =  h.header_id
7491   AND  h.booked_flag         =  'Y'
7492   AND  h.open_flag  = 'Y'
7493   AND  l.open_flag  =  'Y'
7494   --TaxER  AND  p.applied_flag        =  'Y'
7495   --TaxER AND  p.list_line_type_code =  'FREIGHT_CHARGE'
7496   AND  ((p.list_line_type_code =  'FREIGHT_CHARGE' and p.applied_flag =  'Y') OR (p.list_line_type_code = 'TAX' and p.applied_flag =  'N' and p.parent_adjustment_id IS NOT NULL))  --TaxER  --12895421
7497   AND  (p.invoiced_flag IS NULL OR p.invoiced_flag = 'N')
7498   AND  h.transactional_curr_code = p_curr_code
7499   AND  h.header_id           <> l_header_id
7500   AND  NOT EXISTS ( SELECT  1
7501                     FROM    oe_order_holds_all oh   --Modified the query to select from
7502                     WHERE   h.header_id = oh.header_id --oe_order_holds_all to avoid FTS (SQL#14881293)
7503                     AND     oh.line_id IS NULL
7504                     AND     oh.hold_release_id IS NULL )
7505   AND (EXISTS
7506              (SELECT NULL
7507               FROM   oe_payment_types_all pt
7508               WHERE  pt.payment_type_code = NVL(l.payment_type_code,
7509                                             NVL(h.payment_type_code, 'BME'))
7510               AND    pt.credit_check_flag = 'Y'
7511               AND    NVL(pt.org_id, -99)  = G_ORG_ID)
7512        OR
7513        (l.payment_type_code IS NULL AND h.payment_type_code IS NULL));
7514 
7515 -- site freights on hold 1
7516  CURSOR site_hold_hdr_freight1 (p_curr_code IN VARCHAR2 default null) IS
7517 SELECT
7518       SUM
7519       ( DECODE(p.list_line_type_code,'TAX',0,DECODE( P.CREDIT_OR_CHARGE_FLAG, 'C', (-1), (+1) )
7520       * DECODE( p.arithmetic_operator, 'LUMPSUM',          --bug 4295299
7521                 p.operand, (l.ordered_quantity * p.adjusted_amount)))
7522       --TaxER Start
7523       + DECODE(l_include_tax_flag,'Y',DECODE(p.list_line_type_code,'TAX',p.adjusted_amount,0),0)
7524       --TaxER End
7525       )
7526 FROM   oe_price_adjustments p
7527      , oe_order_lines   l
7528      , oe_order_headers_all h
7529 WHERE  h.invoice_to_org_id   = p_site_use_id
7530   AND  p.line_id             =  l.line_id
7531   AND  NVL(L.SCHEDULE_SHIP_DATE,NVL(L.REQUEST_DATE,NVL(H.REQUEST_DATE,H.CREATION_DATE)))
7532            <= l_shipping_horizon
7533   AND  (l.invoiced_quantity IS NULL OR l.invoiced_quantity = 0)
7534   AND  l.header_id          = h.header_id
7535   AND  l.org_id             = h.org_id                 /* MOAC_SQL_CHANGE */
7536   AND  p.header_id           =  l.header_id
7537   AND  p.header_id           =  h.header_id
7538   AND  h.booked_flag         =  'Y'
7539   AND  h.open_flag  = 'Y'
7540   AND  l.open_flag  =  'Y'
7541   AND  l.line_category_code  =  'ORDER'
7542   --TaxER  AND  p.applied_flag        =  'Y'
7543   --TaxER AND  p.list_line_type_code =  'FREIGHT_CHARGE'
7544   AND  ((p.list_line_type_code =  'FREIGHT_CHARGE' and p.applied_flag =  'Y') OR (p.list_line_type_code = 'TAX' and p.applied_flag =  'N' and p.parent_adjustment_id IS NOT NULL))  --TaxER  --12895421
7545   AND  (p.invoiced_flag IS NULL OR p.invoiced_flag = 'N')
7546   AND  h.transactional_curr_code = p_curr_code
7547   AND  h.header_id           <> l_header_id
7548   AND  EXISTS ( SELECT  1
7549                     FROM    oe_order_holds_all oh
7550                     WHERE   h.header_id = oh.header_id
7551                     AND     oh.line_id IS NULL
7552                     AND     oh.hold_release_id IS NULL )
7553   AND (EXISTS
7554              (SELECT NULL
7555               FROM   oe_payment_types_all pt
7556               WHERE  pt.payment_type_code = NVL(l.payment_type_code,
7557                                             NVL(h.payment_type_code, 'BME'))
7558               AND    pt.credit_check_flag = 'Y'
7559               AND    NVL(pt.org_id, -99)  = G_ORG_ID)
7560        OR
7561        (l.payment_type_code IS NULL AND h.payment_type_code IS NULL));
7562 
7563 -- sitefreights on hold 1 including Returns
7564 
7565  CURSOR site_hold_hdr_freight1_ret (p_curr_code IN VARCHAR2 default null) IS
7566 SELECT
7567       SUM
7568       ( DECODE(p.list_line_type_code,'TAX',0,DECODE( P.CREDIT_OR_CHARGE_FLAG, 'C', (-1), (+1) )
7569       * DECODE( p.arithmetic_operator, 'LUMPSUM',          --bug 4295299
7570                 p.operand, (l.ordered_quantity * p.adjusted_amount)))
7571       --TaxER Start
7572       + DECODE(l_include_tax_flag,'Y',DECODE(p.list_line_type_code,'TAX',p.adjusted_amount,0),0)
7573       --TaxER End
7574       )
7575 FROM   oe_price_adjustments p
7576      , oe_order_lines   l
7577      , oe_order_headers_all h
7578 WHERE  h.invoice_to_org_id   = p_site_use_id
7579   AND  p.line_id             =  l.line_id
7580   AND  NVL(L.SCHEDULE_SHIP_DATE,NVL(L.REQUEST_DATE,NVL(H.REQUEST_DATE,H.CREATION_DATE)))
7581            <= l_shipping_horizon
7582   AND  (l.invoiced_quantity IS NULL OR l.invoiced_quantity = 0)
7583   AND  l.header_id          = h.header_id
7584   AND  l.org_id             = h.org_id                 /* MOAC_SQL_CHANGE */
7585   AND  p.header_id           =  l.header_id
7586   AND  p.header_id           =  h.header_id
7587   AND  h.booked_flag         =  'Y'
7588   AND  h.open_flag  = 'Y'
7589   AND  l.open_flag  =  'Y'
7590   --TaxER  AND  p.applied_flag        =  'Y'
7591   --TaxER AND  p.list_line_type_code =  'FREIGHT_CHARGE'
7592   AND  ((p.list_line_type_code =  'FREIGHT_CHARGE' and p.applied_flag =  'Y') OR (p.list_line_type_code = 'TAX' and p.applied_flag =  'N' and p.parent_adjustment_id IS NOT NULL))  --TaxER  --12895421
7593   AND  (p.invoiced_flag IS NULL OR p.invoiced_flag = 'N')
7594   AND  h.transactional_curr_code = p_curr_code
7595   AND  h.header_id           <> l_header_id
7596   AND  EXISTS ( SELECT  1
7597                     FROM    oe_order_holds_all oh
7598                     WHERE   h.header_id = oh.header_id
7599                     AND     oh.line_id IS NULL
7600                     AND     oh.hold_release_id IS NULL )
7601   AND  EXISTS
7602         (SELECT NULL
7603          FROM   oe_payment_types_all pt,
7604                 oe_order_lines l
7605          WHERE  pt.credit_check_flag = 'Y'
7606          AND    l.header_id = h.header_id
7607          AND    l.org_id    = pt.org_id                /* MOAC_SQL_CHANGE */
7608          AND    NVL(pt.org_id, -99) = G_ORG_ID
7609          AND    pt.payment_type_code =
7610                   DECODE(l.payment_type_code, NULL,
7611                      DECODE(h.payment_type_code, NULL, pt.payment_type_code,
7612                             h.payment_type_code),
7613                          l.payment_type_code)
7614         );
7615 
7616 
7617 -- site not on hold freight 2
7618  CURSOR site_no_hold_hdr_freight2 (p_curr_code IN VARCHAR2 default null) IS
7619 SELECT
7620       SUM( DECODE(p.list_line_type_code,'TAX',0,DECODE( P.CREDIT_OR_CHARGE_FLAG, 'C', (-1), (+1) ) * P.OPERAND )
7621       --TaxER Start
7622       + DECODE(l_include_tax_flag,'Y',DECODE(p.list_line_type_code,'TAX',p.adjusted_amount,0),0))
7623       --TaxER End
7624 FROM
7625        oe_price_adjustments p
7626      , oe_order_headers h
7627 WHERE  h.invoice_to_org_id   = p_site_use_id
7628   AND  NVL(h.request_date, h.creation_date) <= l_shipping_horizon
7629   AND  h.transactional_curr_code = p_curr_code
7630   AND  p.line_id IS NULL
7631   AND  p.header_id           =  h.header_id
7632   AND  h.order_category_code IN ('ORDER','MIXED')
7633   AND  h.open_flag  =  'Y'
7634   AND  h.booked_flag         =  'Y'
7635   --TaxER  AND  p.applied_flag        =  'Y'
7636   --TaxER AND  p.list_line_type_code =  'FREIGHT_CHARGE'
7637   AND  ((p.list_line_type_code =  'FREIGHT_CHARGE' and p.applied_flag =  'Y') OR (p.list_line_type_code = 'TAX' and p.applied_flag =  'N' and p.parent_adjustment_id IS NOT NULL))  --TaxER  --12895421
7638   AND  (p.invoiced_flag IS NULL OR p.invoiced_flag = 'N')
7639   AND  h.header_id           <> l_header_id
7640   AND  NOT EXISTS ( SELECT  1
7641                     FROM    oe_order_holds_all oh
7642                     WHERE   h.header_id = oh.header_id
7643                     AND     oh.line_id IS NULL
7644                     AND     oh.hold_release_id IS NULL )
7645   AND  EXISTS
7646         (SELECT NULL
7647          FROM   oe_payment_types_all pt,
7648                 oe_order_lines l
7649          WHERE  pt.credit_check_flag = 'Y'
7650          AND    l.header_id = h.header_id
7651          AND    l.org_id    = pt.org_id              /* MOAC_SQL_CHANGE */
7652          AND    NVL(pt.org_id, -99) = G_ORG_ID
7653          AND    pt.payment_type_code =
7654                   DECODE(l.payment_type_code, NULL,
7655                      DECODE(h.payment_type_code, NULL, pt.payment_type_code,
7656                             h.payment_type_code),
7657                          l.payment_type_code)
7658         );
7659 
7660 
7661 -- site not on hold freight 2 including Returns
7662 
7663  CURSOR site_no_hold_hdr_freight2_ret (p_curr_code IN VARCHAR2 default null) IS
7664 SELECT
7665       SUM( DECODE(p.list_line_type_code,'TAX',0,DECODE( P.CREDIT_OR_CHARGE_FLAG, 'C', (-1), (+1) ) * P.OPERAND )
7666       --TaxER Start
7667       + DECODE(l_include_tax_flag,'Y',DECODE(p.list_line_type_code,'TAX',p.adjusted_amount,0),0))
7668       --TaxER End
7669 FROM
7670        oe_price_adjustments p
7671      , oe_order_headers h
7672 WHERE  h.invoice_to_org_id   = p_site_use_id
7673   AND  NVL(h.request_date, h.creation_date) <= l_shipping_horizon
7674   AND  h.transactional_curr_code = p_curr_code
7675   AND  p.line_id IS NULL
7676   AND  p.header_id           =  h.header_id
7677   AND  h.order_category_code IN ('ORDER','MIXED','RETURN')
7678   AND  h.open_flag  =  'Y'
7679   AND  h.booked_flag         =  'Y'
7680   --TaxER  AND  p.applied_flag        =  'Y'
7681   --TaxER AND  p.list_line_type_code =  'FREIGHT_CHARGE'
7682   AND  ((p.list_line_type_code =  'FREIGHT_CHARGE' and p.applied_flag =  'Y') OR (p.list_line_type_code = 'TAX' and p.applied_flag =  'N' and p.parent_adjustment_id IS NOT NULL))  --TaxER  --12895421
7683   AND  (p.invoiced_flag IS NULL OR p.invoiced_flag = 'N')
7684   AND  h.header_id           <> l_header_id
7685   AND  NOT EXISTS ( SELECT  1
7686                     FROM    oe_order_holds_all oh
7687                     WHERE   h.header_id = oh.header_id
7688                     AND     oh.line_id IS NULL
7689                     AND     oh.hold_release_id IS NULL )
7690   AND  EXISTS
7691         (SELECT NULL
7692          FROM   oe_payment_types_all pt,
7693                 oe_order_lines l
7694          WHERE  pt.credit_check_flag = 'Y'
7695          AND    l.header_id = h.header_id
7696          AND    l.org_id    = pt.org_id                  /* MOAC_SQL_CHANGE */
7697          AND    NVL(pt.org_id, -99) = G_ORG_ID
7698          AND    pt.payment_type_code =
7699                   DECODE(l.payment_type_code, NULL,
7700                      DECODE(h.payment_type_code, NULL, pt.payment_type_code,
7701                             h.payment_type_code),
7702                          l.payment_type_code)
7703         );
7704 
7705 -- site on hold freight 2
7706 
7707  CURSOR site_hold_hdr_freight2 (p_curr_code IN VARCHAR2 default null) IS
7708 SELECT
7709       SUM( DECODE(p.list_line_type_code,'TAX',0,DECODE( P.CREDIT_OR_CHARGE_FLAG, 'C', (-1), (+1) ) * P.OPERAND )
7710       --TaxER Start
7711       + DECODE(l_include_tax_flag,'Y',DECODE(p.list_line_type_code,'TAX',p.adjusted_amount,0),0))
7712       --TaxER End
7713 FROM
7714        oe_price_adjustments p
7715      , oe_order_headers h
7716 WHERE  h.invoice_to_org_id   = p_site_use_id
7717   AND  NVL(h.request_date, h.creation_date) <= l_shipping_horizon
7718   AND  h.transactional_curr_code = p_curr_code
7719   AND  p.line_id IS NULL
7720   AND  p.header_id           =  h.header_id
7721   AND  h.order_category_code IN ('ORDER','MIXED')
7722   AND  h.open_flag  =  'Y'
7723   AND  h.booked_flag         =  'Y'
7724   --TaxER  AND  p.applied_flag        =  'Y'
7725   --TaxER AND  p.list_line_type_code =  'FREIGHT_CHARGE'
7726   AND  ((p.list_line_type_code =  'FREIGHT_CHARGE' and p.applied_flag =  'Y') OR (p.list_line_type_code = 'TAX' and p.applied_flag =  'N' and p.parent_adjustment_id IS NOT NULL))  --TaxER  --12895421
7727   AND  (p.invoiced_flag IS NULL OR p.invoiced_flag = 'N')
7728   AND  h.header_id           <> l_header_id
7729   AND  EXISTS ( SELECT  1
7730                     FROM    oe_order_holds_all oh
7731                     WHERE   h.header_id = oh.header_id
7732                     AND     oh.line_id IS NULL
7733                     AND     oh.hold_release_id IS NULL )
7734   AND  EXISTS
7735         (SELECT NULL
7736          FROM   oe_payment_types_all pt,
7737                 oe_order_lines l
7738          WHERE  pt.credit_check_flag = 'Y'
7739          AND    l.header_id = h.header_id
7740          AND    l.org_id    = pt.org_id             /* MOAC_SQL_CHANGE */
7741          AND    NVL(pt.org_id, -99) = G_ORG_ID
7742          AND    pt.payment_type_code =
7743                   DECODE(l.payment_type_code, NULL,
7744                      DECODE(h.payment_type_code, NULL, pt.payment_type_code,
7745                             h.payment_type_code),
7746                          l.payment_type_code)
7747         );
7748 
7749 -- site on hold freight 2 including Returns
7750 
7751  CURSOR site_hold_hdr_freight2_ret (p_curr_code IN VARCHAR2 default null) IS
7752 SELECT
7753       SUM( DECODE(p.list_line_type_code,'TAX',0,DECODE( P.CREDIT_OR_CHARGE_FLAG, 'C', (-1), (+1) ) * P.OPERAND )
7754       --TaxER Start
7755       + DECODE(l_include_tax_flag,'Y',DECODE(p.list_line_type_code,'TAX',p.adjusted_amount,0),0))
7756       --TaxER End
7757 FROM
7758        oe_price_adjustments p
7759      , oe_order_headers h
7760 WHERE  h.invoice_to_org_id   = p_site_use_id
7761   AND  NVL(h.request_date, h.creation_date) <= l_shipping_horizon
7762   AND  h.transactional_curr_code = p_curr_code
7763   AND  p.line_id IS NULL
7764   AND  p.header_id           =  h.header_id
7765   AND  h.order_category_code IN ('ORDER','MIXED','RETURN')
7766   AND  h.open_flag  =  'Y'
7767   AND  h.booked_flag         =  'Y'
7768   --TaxER  AND  p.applied_flag        =  'Y'
7769   --TaxER AND  p.list_line_type_code =  'FREIGHT_CHARGE'
7770   AND  ((p.list_line_type_code =  'FREIGHT_CHARGE' and p.applied_flag =  'Y') OR (p.list_line_type_code = 'TAX' and p.applied_flag =  'N' and p.parent_adjustment_id IS NOT NULL))  --TaxER  --12895421
7771   AND  (p.invoiced_flag IS NULL OR p.invoiced_flag = 'N')
7772   AND  h.header_id           <> l_header_id
7773   AND  EXISTS ( SELECT  1
7774                     FROM    oe_order_holds_all oh
7775                     WHERE   h.header_id = oh.header_id
7776                     AND     oh.line_id IS NULL
7777                     AND     oh.hold_release_id IS NULL )
7778   AND  EXISTS
7779         (SELECT NULL
7780          FROM   oe_payment_types_all pt,
7781                 oe_order_lines l
7782          WHERE  pt.credit_check_flag = 'Y'
7783          AND    l.header_id = h.header_id
7784          AND    l.org_id    = pt.org_id            /* MOAC_SQL_CHANGE */
7785          AND    NVL(pt.org_id, -99) = G_ORG_ID
7786          AND    pt.payment_type_code =
7787                   DECODE(l.payment_type_code, NULL,
7788                      DECODE(h.payment_type_code, NULL, pt.payment_type_code,
7789                             h.payment_type_code),
7790                          l.payment_type_code)
7791         );
7792 
7793 
7794 -------------------------------------------------------------
7795 ------------ GLOBAL EXPOSURE CURSORS
7796 -- Discussed with the performance team and
7797 -- was advised to have separate cursors to avoid any
7798 -- performance related Issues , especially if ORG was indexed
7799 -- down the line.
7800 
7801 -- Byg 2417717 - AR relationships
7802 -------------------------------------------------------------
7803 -- AR BALANCE
7804 --Bug 7570339
7805 /*CURSOR cust_ar_balance_global
7806        (p_curr_code IN VARCHAR2 default NULL) IS
7807     SELECT SUM(NVL(ps.amount_due_remaining,0))
7808     FROM   ar_payment_schedules_ALL ps
7809          , hz_cust_site_uses_ALL su
7810          , hz_cust_acct_sites_ALL cas
7811     WHERE  ps.customer_site_use_id = su.site_use_id
7812     AND    ps.status               = 'OP'
7813     AND    cas.cust_acct_site_id   = su.cust_acct_site_id
7814     AND    cas.cust_account_id     = p_customer_id
7815     AND    su.site_use_code        =
7816              DECODE(l_open_ar_days,0,site_use_code,'BILL_TO' )
7817     AND    ps.invoice_currency_code = p_curr_code
7818     AND    (ps.receipt_confirmed_flag IS NULL OR ps.receipt_confirmed_flag='Y')
7819     AND    ps.gl_date_closed = to_date( '31-12-4712', 'DD-MM-YYYY')
7820     AND    sysdate - ps.trx_date >
7821     NVL(p_credit_check_rule_rec.OPEN_AR_DAYS, sysdate - ps.trx_date - 1); */
7822 
7823 CURSOR cust_ar_balance_global
7824        (p_curr_code IN VARCHAR2 default NULL) IS
7825     SELECT SUM(NVL(amount_due_remaining,0)) FROM (
7826     SELECT NVL(ps.amount_due_remaining,0) amount_due_remaining,ps.PAYMENT_SCHEDULE_ID
7827     FROM   ar_payment_schedules_ALL ps
7828          , hz_cust_site_uses_ALL su
7829          , hz_cust_acct_sites_ALL cas
7830     WHERE  ps.customer_site_use_id = su.site_use_id
7831     AND    ps.status               = 'OP'
7832     AND    cas.cust_acct_site_id   = su.cust_acct_site_id
7833     AND    cas.cust_account_id     = p_customer_id
7834     AND    su.site_use_code        =
7835              DECODE(l_open_ar_days,0,site_use_code,'BILL_TO' )
7836     AND    ps.invoice_currency_code = p_curr_code
7837     AND    (ps.receipt_confirmed_flag IS NULL OR ps.receipt_confirmed_flag='Y')
7838     AND    ps.gl_date_closed = to_date( '31-12-4712', 'DD-MM-YYYY')
7839     AND    sysdate - ps.trx_date >
7840     NVL(p_credit_check_rule_rec.OPEN_AR_DAYS, sysdate - ps.trx_date - 1)
7841 UNION
7842 
7843    SELECT NVL(ps.amount_due_remaining,0) amount_due_remaining,ps.PAYMENT_SCHEDULE_ID
7844     FROM   ar_payment_schedules_ALL ps
7845     WHERE  ps.status               = 'OP'
7846     AND    ps.CUSTOMER_ID     = p_customer_id
7847     AND    ps.CUSTOMER_SITE_USE_ID IS NULL
7848     AND    ps.invoice_currency_code = p_curr_code
7849     AND    (ps.receipt_confirmed_flag IS NULL OR ps.receipt_confirmed_flag='Y')
7850     AND    ps.gl_date_closed = to_date( '31-12-4712', 'DD-MM-YYYY')
7851     AND    sysdate - ps.trx_date >
7852     NVL(p_credit_check_rule_rec.OPEN_AR_DAYS, sysdate - ps.trx_date - 1));
7853 
7854 --  PAY AT RISK
7855 --Bug 7570339
7856 
7857 /*CURSOR cust_pay_risk_global
7858        (p_curr_code IN VARCHAR2 default NULL) IS
7859 SELECT SUM(NVL(crh.amount,0))
7860     FROM   ar_cash_receipt_history_ALL crh
7861          , ar_cash_receipts_ALL cr
7862          , hz_cust_site_uses_ALL su
7863          , hz_cust_acct_sites_ALL cas
7864     WHERE  crh.cash_receipt_id        = cr.cash_receipt_id
7865     AND    (cr.confirmed_flag IS NULL OR cr.confirmed_flag = 'Y')
7866     AND    crh.current_record_flag    = 'Y'
7867     AND    crh.status <> DECODE ( crh.factor_flag
7868                                 , 'Y', 'RISK_ELIMINATED'
7869                                 , 'CLEARED')
7870     AND    NVL( cr.reversal_category, cr.status||'X' )  <>  cr.status
7871     AND    crh.status <> 'REVERSED'
7872     AND    cr.currency_code           = p_curr_code
7873     AND    cr.pay_from_customer       = cas.cust_account_id
7874     AND    cr.customer_site_use_id    = su.site_use_id
7875     AND    cas.cust_acct_site_id      = su.cust_acct_site_id
7876     AND    cas.cust_account_id        = p_customer_id
7877     AND    su.site_use_code           =
7878              DECODE(l_open_ar_days,0,site_use_code,'BILL_TO' )
7879     AND    sysdate - cr.receipt_date >
7880              NVL(p_credit_check_rule_rec.OPEN_AR_DAYS,
7881               sysdate - cr.receipt_date - 1)
7882     AND  NOT EXISTS
7883            (
7884            SELECT
7885              'X'
7886            FROM
7887              ar_receivable_applications_ALL rap
7888            WHERE
7889                   rap.cash_receipt_id  =  cr.cash_receipt_id
7890              AND  rap.applied_payment_schedule_id  =  -2
7891              AND  rap.display  =  'Y'
7892          ) ;
7893 */
7894 CURSOR cust_pay_risk_global
7895        (p_curr_code IN VARCHAR2 default NULL) IS
7896 SELECT SUM(NVL(amount,0)) FROM (
7897 SELECT NVL(crh.amount,0) amount,cr.pay_from_customer,cr.cash_receipt_id
7898     FROM   ar_cash_receipt_history_ALL crh
7899          , ar_cash_receipts_ALL cr
7900          , hz_cust_site_uses_ALL su
7901          , hz_cust_acct_sites_ALL cas
7902     WHERE  crh.cash_receipt_id        = cr.cash_receipt_id
7903     AND    (cr.confirmed_flag IS NULL OR cr.confirmed_flag = 'Y')
7904     AND    crh.current_record_flag    = 'Y'
7905     AND    crh.status <> DECODE ( crh.factor_flag
7906                                 , 'Y', 'RISK_ELIMINATED'
7907                                 , 'CLEARED')
7908     AND    NVL( cr.reversal_category, cr.status||'X' )  <>  cr.status
7909     AND    crh.status <> 'REVERSED'
7910     AND    cr.currency_code           = p_curr_code
7911     AND    cr.pay_from_customer       = cas.cust_account_id
7912     AND    cr.customer_site_use_id    = su.site_use_id
7913     AND    cas.cust_acct_site_id      = su.cust_acct_site_id
7914     AND    cas.cust_account_id        = p_customer_id
7915     AND    su.site_use_code           =
7916              DECODE(l_open_ar_days,0,site_use_code,'BILL_TO' )
7917     AND    sysdate - cr.receipt_date >
7918              NVL(p_credit_check_rule_rec.OPEN_AR_DAYS,
7919               sysdate - cr.receipt_date - 1)
7920     AND  NOT EXISTS
7921            (
7922            SELECT
7923              'X'
7924            FROM
7925              ar_receivable_applications_ALL rap
7926            WHERE
7927                   rap.cash_receipt_id  =  cr.cash_receipt_id
7928              AND  rap.applied_payment_schedule_id  =  -2
7929              AND  rap.display  =  'Y'
7930          )
7931   UNION
7932   SELECT NVL(crh.amount,0) amount,cr.pay_from_customer,cr.cash_receipt_id
7933     FROM   ar_cash_receipt_history_ALL crh
7934          , ar_cash_receipts_ALL cr
7935    WHERE  crh.cash_receipt_id        = cr.cash_receipt_id
7936     AND    (cr.confirmed_flag IS NULL OR cr.confirmed_flag = 'Y')
7937     AND    crh.current_record_flag    = 'Y'
7938     AND    crh.status <> DECODE ( crh.factor_flag
7939                                 , 'Y', 'RISK_ELIMINATED'
7940                                 , 'CLEARED')
7941     AND    NVL( cr.reversal_category, cr.status||'X' )  <>  cr.status
7942     AND    crh.status <> 'REVERSED'
7943     AND    cr.currency_code           = p_curr_code
7944     AND    cr.pay_from_customer       = p_customer_id
7945     AND    cr.customer_site_use_id IS NULL
7946     AND    sysdate - cr.receipt_date >
7947              NVL(p_credit_check_rule_rec.OPEN_AR_DAYS,
7948               sysdate - cr.receipt_date - 1)
7949     AND  NOT EXISTS
7950            (
7951            SELECT
7952              'X'
7953            FROM
7954              ar_receivable_applications_ALL rap
7955            WHERE
7956                   rap.cash_receipt_id  =  cr.cash_receipt_id
7957              AND  rap.applied_payment_schedule_id  =  -2
7958              AND  rap.display  =  'Y'
7959          )
7960 );
7961 
7962 
7963 ----------------------------- BR -----------------------------
7964 CURSOR cust_br_balance_global
7965        (p_curr_code IN VARCHAR2 default NULL) IS
7966     SELECT SUM(NVL(ps.amount_due_remaining,0))
7967     FROM   ar_payment_schedules_ALL ps
7968         ,  hz_cust_site_uses_ALL su
7969         -- ,  hz_cust_acct_sites_ALL cas                      -- Commented Bug#11827225
7970     WHERE  ps.customer_site_use_id = su.site_use_id
7971     AND    ps.status               = 'OP'
7972     --AND    cas.cust_acct_site_id   = su.cust_acct_site_id  -- Commented Bug#11827225
7973     --AND    cas.cust_account_id     = p_customer_id         -- Commented Bug#11827225
7974     AND    ps.customer_id =  p_customer_id                   -- Added for Bug#11827225
7975     AND    su.site_use_code        = 'DRAWEE'
7976     AND    ps.invoice_currency_code = p_curr_code
7977     AND    (ps.receipt_confirmed_flag IS NULL OR ps.receipt_confirmed_flag='Y')
7978     AND    ps.gl_date_closed = to_date( '31-12-4712', 'DD-MM-YYYY') ;
7979 
7980 CURSOR cust_br_pay_risk_global
7981        (p_curr_code IN VARCHAR2 default NULL) IS
7982     SELECT SUM(NVL(crh.amount,0))
7983     FROM   ar_cash_receipt_history_ALL crh
7984          , ar_cash_receipts_ALL cr
7985         ,  hz_cust_site_uses_ALL su
7986         ,  hz_cust_acct_sites_ALL cas
7987     WHERE  crh.cash_receipt_id        = cr.cash_receipt_id
7988     AND    (cr.confirmed_flag IS NULL OR cr.confirmed_flag = 'Y')
7989     AND    crh.current_record_flag    = 'Y'
7990     AND    crh.status <> DECODE ( crh.factor_flag
7991                                 , 'Y', 'RISK_ELIMINATED'
7992                                 , 'CLEARED')
7993     AND    NVL( cr.reversal_category, cr.status||'X' )  <>  cr.status
7994     AND    crh.status <> 'REVERSED'
7995     AND    cr.currency_code           = p_curr_code
7996     AND    cr.pay_from_customer       = cas.cust_account_id
7997     AND    cr.customer_site_use_id    = su.site_use_id
7998     AND    cas.cust_acct_site_id      = su.cust_acct_site_id
7999     AND    cas.cust_account_id        = p_customer_id
8000     AND    su.site_use_code        = 'DRAWEE'
8001     AND    NOT EXISTS
8002            (
8003            SELECT
8004              'X'
8005            FROM
8006              ar_receivable_applications_ALL rap
8007            WHERE
8008                   rap.cash_receipt_id  =  cr.cash_receipt_id
8009              AND  rap.applied_payment_schedule_id  =  -2
8010              AND  rap.display  =  'Y');
8011 
8012 
8013 ---CUSTOMER UNINVOICED ORDERS
8014 
8015 CURSOR cust_uninvoiced_orders_global
8016        (p_curr_code IN VARCHAR2 default NULL) IS
8017     SELECT SUM (
8018                  ( l.ordered_quantity * l.unit_selling_price )
8019                +   DECODE(l_include_tax_flag, 'Y',
8020                     NVL(NVL(l.tax_line_value,l.tax_value),0), 0   )   --TaxER
8021                )
8022     FROM   oe_order_lines_ALL l
8023          , oe_order_headers_ALL h
8024          , hz_cust_site_uses_ALL su
8025          , hz_cust_acct_sites_ALL cas
8026     WHERE  h.invoice_to_org_id = su.site_use_id
8027     AND    cas.cust_acct_site_id  = su.cust_acct_site_id
8028     AND    cas.cust_account_id    = p_customer_id
8029     AND    h.header_id      = l.header_id
8030     AND    NVL(L.SCHEDULE_SHIP_DATE,NVL(L.REQUEST_DATE,NVL(H.REQUEST_DATE,H.CREATION_DATE)))
8031            <= l_shipping_horizon
8032     AND    (l.invoiced_quantity IS NULL OR l.invoiced_quantity = 0)
8033     AND    h.open_flag   = 'Y'
8034     AND    l.line_category_code = 'ORDER'
8035     AND    h.booked_flag = 'Y'
8036     AND    l.open_flag = 'Y'
8037     AND    h.header_id <> l_header_id
8038     AND    h.transactional_curr_code = p_curr_code
8039     AND    (EXISTS
8040              (SELECT NULL
8041               FROM   oe_payment_types_all pt
8042               WHERE  pt.payment_type_code = NVL(l.payment_type_code,
8043                                             NVL(h.payment_type_code, 'BME'))
8044               AND    pt.credit_check_flag = 'Y'
8045               AND    NVL(pt.org_id, -99)  = NVL(h.org_id, -99))
8046            OR
8047            (l.payment_type_code IS NULL AND h.payment_type_code IS NULL));
8048 
8049 
8050 ---CUSTOMER UNINVOICED ORDERS including Returns
8051 
8052 CURSOR cust_uninv_orders_global_ret
8053        (p_curr_code IN VARCHAR2 default NULL) IS
8054     SELECT
8055       SUM (
8056       ( DECODE(l.line_category_code,'RETURN',(-1)*l.ordered_quantity,l.ordered_quantity)
8057       * l.unit_selling_price )
8058       +   DECODE(l_include_tax_flag, 'Y',
8059       NVL(DECODE(l.line_category_code,'RETURN',(-1)*NVL(l.tax_line_value,l.tax_value),NVL(l.tax_line_value,l.tax_value)),0),0)  --TaxER
8060            )
8061     FROM   oe_order_lines_ALL l
8062          , oe_order_headers_ALL h
8063          , hz_cust_site_uses_ALL su
8064          , hz_cust_acct_sites_ALL cas
8065     WHERE  h.invoice_to_org_id = su.site_use_id
8066     AND    cas.cust_acct_site_id  = su.cust_acct_site_id
8067     AND    cas.cust_account_id    = p_customer_id
8068     AND    h.header_id      = l.header_id
8069     AND    NVL(L.SCHEDULE_SHIP_DATE,NVL(L.REQUEST_DATE,NVL(H.REQUEST_DATE,H.CREATION_DATE)))
8070            <= l_shipping_horizon
8071     AND    (l.invoiced_quantity IS NULL OR l.invoiced_quantity = 0)
8072     AND    h.open_flag   = 'Y'
8073     AND    h.booked_flag = 'Y'
8074     AND    l.open_flag = 'Y'
8075     AND    h.header_id <> l_header_id
8076     AND    h.transactional_curr_code = p_curr_code
8077     AND    (EXISTS
8078              (SELECT NULL
8079               FROM   oe_payment_types_all pt
8080               WHERE  pt.payment_type_code = NVL(l.payment_type_code,
8081                                             NVL(h.payment_type_code, 'BME'))
8082               AND    pt.credit_check_flag = 'Y'
8083               AND    NVL(pt.org_id, -99)  = NVL(h.org_id, -99))
8084            OR
8085            (l.payment_type_code IS NULL AND h.payment_type_code IS NULL));
8086 
8087 
8088 
8089 -------------------------------------------------
8090 ------- commitments -- Exiting code enhancement
8091 ------------------------------------------------
8092 -------- There is no multi org table for OE_PAYMENTS_ALL
8093 
8094 Cursor cust_commitment_total_global
8095  (p_curr_code IN VARCHAR2 default NULL) IS
8096       SELECT NVL(SUM(P.commitment_applied_amount), 0)
8097 	FROM   OE_PAYMENTS P
8098              , OE_ORDER_HEADERS_ALL H
8099              , OE_ORDER_LINES_ALL L
8100              , hz_cust_site_uses_ALL su
8101              , hz_cust_acct_sites_ALL cas
8102 	WHERE  H.invoice_to_org_id   = su.site_use_id
8103         AND    cas.cust_acct_site_id  = su.cust_acct_site_id
8104         AND    cas.cust_account_id    = p_customer_id
8105         AND    H.TRANSACTIONAL_CURR_CODE = p_curr_code
8106 	AND    H.OPEN_FLAG      = 'Y'
8107 	AND    H.BOOKED_FLAG    = 'Y'
8108 	AND    H.HEADER_ID      = P.HEADER_ID
8109 	AND    H.HEADER_ID      <> l_header_id
8110         AND    L.HEADER_ID                = H.HEADER_ID
8111         AND    L.LINE_ID                  = P.LINE_ID
8112         AND    (l.invoiced_quantity IS NULL OR l.invoiced_quantity = 0)
8113 	AND    L.OPEN_FLAG                = 'Y'
8114 	AND    L.LINE_CATEGORY_CODE       = 'ORDER'
8115 	AND    NVL(L.SCHEDULE_SHIP_DATE,NVL(L.REQUEST_DATE,NVL(H.REQUEST_DATE,H.CREATION_DATE)))
8116 	         	        <= l_shipping_horizon
8117         AND    (EXISTS
8118                  (SELECT NULL
8119                   FROM   oe_payment_types_all pt
8120                   WHERE  pt.payment_type_code = NVL(l.payment_type_code,
8121                                                 NVL(h.payment_type_code, 'BME'))
8122                   AND    pt.credit_check_flag = 'Y'
8123                   AND    NVL(pt.org_id, -99)  = NVL(h.org_id, -99))
8124                 OR
8125                 (l.payment_type_code IS NULL AND h.payment_type_code IS NULL));
8126 
8127 
8128 
8129 -- Customer orders not on hold global
8130 
8131   CURSOR cust_orders_not_on_hold_global
8132          (p_curr_code IN VARCHAR2 default NULL) IS
8133     SELECT SUM (
8134                  ( l.ordered_quantity * l.unit_selling_price )
8135                +   DECODE(l_include_tax_flag, 'Y',
8136                     NVL(NVL(l.tax_line_value,l.tax_value),0), 0   )   --TaxER
8137                )
8138     FROM   oe_order_lines_ALL l
8139          , oe_order_headers_ALL h
8140          , hz_cust_site_uses_ALL su
8141          , hz_cust_acct_sites_ALL cas
8142     WHERE  h.invoice_to_org_id     = su.site_use_id
8143     AND    cas.cust_acct_site_id  = su.cust_acct_site_id
8144     AND    cas.cust_account_id    = p_customer_id
8145     AND    h.header_id = l.header_id
8146     AND    NVL(L.SCHEDULE_SHIP_DATE,NVL(L.REQUEST_DATE,NVL(H.REQUEST_DATE,H.CREATION_DATE)))
8147            <= l_shipping_horizon
8148     AND    (l.invoiced_quantity IS NULL OR l.invoiced_quantity = 0)
8149     AND    h.open_flag = 'Y'
8150     AND    l.line_category_code = 'ORDER'
8151     AND    h.booked_flag = 'Y'
8152     AND    l.open_flag = 'Y'
8153     AND    h.header_id <> l_header_id
8154     AND    NOT EXISTS ( SELECT  1
8155                     FROM    oe_order_holds_ALL oh
8156                     WHERE   h.header_id  = oh.header_id
8157                      AND     oh.hold_release_id IS NULL )
8158     AND    h.transactional_curr_code = p_curr_code
8159     AND    (EXISTS
8160              (SELECT NULL
8161               FROM   oe_payment_types_all pt
8162               WHERE  pt.payment_type_code = NVL(l.payment_type_code,
8163                                             NVL(h.payment_type_code, 'BME'))
8164               AND    pt.credit_check_flag = 'Y'
8165               AND    NVL(pt.org_id, -99)  = NVL(h.org_id, -99))
8166            OR
8167            (l.payment_type_code IS NULL AND h.payment_type_code IS NULL));
8168 
8169 
8170 -- Customer orders not on hold global including Returns
8171 
8172   CURSOR cust_ord_not_on_hold_glb_ret
8173          (p_curr_code IN VARCHAR2 default NULL) IS
8174     SELECT
8175        SUM (
8176       ( DECODE(l.line_category_code,'RETURN',(-1)*l.ordered_quantity,l.ordered_quantity)
8177       * l.unit_selling_price )
8178       +   DECODE(l_include_tax_flag, 'Y',
8179       NVL(DECODE(l.line_category_code,'RETURN',(-1)*NVL(l.tax_line_value,l.tax_value),NVL(l.tax_line_value,l.tax_value)),0),0 )  --TaxER
8180            )
8181     FROM   oe_order_lines_ALL l
8182          , oe_order_headers_ALL h
8183          , hz_cust_site_uses_ALL su
8184          , hz_cust_acct_sites_ALL cas
8185     WHERE  h.invoice_to_org_id     = su.site_use_id
8186     AND    cas.cust_acct_site_id  = su.cust_acct_site_id
8187     AND    cas.cust_account_id    = p_customer_id
8188     AND    h.header_id = l.header_id
8189     AND    NVL(L.SCHEDULE_SHIP_DATE,NVL(L.REQUEST_DATE,NVL(H.REQUEST_DATE,H.CREATION_DATE)))
8190            <= l_shipping_horizon
8191     AND    (l.invoiced_quantity IS NULL OR l.invoiced_quantity = 0)
8192     AND    h.open_flag = 'Y'
8193     AND    h.booked_flag = 'Y'
8194     AND    l.open_flag = 'Y'
8195     AND    h.header_id <> l_header_id
8196     AND    NOT EXISTS ( SELECT  1
8197                     FROM    oe_order_holds_ALL oh
8198                     WHERE   h.header_id  = oh.header_id
8199                      AND     oh.hold_release_id IS NULL )
8200     AND    h.transactional_curr_code = p_curr_code
8201     AND   (EXISTS
8202              (SELECT NULL
8203               FROM   oe_payment_types_all pt
8204               WHERE  pt.payment_type_code = NVL(l.payment_type_code,
8205                                             NVL(h.payment_type_code, 'BME'))
8206               AND    pt.credit_check_flag = 'Y'
8207               AND    NVL(pt.org_id, -99)  = NVL(h.org_id, -99))
8208            OR
8209            (l.payment_type_code IS NULL AND h.payment_type_code IS NULL));
8210 
8211 -- Customer orders on hold global
8212 
8213   CURSOR cust_orders_on_hold_global
8214          (p_curr_code IN VARCHAR2 default NULL) IS
8215     SELECT SUM (
8216                  ( l.ordered_quantity * l.unit_selling_price )
8217                +   DECODE(l_include_tax_flag, 'Y',
8218                     NVL(NVL(l.tax_line_value,l.tax_value),0), 0   )  --TaxER
8219                )
8220     FROM   oe_order_lines_ALL l
8221          , oe_order_headers_ALL h
8222          , hz_cust_site_uses_ALL su
8223          , hz_cust_acct_sites_ALL cas
8224     WHERE  h.invoice_to_org_id     = su.site_use_id
8225     AND    cas.cust_acct_site_id  = su.cust_acct_site_id
8226     AND    cas.cust_account_id    = p_customer_id
8227     AND    h.header_id = l.header_id
8228     AND    NVL(L.SCHEDULE_SHIP_DATE,NVL(L.REQUEST_DATE,NVL(H.REQUEST_DATE,H.CREATION_DATE)))
8229            <= l_shipping_horizon
8230     AND    (l.invoiced_quantity IS NULL OR l.invoiced_quantity = 0)
8231     AND    h.open_flag = 'Y'
8232     AND    l.line_category_code = 'ORDER'
8233     AND    h.booked_flag = 'Y'
8234     AND    l.open_flag = 'Y'
8235     AND    h.header_id <> l_header_id
8236     AND     EXISTS ( SELECT  1
8237                     FROM    oe_order_holds_ALL oh
8238                     WHERE   h.header_id  = oh.header_id
8239                      AND     oh.hold_release_id IS NULL )
8240     AND    h.transactional_curr_code = p_curr_code
8241     AND    (EXISTS
8242              (SELECT NULL
8243               FROM   oe_payment_types_all pt
8244               WHERE  pt.payment_type_code = NVL(l.payment_type_code,
8245                                             NVL(h.payment_type_code, 'BME'))
8246               AND    pt.credit_check_flag = 'Y'
8247               AND    NVL(pt.org_id, -99)  = NVL(h.org_id, -99))
8248            OR
8249            (l.payment_type_code IS NULL AND h.payment_type_code IS NULL));
8250 
8251 -- Customer orders on hold global including Returns
8252 
8253   CURSOR cust_ord_on_hold_glb_ret
8254          (p_curr_code IN VARCHAR2 default NULL) IS
8255     SELECT
8256        SUM (
8257       ( DECODE(l.line_category_code,'RETURN',(-1)*l.ordered_quantity,l.ordered_quantity)
8258       * l.unit_selling_price )
8259       +   DECODE(l_include_tax_flag, 'Y',
8260       NVL(DECODE(l.line_category_code,'RETURN',(-1)*NVL(l.tax_line_value,l.tax_value),NVL(l.tax_line_value,l.tax_value)),0),0 )  --TaxER
8261            )
8262     FROM   oe_order_lines_ALL l
8263          , oe_order_headers_ALL h
8264          , hz_cust_site_uses_ALL su
8265          , hz_cust_acct_sites_ALL cas
8266     WHERE  h.invoice_to_org_id     = su.site_use_id
8267     AND    cas.cust_acct_site_id  = su.cust_acct_site_id
8268     AND    cas.cust_account_id    = p_customer_id
8269     AND    h.header_id = l.header_id
8270     AND    NVL(L.SCHEDULE_SHIP_DATE,NVL(L.REQUEST_DATE,NVL(H.REQUEST_DATE,H.CREATION_DATE)))
8271            <= l_shipping_horizon
8272     AND    (l.invoiced_quantity IS NULL OR l.invoiced_quantity = 0)
8273     AND    h.open_flag = 'Y'
8274     AND    h.booked_flag = 'Y'
8275     AND    l.open_flag = 'Y'
8276     AND    h.header_id <> l_header_id
8277     AND    EXISTS ( SELECT  1
8278                     FROM    oe_order_holds_ALL oh
8279                     WHERE   h.header_id  = oh.header_id
8280                      AND     oh.hold_release_id IS NULL )
8281     AND    h.transactional_curr_code = p_curr_code
8282     AND   (EXISTS
8283              (SELECT NULL
8284               FROM   oe_payment_types_all pt
8285               WHERE  pt.payment_type_code = NVL(l.payment_type_code,
8286                                             NVL(h.payment_type_code, 'BME'))
8287               AND    pt.credit_check_flag = 'Y'
8288               AND    NVL(pt.org_id, -99)  = NVL(h.org_id, -99))
8289            OR
8290            (l.payment_type_code IS NULL AND h.payment_type_code IS NULL));
8291 
8292 -- customer hdr freights , Does not include curr order
8293 --- There is not multi org table for oe_price_adjustments
8294 
8295 CURSOR cust_uninv_hdr_freight1_global
8296        (p_curr_code IN VARCHAR2 default null) IS
8297 SELECT
8298       SUM
8299       ( DECODE(p.list_line_type_code,'TAX',0,DECODE( P.CREDIT_OR_CHARGE_FLAG, 'C', (-1), (+1) )
8300       * DECODE( p.arithmetic_operator, 'LUMPSUM',          --bug 4295299
8301                 p.operand, (l.ordered_quantity * p.adjusted_amount)))
8302       --TaxER Start
8303       + DECODE(l_include_tax_flag,'Y',DECODE(p.list_line_type_code,'TAX',p.adjusted_amount,0),0)
8304       --TaxER End
8305       )
8306 FROM   oe_price_adjustments p
8307      , oe_order_lines_ALL   l
8308      , oe_order_headers_ALL h
8309      , hz_cust_site_uses_ALL su
8310      , hz_cust_acct_sites_ALL cas
8311 WHERE  h.invoice_to_org_id    = su.site_use_id
8312   AND  cas.cust_acct_site_id  = su.cust_acct_site_id
8313   AND  cas.cust_account_id    = p_customer_id
8314   AND  p.line_id             =  l.line_id
8315   AND  NVL(L.SCHEDULE_SHIP_DATE,NVL(L.REQUEST_DATE,NVL(H.REQUEST_DATE,H.CREATION_DATE)))
8316            <= l_shipping_horizon
8317   AND  (l.invoiced_quantity IS NULL OR l.invoiced_quantity = 0)
8318   AND  l.header_id          = h.header_id
8319   AND  p.header_id           =  l.header_id
8320   AND  p.header_id           =  h.header_id
8321   AND  h.booked_flag         =  'Y'
8322   AND  h.open_flag  = 'Y'
8323   AND  l.open_flag  =  'Y'
8324   AND  l.line_category_code  =  'ORDER'
8325   --TaxER  AND  p.applied_flag        =  'Y'
8326   --TaxER AND  p.list_line_type_code =  'FREIGHT_CHARGE'
8327   AND  ((p.list_line_type_code =  'FREIGHT_CHARGE' and p.applied_flag =  'Y') OR (p.list_line_type_code = 'TAX' and p.applied_flag =  'N' and p.parent_adjustment_id IS NOT NULL))  --TaxER  --12895421
8328   AND  ( p.invoiced_flag IS NULL OR p.invoiced_flag = 'N')
8329   AND  h.transactional_curr_code = p_curr_code
8330   AND  h.header_id           <> l_header_id
8331   AND  (EXISTS
8332              (SELECT NULL
8333               FROM   oe_payment_types_all pt
8334               WHERE  pt.payment_type_code = NVL(l.payment_type_code,
8335                                             NVL(h.payment_type_code, 'BME'))
8336               AND    pt.credit_check_flag = 'Y'
8337               AND    NVL(pt.org_id, -99)  = NVL(h.org_id, -99))
8338         OR
8339         (l.payment_type_code IS NULL AND h.payment_type_code IS NULL));
8340 
8341 
8342 -- customer hdr freights including Returns, Does not include curr order
8343 --- There is not multi org table for oe_price_adjustments
8344 
8345 CURSOR cust_uninv_hdr_fr1_glb_ret
8346        (p_curr_code IN VARCHAR2 default null) IS
8347 SELECT
8348       SUM
8349       ( DECODE(p.list_line_type_code,'TAX',0,DECODE( P.CREDIT_OR_CHARGE_FLAG, 'C', (-1), (+1) )
8350       * DECODE( p.arithmetic_operator, 'LUMPSUM',          --bug 4295299
8351                 p.operand, (l.ordered_quantity * p.adjusted_amount)))
8352       --TaxER Start
8353       + DECODE(l_include_tax_flag,'Y',DECODE(p.list_line_type_code,'TAX',p.adjusted_amount,0),0)
8354       --TaxER End
8355       )
8356 FROM   oe_price_adjustments p
8357      , oe_order_lines_ALL   l
8358      , oe_order_headers_ALL h
8359      , hz_cust_site_uses_ALL su
8360      , hz_cust_acct_sites_ALL cas
8361 WHERE  h.invoice_to_org_id    = su.site_use_id
8362   AND  cas.cust_acct_site_id  = su.cust_acct_site_id
8363   AND  cas.cust_account_id    = p_customer_id
8364   AND  p.line_id             =  l.line_id
8365   AND  NVL(L.SCHEDULE_SHIP_DATE,NVL(L.REQUEST_DATE,NVL(H.REQUEST_DATE,H.CREATION_DATE)))
8366            <= l_shipping_horizon
8367   AND  (l.invoiced_quantity IS NULL OR l.invoiced_quantity = 0)
8368   AND  l.header_id          = h.header_id
8369   AND  p.header_id           =  l.header_id
8370   AND  p.header_id           =  h.header_id
8371   AND  h.booked_flag         =  'Y'
8372   AND  h.open_flag  = 'Y'
8373   AND  l.open_flag  =  'Y'
8374   --TaxER  AND  p.applied_flag        =  'Y'
8375   --TaxER AND  p.list_line_type_code =  'FREIGHT_CHARGE'
8376   AND  ((p.list_line_type_code =  'FREIGHT_CHARGE' and p.applied_flag =  'Y') OR (p.list_line_type_code = 'TAX' and p.applied_flag =  'N' and p.parent_adjustment_id IS NOT NULL))  --TaxER  --12895421
8377   AND  ( p.invoiced_flag IS NULL OR p.invoiced_flag = 'N')
8378   AND  h.transactional_curr_code = p_curr_code
8379   AND  h.header_id           <> l_header_id
8380   AND  (EXISTS
8381              (SELECT NULL
8382               FROM   oe_payment_types_all pt
8383               WHERE  pt.payment_type_code = NVL(l.payment_type_code,
8384                                             NVL(h.payment_type_code, 'BME'))
8385               AND    pt.credit_check_flag = 'Y'
8386               AND    NVL(pt.org_id, -99)  = NVL(h.org_id, -99))
8387         OR
8388         (l.payment_type_code IS NULL AND h.payment_type_code IS NULL));
8389 
8390 
8391 
8392 -- customer freights 2
8393 CURSOR cust_uninv_hdr_freight2_global
8394        (p_curr_code IN VARCHAR2 default null) IS
8395 SELECT
8396       SUM( DECODE(p.list_line_type_code,'TAX',0,DECODE( P.CREDIT_OR_CHARGE_FLAG, 'C', (-1), (+1) ) * P.OPERAND )
8397       --TaxER Start
8398       + DECODE(l_include_tax_flag,'Y',DECODE(p.list_line_type_code,'TAX',p.adjusted_amount,0),0))
8399       --TaxER End
8400 FROM
8401        oe_price_adjustments p
8402      , oe_order_headers_ALL h
8403      , hz_cust_site_uses_ALL su
8404      , hz_cust_acct_sites_ALL cas
8405 WHERE  h.invoice_to_org_id     = su.site_use_id
8406   AND  cas.cust_acct_site_id  = su.cust_acct_site_id
8407   AND  cas.cust_account_id    = p_customer_id
8408   AND  NVL(h.request_date, h.creation_date) <= l_shipping_horizon
8409   AND  h.transactional_curr_code = p_curr_code
8410   AND  p.line_id IS NULL
8411   AND  p.header_id           =  h.header_id
8412   AND  h.order_category_code IN ('ORDER','MIXED')
8413   AND  open_flag  =  'Y'
8414   AND  h.booked_flag         =  'Y'
8415   --TaxER  AND  p.applied_flag        =  'Y'
8416   --TaxER AND  p.list_line_type_code =  'FREIGHT_CHARGE'
8417   AND  ((p.list_line_type_code =  'FREIGHT_CHARGE' and p.applied_flag =  'Y') OR (p.list_line_type_code = 'TAX' and p.applied_flag =  'N' and p.parent_adjustment_id IS NOT NULL))  --TaxER  --12895421
8418   AND  ( p.invoiced_flag IS NULL OR p.invoiced_flag = 'N')
8419   AND  h.header_id           <> l_header_id
8420   AND  EXISTS
8421          ( SELECT  NULL
8422              FROM  oe_payment_types_all t,
8423                    oe_order_lines_all l
8424              WHERE t.credit_check_flag = 'Y'
8425              AND   NVL(t.org_id,-99) = NVL(h.org_id, -99)
8426              AND   l.header_id = h.header_id
8427              AND   t.payment_type_code =
8428                    DECODE(l.payment_type_code, NULL,
8429                      DECODE(h.payment_type_code, NULL, t.payment_type_code,
8430                             h.payment_type_code),
8431                           l.payment_type_code)
8432          );
8433 
8434 
8435 -- customer freights 2 including Returns
8436 
8437 CURSOR cust_uninv_hdr_fr2_glb_ret
8438        (p_curr_code IN VARCHAR2 default null) IS
8439 SELECT
8440       SUM( DECODE(p.list_line_type_code,'TAX',0,DECODE( P.CREDIT_OR_CHARGE_FLAG, 'C', (-1), (+1) ) * P.OPERAND )
8441       --TaxER Start
8442       + DECODE(l_include_tax_flag,'Y',DECODE(p.list_line_type_code,'TAX',p.adjusted_amount,0),0))
8443       --TaxER End
8444 FROM
8445        oe_price_adjustments p
8446      , oe_order_headers_ALL h
8447      , hz_cust_site_uses_ALL su
8448      , hz_cust_acct_sites_ALL cas
8449 WHERE  h.invoice_to_org_id     = su.site_use_id
8450   AND  cas.cust_acct_site_id  = su.cust_acct_site_id
8451   AND  cas.cust_account_id    = p_customer_id
8452   AND  NVL(h.request_date, h.creation_date) <= l_shipping_horizon
8453   AND  h.transactional_curr_code = p_curr_code
8454   AND  p.line_id IS NULL
8455   AND  p.header_id           =  h.header_id
8456   AND  h.order_category_code IN ('ORDER','MIXED','RETURN')
8457   AND  open_flag  =  'Y'
8458   AND  h.booked_flag         =  'Y'
8459   --TaxER  AND  p.applied_flag        =  'Y'
8460   --TaxER AND  p.list_line_type_code =  'FREIGHT_CHARGE'
8461   AND  ((p.list_line_type_code =  'FREIGHT_CHARGE' and p.applied_flag =  'Y') OR (p.list_line_type_code = 'TAX' and p.applied_flag =  'N' and p.parent_adjustment_id IS NOT NULL))  --TaxER  --12895421
8462   AND  (p.invoiced_flag IS NULL OR p.invoiced_flag = 'N')
8463   AND  h.header_id           <> l_header_id
8464   AND  EXISTS
8465          ( SELECT  NULL
8466              FROM  oe_payment_types_all t,
8467                    oe_order_lines_all l
8468              WHERE t.credit_check_flag = 'Y'
8469              AND   NVL(t.org_id,-99) = NVL(h.org_id, -99)
8470              AND   l.header_id = h.header_id
8471              AND   t.payment_type_code =
8472                    DECODE(l.payment_type_code, NULL,
8473                      DECODE(h.payment_type_code, NULL, t.payment_type_code,
8474                             h.payment_type_code),
8475                           l.payment_type_code)
8476          );
8477 
8478 -- customer freights not on hold 1 global
8479  CURSOR cust_no_hold_hdr_freight1_glb
8480         (p_curr_code IN VARCHAR2 default null) IS
8481 SELECT
8482       SUM
8483       ( DECODE(p.list_line_type_code,'TAX',0,DECODE( P.CREDIT_OR_CHARGE_FLAG, 'C', (-1), (+1) )
8484       * DECODE( p.arithmetic_operator, 'LUMPSUM',          --bug 4295299
8485                 p.operand, (l.ordered_quantity * p.adjusted_amount)))
8486       --TaxER Start
8487       + DECODE(l_include_tax_flag,'Y',DECODE(p.list_line_type_code,'TAX',p.adjusted_amount,0),0)
8488       --TaxER End
8489       )
8490 FROM   oe_price_adjustments p
8491      , oe_order_lines_ALL   l
8492      , oe_order_headers_ALL h
8493      , hz_cust_site_uses_ALL su
8494      , hz_cust_acct_sites_ALL cas
8495 WHERE  h.invoice_to_org_id     = su.site_use_id
8496   AND  cas.cust_acct_site_id  = su.cust_acct_site_id
8497   AND  cas.cust_account_id    = p_customer_id
8498   AND  p.line_id             =  l.line_id
8499   AND  NVL(L.SCHEDULE_SHIP_DATE,NVL(L.REQUEST_DATE,NVL(H.REQUEST_DATE,H.CREATION_DATE)))
8500            <= l_shipping_horizon
8501   AND  (l.invoiced_quantity IS NULL OR l.invoiced_quantity = 0)
8502   AND  l.header_id          = h.header_id
8503   AND  p.header_id           =  l.header_id
8504   AND  p.header_id           =  h.header_id
8505   AND  h.booked_flag         =  'Y'
8506   AND  h.open_flag  = 'Y'
8507   AND  l.open_flag  =  'Y'
8508   AND  l.line_category_code  =  'ORDER'
8509   --TaxER  AND  p.applied_flag        =  'Y'
8510   AND  (p.invoiced_flag IS NULL OR p.invoiced_flag = 'N')
8511   --TaxER AND  p.list_line_type_code =  'FREIGHT_CHARGE'
8512   AND  ((p.list_line_type_code =  'FREIGHT_CHARGE' and p.applied_flag =  'Y') OR (p.list_line_type_code = 'TAX' and p.applied_flag =  'N' and p.parent_adjustment_id IS NOT NULL))  --TaxER  --12895421
8513   AND  h.transactional_curr_code = p_curr_code
8514   AND  h.header_id           <> l_header_id
8515   AND  NOT EXISTS ( SELECT  1
8516                     FROM    oe_order_holds_ALL oh
8517                     WHERE   h.header_id = oh.header_id
8518                     AND     oh.line_id IS NULL
8519                     AND     oh.hold_release_id IS NULL )
8520   AND  (EXISTS
8521              (SELECT NULL
8522               FROM   oe_payment_types_all pt
8523               WHERE  pt.payment_type_code = NVL(l.payment_type_code,
8524                                             NVL(h.payment_type_code, 'BME'))
8525               AND    pt.credit_check_flag = 'Y'
8526               AND    NVL(pt.org_id, -99)  = NVL(h.org_id, -99))
8527         OR
8528         (l.payment_type_code IS NULL AND h.payment_type_code IS NULL));
8529 
8530 
8531 -- customer freights not on hold 1 global including Returns
8532 
8533 CURSOR cust_no_hold_hdr_fr1_glb_ret
8534         (p_curr_code IN VARCHAR2 default null) IS
8535 SELECT
8536       SUM
8537       ( DECODE(p.list_line_type_code,'TAX',0,DECODE( P.CREDIT_OR_CHARGE_FLAG, 'C', (-1), (+1) )
8538       * DECODE( p.arithmetic_operator, 'LUMPSUM',          --bug 4295299
8539                 p.operand, (l.ordered_quantity * p.adjusted_amount)))
8540       --TaxER Start
8541       + DECODE(l_include_tax_flag,'Y',DECODE(p.list_line_type_code,'TAX',p.adjusted_amount,0),0)
8542       --TaxER End
8543       )
8544 FROM   oe_price_adjustments p
8545      , oe_order_lines_ALL   l
8546      , oe_order_headers_ALL h
8547      , hz_cust_site_uses_ALL su
8548      , hz_cust_acct_sites_ALL cas
8549 WHERE  h.invoice_to_org_id     = su.site_use_id
8550   AND  cas.cust_acct_site_id  = su.cust_acct_site_id
8551   AND  cas.cust_account_id    = p_customer_id
8552   AND  p.line_id             =  l.line_id
8553   AND  NVL(L.SCHEDULE_SHIP_DATE,NVL(L.REQUEST_DATE,NVL(H.REQUEST_DATE,H.CREATION_DATE)))
8554           <= l_shipping_horizon
8555   AND  (l.invoiced_quantity IS NULL OR l.invoiced_quantity = 0)
8556   AND  l.header_id          = h.header_id
8557   AND  p.header_id           =  l.header_id
8558   AND  p.header_id           =  h.header_id
8559   AND  h.booked_flag         =  'Y'
8560   AND  h.open_flag  = 'Y'
8561   AND  l.open_flag  =  'Y'
8562   --TaxER  AND  p.applied_flag        =  'Y'
8563   --TaxER AND  p.list_line_type_code =  'FREIGHT_CHARGE'
8564   AND  ((p.list_line_type_code =  'FREIGHT_CHARGE' and p.applied_flag =  'Y') OR (p.list_line_type_code = 'TAX' and p.applied_flag =  'N' and p.parent_adjustment_id IS NOT NULL))  --TaxER  --12895421
8565   AND  (p.invoiced_flag IS NULL OR p.invoiced_flag = 'N')
8566   AND  h.transactional_curr_code = p_curr_code
8567   AND  h.header_id           <> l_header_id
8568   AND  NOT EXISTS ( SELECT  1
8569                     FROM    oe_order_holds_ALL oh
8570                     WHERE   h.header_id = oh.header_id
8571                     AND     oh.line_id IS NULL
8572                     AND     oh.hold_release_id IS NULL )
8573   AND  (EXISTS
8574              (SELECT NULL
8575               FROM   oe_payment_types_all pt
8576               WHERE  pt.payment_type_code = NVL(l.payment_type_code,
8577                                             NVL(h.payment_type_code, 'BME'))
8578               AND    pt.credit_check_flag = 'Y'
8579               AND    NVL(pt.org_id, -99)  = NVL(h.org_id, -99))
8580         OR
8581         (l.payment_type_code IS NULL AND h.payment_type_code IS NULL));
8582 
8583 -- customer freights on hold 1 global
8584  CURSOR cust_hold_hdr_freight1_glb
8585         (p_curr_code IN VARCHAR2 default null) IS
8586 SELECT
8587       SUM
8588       ( DECODE(p.list_line_type_code,'TAX',0,DECODE( P.CREDIT_OR_CHARGE_FLAG, 'C', (-1), (+1) )
8589       * DECODE( p.arithmetic_operator, 'LUMPSUM',          --bug 4295299
8590                 p.operand, (l.ordered_quantity * p.adjusted_amount)))
8591       --TaxER Start
8592       + DECODE(l_include_tax_flag,'Y',DECODE(p.list_line_type_code,'TAX',p.adjusted_amount,0),0)
8593       --TaxER End
8594       )
8595 FROM   oe_price_adjustments p
8596      , oe_order_lines_ALL   l
8597      , oe_order_headers_ALL h
8598      , hz_cust_site_uses_ALL su
8599      , hz_cust_acct_sites_ALL cas
8600 WHERE  h.invoice_to_org_id     = su.site_use_id
8601   AND  cas.cust_acct_site_id  = su.cust_acct_site_id
8602   AND  cas.cust_account_id    = p_customer_id
8603   AND  p.line_id             =  l.line_id
8604   AND  NVL(L.SCHEDULE_SHIP_DATE,NVL(L.REQUEST_DATE,NVL(H.REQUEST_DATE,H.CREATION_DATE)))
8605            <= l_shipping_horizon
8606   AND  (l.invoiced_quantity IS NULL OR l.invoiced_quantity = 0)
8607   AND  l.header_id          = h.header_id
8608   AND  p.header_id           =  l.header_id
8609   AND  p.header_id           =  h.header_id
8610   AND  h.booked_flag         =  'Y'
8611   AND  h.open_flag  = 'Y'
8612   AND  l.open_flag  =  'Y'
8613   AND  l.line_category_code  =  'ORDER'
8614   --TaxER  AND  p.applied_flag        =  'Y'
8615   --TaxER AND  p.list_line_type_code =  'FREIGHT_CHARGE'
8616   AND  ((p.list_line_type_code =  'FREIGHT_CHARGE' and p.applied_flag =  'Y') OR (p.list_line_type_code = 'TAX' and p.applied_flag =  'N' and p.parent_adjustment_id IS NOT NULL))  --TaxER  --12895421
8617   AND  (p.invoiced_flag IS NULL OR p.invoiced_flag = 'N')
8618   AND  h.transactional_curr_code = p_curr_code
8619   AND  h.header_id           <> l_header_id
8620   AND  EXISTS ( SELECT  1
8621                     FROM    oe_order_holds_ALL oh
8622                     WHERE   h.header_id = oh.header_id
8623                     AND     oh.line_id IS NULL
8624                     AND     oh.hold_release_id IS NULL )
8625   AND  (EXISTS
8626              (SELECT NULL
8627               FROM   oe_payment_types_all pt
8628               WHERE  pt.payment_type_code = NVL(l.payment_type_code,
8629                                             NVL(h.payment_type_code, 'BME'))
8630               AND    pt.credit_check_flag = 'Y'
8631               AND    NVL(pt.org_id, -99)  = NVL(h.org_id, -99))
8632         OR
8633         (l.payment_type_code IS NULL AND h.payment_type_code IS NULL));
8634 
8635 
8636 -- customer freights on hold 1 global including Returns
8637 
8638 CURSOR cust_hold_hdr_fr1_glb_ret
8639         (p_curr_code IN VARCHAR2 default null) IS
8640 SELECT
8641       SUM
8642       ( DECODE(p.list_line_type_code,'TAX',0,DECODE( P.CREDIT_OR_CHARGE_FLAG, 'C', (-1), (+1) )
8643       * DECODE( p.arithmetic_operator, 'LUMPSUM',          --bug 4295299
8644                 p.operand, (l.ordered_quantity * p.adjusted_amount)))
8645       --TaxER Start
8646       + DECODE(l_include_tax_flag,'Y',DECODE(p.list_line_type_code,'TAX',p.adjusted_amount,0),0)
8647       --TaxER End
8648       )
8649 FROM   oe_price_adjustments p
8650      , oe_order_lines_ALL   l
8651      , oe_order_headers_ALL h
8652      , hz_cust_site_uses_ALL su
8653      , hz_cust_acct_sites_ALL cas
8654 WHERE  h.invoice_to_org_id     = su.site_use_id
8655   AND  cas.cust_acct_site_id  = su.cust_acct_site_id
8656   AND  cas.cust_account_id    = p_customer_id
8657   AND  p.line_id             =  l.line_id
8658   AND  NVL(L.SCHEDULE_SHIP_DATE,NVL(L.REQUEST_DATE,NVL(H.REQUEST_DATE,H.CREATION_DATE)))
8659           <= l_shipping_horizon
8660   AND  (l.invoiced_quantity IS NULL OR l.invoiced_quantity = 0)
8661   AND  l.header_id          = h.header_id
8662   AND  p.header_id           =  l.header_id
8663   AND  p.header_id           =  h.header_id
8664   AND  h.booked_flag         =  'Y'
8665   AND  h.open_flag  = 'Y'
8666   AND  l.open_flag  =  'Y'
8667   --TaxER  AND  p.applied_flag        =  'Y'
8668   --TaxER AND  p.list_line_type_code =  'FREIGHT_CHARGE'
8669   AND  ((p.list_line_type_code =  'FREIGHT_CHARGE' and p.applied_flag =  'Y') OR (p.list_line_type_code = 'TAX' and p.applied_flag =  'N' and p.parent_adjustment_id IS NOT NULL))  --TaxER  --12895421
8670   AND  (p.invoiced_flag IS NULL OR p.invoiced_flag = 'N')
8671   AND  h.transactional_curr_code = p_curr_code
8672   AND  h.header_id           <> l_header_id
8673   AND  EXISTS ( SELECT  1
8674                     FROM    oe_order_holds_ALL oh
8675                     WHERE   h.header_id = oh.header_id
8676                     AND     oh.line_id IS NULL
8677                     AND     oh.hold_release_id IS NULL )
8678   AND  (EXISTS
8679              (SELECT NULL
8680               FROM   oe_payment_types_all pt
8681               WHERE  pt.payment_type_code = NVL(l.payment_type_code,
8682                                             NVL(h.payment_type_code, 'BME'))
8683               AND    pt.credit_check_flag = 'Y'
8684               AND    NVL(pt.org_id, -99)  = NVL(h.org_id, -99))
8685         OR
8686         (l.payment_type_code IS NULL AND h.payment_type_code IS NULL));
8687 
8688 
8689 -- customer not on hold freight 2 global
8690  CURSOR cust_no_hold_hdr_freight2_glb
8691         (p_curr_code IN VARCHAR2 default null) IS
8692 SELECT
8693       SUM( DECODE(p.list_line_type_code,'TAX',0,DECODE( P.CREDIT_OR_CHARGE_FLAG, 'C', (-1), (+1) ) * P.OPERAND )
8694       --TaxER Start
8695       + DECODE(l_include_tax_flag,'Y',DECODE(p.list_line_type_code,'TAX',p.adjusted_amount,0),0))
8696       --TaxER End
8697 FROM
8698        oe_price_adjustments p
8699      , oe_order_headers_ALL h
8700      , hz_cust_site_uses_ALL su
8701      , hz_cust_acct_sites_ALL cas
8702 WHERE  h.invoice_to_org_id     = su.site_use_id
8703   AND  cas.cust_acct_site_id  = su.cust_acct_site_id
8704   AND  cas.cust_account_id    = p_customer_id
8705   AND  NVL(h.request_date, h.creation_date) <= l_shipping_horizon
8706   AND  h.transactional_curr_code = p_curr_code
8707   AND  p.line_id IS NULL
8708   AND  p.header_id           =  h.header_id
8709   AND  h.order_category_code IN ('ORDER','MIXED')
8710   AND  h.open_flag  =  'Y'
8711   AND  h.booked_flag         =  'Y'
8712   --TaxER  AND  p.applied_flag        =  'Y'
8713   --TaxER AND  p.list_line_type_code =  'FREIGHT_CHARGE'
8714   AND  ((p.list_line_type_code =  'FREIGHT_CHARGE' and p.applied_flag =  'Y') OR (p.list_line_type_code = 'TAX' and p.applied_flag =  'N' and p.parent_adjustment_id IS NOT NULL))  --TaxER  --12895421
8715   AND  (p.invoiced_flag IS NULL OR p.invoiced_flag = 'N')
8716   AND  h.header_id           <> l_header_id
8717   AND  NOT EXISTS ( SELECT  1
8718                     FROM    oe_order_holds_ALL oh
8719                     WHERE   h.header_id = oh.header_id
8720                     AND     oh.line_id IS NULL
8721                     AND     oh.hold_release_id IS NULL )
8722   AND  EXISTS
8723          ( SELECT  NULL
8724              FROM  oe_payment_types_all t,
8725                    oe_order_lines_all l
8726              WHERE t.credit_check_flag = 'Y'
8727              AND   NVL(t.org_id,-99) = NVL(h.org_id, -99)
8728              AND   l.header_id = h.header_id
8729              AND   t.payment_type_code =
8730                    DECODE(l.payment_type_code, NULL,
8731                      DECODE(h.payment_type_code, NULL, t.payment_type_code,
8732                             h.payment_type_code),
8733                           l.payment_type_code)
8734          );
8735 
8736 
8737 -- customer not on hold freight 2 global including Returns
8738 
8739 CURSOR cust_no_hold_hdr_fr2_glb_ret
8740         (p_curr_code IN VARCHAR2 default null) IS
8741 SELECT
8742       SUM( DECODE(p.list_line_type_code,'TAX',0,DECODE( P.CREDIT_OR_CHARGE_FLAG, 'C', (-1), (+1) ) * P.OPERAND )
8743       --TaxER Start
8744       + DECODE(l_include_tax_flag,'Y',DECODE(p.list_line_type_code,'TAX',p.adjusted_amount,0),0))
8745       --TaxER End
8746 FROM
8747        oe_price_adjustments p
8748      , oe_order_headers_ALL h
8749      , hz_cust_site_uses_ALL su
8750      , hz_cust_acct_sites_ALL cas
8751 WHERE  h.invoice_to_org_id     = su.site_use_id
8752   AND  cas.cust_acct_site_id  = su.cust_acct_site_id
8753   AND  cas.cust_account_id    = p_customer_id
8754   AND  NVL(h.request_date, h.creation_date) <= l_shipping_horizon
8755   AND  h.transactional_curr_code = p_curr_code
8756   AND  p.line_id IS NULL
8757   AND  p.header_id           =  h.header_id
8758   AND  h.order_category_code IN ('ORDER','MIXED','RETURN')
8759   AND  h.open_flag  =  'Y'
8760   AND  h.booked_flag         =  'Y'
8761   --TaxER  AND  p.applied_flag        =  'Y'
8762   --TaxER AND  p.list_line_type_code =  'FREIGHT_CHARGE'
8763   AND  ((p.list_line_type_code =  'FREIGHT_CHARGE' and p.applied_flag =  'Y') OR (p.list_line_type_code = 'TAX' and p.applied_flag =  'N' and p.parent_adjustment_id IS NOT NULL))  --TaxER  --12895421
8764   AND  (p.invoiced_flag IS NULL OR p.invoiced_flag = 'N')
8765   AND  h.header_id           <> l_header_id
8766   AND  NOT EXISTS ( SELECT  1
8767                     FROM    oe_order_holds_ALL oh
8768                     WHERE   h.header_id = oh.header_id
8769                     AND     oh.line_id IS NULL
8770                     AND     oh.hold_release_id IS NULL )
8771   AND  EXISTS
8772          ( SELECT  NULL
8773              FROM  oe_payment_types_all t,
8774                    oe_order_lines_all l
8775              WHERE t.credit_check_flag = 'Y'
8776              AND   NVL(t.org_id,-99) = NVL(h.org_id, -99)
8777              AND   l.header_id = h.header_id
8778              AND   t.payment_type_code =
8779                    DECODE(l.payment_type_code, NULL,
8780                      DECODE(h.payment_type_code, NULL, t.payment_type_code,
8781                             h.payment_type_code),
8782                           l.payment_type_code)
8783          );
8784 
8785 -- customer on hold freight 2 global
8786  CURSOR cust_hold_hdr_freight2_glb
8787         (p_curr_code IN VARCHAR2 default null) IS
8788 SELECT
8789       SUM( DECODE(p.list_line_type_code,'TAX',0,DECODE( P.CREDIT_OR_CHARGE_FLAG, 'C', (-1), (+1) ) * P.OPERAND )
8790       --TaxER Start
8791       + DECODE(l_include_tax_flag,'Y',DECODE(p.list_line_type_code,'TAX',p.adjusted_amount,0),0))
8792       --TaxER End
8793 FROM
8794        oe_price_adjustments p
8795      , oe_order_headers_ALL h
8796      , hz_cust_site_uses_ALL su
8797      , hz_cust_acct_sites_ALL cas
8798 WHERE  h.invoice_to_org_id     = su.site_use_id
8799   AND  cas.cust_acct_site_id  = su.cust_acct_site_id
8800   AND  cas.cust_account_id    = p_customer_id
8801   AND  NVL(h.request_date, h.creation_date) <= l_shipping_horizon
8802   AND  h.transactional_curr_code = p_curr_code
8803   AND  p.line_id IS NULL
8804   AND  p.header_id           =  h.header_id
8805   AND  h.order_category_code IN ('ORDER','MIXED')
8806   AND  h.open_flag  =  'Y'
8807   AND  h.booked_flag         =  'Y'
8808   --TaxER  AND  p.applied_flag        =  'Y'
8809   --TaxER AND  p.list_line_type_code =  'FREIGHT_CHARGE'
8810   AND  ((p.list_line_type_code =  'FREIGHT_CHARGE' and p.applied_flag =  'Y') OR (p.list_line_type_code = 'TAX' and p.applied_flag =  'N' and p.parent_adjustment_id IS NOT NULL))  --TaxER  --12895421
8811   AND  (p.invoiced_flag IS NULL OR p.invoiced_flag = 'N')
8812   AND  h.header_id           <> l_header_id
8813   AND  EXISTS ( SELECT  1
8814                     FROM    oe_order_holds_ALL oh
8815                     WHERE   h.header_id = oh.header_id
8816                     AND     oh.line_id IS NULL
8817                     AND     oh.hold_release_id IS NULL )
8818   AND  EXISTS
8819          ( SELECT  NULL
8820              FROM  oe_payment_types_all t,
8821                    oe_order_lines_all l
8822              WHERE t.credit_check_flag = 'Y'
8823              AND   NVL(t.org_id,-99) = NVL(h.org_id, -99)
8824              AND   l.header_id = h.header_id
8825              AND   t.payment_type_code =
8826                    DECODE(l.payment_type_code, NULL,
8827                      DECODE(h.payment_type_code, NULL, t.payment_type_code,
8828                             h.payment_type_code),
8829                           l.payment_type_code)
8830          );
8831 
8832 -- customer on hold freight 2 global including Returns
8833 
8834 CURSOR cust_hold_hdr_fr2_glb_ret
8835         (p_curr_code IN VARCHAR2 default null) IS
8836 SELECT
8837       SUM( DECODE(p.list_line_type_code,'TAX',0,DECODE( P.CREDIT_OR_CHARGE_FLAG, 'C', (-1), (+1) ) * P.OPERAND )
8838       --TaxER Start
8839       + DECODE(l_include_tax_flag,'Y',DECODE(p.list_line_type_code,'TAX',p.adjusted_amount,0),0))
8840       --TaxER End
8841 FROM
8842        oe_price_adjustments p
8843      , oe_order_headers_ALL h
8844      , hz_cust_site_uses_ALL su
8845      , hz_cust_acct_sites_ALL cas
8846 WHERE  h.invoice_to_org_id     = su.site_use_id
8847   AND  cas.cust_acct_site_id  = su.cust_acct_site_id
8848   AND  cas.cust_account_id    = p_customer_id
8849   AND  NVL(h.request_date, h.creation_date) <= l_shipping_horizon
8850   AND  h.transactional_curr_code = p_curr_code
8851   AND  p.line_id IS NULL
8852   AND  p.header_id           =  h.header_id
8853   AND  h.order_category_code IN ('ORDER','MIXED','RETURN')
8854   AND  h.open_flag  =  'Y'
8855   AND  h.booked_flag         =  'Y'
8856   --TaxER  AND  p.applied_flag        =  'Y'
8857   --TaxER AND  p.list_line_type_code =  'FREIGHT_CHARGE'
8858   AND  ((p.list_line_type_code =  'FREIGHT_CHARGE' and p.applied_flag =  'Y') OR (p.list_line_type_code = 'TAX' and p.applied_flag =  'N' and p.parent_adjustment_id IS NOT NULL))  --TaxER  --12895421
8859   AND  (p.invoiced_flag IS NULL OR p.invoiced_flag = 'N')
8860   AND  h.header_id           <> l_header_id
8861   AND  EXISTS ( SELECT  1
8862                     FROM    oe_order_holds_ALL oh
8863                     WHERE   h.header_id = oh.header_id
8864                     AND     oh.line_id IS NULL
8865                     AND     oh.hold_release_id IS NULL )
8866   AND  EXISTS
8867          ( SELECT  NULL
8868              FROM  oe_payment_types_all t,
8869                    oe_order_lines_all l
8870              WHERE t.credit_check_flag = 'Y'
8871              AND   NVL(t.org_id,-99) = NVL(h.org_id, -99)
8872              AND   l.header_id = h.header_id
8873              AND   t.payment_type_code =
8874                    DECODE(l.payment_type_code, NULL,
8875                      DECODE(h.payment_type_code, NULL, t.payment_type_code,
8876                             h.payment_type_code),
8877                           l.payment_type_code)
8878          );
8879 
8880 ----------------------- END Global exposure cursors ---------
8881 
8882    l_cum_order_amount        NUMBER := 0 ;
8883    l_cum_order_hold_amount   NUMBER := 0 ;
8884    l_cum_ar_amount           NUMBER := 0 ;
8885 
8886    l_limit_cum_order_amount        NUMBER := 0 ;
8887    l_limit_cum_order_hold_amount   NUMBER := 0 ;
8888    l_limit_cum_ar_amount           NUMBER := 0 ;
8889 
8890    l_order_amount        NUMBER := 0 ;
8891    l_order_hold_amount   NUMBER := 0 ;
8892    l_ar_amount           NUMBER := 0 ;
8893 
8894 
8895 BEGIN
8896   IF G_debug_flag = 'Y'
8897   THEN
8898     OE_DEBUG_PUB.ADD('OEXUCRCB: IN Get_order_exposure',1);
8899   END IF;
8900 
8901   x_return_status := FND_API.G_RET_STS_SUCCESS;
8902 
8903   IF G_debug_flag = 'Y'
8904   THEN
8905     OE_DEBUG_PUB.Add('exposure Input parameters ');
8906     OE_DEBUG_PUB.Add(' ');
8907     OE_DEBUG_PUB.Add('--------------------------------------------');
8908     OE_DEBUG_PUB.Add('p_customer_id          = '|| p_customer_id, 1);
8909     OE_DEBUG_PUB.Add('p_site_use_id          = '|| p_site_use_id, 1);
8910     OE_DEBUG_PUB.Add('p_header_id            = '|| p_header_id);
8911     OE_DEBUG_PUB.Add('p_credit_check_rule_id = '
8912                  || p_credit_check_rule_rec.credit_check_rule_id
8913                   );
8914 
8915     OE_DEBUG_PUB.Add('Conversion type = '
8916                  || p_credit_check_rule_rec.conversion_type
8917                   );
8918 
8919     OE_DEBUG_PUB.Add('p_credit_level         = '|| p_credit_level, 1);
8920     OE_DEBUG_PUB.Add('p_limit_curr_code      = '|| p_limit_curr_code);
8921     OE_DEBUG_PUB.Add('p_include_all_flag     = '|| p_include_all_flag);
8922     OE_DEBUG_PUB.Add('p_global_exposure_flag = '|| p_global_exposure_flag, 1);
8923     OE_DEBUG_PUB.Add('p_need_exposure_details= '|| p_need_exposure_details);
8924     OE_DEBUG_PUB.Add('----------------End Parameters------------------------ ');
8925     OE_DEBUG_PUB.Add(' ');
8926     OE_DEBUG_PUB.Add('Local Variables');
8927     OE_DEBUG_PUB.Add('l_need_exposure_details = '||l_need_exposure_details);
8928     OE_DEBUG_PUB.Add(' ');
8929 
8930   --------------------------------------------------------------------
8931   --------- Assign default values: credit check rules ----------------
8932   --------------------------------------------------------------------
8933 
8934     OE_DEBUG_PUB.Add(' Assign Default Values: Credit rules ');
8935   END IF;
8936 
8937   l_open_ar_days           := p_credit_check_rule_rec.open_ar_days ;
8938   l_uninvoiced_orders_flag :=
8939                NVL(p_credit_check_rule_rec.uninvoiced_orders_flag,'N') ;
8940   l_orders_on_hold_flag    :=
8941                NVL(p_credit_check_rule_rec.orders_on_hold_flag,'N') ;
8942   l_include_tax_flag       :=
8943                NVL(p_credit_check_rule_rec.include_tax_flag,'N') ;
8944   l_shipping_horizon       := p_credit_check_rule_rec.shipping_horizon ;
8945   l_include_risk_flag      :=
8946           NVL(p_credit_check_rule_rec.include_payments_at_risk_flag,'N') ;
8947   l_quick_cr_check_flag    :=
8948                NVL(p_credit_check_rule_rec.quick_cr_check_flag,'N') ;
8949   l_freight_charges_flag   :=
8950                 NVL(p_credit_check_rule_rec.incl_freight_charges_flag,'N') ;
8951   l_open_ar_balance_flag   :=
8952                 NVL(p_credit_check_rule_rec.open_ar_balance_flag,'N');
8953   l_incl_external_exposure_flag   :=
8954                 NVL(p_credit_check_rule_rec.include_external_exposure_flag,'N');
8955   l_header_id              := NVL(p_header_id,0);
8956   -----added for Returns-------------------
8957   l_include_returns_flag   :=
8958                 NVL(p_credit_check_rule_rec.include_returns_flag,'N');
8959 
8960   IF G_debug_flag = 'Y'
8961   THEN
8962     OE_DEBUG_PUB.Add(' Credit rule setup values ');
8963     OE_DEBUG_PUB.Add(' ');
8964     OE_DEBUG_PUB.Add(' -----------------------------------------------');
8965     OE_DEBUG_PUB.Add(' l_open_ar_days           = '|| l_open_ar_days );
8966     OE_DEBUG_PUB.Add(' l_uninvoiced_orders_flag = '||
8967                          l_uninvoiced_orders_flag );
8968     OE_DEBUG_PUB.Add(' l_orders_on_hold_flag    = '|| l_orders_on_hold_flag );
8969     OE_DEBUG_PUB.Add(' l_include_tax_flag       = '|| l_include_tax_flag );
8970     OE_DEBUG_PUB.Add(' l_shipping_horizon       = '|| l_shipping_horizon );
8971     OE_DEBUG_PUB.Add(' l_include_risk_flag      = '|| l_include_risk_flag );
8972     OE_DEBUG_PUB.Add(' l_quick_cr_check_flag    = '|| l_quick_cr_check_flag );
8973     OE_DEBUG_PUB.Add(' l_freight_charges_flag   = '|| l_freight_charges_flag );
8974     OE_DEBUG_PUB.Add(' l_open_ar_balance_flag   = '|| l_open_ar_balance_flag );
8975     OE_DEBUG_PUB.Add(' l_incl_external_exposure_flag = ' ||
8976                      l_incl_external_exposure_flag );
8977     OE_DEBUG_PUB.Add(' l_include_returns_flag = ' ||
8978                      l_include_returns_flag );
8979     OE_DEBUG_PUB.Add(' -------------------------------------------------- ');
8980     OE_DEBUG_PUB.Add(' ');
8981   END IF;
8982 
8983 
8984   IF p_credit_level = 'CUSTOMER'
8985   THEN
8986     -- Select total exposure using CUSTOMER CURSORs
8987 
8988     IF G_debug_flag = 'Y'
8989     THEN
8990       OE_DEBUG_PUB.Add('Get_order_Exposure CUSTOMER ',1);
8991     END IF;
8992 
8993     -- The exposure calculation must be done for all the
8994     --  usage currencies as part of the multi currency
8995     --  set up.
8996     l_current_usage_cur := NULL ;
8997 
8998     FOR i IN 1..p_usage_curr.count
8999     LOOP
9000        l_current_usage_cur := NULL ;
9001       IF G_debug_flag = 'Y'
9002       THEN
9003        OE_DEBUG_PUB.ADD(' ');
9004        OE_DEBUG_PUB.ADD('############################### ');
9005        OE_DEBUG_PUB.ADD('USAGE CURR = '|| p_usage_curr(i).usage_curr_code );
9006        OE_DEBUG_PUB.ADD('############################### ');
9007        OE_DEBUG_PUB.ADD(' ');
9008        OE_DEBUG_PUB.ADD('l_current_usage_cur = '|| l_current_usage_cur );
9009        OE_DEBUG_PUB.ADD(' ');
9010        OE_DEBUG_PUB.ADD('.');
9011       END IF;
9012 
9013        l_current_usage_cur := p_usage_curr(i).usage_curr_code ;
9014 
9015       -- get external exposure
9016       IF l_incl_external_exposure_flag = 'Y'
9017       THEN
9018         --- Bug2352020
9019         IF p_global_exposure_flag = 'Y'
9020         THEN
9021           IF G_debug_flag = 'Y'
9022           THEN
9023             OE_DEBUG_PUB.Add(' Get cust_external_csr_global ');
9024           END IF;
9025 
9026           OPEN cust_external_csr_global (p_usage_curr(i).usage_curr_code);
9027           FETCH cust_external_csr_global INTO l_external_exposure;
9028           IF cust_external_csr_global%NOTFOUND
9029           THEN
9030             OE_DEBUG_PUB.Add(' No cust_external_csr_global balance found');
9031             l_external_exposure := 0;
9032           END IF;
9033           CLOSE cust_external_csr_global ;
9034 
9035         ELSE
9036 
9037           OE_DEBUG_PUB.Add(' Get customer external exposure balance ');
9038 
9039           OPEN cust_external_exposure_csr (p_usage_curr(i).usage_curr_code);
9040           FETCH cust_external_exposure_csr INTO l_external_exposure;
9041           IF cust_external_exposure_csr%NOTFOUND
9042           THEN
9043             OE_DEBUG_PUB.Add(' No external exposure balance found');
9044             l_external_exposure := 0;
9045           END IF;
9046           CLOSE cust_external_exposure_csr;
9047        END IF ; -- p_global check
9048 
9049       END IF; -- external check
9050       l_cum_external_exposure := l_cum_external_exposure +
9051                                  NVL(l_external_exposure, 0);
9052 
9053 ------------------------AR exposure -------------------------
9054 
9055       IF l_open_ar_balance_flag = 'Y'
9056       THEN
9057 
9058         IF p_global_exposure_flag = 'Y'
9059         THEN
9060           IF G_debug_flag = 'Y'
9061           THEN
9062             OE_DEBUG_PUB.Add(' Get cust_ar_balance_global ');
9063           END IF;
9064 
9065             OPEN cust_ar_balance_global (p_usage_curr(i).usage_curr_code);
9066             FETCH cust_ar_balance_global INTO l_total_from_ar ;
9067 
9068             IF cust_ar_balance_global%NOTFOUND
9069             THEN
9070               IF G_debug_flag = 'Y'
9071               THEN
9072                 OE_DEBUG_PUB.Add(' No AR balance found');
9073               END IF;
9074 
9075               l_total_from_ar := 0 ;
9076             END IF;
9077 
9078             CLOSE cust_ar_balance_global;
9079 
9080         ELSE
9081           IF G_debug_flag = 'Y'
9082           THEN
9083             OE_DEBUG_PUB.Add(' Get cust_ar_balance ');
9084           END IF;
9085 
9086             OPEN cust_ar_balance (p_usage_curr(i).usage_curr_code);
9087             FETCH cust_ar_balance INTO l_total_from_ar ;
9088 
9089             IF cust_ar_balance%NOTFOUND
9090             THEN
9091               IF G_debug_flag = 'Y'
9092               THEN
9093                 OE_DEBUG_PUB.Add(' No AR balance found');
9094               END IF;
9095 
9096               l_total_from_ar := 0 ;
9097             END IF;
9098 
9099             CLOSE cust_ar_balance;
9100        	end if;
9101       END IF;
9102 
9103       IF l_include_risk_flag = 'Y'
9104       THEN
9105         IF p_global_exposure_flag = 'Y'
9106         THEN
9107           IF G_debug_flag = 'Y'
9108           THEN
9109             OE_DEBUG_PUB.Add(' Get cust_pay_risk_global  ');
9110           END IF;
9111 
9112             OPEN cust_pay_risk_global (p_usage_curr(i).usage_curr_code);
9113             FETCH cust_pay_risk_global INTO l_payments_at_risk;
9114             IF cust_pay_risk_global%NOTFOUND
9115             THEN
9116               l_payments_at_risk := 0 ;
9117                IF G_debug_flag = 'Y'
9118                THEN
9119                  OE_DEBUG_PUB.Add(' No Pay at risk found ');
9120                END IF;
9121             END IF;
9122 
9123             CLOSE cust_pay_risk_global;
9124         ELSE
9125            IF G_debug_flag = 'Y'
9126            THEN
9127              OE_DEBUG_PUB.Add(' Get cust_pay_risk  ');
9128            END IF;
9129 
9130             OPEN cust_pay_risk (p_usage_curr(i).usage_curr_code);
9131             FETCH cust_pay_risk INTO l_payments_at_risk;
9132             IF cust_pay_risk%NOTFOUND
9133             THEN
9134               l_payments_at_risk := 0 ;
9135               OE_DEBUG_PUB.Add(' No Pay at risk found ');
9136             END IF;
9137 
9138             CLOSE cust_pay_risk;
9139         END IF;  -- Global
9140       END IF;
9141 
9142 -------------------------------------- BR support ---------------
9143      IF l_open_ar_days > 0
9144      THEN
9145       IF oe_credit_check_util.Check_drawee_exists
9146          (p_cust_account_id => p_customer_id )  = 'Y'
9147       THEN
9148         IF G_debug_flag = 'Y'
9149         THEN
9150           OE_DEBUG_PUB.Add(' Call DRAWEE BR exposure ');
9151         END IF;
9152 
9153         IF p_global_exposure_flag = 'Y'
9154         THEN
9155           IF G_debug_flag = 'Y'
9156           THEN
9157             OE_DEBUG_PUB.Add(' Get cust_br_balance_global ');
9158           END IF;
9159 
9160             OPEN cust_br_balance_global (p_usage_curr(i).usage_curr_code);
9161             FETCH cust_br_balance_global INTO l_total_from_br ;
9162 
9163             IF cust_br_balance_global%NOTFOUND
9164             THEN
9165                IF G_debug_flag = 'Y'
9166                THEN
9167                  OE_DEBUG_PUB.Add(' No AR balance found');
9168                END IF;
9169 
9170               l_total_from_br := 0 ;
9171             END IF;
9172 
9173             CLOSE cust_br_balance_global;
9174 
9175        ELSE
9176          IF G_debug_flag = 'Y'
9177          THEN
9178            OE_DEBUG_PUB.Add(' Get cust_br_balance ');
9179          END IF;
9180 
9181             OPEN cust_br_balance (p_usage_curr(i).usage_curr_code);
9182             FETCH cust_br_balance INTO l_total_from_br ;
9183 
9184             IF cust_br_balance%NOTFOUND
9185             THEN
9186               OE_DEBUG_PUB.Add(' No AR balance found');
9187               l_total_from_br := 0 ;
9188             END IF;
9189 
9190             CLOSE cust_br_balance;
9191         end if;
9192       END IF;
9193 
9194       IF l_include_risk_flag = 'Y'
9195       THEN
9196         IF p_global_exposure_flag = 'Y'
9197         THEN
9198           IF G_debug_flag = 'Y'
9199           THEN
9200             OE_DEBUG_PUB.Add(' Get cust_pay_risk_global  ');
9201           END IF;
9202 
9203             OPEN cust_br_pay_risk_global (p_usage_curr(i).usage_curr_code);
9204             FETCH cust_br_pay_risk_global INTO l_payments_at_risk_br;
9205             IF cust_br_pay_risk_global%NOTFOUND
9206             THEN
9207               l_payments_at_risk_br := 0 ;
9208               OE_DEBUG_PUB.Add(' No Pay at risk found ');
9209             END IF;
9210 
9211             CLOSE cust_br_pay_risk_global;
9212         ELSE
9213           IF G_debug_flag = 'Y'
9214           THEN
9215             OE_DEBUG_PUB.Add(' Get cust_pay_risk  ');
9216           END IF;
9217 
9218             OPEN cust_br_pay_risk (p_usage_curr(i).usage_curr_code);
9219             FETCH cust_br_pay_risk INTO l_payments_at_risk_br;
9220             IF cust_br_pay_risk%NOTFOUND
9221             THEN
9222               l_payments_at_risk_br := 0 ;
9223               OE_DEBUG_PUB.Add(' No Pay at risk found ');
9224             END IF;
9225             CLOSE cust_br_pay_risk;
9226         END IF;  -- Global
9227       ELSE
9228         IF G_debug_flag = 'Y'
9229         THEN
9230           OE_DEBUG_PUB.Add(' No Drawee check required ');
9231         END IF;
9232 
9233       END IF; -- DRAWEE
9234     ELSE
9235      IF G_debug_flag = 'Y'
9236      THEN
9237         OE_DEBUG_PUB.Add(' No Drawee check - NO horizon ' ||
9238           p_credit_check_rule_rec.OPEN_AR_DAYS) ;
9239      END IF;
9240     END IF;
9241 
9242 ------------------- end AR exposure --------------------
9243 
9244 ------------------- OM Exposure logic ------------------------
9245 -------------------------------------------------------------
9246     IF l_uninvoiced_orders_flag = 'Y'
9247     THEN
9248     BEGIN
9249       IF G_debug_flag = 'Y'
9250       THEN
9251         OE_DEBUG_PUB.Add(' Begin OM Exposure calculation ');
9252       END IF;
9253 
9254       IF OE_Commitment_PVT.Do_Commitment_Sequencing
9255       THEN
9256         IF p_global_exposure_flag = 'Y'
9257         THEN
9258           IF G_debug_flag = 'Y'
9259           THEN
9260             OE_DEBUG_PUB.Add('  cust_commitments_global');
9261           END IF;
9262 
9263           OPEN cust_commitment_total_global
9264               (p_usage_curr(i).usage_curr_code);
9265           FETCH cust_commitment_total_global
9266               INTO l_total_commitment ;
9267 
9268           IF cust_commitment_total_global%NOTFOUND
9269           THEN
9270             l_total_commitment := 0 ;
9271             OE_DEBUG_PUB.Add('No commitment amount found ');
9272           END IF;
9273 
9274           CLOSE cust_commitment_total_global ;
9275         ELSE
9276           IF G_debug_flag = 'Y'
9277           THEN
9278             OE_DEBUG_PUB.Add('  cust_commitments ');
9279           END IF;
9280 
9281           OPEN customer_commitment_total (p_usage_curr(i).usage_curr_code);
9282           FETCH customer_commitment_total INTO l_total_commitment ;
9283 
9284           IF customer_commitment_total%NOTFOUND
9285           THEN
9286             l_total_commitment := 0 ;
9287             OE_DEBUG_PUB.Add('No commitment amount found ');
9288           END IF;
9289 
9290           CLOSE customer_commitment_total ;
9291         END IF ; -- Global
9292       END IF; -- Commitment_Sequencing
9293 
9294       --
9295       -- Check the l_orders_on_hold_flag.
9296       -- IF Y, process the uninvoiced cursors
9297       -- ELSE process the no hold cursors
9298       --
9299 
9300       IF l_orders_on_hold_flag = 'Y'
9301       THEN
9302         IF p_global_exposure_flag = 'Y'
9303         THEN
9304 
9305           ----added for Returns
9306           IF l_include_returns_flag='N'
9307           THEN
9308             -----returns are not included
9309 
9310             IF G_debug_flag = 'Y'
9311             THEN
9312               OE_DEBUG_PUB.Add(' select  cust_uninvoiced_orders_global  ');
9313             END IF;
9314 
9315             OPEN cust_uninvoiced_orders_global(p_usage_curr(i).usage_curr_code);
9316             FETCH cust_uninvoiced_orders_global INTO l_total_on_order;
9317 
9318             IF cust_uninvoiced_orders_global%NOTFOUND
9319             THEN
9320               l_total_on_order := 0 ;
9321               OE_DEBUG_PUB.Add('No Uninvoiced Order amount found ');
9322             END IF;
9323             CLOSE cust_uninvoiced_orders_global;
9324 
9325           ELSE
9326             -----returns are included
9327             IF G_debug_flag = 'Y'
9328             THEN
9329               OE_DEBUG_PUB.Add(' select  cust_uninv_orders_global_ret ');
9330             END IF;
9331 
9332             OPEN cust_uninv_orders_global_ret(p_usage_curr(i).usage_curr_code);
9333             FETCH cust_uninv_orders_global_ret  INTO l_total_on_order;
9334 
9335             IF cust_uninv_orders_global_ret%NOTFOUND
9336             THEN
9337               l_total_on_order := 0 ;
9338               OE_DEBUG_PUB.Add('No Uninvoiced Order amount found ');
9339             END IF;
9340 
9341             CLOSE cust_uninv_orders_global_ret;
9342 
9343           END IF; ---end for checking if returns are included
9344 
9345         ELSE
9346 
9347           ----added for Returns
9348           IF l_include_returns_flag='N'
9349           THEN
9350             -----returns are not included
9351             IF G_debug_flag = 'Y'
9352             THEN
9353               OE_DEBUG_PUB.Add(' select  cust_uninvoiced_orders  ');
9354             END IF;
9355 
9356             OPEN cust_uninvoiced_orders(p_usage_curr(i).usage_curr_code);
9357             FETCH cust_uninvoiced_orders INTO l_total_on_order;
9358 
9359             IF cust_uninvoiced_orders%NOTFOUND
9360             THEN
9361               l_total_on_order := 0 ;
9362               OE_DEBUG_PUB.Add('No Uninvoiced Order amount found ');
9363             END IF;
9364 
9365             CLOSE cust_uninvoiced_orders;
9366 
9367           ELSE
9368             -----returns are included
9369             IF G_debug_flag = 'Y'
9370             THEN
9371               OE_DEBUG_PUB.Add(' select  cust_uninv_orders_ret  ');
9372             END IF;
9373 
9374             OPEN cust_uninv_orders_ret(p_usage_curr(i).usage_curr_code);
9375             FETCH cust_uninv_orders_ret INTO l_total_on_order;
9376 
9377             IF cust_uninv_orders_ret%NOTFOUND
9378             THEN
9379               l_total_on_order := 0 ;
9380               OE_DEBUG_PUB.Add('No Uninvoiced Order amount found ');
9381             END IF;
9382 
9383             CLOSE cust_uninv_orders_ret;
9384 
9385           END IF; -----end of checking if returns are included
9386         END IF ; --- Global
9387 
9388         IF l_freight_charges_flag ='Y'
9389         THEN
9390           IF p_global_exposure_flag = 'Y'
9391           THEN
9392 
9393             ----added for Returns
9394             IF l_include_returns_flag='N'
9395             THEN
9396               -----returns are not included
9397               IF G_debug_flag = 'Y'
9398               THEN
9399                 OE_DEBUG_PUB.Add('  cust_uninv_hdr_freight1_global  ');
9400               END IF;
9401 
9402               OPEN cust_uninv_hdr_freight1_global
9403                  (p_usage_curr(i).usage_curr_code);
9404 
9405               FETCH cust_uninv_hdr_freight1_global
9406                   INTO l_uninvoiced_hdr_freight1;
9407 
9408               IF cust_uninv_hdr_freight1_global%NOTFOUND
9409               THEN
9410                 l_uninvoiced_hdr_freight1 := 0 ;
9411                 OE_DEBUG_PUB.Add('No Uninvoiced Order Freight1 found ');
9412               END IF;
9413 
9414               CLOSE cust_uninv_hdr_freight1_global;
9415 
9416             ELSE
9417               -----returns are included
9418               IF G_debug_flag = 'Y'
9419               THEN
9420                 OE_DEBUG_PUB.Add('  open cust_uninv_hdr_fr1_glb_ret  ');
9421               END IF;
9422 
9423               OPEN cust_uninv_hdr_fr1_glb_ret
9424                  (p_usage_curr(i).usage_curr_code);
9425 
9426               FETCH cust_uninv_hdr_fr1_glb_ret
9427                   INTO l_uninvoiced_hdr_freight1;
9428 
9429               IF cust_uninv_hdr_fr1_glb_ret%NOTFOUND
9430               THEN
9431                 l_uninvoiced_hdr_freight1 := 0 ;
9432                 OE_DEBUG_PUB.Add('No Uninvoiced Order Freight1 found ');
9433               END IF;
9434 
9435               CLOSE cust_uninv_hdr_fr1_glb_ret;
9436 
9437             END IF;  --end of checking if returns are included
9438 
9439             ----added for Returns
9440             IF l_include_returns_flag='N'
9441             THEN
9442               -----returns are not included
9443 
9444               IF G_debug_flag = 'Y'
9445               THEN
9446                 OE_DEBUG_PUB.Add('  cust_uninv_hdr_freight2_global  ');
9447               END IF;
9448 
9449 
9450               OPEN cust_uninv_hdr_freight2_global
9451                 (p_usage_curr(i).usage_curr_code);
9452 
9453               FETCH cust_uninv_hdr_freight2_global
9454                 INTO l_uninvoiced_hdr_freight2;
9455 
9456               IF cust_uninv_hdr_freight2_global%NOTFOUND
9457               THEN
9458                 l_uninvoiced_hdr_freight2 := 0 ;
9459                 IF G_debug_flag = 'Y'
9460                 THEN
9461                   OE_DEBUG_PUB.Add('No Uninvoiced Order Freight2 found ');
9462                 END IF;
9463               END IF;
9464 
9465               CLOSE cust_uninv_hdr_freight2_global ;
9466 
9467             ELSE
9468               -----returns are included
9469 
9470               IF G_debug_flag = 'Y'
9471               THEN
9472                 OE_DEBUG_PUB.Add(' open cust_uninv_hdr_fr2_glb_ret ');
9473               END IF;
9474 
9475               OPEN cust_uninv_hdr_fr2_glb_ret
9476                 (p_usage_curr(i).usage_curr_code);
9477 
9478               FETCH cust_uninv_hdr_fr2_glb_ret
9479                 INTO l_uninvoiced_hdr_freight2;
9480 
9481               IF cust_uninv_hdr_fr2_glb_ret%NOTFOUND
9482               THEN
9483                 l_uninvoiced_hdr_freight2 := 0 ;
9484                 IF G_debug_flag = 'Y'
9485                 THEN
9486                   OE_DEBUG_PUB.Add('No Uninvoiced Order Freight2 found ');
9487                 END IF;
9488               END IF;
9489 
9490               CLOSE cust_uninv_hdr_fr2_glb_ret;
9491 
9492             END IF;   ----end of checking if returns are included
9493 
9494           ELSE
9495 
9496             ----added for Returns
9497             IF l_include_returns_flag='N'
9498             THEN
9499               -----returns are not included
9500 
9501               IF G_debug_flag = 'Y'
9502               THEN
9503                 OE_DEBUG_PUB.Add('  cust_uninv_hdr_freight1  ');
9504               END IF;
9505 
9506               OPEN cust_uninv_hdr_freight1(p_usage_curr(i).usage_curr_code);
9507               FETCH cust_uninv_hdr_freight1 INTO l_uninvoiced_hdr_freight1;
9508 
9509               IF cust_uninv_hdr_freight1%NOTFOUND
9510               THEN
9511                 l_uninvoiced_hdr_freight1 := 0 ;
9512                 IF G_debug_flag = 'Y'
9513                 THEN
9514                   OE_DEBUG_PUB.Add('No Uninvoiced Order Freight1 found ');
9515                 END IF;
9516               END IF;
9517 
9518               CLOSE cust_uninv_hdr_freight1;
9519 
9520               IF G_debug_flag = 'Y'
9521               THEN
9522                 OE_DEBUG_PUB.Add('  cust_uninv_hdr_freight2  ');
9523               END IF;
9524 
9525               OPEN cust_uninv_hdr_freight2(p_usage_curr(i).usage_curr_code);
9526               FETCH cust_uninv_hdr_freight2 INTO l_uninvoiced_hdr_freight2;
9527 
9528               IF cust_uninv_hdr_freight2%NOTFOUND
9529               THEN
9530                 l_uninvoiced_hdr_freight2 := 0 ;
9531                 IF G_debug_flag = 'Y'
9532                 THEN
9533                   OE_DEBUG_PUB.Add('No Uninvoiced Order Freight2 found ');
9534                 END IF;
9535               END IF;
9536               CLOSE cust_uninv_hdr_freight2;
9537 
9538             ELSE
9539               -----returns are included
9540 
9541               IF G_debug_flag = 'Y'
9542               THEN
9543                 OE_DEBUG_PUB.Add(' open cust_uninv_hdr_freight1_ret ');
9544               END IF;
9545 
9546               OPEN cust_uninv_hdr_freight1_ret(p_usage_curr(i).usage_curr_code);
9547               FETCH cust_uninv_hdr_freight1_ret INTO l_uninvoiced_hdr_freight1;
9548 
9549               IF cust_uninv_hdr_freight1_ret%NOTFOUND
9550               THEN
9551                 l_uninvoiced_hdr_freight1 := 0 ;
9552                 IF G_debug_flag = 'Y'
9553                 THEN
9554                   OE_DEBUG_PUB.Add('No Uninvoiced Order Freight1 found ');
9555                 END IF;
9556               END IF;
9557 
9558               CLOSE cust_uninv_hdr_freight1_ret;
9559 
9560               IF G_debug_flag = 'Y'
9561               THEN
9562                 OE_DEBUG_PUB.Add(' open cust_uninv_hdr_freight2_ret ');
9563               END IF;
9564 
9565               OPEN cust_uninv_hdr_freight2_ret(p_usage_curr(i).usage_curr_code);
9566               FETCH cust_uninv_hdr_freight2_ret INTO l_uninvoiced_hdr_freight2;
9567 
9568               IF cust_uninv_hdr_freight2_ret%NOTFOUND
9569               THEN
9570                 l_uninvoiced_hdr_freight2 := 0 ;
9571                 IF G_debug_flag = 'Y'
9572                 THEN
9573                   OE_DEBUG_PUB.Add('No Uninvoiced Order Freight2 found ');
9574                 END IF;
9575               END IF;
9576               CLOSE cust_uninv_hdr_freight2_ret;
9577 
9578             END IF; -----end of checking if returns are included
9579 
9580           END IF ; --- Global
9581 
9582         END IF; -- freight charges
9583 
9584 
9585       ELSE  -- Do not include orders on hold
9586             -- l_orders_on_hold_flag <> 'Y'
9587 
9588         IF p_global_exposure_flag = 'Y'
9589         THEN
9590 
9591           ----added for Returns
9592           IF l_include_returns_flag='N'
9593           THEN
9594             -----returns are not included
9595 
9596             IF G_debug_flag = 'Y'
9597             THEN
9598               OE_DEBUG_PUB.Add('  cust_orders_not_on_hold_global  ');
9599             END IF;
9600 
9601             OPEN cust_orders_not_on_hold_global
9602                 (p_usage_curr(i).usage_curr_code);
9603             FETCH cust_orders_not_on_hold_global
9604                 INTO l_total_no_hold;
9605 
9606             IF cust_orders_not_on_hold_global%NOTFOUND
9607             THEN
9608               l_total_no_hold := 0 ;
9609               OE_DEBUG_PUB.Add('No Orders not on hold amount found ');
9610             END IF;
9611 
9612             CLOSE cust_orders_not_on_hold_global ;
9613 
9614             -- If the l_need_exposure_details flag enabled, get the
9615             -- OM amount on hold
9616             IF l_need_exposure_details = 'Y' THEN
9617               IF G_debug_flag = 'Y' THEN
9618                 OE_DEBUG_PUB.Add('  cust_orders_on_hold_global  ');
9619               END IF;
9620               OPEN  cust_orders_on_hold_global(p_usage_curr(i).usage_curr_code);
9621               FETCH cust_orders_on_hold_global
9622               INTO  l_total_on_hold;
9623 
9624               IF cust_orders_on_hold_global%NOTFOUND THEN
9625                 l_total_on_hold := 0 ;
9626                 OE_DEBUG_PUB.Add('No global orders on hold amount found ');
9627               END IF;
9628               CLOSE cust_orders_on_hold_global ;
9629             END IF;
9630 
9631           ELSE
9632             -----returns are included
9633 
9634             IF G_debug_flag = 'Y'
9635             THEN
9636               OE_DEBUG_PUB.Add(' open cust_ord_not_on_hold_glb_ret  ');
9637             END IF;
9638 
9639             OPEN cust_ord_not_on_hold_glb_ret
9640                 (p_usage_curr(i).usage_curr_code);
9641             FETCH cust_ord_not_on_hold_glb_ret
9642                 INTO l_total_no_hold;
9643 
9644             IF cust_ord_not_on_hold_glb_ret%NOTFOUND
9645             THEN
9646               l_total_no_hold := 0 ;
9647               OE_DEBUG_PUB.Add('No Orders not on hold amount found ');
9648             END IF;
9649 
9650             CLOSE cust_ord_not_on_hold_glb_ret ;
9651 
9652             -- If the l_need_exposure_details flag enabled, get the
9653             -- OM amount on hold
9654             IF l_need_exposure_details = 'Y' THEN
9655               IF G_debug_flag = 'Y' THEN
9656                 OE_DEBUG_PUB.Add('  cust_ord_on_hold_glb_ret  ');
9657               END IF;
9658               OPEN  cust_ord_on_hold_glb_ret(p_usage_curr(i).usage_curr_code);
9659               FETCH cust_ord_on_hold_glb_ret
9660               INTO  l_total_on_hold;
9661 
9662               IF cust_ord_on_hold_glb_ret%NOTFOUND THEN
9663                 l_total_on_hold := 0 ;
9664                 OE_DEBUG_PUB.Add('No return global orders on hold amount found ');
9665               END IF;
9666               CLOSE cust_ord_on_hold_glb_ret ;
9667             END IF;
9668 
9669           END IF; -----end of checking if returns are included
9670 
9671           IF l_freight_charges_flag ='Y'
9672           THEN
9673             --
9674             -- Get header freight if the site is the same as the given site
9675             -- or the site belong to the same customer as the given site
9676             -- if the credit level is CUSTOMER.
9677             --
9678 
9679             ----added for Returns
9680             IF l_include_returns_flag='N'
9681             THEN
9682               -----returns are not included
9683 
9684               IF G_debug_flag = 'Y'
9685               THEN
9686                 OE_DEBUG_PUB.Add('  cust_no_hold_hdr_freight1_glb ');
9687               END IF;
9688 
9689               OPEN cust_no_hold_hdr_freight1_glb
9690                   (p_usage_curr(i).usage_curr_code);
9691 
9692               FETCH cust_no_hold_hdr_freight1_glb
9693                     INTO l_no_hold_hdr_freight1;
9694 
9695               IF cust_no_hold_hdr_freight1_glb%NOTFOUND
9696               THEN
9697                 l_no_hold_hdr_freight1 := 0 ;
9698                 IF G_debug_flag = 'Y'
9699                 THEN
9700                   OE_DEBUG_PUB.Add('No orders without hold freight1 amount found ');
9701                 END IF;
9702               END IF;
9703 
9704               CLOSE cust_no_hold_hdr_freight1_glb ;
9705 
9706               IF G_debug_flag = 'Y'
9707               THEN
9708                 OE_DEBUG_PUB.Add('  cust_no_hold_hdr_freight2_glb ');
9709               END IF;
9710 
9711               OPEN cust_no_hold_hdr_freight2_glb
9712                 (p_usage_curr(i).usage_curr_code);
9713 
9714               FETCH cust_no_hold_hdr_freight2_glb
9715                 INTO l_no_hold_hdr_freight2;
9716 
9717               IF cust_no_hold_hdr_freight2_glb%NOTFOUND
9718               THEN
9719                 l_hold_hdr_freight2 := 0 ;
9720                 IF G_debug_flag = 'Y'
9721                 THEN
9722                   OE_DEBUG_PUB.Add('No orders without hold freight2 amount found');
9723                 END IF;
9724               END IF;
9725               CLOSE cust_no_hold_hdr_freight2_glb ;
9726 
9727               -- If the l_need_exposure_details flag enabled, get the
9728               -- OM amount on hold
9729               IF l_need_exposure_details = 'Y' THEN
9730                 IF G_debug_flag = 'Y' THEN
9731                   OE_DEBUG_PUB.Add('  cust_hold_hdr_freight1_glb  ');
9732                 END IF;
9733 
9734                 OPEN  cust_hold_hdr_freight1_glb
9735                       (p_usage_curr(i).usage_curr_code);
9736                 FETCH cust_hold_hdr_freight1_glb
9737                 INTO  l_hold_hdr_freight1;
9738 
9739                 IF cust_hold_hdr_freight1_glb%NOTFOUND THEN
9740                   l_hold_hdr_freight1 := 0 ;
9741                   OE_DEBUG_PUB.Add
9742                     ('No orders on hold with freight1 amount found ');
9743                 END IF;
9744 
9745                 CLOSE cust_hold_hdr_freight1_glb;
9746 
9747                 -- get header freight2 on hold
9748                 IF G_debug_flag = 'Y' THEN
9749                   OE_DEBUG_PUB.Add('  cust_hold_hdr_freight2_glb  ');
9750                 END IF;
9751 
9752                 OPEN  cust_hold_hdr_freight2_glb
9753                     (p_usage_curr(i).usage_curr_code);
9754                 FETCH cust_hold_hdr_freight2_glb
9755                 INTO  l_hold_hdr_freight2;
9756 
9757                 IF cust_hold_hdr_freight2_glb%NOTFOUND THEN
9758                   l_hold_hdr_freight2 := 0 ;
9759                   OE_DEBUG_PUB.Add
9760                     ('No orders on hold with freight2 amount found ');
9761                 END IF;
9762 
9763                 CLOSE cust_hold_hdr_freight2_glb;
9764               END IF;
9765             ELSE
9766 
9767               -----returns are included
9768 
9769               IF G_debug_flag = 'Y'
9770               THEN
9771                 OE_DEBUG_PUB.Add('open  cust_no_hold_hdr_fr1_glb_ret ');
9772               END IF;
9773 
9774               OPEN cust_no_hold_hdr_fr1_glb_ret
9775                   (p_usage_curr(i).usage_curr_code);
9776 
9777               FETCH cust_no_hold_hdr_fr1_glb_ret
9778                     INTO l_no_hold_hdr_freight1;
9779 
9780               IF cust_no_hold_hdr_fr1_glb_ret%NOTFOUND
9781               THEN
9782                 l_no_hold_hdr_freight1 := 0 ;
9783                 IF G_debug_flag = 'Y'
9784                 THEN
9785                   OE_DEBUG_PUB.Add('No orders without hold freight1 amount found ');
9786                 END IF;
9787               END IF;
9788 
9789               CLOSE cust_no_hold_hdr_fr1_glb_ret ;
9790 
9791               IF G_debug_flag = 'Y'
9792               THEN
9793                 OE_DEBUG_PUB.Add('open  cust_no_hold_hdr_fr2_glb_ret ');
9794               END IF;
9795 
9796               OPEN cust_no_hold_hdr_fr2_glb_ret
9797                 (p_usage_curr(i).usage_curr_code);
9798 
9799               FETCH cust_no_hold_hdr_fr2_glb_ret
9800                 INTO l_no_hold_hdr_freight2;
9801 
9802               IF cust_no_hold_hdr_fr2_glb_ret%NOTFOUND
9803               THEN
9804                 l_hold_hdr_freight2 := 0 ;
9805                 IF G_debug_flag = 'Y'
9806                 THEN
9807                   OE_DEBUG_PUB.Add('No orders without hold freight2 amount found');
9808                 END IF;
9809               END IF;
9810               CLOSE cust_no_hold_hdr_fr2_glb_ret ;
9811 
9812               -- If the l_need_exposure_details flag enabled, get the
9813               -- OM amount on hold
9814               IF l_need_exposure_details = 'Y' THEN
9815                 IF G_debug_flag = 'Y' THEN
9816                   OE_DEBUG_PUB.Add('  cust_hold_hdr_fr1_glb_ret  ');
9817                 END IF;
9818 
9819                 OPEN  cust_hold_hdr_fr1_glb_ret
9820                       (p_usage_curr(i).usage_curr_code);
9821                 FETCH cust_hold_hdr_fr1_glb_ret
9822                 INTO  l_hold_hdr_freight1;
9823 
9824                 IF cust_hold_hdr_fr1_glb_ret%NOTFOUND THEN
9825                   l_hold_hdr_freight1 := 0 ;
9826                   OE_DEBUG_PUB.Add
9827                     ('No orders on hold with freight1 amount found ');
9828                 END IF;
9829 
9830                 CLOSE cust_hold_hdr_fr1_glb_ret;
9831 
9832                 -- get header freight2 on hold
9833                 IF G_debug_flag = 'Y' THEN
9834                   OE_DEBUG_PUB.Add('  cust_hold_hdr_fr2_glb_ret  ');
9835                 END IF;
9836 
9837                 OPEN  cust_hold_hdr_fr2_glb_ret
9838                     (p_usage_curr(i).usage_curr_code);
9839                 FETCH cust_hold_hdr_fr2_glb_ret
9840                 INTO  l_hold_hdr_freight2;
9841 
9842                 IF cust_hold_hdr_fr2_glb_ret%NOTFOUND THEN
9843                   l_hold_hdr_freight2 := 0 ;
9844                   OE_DEBUG_PUB.Add
9845                     ('No orders on hold with freight2 amount found ');
9846                 END IF;
9847 
9848                 CLOSE cust_hold_hdr_fr2_glb_ret;
9849               END IF;
9850 
9851             END IF; ---end of checking if returns are included
9852 
9853           END IF; -- freight = Y
9854 
9855         ELSE  -- uninvoiced orders not on hold - Non global
9856 
9857           ----added for Returns
9858           IF l_include_returns_flag = 'N'
9859           THEN
9860             -----returns are not included
9861 
9862             IF G_debug_flag = 'Y'
9863             THEN
9864               OE_DEBUG_PUB.Add('  cust_orders_not_on_hold ');
9865             END IF;
9866 
9867             OPEN cust_orders_not_on_hold (p_usage_curr(i).usage_curr_code);
9868             FETCH cust_orders_not_on_hold INTO l_total_no_hold;
9869 
9870             IF cust_orders_not_on_hold%NOTFOUND
9871             THEN
9872               l_total_no_hold := 0 ;
9873               IF G_debug_flag = 'Y'
9874               THEN
9875                 OE_DEBUG_PUB.Add('No orders not on hold amount found ');
9876               END IF;
9877             END IF;
9878 
9879             CLOSE cust_orders_not_on_hold;
9880 
9881             -- If the l_need_exposure_details flag enabled, get the
9882             -- OM amount on hold
9883             IF l_need_exposure_details = 'Y' THEN
9884               IF G_debug_flag = 'Y' THEN
9885                  OE_DEBUG_PUB.Add('  cust_orders_on_hold ');
9886               END IF;
9887 
9888               OPEN cust_orders_on_hold (p_usage_curr(i).usage_curr_code);
9889               FETCH cust_orders_on_hold INTO l_total_on_hold;
9890 
9891               IF cust_orders_on_hold%NOTFOUND THEN
9892                 l_total_on_hold := 0 ;
9893                 IF G_debug_flag = 'Y' THEN
9894                   OE_DEBUG_PUB.Add('No customer orders on hold amount found ');
9895                 END IF;
9896               END IF;
9897               CLOSE cust_orders_on_hold;
9898             END IF;
9899 
9900           ELSE
9901             -----returns are not included
9902 
9903             IF G_debug_flag = 'Y'
9904             THEN
9905               OE_DEBUG_PUB.Add('  cust_ord_not_on_hold_ret ');
9906             END IF;
9907 
9908             OPEN cust_ord_not_on_hold_ret (p_usage_curr(i).usage_curr_code);
9909             FETCH cust_ord_not_on_hold_ret INTO l_total_no_hold;
9910 
9911             IF cust_ord_not_on_hold_ret%NOTFOUND
9912             THEN
9913               l_total_no_hold := 0 ;
9914               IF G_debug_flag = 'Y'
9915               THEN
9916                 OE_DEBUG_PUB.Add('No orders not on hold amount found ');
9917               END IF;
9918             END IF;
9919 
9920             CLOSE cust_ord_not_on_hold_ret;
9921 
9922             -- If the l_need_exposure_details flag enabled, get the
9923             -- OM amount on hold
9924             IF l_need_exposure_details = 'Y' THEN
9925               IF G_debug_flag = 'Y' THEN
9926                  OE_DEBUG_PUB.Add('  cust_ord_on_hold_ret ');
9927               END IF;
9928 
9929               OPEN cust_ord_on_hold_ret (p_usage_curr(i).usage_curr_code);
9930               FETCH cust_ord_on_hold_ret INTO l_total_on_hold;
9931 
9932               IF cust_ord_on_hold_ret%NOTFOUND THEN
9933                 l_total_on_hold := 0 ;
9934                 IF G_debug_flag = 'Y' THEN
9935                   OE_DEBUG_PUB.Add('No customer orders on hold amount found ');
9936                 END IF;
9937               END IF;
9938               CLOSE cust_ord_on_hold_ret;
9939             END IF;
9940 
9941           END IF; -----end of checking if returns are included
9942 
9943           IF l_freight_charges_flag ='Y'
9944           THEN
9945             --
9946             -- Get header freight if the site is the same as the given site
9947             -- or the site belong to the same customer as the given site
9948             -- if the credit level is CUSTOMER.
9949             --
9950             ----added for Returns
9951             IF l_include_returns_flag='N'
9952             THEN
9953               -----returns are not included
9954 
9955               IF G_debug_flag = 'Y'
9956               THEN
9957                 OE_DEBUG_PUB.Add('  cust_no_hold_hdr_freight1 ');
9958               END IF;
9959 
9960               OPEN cust_no_hold_hdr_freight1(p_usage_curr(i).usage_curr_code);
9961               FETCH cust_no_hold_hdr_freight1 INTO l_no_hold_hdr_freight1;
9962 
9963               IF cust_no_hold_hdr_freight1%NOTFOUND
9964               THEN
9965                 l_no_hold_hdr_freight1 := 0 ;
9966                 IF G_debug_flag = 'Y'
9967                 THEN
9968                   OE_DEBUG_PUB.Add('No orders without hold freight1 amount found ');
9969                 END IF;
9970               END IF;
9971 
9972               CLOSE cust_no_hold_hdr_freight1;
9973 
9974               IF G_debug_flag = 'Y'
9975               THEN
9976                 OE_DEBUG_PUB.Add('  cust_no_hold_hdr_freight2 ');
9977               END IF;
9978 
9979               OPEN cust_no_hold_hdr_freight2(p_usage_curr(i).usage_curr_code);
9980               FETCH cust_no_hold_hdr_freight2 INTO l_no_hold_hdr_freight2;
9981 
9982               IF cust_no_hold_hdr_freight2%NOTFOUND
9983               THEN
9984                 l_no_hold_hdr_freight2 := 0 ;
9985                 IF G_debug_flag = 'Y'
9986                 THEN
9987                   OE_DEBUG_PUB.Add('No orders without hold freight2 amount found');
9988                 END IF;
9989               END IF;
9990               CLOSE cust_no_hold_hdr_freight2;
9991 
9992               -- If the l_need_exposure_details flag enabled, get the
9993               -- OM amount on hold
9994               IF l_need_exposure_details = 'Y' THEN
9995                 --
9996                 -- Get cust on hold header freight1
9997                 --
9998                 IF G_debug_flag = 'Y' THEN
9999                   OE_DEBUG_PUB.Add('  cust_hold_hdr_freight1 ');
10000                 END IF;
10001 
10002                 OPEN cust_hold_hdr_freight1(p_usage_curr(i).usage_curr_code);
10003                 FETCH cust_hold_hdr_freight1 INTO l_hold_hdr_freight1;
10004 
10005                 IF cust_hold_hdr_freight1%NOTFOUND THEN
10006                   l_hold_hdr_freight1 := 0 ;
10007                   IF G_debug_flag = 'Y' THEN
10008                     OE_DEBUG_PUB.Add('No orders with hold freight1 amount found ');
10009                   END IF;
10010                 END IF;
10011 
10012                 CLOSE cust_hold_hdr_freight1;
10013                 --
10014                 -- Get cust on hold header freight2
10015                 --
10016                 IF G_debug_flag = 'Y' THEN
10017                   OE_DEBUG_PUB.Add('  cust_hold_hdr_freight2 ');
10018                 END IF;
10019 
10020                 OPEN cust_hold_hdr_freight2(p_usage_curr(i).usage_curr_code);
10021                 FETCH cust_hold_hdr_freight2 INTO l_hold_hdr_freight2;
10022 
10023                 IF cust_hold_hdr_freight2%NOTFOUND THEN
10024                   l_hold_hdr_freight2 := 0 ;
10025                   IF G_debug_flag = 'Y' THEN
10026                     OE_DEBUG_PUB.Add('No orders with hold freight2 amount found ');
10027                   END IF;
10028                 END IF;
10029 
10030                 CLOSE cust_hold_hdr_freight2;
10031               END IF; -- need details
10032 
10033             ELSE
10034               -----returns are included
10035 
10036               IF G_debug_flag = 'Y'
10037               THEN
10038                 OE_DEBUG_PUB.Add('  cust_no_hold_hdr_freight1_ret ');
10039               END IF;
10040 
10041               OPEN cust_no_hold_hdr_freight1_ret(p_usage_curr(i).usage_curr_code);
10042               FETCH cust_no_hold_hdr_freight1_ret INTO l_no_hold_hdr_freight1;
10043 
10044               IF cust_no_hold_hdr_freight1_ret%NOTFOUND
10045               THEN
10046                 l_no_hold_hdr_freight1 := 0 ;
10047                 IF G_debug_flag = 'Y'
10048                 THEN
10049                   OE_DEBUG_PUB.Add('No orders without hold freight1 amount found ');
10050                 END IF;
10051               END IF;
10052 
10053               CLOSE cust_no_hold_hdr_freight1_ret;
10054 
10055               IF G_debug_flag = 'Y'
10056               THEN
10057                 OE_DEBUG_PUB.Add('open  cust_no_hold_hdr_freight2_ret ');
10058               END IF;
10059 
10060               OPEN cust_no_hold_hdr_freight2_ret(p_usage_curr(i).usage_curr_code);
10061               FETCH cust_no_hold_hdr_freight2_ret INTO l_no_hold_hdr_freight2;
10062 
10063               IF cust_no_hold_hdr_freight2_ret%NOTFOUND
10064               THEN
10065                 l_no_hold_hdr_freight2 := 0 ;
10066                 IF G_debug_flag = 'Y'
10067                 THEN
10068                   OE_DEBUG_PUB.Add('No orders without hold freight2 amount found');
10069                 END IF;
10070               END IF;
10071 
10072               CLOSE cust_no_hold_hdr_freight2_ret;
10073 
10074 
10075               -- If the l_need_exposure_details flag enabled, get the
10076               -- OM amount on hold
10077               IF l_need_exposure_details = 'Y' THEN
10078                 --
10079                 -- Get cust on hold header freight1 with returns
10080                 --
10081                 IF G_debug_flag = 'Y' THEN
10082                   OE_DEBUG_PUB.Add('  cust_hold_hdr_freight1_ret ');
10083                 END IF;
10084 
10085                 OPEN cust_hold_hdr_freight1_ret(p_usage_curr(i).usage_curr_code);
10086                 FETCH cust_hold_hdr_freight1_ret INTO l_hold_hdr_freight1;
10087 
10088                 IF cust_hold_hdr_freight1_ret%NOTFOUND THEN
10089                   l_hold_hdr_freight1 := 0 ;
10090                   IF G_debug_flag = 'Y' THEN
10091                     OE_DEBUG_PUB.Add('No orders with hold freight1 amount found ');
10092                   END IF;
10093                 END IF;
10094 
10095                 CLOSE cust_hold_hdr_freight1_ret;
10096                 --
10097                 -- Get cust on hold header freight2
10098                 --
10099                 IF G_debug_flag = 'Y' THEN
10100                   OE_DEBUG_PUB.Add('  cust_hold_hdr_freight2_ret ');
10101                 END IF;
10102 
10103                 OPEN cust_hold_hdr_freight2_ret(p_usage_curr(i).usage_curr_code);
10104                 FETCH cust_hold_hdr_freight2_ret INTO l_hold_hdr_freight2;
10105 
10106                 IF cust_hold_hdr_freight2_ret%NOTFOUND THEN
10107                   l_hold_hdr_freight2 := 0 ;
10108                   IF G_debug_flag = 'Y' THEN
10109                     OE_DEBUG_PUB.Add('No orders with hold freight2 amount found ');
10110                   END IF;
10111                 END IF;
10112 
10113                 CLOSE cust_hold_hdr_freight2_ret;
10114               END IF; -- need details
10115             END IF; ---end of checking if returns are included
10116 
10117           END IF; -- include freight charges
10118         END IF; -- is global
10119       END IF;  -- Orders on hold
10120 
10121     END ;
10122   ELSE
10123     IF G_debug_flag = 'Y'
10124     THEN
10125       OE_DEBUG_PUB.Add(' No OM Exposure calculation ',1);
10126     END IF;
10127   END IF; -- Uninvoiced Orders
10128 
10129 
10130 ----------------------- End OM Exposure ------------------
10131 
10132     l_cum_total_from_ar := l_cum_total_from_ar
10133                          + NVL(l_total_from_ar,0)
10134                          + NVL(l_total_from_br,0) ;
10135 
10136     l_cum_payments_at_risk := l_cum_payments_at_risk
10137                          + NVL(l_payments_at_risk,0)
10138                          + NVL(l_payments_at_risk_br ,0);
10139 
10140     l_cum_total_on_order := l_cum_total_on_order
10141                          + NVL(l_total_on_order,0)
10142                          + NVL(l_uninvoiced_hdr_freight1,0)
10143                          + NVL(l_uninvoiced_hdr_freight2,0);
10144 
10145     l_cum_total_no_hold := l_cum_total_no_hold
10146                          + NVL(l_total_no_hold,0)
10147                          + NVL(l_no_hold_hdr_freight1,0)
10148                          + NVL(l_no_hold_hdr_freight2,0);
10149 
10150     l_cum_total_on_hold := l_cum_total_on_hold
10151                          + NVL(l_total_on_hold,0)
10152                          + NVL(l_hold_hdr_freight1,0)
10153                          + NVL(l_hold_hdr_freight2,0);
10154 
10155     l_cum_total_commitment := l_cum_total_commitment
10156                             + NVL(l_total_commitment,0) ;
10157 
10158     IF l_orders_on_hold_flag = 'Y' THEN
10159       l_cum_uninv_order_total := l_cum_total_on_order;
10160     ELSE
10161       l_cum_uninv_order_total := l_cum_total_no_hold;
10162     END IF;
10163 
10164     l_usage_total_exposure
10165                      := NVL(l_cum_total_from_ar,0)
10166                         + NVL(l_cum_payments_at_risk,0)
10167                         + NVL(l_cum_uninv_order_total,0)
10168                         - NVL(l_cum_total_commitment,0)
10169                         + NVL(l_cum_external_exposure,0) ;
10170 
10171     --
10172     -- Set the detail output variables only when detail is selected.
10173     --
10174     IF l_need_exposure_details = 'Y' THEN
10175       -- Add hold amount to order amount if hold flag is not set
10176       -- because the uninvoiced order amount is not available.
10177       IF l_orders_on_hold_flag = 'Y' THEN
10178         l_cum_order_amount := l_cum_uninv_order_total -
10179                               NVL(l_cum_total_commitment,0);
10180       ELSE
10181         l_cum_order_amount :=  l_cum_uninv_order_total
10182                              - NVL(l_cum_total_commitment,0)
10183                              + l_cum_total_on_hold;
10184       END IF;
10185 
10186       l_cum_order_hold_amount := l_cum_total_on_hold;
10187       l_cum_ar_amount    := NVL(l_cum_total_from_ar,0) +
10188                             NVL(l_cum_payments_at_risk,0) ;
10189     END IF;
10190 
10191     IF G_debug_flag = 'Y'
10192     THEN
10193 
10194       OE_DEBUG_PUB.ADD(' l_usage_total_exposure    = '
10195                     || l_usage_total_exposure );
10196       OE_DEBUG_PUB.ADD(' l_cum_total_from_ar       = '
10197                     || l_cum_total_from_ar );
10198       OE_DEBUG_PUB.ADD(' l_total_from_ar           = '
10199                     || l_total_from_ar);
10200       OE_DEBUG_PUB.ADD(' l_total_from_br           = '
10201                     || l_total_from_br);
10202       OE_DEBUG_PUB.ADD(' l_cum_payments_at_risk    = '
10203                     || l_cum_payments_at_risk );
10204       OE_DEBUG_PUB.ADD(' l_payments_at_risk        = '
10205                     || l_payments_at_risk);
10206       OE_DEBUG_PUB.ADD(' l_payments_at_risk_br     = '
10207                     || l_payments_at_risk_br);
10208       OE_DEBUG_PUB.ADD(' l_cum_total_on_order      = '
10209                     || l_cum_total_on_order );
10210       OE_DEBUG_PUB.ADD(' l_total_on_order          = '
10211                     || l_total_on_order );
10212       OE_DEBUG_PUB.ADD(' l_uninvoiced_hdr_freight1 = '
10213                     || l_uninvoiced_hdr_freight1 );
10214       OE_DEBUG_PUB.ADD(' l_uninvoiced_hdr_freight2 = '
10215                     || l_uninvoiced_hdr_freight2 );
10216       OE_DEBUG_PUB.ADD(' l_cum_total_commitment      = '
10217                     || l_cum_total_commitment );
10218       OE_DEBUG_PUB.ADD(' l_total_commitment          = '
10219                     || l_total_commitment );
10220       OE_DEBUG_PUB.ADD(' l_usage_total_exposure    = '
10221                     || l_usage_total_exposure );
10222 
10223       -- no hold
10224       OE_DEBUG_PUB.ADD(' l_cum_total_no_hold       = '
10225                     || l_cum_total_no_hold );
10226       OE_DEBUG_PUB.ADD(' l_total_no_hold           = '
10227                     || l_total_no_hold );
10228       OE_DEBUG_PUB.ADD(' l_no_hold_hdr_freight1    = '
10229                     || l_no_hold_hdr_freight1 );
10230       OE_DEBUG_PUB.ADD(' l_no_hold_hdr_freight2    = '
10231                       || l_no_hold_hdr_freight2);
10232       -- external
10233       OE_DEBUG_PUB.ADD(' l_external_exposure       = '
10234                     || l_external_exposure );
10235       OE_DEBUG_PUB.ADD(' l_cum_external_exposure   = '
10236                     || l_cum_external_exposure );
10237       -- details
10238       OE_DEBUG_PUB.ADD(' l_cum_total_on_hold       = '
10239                     || l_cum_total_on_hold );
10240       OE_DEBUG_PUB.ADD(' l_total_on_hold           = '
10241                     || l_total_on_hold );
10242       OE_DEBUG_PUB.ADD(' l_hold_hdr_freight1       = '
10243                     || l_hold_hdr_freight1 );
10244       OE_DEBUG_PUB.ADD(' l_hold_hdr_freight2       = '
10245                     || l_hold_hdr_freight2);
10246       OE_DEBUG_PUB.ADD(' l_cum_order_amount        = '
10247                     || l_cum_order_amount );
10248       OE_DEBUG_PUB.ADD(' l_cum_order_hold_amount   = '
10249                     || l_cum_order_hold_amount );
10250       OE_DEBUG_PUB.ADD(' l_cum_ar_amount           = '
10251                     || l_cum_ar_amount);
10252 
10253       OE_DEBUG_PUB.ADD(' Call currency conversion for exposure  ' );
10254       OE_DEBUG_PUB.Add(' GL_CURRENCY = '||
10255          OE_Credit_Engine_GRP.GL_currency );
10256     END IF;
10257 
10258 
10259     IF OE_Credit_Engine_GRP.GL_currency IS NULL
10260     THEN
10261       OE_DEBUG_PUB.ADD(' Call GET_GL_currency ');
10262 
10263       OE_Credit_Engine_GRP.GL_currency :=
10264                    OE_CREDIT_CHECK_UTIL.GET_GL_currency ;
10265 
10266           OE_DEBUG_PUB.ADD(' GL_CURRENCY  after = '
10267                  || OE_Credit_Engine_GRP.GL_currency );
10268 
10269     END IF;
10270 
10271     l_limit_total_exposure :=
10272     OE_CREDIT_CHECK_UTIL.CONVERT_CURRENCY_AMOUNT
10273       ( p_amount	            => l_usage_total_exposure
10274       , p_transactional_currency  => p_usage_curr(i).usage_curr_code
10275       , p_limit_currency	    => p_limit_curr_code
10276       , p_functional_currency     => OE_Credit_Engine_GRP.GL_currency
10277       , p_conversion_date	    => SYSDATE
10278       , p_conversion_type	    => p_credit_check_rule_rec.conversion_type
10279       );
10280 
10281     l_total_exposure := NVL(l_total_exposure,0)
10282                       + NVL(l_limit_total_exposure,0) ;
10283 
10284     IF p_need_exposure_details = 'Y'
10285     THEN
10286       IF G_debug_flag = 'Y'
10287       THEN
10288         oe_debug_pub.add( ' Into p_need_exposure_details ');
10289       END IF;
10290 
10291       l_limit_cum_order_amount :=
10292         OE_CREDIT_CHECK_UTIL.CONVERT_CURRENCY_AMOUNT
10293         ( p_amount                  => l_cum_order_amount
10294         , p_transactional_currency  => p_usage_curr(i).usage_curr_code
10295         , p_limit_currency          => p_limit_curr_code
10296         , p_functional_currency     => OE_Credit_Engine_GRP.GL_currency
10297         , p_conversion_date         => SYSDATE
10298         , p_conversion_type         =>
10299                                     p_credit_check_rule_rec.conversion_type
10300         );
10301 
10302 
10303       l_limit_cum_order_hold_amount :=
10304         OE_CREDIT_CHECK_UTIL.CONVERT_CURRENCY_AMOUNT
10305            ( p_amount                  =>l_cum_order_hold_amount
10306            , p_transactional_currency  => p_usage_curr(i).usage_curr_code
10307            , p_limit_currency          => p_limit_curr_code
10308            , p_functional_currency     => OE_Credit_Engine_GRP.GL_currency
10309            , p_conversion_date         => SYSDATE
10310            , p_conversion_type         =>
10311                  p_credit_check_rule_rec.conversion_type
10312            );
10313 
10314       l_limit_cum_ar_amount :=
10315         OE_CREDIT_CHECK_UTIL.CONVERT_CURRENCY_AMOUNT
10316            ( p_amount                  => l_cum_ar_amount
10317            , p_transactional_currency  => p_usage_curr(i).usage_curr_code
10318            , p_limit_currency          => p_limit_curr_code
10319            , p_functional_currency     => OE_Credit_Engine_GRP.GL_currency
10320            , p_conversion_date         => SYSDATE
10321            , p_conversion_type         =>
10322               p_credit_check_rule_rec.conversion_type
10323            );
10324 
10325       l_order_amount := l_order_amount +
10326                NVL(l_limit_cum_order_amount,0) ;
10327 
10328       l_order_hold_amount := l_order_hold_amount +
10329                 NVL(l_limit_cum_order_hold_amount,0) ;
10330 
10331       l_ar_amount := l_ar_amount +
10332                 NVL(l_limit_cum_ar_amount,0) ;
10333 
10334     END IF;
10335 
10336     IF G_debug_flag = 'Y'
10337     THEN
10338       OE_DEBUG_PUB.ADD(' l_limit_total_exposure = '
10339                       || l_limit_total_exposure );
10340       OE_DEBUG_PUB.ADD(' l_total_exposure       = '|| l_total_exposure );
10341     END IF;
10342 
10343     l_limit_total_exposure     := 0;
10344     l_usage_total_exposure     := 0;
10345     l_cum_uninv_order_total    := 0;
10346 
10347     l_cum_total_on_order       := 0;
10348     l_total_on_order           := 0;
10349     l_uninvoiced_hdr_freight1  := 0;
10350     l_uninvoiced_hdr_freight2  := 0;
10351 
10352     l_cum_total_commitment     := 0;
10353     l_total_commitment         := 0;
10354 
10355     l_cum_payments_at_risk     := 0;
10356     l_payments_at_risk         := 0;
10357     l_payments_at_risk_br      := 0;
10358 
10359     l_cum_total_from_ar        := 0;
10360     l_total_from_ar            := 0;
10361     l_total_from_br            := 0;
10362 
10363     l_cum_external_exposure    := 0;
10364     l_external_exposure        := 0;
10365 
10366     l_cum_total_no_hold        := 0;
10367     l_total_no_hold            := 0;
10368     l_no_hold_hdr_freight1     := 0;
10369     l_no_hold_hdr_freight2     := 0;
10370 
10371     l_cum_total_on_hold        := 0;
10372     l_total_on_hold            := 0;
10373     l_hold_hdr_freight1        := 0;
10374     l_hold_hdr_freight2        := 0;
10375 
10376     l_cum_order_amount         := 0;
10377     l_cum_order_hold_amount    := 0 ;
10378     l_cum_ar_amount            := 0 ;
10379 
10380     l_limit_cum_order_amount           := 0;
10381     l_limit_cum_order_hold_amount      := 0 ;
10382     l_limit_cum_ar_amount              := 0 ;
10383 
10384     IF G_debug_flag = 'Y'
10385     THEN
10386       OE_DEBUG_PUB.Add('--------------------------');
10387       OE_DEBUG_PUB.Add(' ');
10388     END IF;
10389 
10390     END LOOP ; -- CURRENCY LOOP
10391 
10392   ELSE -- SITE
10393     IF G_debug_flag = 'Y'
10394     THEN
10395       OE_DEBUG_PUB.Add('Get_order_Exposure SITE : ',1);
10396     END IF;
10397 
10398     l_current_usage_cur := NULL ;
10399 
10400     FOR i IN 1..p_usage_curr.count
10401     LOOP
10402       l_current_usage_cur := NULL ;
10403 
10404       IF G_debug_flag = 'Y'
10405       THEN
10406         OE_DEBUG_PUB.ADD('  ');
10407         OE_DEBUG_PUB.ADD('############################### ');
10408         OE_DEBUG_PUB.ADD('USAGE CURR = '|| p_usage_curr(i).usage_curr_code );
10409         OE_DEBUG_PUB.ADD('############################### ');
10410         OE_DEBUG_PUB.ADD('  ');
10411         OE_DEBUG_PUB.ADD('l_current_usage_cur = '||
10412                   l_current_usage_cur );
10413         OE_DEBUG_PUB.ADD('  ');
10414         OE_DEBUG_PUB.ADD('.');
10415       END IF;
10416 
10417       l_current_usage_cur := p_usage_curr(i).usage_curr_code ;
10418 
10419       -- get site external exposure
10420       IF l_incl_external_exposure_flag = 'Y'
10421       THEN
10422         OE_DEBUG_PUB.Add(' Get site external exposure balance ');
10423 
10424         OPEN site_external_exposure_csr (p_usage_curr(i).usage_curr_code);
10425         FETCH site_external_exposure_csr INTO l_external_exposure;
10426         IF site_external_exposure_csr%NOTFOUND
10427         THEN
10428           OE_DEBUG_PUB.Add(' No external exposure balance found');
10429           l_external_exposure := 0;
10430         END IF;
10431         CLOSE site_external_exposure_csr;
10432       END IF;
10433       l_cum_external_exposure := l_cum_external_exposure +
10434                                  NVL(l_external_exposure, 0);
10435 
10436       IF l_open_ar_balance_flag = 'Y'
10437       THEN
10438         IF G_debug_flag = 'Y'
10439         THEN
10440           OE_DEBUG_PUB.Add(' Get site_ar_balance ');
10441         END IF;
10442 
10443         OPEN site_ar_balance (p_usage_curr(i).usage_curr_code);
10444         FETCH site_ar_balance INTO l_total_from_ar;
10445         IF site_ar_balance%NOTFOUND
10446         THEN
10447           l_total_from_ar := 0 ;
10448           OE_DEBUG_PUB.Add(' No site_ar_balance found ');
10449         END IF;
10450 
10451         CLOSE site_ar_balance;
10452       END IF;
10453 
10454       IF l_include_risk_flag = 'Y'
10455       THEN
10456         IF G_debug_flag = 'Y'
10457         THEN
10458           OE_DEBUG_PUB.Add(' Get site_pay_risk ');
10459         END IF;
10460         OPEN site_pay_risk (p_usage_curr(i).usage_curr_code);
10461         FETCH site_pay_risk INTO l_payments_at_risk;
10462         IF site_pay_risk%NOTFOUND
10463         THEN
10464           l_payments_at_risk := 0 ;
10465           OE_DEBUG_PUB.Add(' No site_pay_risk found ');
10466         END IF;
10467 
10468         CLOSE site_pay_risk;
10469       END IF;
10470 
10471       l_drawee_site_use_id := NULL ;
10472 ----------------------------- BR ------------------------
10473       IF l_open_ar_balance_flag = 'Y'
10474       THEN
10475         l_drawee_site_use_id :=
10476            oe_credit_check_util.get_drawee_site_use_id ( p_site_use_id);
10477       END IF;
10478 
10479       IF G_debug_flag = 'Y'
10480       THEN
10481         OE_DEBUG_PUB.Add(' l_drawee_site_use_id ==> '|| l_drawee_site_use_id );
10482       END IF;
10483 
10484       IF l_drawee_site_use_id is NOT NULL
10485       THEN
10486         IF l_open_ar_balance_flag = 'Y'
10487         THEN
10488           IF G_debug_flag = 'Y'
10489           THEN
10490              OE_DEBUG_PUB.Add(' Get site_br_balance ');
10491           END IF;
10492           OPEN site_br_balance (p_usage_curr(i).usage_curr_code);
10493           FETCH site_br_balance INTO l_total_from_br;
10494           IF site_br_balance%NOTFOUND
10495           THEN
10496             l_total_from_br := 0 ;
10497             OE_DEBUG_PUB.Add(' No site_br_balance found ');
10498           END IF;
10499 
10500           CLOSE site_br_balance;
10501         END IF;
10502 
10503         IF l_include_risk_flag = 'Y'
10504         THEN
10505           IF G_debug_flag = 'Y'
10506           THEN
10507             OE_DEBUG_PUB.Add(' Get site_br_pay_risk ');
10508           END IF;
10509           OPEN site_br_pay_risk (p_usage_curr(i).usage_curr_code);
10510           FETCH site_br_pay_risk INTO l_payments_at_risk_br;
10511           IF site_br_pay_risk%NOTFOUND
10512           THEN
10513             l_payments_at_risk_br := 0 ;
10514             OE_DEBUG_PUB.Add(' No site_pay_risk found ');
10515           END IF;
10516 
10517           CLOSE site_br_pay_risk;
10518         END IF; --ar
10519       ELSE
10520         IF G_debug_flag = 'Y'
10521         THEN
10522          OE_DEBUG_PUB.Add(' No site BR required ');
10523         END IF;
10524       END IF;
10525 --vto2
10526       IF l_uninvoiced_orders_flag = 'Y'
10527       THEN
10528         BEGIN
10529           IF G_debug_flag = 'Y'
10530           THEN
10531             OE_DEBUG_PUB.Add(' Begin OM Exposure for site ');
10532           END IF;
10533 
10534           IF OE_Commitment_PVT.Do_Commitment_Sequencing THEN
10535             IF G_debug_flag = 'Y'
10536             THEN
10537               OE_DEBUG_PUB.Add('  site_commitments ');
10538             END IF;
10539 
10540             OPEN site_commitment_total (p_usage_curr(i).usage_curr_code);
10541             FETCH site_commitment_total INTO l_total_commitment ;
10542             IF site_commitment_total%NOTFOUND
10543             THEN
10544               l_total_commitment := 0 ;
10545               OE_DEBUG_PUB.Add('No site commitments found ');
10546             END IF;
10547 
10548             CLOSE site_commitment_total ;
10549           END IF;
10550 
10551           IF l_orders_on_hold_flag = 'Y'
10552           THEN
10553 
10554             ----added for Returns
10555             IF l_include_returns_flag='N'
10556             THEN
10557               -----returns are not included
10558 
10559               IF G_debug_flag = 'Y'
10560               THEN
10561                 OE_DEBUG_PUB.Add(' Get site_uninvoiced_orders,site_uninvoiced_orders ');
10562               END IF;
10563 
10564               OPEN site_uninvoiced_orders(p_usage_curr(i).usage_curr_code);
10565               FETCH site_uninvoiced_orders INTO l_total_on_order;
10566 
10567               IF site_uninvoiced_orders%NOTFOUND
10568               THEN
10569                 l_total_on_order := 0 ;
10570                 OE_DEBUG_PUB.Add(' No site_uninvoiced_orders found ');
10571               END IF;
10572 
10573               CLOSE site_uninvoiced_orders;
10574 
10575             ELSE
10576               -----returns are included
10577 
10578               IF G_debug_flag = 'Y'
10579               THEN
10580                 OE_DEBUG_PUB.Add(' open site_uninvoiced_orders_ret ');
10581               END IF;
10582 
10583               OPEN site_uninvoiced_orders_ret(p_usage_curr(i).usage_curr_code);
10584               FETCH site_uninvoiced_orders_ret INTO l_total_on_order;
10585 
10586               IF site_uninvoiced_orders_ret%NOTFOUND
10587               THEN
10588                 l_total_on_order := 0 ;
10589                 OE_DEBUG_PUB.Add(' No site_uninvoiced_orders found ');
10590               END IF;
10591 
10592               CLOSE site_uninvoiced_orders_ret;
10593 
10594             END IF; ---end of checking if returns are included
10595 
10596             IF l_freight_charges_flag ='Y'
10597             THEN
10598 
10599               ----added for Returns
10600               IF l_include_returns_flag='N'
10601               THEN
10602                 -----returns are not included
10603                 IF G_debug_flag = 'Y'
10604                 THEN
10605                   OE_DEBUG_PUB.Add(' Get site_uninv_hdr_freight1 ');
10606                 END IF;
10607 
10608                 OPEN site_uninv_hdr_freight1(p_usage_curr(i).usage_curr_code);
10609                 FETCH site_uninv_hdr_freight1 INTO l_uninvoiced_hdr_freight1;
10610 
10611                 IF site_uninv_hdr_freight1%NOTFOUND
10612                 THEN
10613                   l_uninvoiced_hdr_freight1 := 0 ;
10614                   OE_DEBUG_PUB.Add(' No site_uninv_hdr_freight1 found ');
10615                 END IF;
10616 
10617                 CLOSE site_uninv_hdr_freight1;
10618 
10619                 IF G_debug_flag = 'Y'
10620                 THEN
10621                   OE_DEBUG_PUB.Add(' Get site_uninv_hdr_freight2 ');
10622                 END IF;
10623 
10624                 OPEN site_uninv_hdr_freight2(p_usage_curr(i).usage_curr_code);
10625 
10626                 FETCH site_uninv_hdr_freight2 INTO l_uninvoiced_hdr_freight2;
10627 
10628                 IF site_uninv_hdr_freight2%NOTFOUND
10629                 THEN
10630                   l_uninvoiced_hdr_freight2 := 0 ;
10631                   OE_DEBUG_PUB.Add(' No site_uninv_hdr_freight2 found ');
10632                 END IF;
10633 
10634                 CLOSE site_uninv_hdr_freight2;
10635 
10636               ELSE
10637                 -----returns are included
10638                 IF G_debug_flag = 'Y'
10639                 THEN
10640                   OE_DEBUG_PUB.Add(' Get site_uninv_hdr_freight1_ret ');
10641                 END IF;
10642 
10643                 OPEN site_uninv_hdr_freight1_ret(p_usage_curr(i).usage_curr_code);
10644                 FETCH site_uninv_hdr_freight1_ret INTO l_uninvoiced_hdr_freight1;
10645 
10646                 IF site_uninv_hdr_freight1_ret%NOTFOUND
10647                 THEN
10648                   l_uninvoiced_hdr_freight1 := 0 ;
10649                   OE_DEBUG_PUB.Add(' No site_uninv_hdr_freight1 found ');
10650                 END IF;
10651 
10652                 CLOSE site_uninv_hdr_freight1_ret;
10653 
10654                 IF G_debug_flag = 'Y'
10655                 THEN
10656                   OE_DEBUG_PUB.Add(' Get site_uninv_hdr_freight2_ret ');
10657                 END IF;
10658 
10659                 OPEN site_uninv_hdr_freight2_ret(p_usage_curr(i).usage_curr_code);
10660 
10661                 FETCH site_uninv_hdr_freight2_ret INTO l_uninvoiced_hdr_freight2;
10662 
10663                 IF site_uninv_hdr_freight2_ret%NOTFOUND
10664                 THEN
10665                   l_uninvoiced_hdr_freight2 := 0 ;
10666                   OE_DEBUG_PUB.Add(' No site_uninv_hdr_freight2_ret found ');
10667                 END IF;
10668 
10669                 CLOSE site_uninv_hdr_freight2_ret;
10670 
10671               END IF; ----end of checking if returns are included
10672 
10673             END IF; -- freight = Y
10674           ELSE -- do not include orders on hold
10675 
10676             ----added for Returns
10677             IF l_include_returns_flag='N'
10678             THEN
10679               -----returns are not included
10680 
10681               IF G_debug_flag = 'Y'
10682               THEN
10683                 OE_DEBUG_PUB.Add(' Get site_orders_not_on_hold ');
10684               END IF;
10685 
10686               OPEN site_orders_not_on_hold (p_usage_curr(i).usage_curr_code);
10687 
10688               FETCH site_orders_not_on_hold INTO l_total_no_hold;
10689 
10690               IF site_orders_not_on_hold%NOTFOUND
10691               THEN
10692                 l_total_no_hold := 0 ;
10693                 OE_DEBUG_PUB.Add(' No site orders not on hold found ');
10694               END IF;
10695 
10696               CLOSE site_orders_not_on_hold;
10697               -- Get orders on hold amount if need_exposure_details is enabled
10698               IF l_need_exposure_details = 'Y'
10699               THEN
10700                 IF G_debug_flag = 'Y'
10701                 THEN
10702                   OE_DEBUG_PUB.Add(' Get site_orders_on_hold ');
10703                 END IF;
10704 
10705                 OPEN site_orders_on_hold (p_usage_curr(i).usage_curr_code);
10706                 FETCH site_orders_on_hold INTO l_total_on_hold;
10707 
10708                 IF site_orders_on_hold%NOTFOUND
10709                 THEN
10710                   l_total_on_hold := 0 ;
10711                   OE_DEBUG_PUB.Add(' No site orders on hold found ');
10712                 END IF;
10713 
10714                 CLOSE site_orders_on_hold;
10715               END IF;
10716 
10717             ELSE
10718               -----returns are included
10719 
10720               IF G_debug_flag = 'Y'
10721               THEN
10722                 OE_DEBUG_PUB.Add(' Get site_orders_not_on_hold_ret ');
10723               END IF;
10724 
10725               OPEN site_orders_not_on_hold_ret (p_usage_curr(i).usage_curr_code);
10726 
10727               FETCH site_orders_not_on_hold_ret INTO l_total_no_hold;
10728 
10729               IF site_orders_not_on_hold_ret%NOTFOUND
10730               THEN
10731                 l_total_no_hold := 0 ;
10732                 OE_DEBUG_PUB.Add(' No site orders not on hold found ');
10733               END IF;
10734 
10735               CLOSE site_orders_not_on_hold_ret;
10736 
10737               -- Get orders on hold amount if need_exposure_details is enabled
10738               IF l_need_exposure_details = 'Y'
10739               THEN
10740                 IF G_debug_flag = 'Y'
10741                 THEN
10742                   OE_DEBUG_PUB.Add(' Get site_orders_on_hold_ret ');
10743                 END IF;
10744 
10745                 OPEN site_orders_on_hold_ret(p_usage_curr(i).usage_curr_code);
10746                 FETCH site_orders_on_hold_ret INTO l_total_on_hold;
10747 
10748                 IF site_orders_on_hold_ret%NOTFOUND
10749                 THEN
10750                   l_total_on_hold := 0 ;
10751                   OE_DEBUG_PUB.Add(' No site orders on hold found ');
10752                 END IF;
10753 
10754                 CLOSE site_orders_on_hold_ret;
10755               END IF;
10756             END IF; ----end of checking of returns are included
10757 
10758             IF l_freight_charges_flag ='Y'
10759             THEN
10760               --
10761               -- Get header freight if the site is the same as the given site
10762               -- or the site belong to the same customer as the given site
10763               -- if the credit level is CUSTOMER.
10764               --
10765 
10766               ----added for Returns
10767               IF l_include_returns_flag='N'
10768               THEN
10769                 -----returns are not included
10770                 IF G_debug_flag = 'Y'
10771                 THEN
10772                   OE_DEBUG_PUB.Add(' Get site_no_hold_hdr_freight1 ');
10773                 END IF;
10774 
10775                 OPEN site_no_hold_hdr_freight1(p_usage_curr(i).usage_curr_code);
10776                 FETCH site_no_hold_hdr_freight1 INTO l_no_hold_hdr_freight1;
10777 
10778                 IF site_no_hold_hdr_freight1%NOTFOUND
10779                 THEN
10780                   l_no_hold_hdr_freight1 := 0 ;
10781                   OE_DEBUG_PUB.Add(' No site_no_hold_hdr_freight1  found ');
10782                 END IF;
10783 
10784                 CLOSE site_no_hold_hdr_freight1;
10785 
10786                 IF G_debug_flag = 'Y'
10787                 THEN
10788                   OE_DEBUG_PUB.Add(' Get  site_no_hold_hdr_freight2 ');
10789                 END IF;
10790 
10791                 OPEN site_no_hold_hdr_freight2(p_usage_curr(i).usage_curr_code);
10792 
10793                 FETCH site_no_hold_hdr_freight2 INTO l_no_hold_hdr_freight2;
10794 
10795                 IF site_no_hold_hdr_freight2%NOTFOUND
10796                 THEN
10797                   l_no_hold_hdr_freight2 := 0 ;
10798                   OE_DEBUG_PUB.Add(' No site_no_hold_hdr_freight2 found ');
10799                 END IF;
10800 
10801                 CLOSE site_no_hold_hdr_freight2;
10802 
10803                 -- Get orders on hold amount if need_exposure_details is enabled
10804                 IF l_need_exposure_details = 'Y'
10805                 THEN
10806                   IF G_debug_flag = 'Y'
10807                   THEN
10808                     OE_DEBUG_PUB.Add(' Get site_hold_hdr_freight1 ');
10809                   END IF;
10810 
10811                   OPEN site_hold_hdr_freight1(p_usage_curr(i).usage_curr_code);
10812                   FETCH site_hold_hdr_freight1 INTO l_hold_hdr_freight1;
10813 
10814                   IF site_hold_hdr_freight1%NOTFOUND
10815                   THEN
10816                     l_hold_hdr_freight1 := 0 ;
10817                     OE_DEBUG_PUB.Add(' No site_hold_hdr_freight1  found ');
10818                   END IF;
10819 
10820                   CLOSE site_hold_hdr_freight1;
10821 
10822                   IF G_debug_flag = 'Y'
10823                   THEN
10824                     OE_DEBUG_PUB.Add(' Get site_hold_hdr_freight2 ');
10825                   END IF;
10826 
10827                   OPEN site_hold_hdr_freight2(p_usage_curr(i).usage_curr_code);
10828                   FETCH site_hold_hdr_freight2 INTO l_hold_hdr_freight2;
10829 
10830                   IF site_hold_hdr_freight2%NOTFOUND
10831                   THEN
10832                     l_hold_hdr_freight2 := 0 ;
10833                     OE_DEBUG_PUB.Add(' No site_hold_hdr_freight2 found ');
10834                   END IF;
10835                   CLOSE site_hold_hdr_freight2;
10836                 END IF; -- details freight on hold
10837               ELSE
10838                 -----returns are included
10839                 IF G_debug_flag = 'Y'
10840                 THEN
10841                   OE_DEBUG_PUB.Add(' Get site_no_hold_hdr_freight1_ret ');
10842                 END IF;
10843 
10844                 OPEN site_no_hold_hdr_freight1_ret(p_usage_curr(i).usage_curr_code);
10845                 FETCH site_no_hold_hdr_freight1_ret INTO l_no_hold_hdr_freight1;
10846 
10847                 IF site_no_hold_hdr_freight1_ret%NOTFOUND
10848                 THEN
10849                   l_no_hold_hdr_freight1 := 0 ;
10850                   OE_DEBUG_PUB.Add(' No site_no_hold_hdr_freight1  found ');
10851                 END IF;
10852 
10853                 CLOSE site_no_hold_hdr_freight1_ret;
10854 
10855                 IF G_debug_flag = 'Y'
10856                 THEN
10857                   OE_DEBUG_PUB.Add(' Get  site_no_hold_hdr_freight2_ret ');
10858                 END IF;
10859 
10860                 OPEN site_no_hold_hdr_freight2_ret(p_usage_curr(i).usage_curr_code);
10861 
10862                 FETCH site_no_hold_hdr_freight2_ret INTO l_no_hold_hdr_freight2;
10863 
10864                 IF site_no_hold_hdr_freight2_ret%NOTFOUND
10865                 THEN
10866                   l_no_hold_hdr_freight2 := 0 ;
10867                   OE_DEBUG_PUB.Add(' No site_no_hold_hdr_freight2_ret found ');
10868                 END IF;
10869 
10870                 CLOSE site_no_hold_hdr_freight2_ret;
10871 
10872                 -- Get orders on hold amount if need_exposure_details is enabled
10873                 IF l_need_exposure_details = 'Y'
10874                 THEN
10875                   IF G_debug_flag = 'Y'
10876                   THEN
10877                     OE_DEBUG_PUB.Add(' Get site_hold_hdr_freight1_ret ');
10878                   END IF;
10879 
10880                   OPEN site_hold_hdr_freight1_ret(p_usage_curr(i).usage_curr_code);
10881                   FETCH site_hold_hdr_freight1_ret INTO l_hold_hdr_freight1;
10882 
10883                   IF site_hold_hdr_freight1_ret%NOTFOUND
10884                   THEN
10885                     l_hold_hdr_freight1 := 0 ;
10886                     OE_DEBUG_PUB.Add(' No site_hold_hdr_freight1_ret  found ');
10887                   END IF;
10888 
10889                   CLOSE site_hold_hdr_freight1_ret;
10890 
10891                   IF G_debug_flag = 'Y'
10892                   THEN
10893                     OE_DEBUG_PUB.Add(' Get site_hold_hdr_freight2_ret ');
10894                   END IF;
10895 
10896                   OPEN site_hold_hdr_freight2_ret(p_usage_curr(i).usage_curr_code);
10897                   FETCH site_hold_hdr_freight2_ret INTO l_hold_hdr_freight2;
10898 
10899                   IF site_hold_hdr_freight2_ret%NOTFOUND
10900                   THEN
10901                     l_hold_hdr_freight2 := 0 ;
10902                     OE_DEBUG_PUB.Add(' No site_hold_hdr_freight2_ret found ');
10903                   END IF;
10904                   CLOSE site_hold_hdr_freight2_ret;
10905                 END IF; -- details freight on hold
10906               END IF; -----end of checking if returns are included
10907             END IF;
10908           END IF; -- Orders on hold
10909         END;
10910       ELSE
10911         IF G_debug_flag = 'Y'
10912         THEN
10913           OE_DEBUG_PUB.Add(' No OM Exposure calculation for site ',1);
10914         END IF;
10915       END IF;
10916 
10917       l_cum_total_from_ar := l_cum_total_from_ar + NVL(l_total_from_ar,0) +
10918                     NVL(l_total_from_br,0) ;
10919 
10920       l_cum_payments_at_risk := l_cum_payments_at_risk
10921                                 + NVL(l_payments_at_risk,0)
10922                                 + NVL(l_payments_at_risk_br ,0 );
10923 
10924       l_cum_total_on_order := l_cum_total_on_order + NVL(l_total_on_order,0)
10925                                   + NVL(l_uninvoiced_hdr_freight1,0)
10926                                   + NVL(l_uninvoiced_hdr_freight2,0);
10927       l_cum_total_on_hold := l_cum_total_on_hold + NVL(l_total_on_hold,0)
10928                                   + NVL(l_hold_hdr_freight1,0)
10929                                   + NVL(l_hold_hdr_freight2,0);
10930 
10931       l_cum_total_no_hold := l_cum_total_no_hold + NVL(l_total_no_hold,0)
10932                                  + NVL(l_no_hold_hdr_freight1,0)
10933                                  + NVL(l_no_hold_hdr_freight2,0);
10934 
10935       IF l_orders_on_hold_flag = 'Y' THEN
10936         l_cum_uninv_order_total := l_cum_total_on_order;
10937       ELSE
10938         l_cum_uninv_order_total := l_cum_total_no_hold;
10939       END IF;
10940 
10941       l_cum_total_commitment := l_cum_total_commitment +
10942               NVL(l_total_commitment,0);
10943 
10944       l_usage_total_exposure := NVL(l_cum_total_from_ar,0)
10945                     + NVL(l_cum_payments_at_risk,0)
10946                     + NVL(l_cum_uninv_order_total,0)
10947                     - NVL(l_cum_total_commitment,0)
10948                     + NVL(l_cum_external_exposure,0);
10949 
10950       --
10951       -- Set the detail output variables only when detail is selected.
10952       --
10953       IF l_need_exposure_details = 'Y'
10954       THEN
10955         -- Add hold amount to order amount if hold flag is not set
10956         -- because the uninvoiced order amount is not available.
10957         IF l_orders_on_hold_flag = 'Y'
10958         THEN
10959           l_cum_order_amount := l_cum_uninv_order_total -
10960                                 NVL(l_cum_total_commitment,0);
10961         ELSE
10962           l_cum_order_amount :=  l_cum_uninv_order_total
10963                                - NVL(l_cum_total_commitment,0)
10964                                + l_cum_total_on_hold;
10965         END IF;
10966         l_cum_order_hold_amount := l_cum_total_on_hold;
10967         l_cum_ar_amount         := NVL(l_cum_total_from_ar,0) +
10968                                    NVL(l_cum_payments_at_risk,0) ;
10969       END IF;
10970 
10971       IF G_debug_flag = 'Y'
10972       THEN
10973 
10974         OE_DEBUG_PUB.ADD(' l_usage_total_exposure    = '
10975                    || l_usage_total_exposure );
10976         OE_DEBUG_PUB.ADD(' l_cum_total_from_ar       = '
10977                    || l_cum_total_from_ar );
10978         OE_DEBUG_PUB.ADD(' l_total_from_ar           = '
10979                    || l_total_from_ar);
10980         OE_DEBUG_PUB.ADD(' l_total_from_br           = '
10981                    || l_total_from_br);
10982         OE_DEBUG_PUB.ADD(' l_cum_payments_at_risk    = '
10983                    || l_cum_payments_at_risk );
10984         OE_DEBUG_PUB.ADD(' l_payments_at_risk        = '
10985                    || l_payments_at_risk);
10986         OE_DEBUG_PUB.ADD(' l_payments_at_risk_br     = '
10987                    || l_payments_at_risk_br);
10988         OE_DEBUG_PUB.ADD(' l_cum_total_on_order      = '
10989                     || l_cum_total_on_order );
10990         OE_DEBUG_PUB.ADD(' l_total_on_order          = '
10991                     || l_total_on_order );
10992         OE_DEBUG_PUB.ADD(' l_uninvoiced_hdr_freight1 = '
10993                       || l_uninvoiced_hdr_freight1 );
10994         OE_DEBUG_PUB.ADD(' l_uninvoiced_hdr_freight2 = '
10995                     || l_uninvoiced_hdr_freight2 );
10996         OE_DEBUG_PUB.ADD(' l_cum_total_commitment    = '
10997                     || l_cum_total_commitment );
10998         OE_DEBUG_PUB.ADD(' l_total_commitment        = '
10999                     || l_total_commitment );
11000         OE_DEBUG_PUB.ADD(' l_usage_total_exposure    = '
11001                     || l_usage_total_exposure );
11002 
11003         -- details
11004         OE_DEBUG_PUB.ADD(' l_cum_total_on_hold       = '
11005                     || l_cum_total_on_hold );
11006         OE_DEBUG_PUB.ADD(' l_total_on_hold           = '
11007                     || l_total_on_hold );
11008         OE_DEBUG_PUB.ADD(' l_hold_hdr_freight1       = '
11009                     || l_hold_hdr_freight1 );
11010         OE_DEBUG_PUB.ADD(' l_hold_hdr_freight2       = '
11011                     || l_hold_hdr_freight2);
11012         OE_DEBUG_PUB.ADD(' l_cum_order_amount        = '
11013                     || l_cum_order_amount );
11014         OE_DEBUG_PUB.ADD(' l_cum_order_hold_amount   = '
11015                     || l_cum_order_hold_amount );
11016         OE_DEBUG_PUB.ADD(' l_cum_ar_amount           = '
11017                     || l_cum_ar_amount);
11018 
11019         -- external
11020         OE_DEBUG_PUB.ADD(' l_external_exposure       = '
11021                     || l_external_exposure );
11022         OE_DEBUG_PUB.ADD(' l_cum_external_exposure   = '
11023                     || l_cum_external_exposure );
11024 
11025         -- no holds
11026         OE_DEBUG_PUB.ADD(' l_cum_total_no_hold       = '
11027                     || l_cum_total_no_hold );
11028         OE_DEBUG_PUB.ADD(' l_total_no_hold           = '
11029                     || l_total_no_hold );
11030         OE_DEBUG_PUB.ADD(' l_no_hold_hdr_freight1    = '
11031                     || l_no_hold_hdr_freight1 );
11032         OE_DEBUG_PUB.ADD(' l_no_hold_hdr_freight2    = '
11033                     || l_no_hold_hdr_freight2);
11034 
11035         OE_DEBUG_PUB.ADD(' Call currency conversion for exposure ' );
11036 
11037         OE_DEBUG_PUB.Add(' GL_CURRENCY = '||
11038           OE_Credit_Engine_GRP.GL_currency );
11039       END IF;
11040 
11041       l_limit_total_exposure :=
11042         OE_CREDIT_CHECK_UTIL.CONVERT_CURRENCY_AMOUNT
11043         ( p_amount	            => l_usage_total_exposure
11044         , p_transactional_currency  => p_usage_curr(i).usage_curr_code
11045         , p_limit_currency          => p_limit_curr_code
11046         , p_functional_currency     => OE_Credit_Engine_GRP.GL_currency
11047         , p_conversion_date         => SYSDATE
11048         , p_conversion_type	    => p_credit_check_rule_rec.conversion_type
11049         );
11050 
11051 
11052       l_total_exposure := l_total_exposure +  NVL(l_limit_total_exposure,0) ;
11053 
11054       IF l_need_exposure_details = 'Y' THEN
11055         IF G_debug_flag = 'Y' THEN
11056           oe_debug_pub.add( ' Into p_need_exposure_details ');
11057         END IF;
11058 
11059         l_limit_cum_order_amount :=
11060         OE_CREDIT_CHECK_UTIL.CONVERT_CURRENCY_AMOUNT
11061           ( p_amount                  => l_cum_order_amount
11062           , p_transactional_currency  => p_usage_curr(i).usage_curr_code
11063           , p_limit_currency          => p_limit_curr_code
11064           , p_functional_currency     => OE_Credit_Engine_GRP.GL_currency
11065           , p_conversion_date         => SYSDATE
11066           , p_conversion_type         =>
11067                                     p_credit_check_rule_rec.conversion_type
11068           );
11069 
11070         l_limit_cum_order_hold_amount :=
11071         OE_CREDIT_CHECK_UTIL.CONVERT_CURRENCY_AMOUNT
11072            ( p_amount                  => l_cum_order_hold_amount
11073            , p_transactional_currency  => p_usage_curr(i).usage_curr_code
11074            , p_limit_currency          => p_limit_curr_code
11075            , p_functional_currency     => OE_Credit_Engine_GRP.GL_currency
11076            , p_conversion_date         => SYSDATE
11077            , p_conversion_type         =>
11078                                        p_credit_check_rule_rec.conversion_type
11079            );
11080         l_limit_cum_ar_amount :=
11081         OE_CREDIT_CHECK_UTIL.CONVERT_CURRENCY_AMOUNT
11082            ( p_amount                  => l_cum_ar_amount
11083            , p_transactional_currency  => p_usage_curr(i).usage_curr_code
11084            , p_limit_currency          => p_limit_curr_code
11085            , p_functional_currency     => OE_Credit_Engine_GRP.GL_currency
11086            , p_conversion_date         => SYSDATE
11087            , p_conversion_type         =>
11088                                        p_credit_check_rule_rec.conversion_type
11089            );
11090 
11091         l_order_amount := l_order_amount +
11092                NVL(l_limit_cum_order_amount,0) ;
11093 
11094         l_order_hold_amount := l_order_hold_amount +
11095                 NVL(l_limit_cum_order_hold_amount,0) ;
11096 
11097         l_ar_amount := l_ar_amount +
11098                 NVL(l_limit_cum_ar_amount,0) ;
11099 
11100       END IF; -- details
11101 
11102       IF G_debug_flag = 'Y'
11103       THEN
11104         OE_DEBUG_PUB.ADD(' l_limit_total_exposure = '
11105                    || l_limit_total_exposure );
11106         OE_DEBUG_PUB.ADD(' l_total_exposure       = '|| l_total_exposure );
11107       END IF;
11108 
11109 
11110       l_limit_total_exposure     := 0 ;
11111       l_usage_total_exposure     := 0 ;
11112       l_cum_total_on_order       := 0;
11113       l_cum_total_commitment     := 0;
11114       l_total_on_order           := 0;
11115       l_uninvoiced_hdr_freight1  := 0;
11116       l_uninvoiced_hdr_freight2  := 0;
11117       l_total_commitment         := 0;
11118 
11119       l_cum_payments_at_risk     := 0;
11120       l_payments_at_risk         := 0;
11121       l_payments_at_risk_br      := 0;
11122 
11123       l_cum_total_from_ar        := 0;
11124       l_total_from_ar            := 0;
11125       l_total_from_br            := 0;
11126 
11127       l_external_exposure        := 0;
11128       l_cum_external_exposure    := 0;
11129 
11130       l_hold_hdr_freight1        := 0;
11131       l_hold_hdr_freight2        := 0;
11132       l_total_on_hold            := 0;
11133       l_cum_total_on_hold        := 0;
11134 
11135       l_no_hold_hdr_freight1     := 0;
11136       l_no_hold_hdr_freight2     := 0;
11137       l_total_no_hold            := 0;
11138       l_cum_total_no_hold        := 0;
11139 
11140       l_cum_order_amount           := 0;
11141       l_cum_order_hold_amount      := 0 ;
11142       l_cum_ar_amount              := 0 ;
11143 
11144       l_limit_cum_order_amount           := 0;
11145       l_limit_cum_order_hold_amount      := 0 ;
11146       l_limit_cum_ar_amount              := 0 ;
11147 
11148       IF G_debug_flag = 'Y'
11149       THEN
11150         OE_DEBUG_PUB.Add(' ');
11151         OE_DEBUG_PUB.Add('=====================================');
11152         OE_DEBUG_PUB.Add(' ');
11153       END IF;
11154 
11155     END LOOP; -- currency loop
11156 
11157     OE_DEBUG_PUB.ADD('** Out NOCOPY of usage currency loop ' );
11158 
11159   END IF;
11160 
11161   l_current_usage_cur := NULL;
11162 
11163   -- Header ID can be passed as NULL to get the
11164   -- customer exposure
11165 
11166   IF p_header_id is NOT NULL
11167   THEN
11168     BEGIN
11169       -- Check the global. Get the current order value fromt the global
11170       -- this global would be set when calculating the transaction amount.
11171 
11172       l_limit_current_order  :=
11173               NVL(OE_CREDIT_CHECK_UTIL.g_current_order_value,0);
11174 
11175       IF G_debug_flag = 'Y'
11176       THEN
11177         OE_DEBUG_PUB.Add(' Current order value is available already = '
11178              || OE_CREDIT_CHECK_UTIL.g_current_order_value );
11179         OE_DEBUG_PUB.Add(' l_limit_current_order = '||
11180                  l_limit_current_order );
11181       END IF;
11182     END ; -- p_header_id
11183 
11184   ELSE
11185     l_limit_current_order := 0 ;
11186 
11187     OE_DEBUG_PUB.Add(' P_header_id is NULL, No current order check ',1);
11188 
11189   END IF ; -- p_header_id is NULL
11190 
11191   IF G_debug_flag = 'Y'
11192   THEN
11193     OE_DEBUG_PUB.Add(' l_limit_current_order = '|| l_limit_current_order );
11194     OE_DEBUG_PUB.Add(' l_order_amount        = '|| l_order_amount);
11195     OE_DEBUG_PUB.Add(' l_order_hold_amount   = '|| l_order_hold_amount);
11196     OE_DEBUG_PUB.Add(' l_ar_amount           = '|| l_ar_amount);
11197   END IF;
11198 
11199   x_total_exposure := NVL(l_total_exposure,0) + NVL(l_limit_current_order,0) ;
11200 
11201   IF l_need_exposure_details = 'Y'
11202   THEN
11203     x_order_amount      := l_order_amount;
11204     x_order_hold_amount := l_order_hold_amount;
11205     x_ar_amount         := l_ar_amount;
11206   END IF;
11207 
11208   OE_CREDIT_CHECK_UTIL.g_current_order_value := NULL ;
11209 
11210   --bug# 2714553
11211   OE_CREDIT_INTERFACE_UTIL.Get_exposure_amount
11212           ( p_header_id              => p_header_id
11213           , p_customer_id            => p_customer_id
11214           , p_site_use_id            => p_site_use_id
11215           , p_credit_check_rule_rec  => p_credit_check_rule_rec
11216           , p_system_parameter_rec   => p_system_parameter_rec
11217           , p_credit_level           => p_credit_level
11218           , p_limit_curr_code        => p_limit_curr_code
11219           , p_usage_curr             => p_usage_curr
11220           , p_global_exposure_flag   => p_global_exposure_flag
11221           , x_exposure_amount        => l_exposure_amount
11222           , x_conversion_status      => x_conversion_status
11223           , x_return_status          => x_return_status
11224          );
11225 
11226   IF G_debug_flag = 'Y'
11227   THEN
11228      OE_DEBUG_PUB.Add('after get_exposure_amount ');
11229      OE_DEBUG_PUB.Add(' x_return_status       = '|| x_return_status );
11230      OE_DEBUG_PUB.Add(' l_exposure_amount     = '|| l_exposure_amount );
11231      OE_DEBUG_PUB.Add(' err cur tbl count     = '|| x_conversion_status.COUNT );
11232      OE_DEBUG_PUB.Add(' l_limit_current_order = '|| l_limit_current_order );
11233      OE_DEBUG_PUB.Add(' l_total_exposure      = '|| l_total_exposure );
11234      OE_DEBUG_PUB.Add(' x_total_exposure      = '|| x_total_exposure );
11235   END IF;
11236 
11237   x_total_exposure := NVL(x_total_exposure,0) + NVL(l_exposure_amount,0) ;
11238 
11239   IF x_conversion_status.COUNT <> 0
11240   THEN
11241      FOR f IN 1..x_conversion_status.COUNT
11242      LOOP
11243          IF G_debug_flag = 'Y'
11244          THEN
11245             OE_DEBUG_PUB.ADD('!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!');
11246             OE_DEBUG_PUB.ADD('!!!!! Exchange rate between '||x_conversion_status(f).usage_curr_code
11247                    ||' and credit limit currency '
11248                    ||p_limit_curr_code
11249                    ||' is missing for conversion type '
11250              || NVL(p_credit_check_rule_rec.user_conversion_type,'Corporate'),1);
11251             OE_DEBUG_PUB.ADD('!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!');
11252          END IF;
11253      END LOOP;
11254   ELSIF x_return_status = FND_API.G_RET_STS_ERROR
11255   THEN
11256      RAISE FND_API.G_EXC_ERROR;
11257   ELSIF x_return_status = FND_API.G_RET_STS_UNEXP_ERROR
11258   THEN
11259      RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
11260   END IF;
11261   --bug# 2714553
11262 
11263   IF G_debug_flag = 'Y'
11264   THEN
11265     OE_DEBUG_PUB.Add(' ');
11266     OE_DEBUG_PUB.Add('XX*****-------------##########-------------------XX' );
11267     OE_DEBUG_PUB.Add(' ');
11268     OE_DEBUG_PUB.Add('Final Total Exposure amount  = '|| x_total_exposure,1);
11269     OE_DEBUG_PUB.Add(' ');
11270     OE_DEBUG_PUB.Add('XX-------------- ##########------------------------XX' );
11271     OE_DEBUG_PUB.Add(' ');
11272     OE_DEBUG_PUB.ADD('OEXUCRCB: OUT NOCOPY Get_order_exposure',1);
11273   END IF;
11274 
11275 EXCEPTION
11276   WHEN  GL_CURRENCY_API.NO_RATE THEN
11277     OE_DEBUG_PUB.ADD('EXCEPTION: GL_CURRENCY_API.NO_RATE in get_order_exp',1);
11278     OE_DEBUG_PUB.ADD('l_current_usage_cur = '||
11279               l_current_usage_cur );
11280     x_conversion_status(1).usage_curr_code := l_current_usage_cur ;
11281 
11282     fnd_message.set_name('ONT', 'OE_CONVERSION_ERROR');
11283     OE_DEBUG_PUB.ADD('Exception table added ');
11284     IF cust_external_exposure_csr%ISOPEN THEN
11285       CLOSE cust_external_exposure_csr;
11286     END IF;
11287     IF site_external_exposure_csr%ISOPEN THEN
11288       CLOSE site_external_exposure_csr;
11289     END IF;
11290   WHEN OTHERS THEN
11291      x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
11292      IF OE_MSG_PUB.Check_Msg_Level(OE_MSG_PUB.G_MSG_LVL_UNEXP_ERROR) THEN
11293         OE_MSG_PUB.Add_Exc_Msg (G_PKG_NAME, '
11294                                 Get_order_exposure');
11295      END IF;
11296      IF cust_external_exposure_csr%ISOPEN THEN
11297        CLOSE cust_external_exposure_csr;
11298      END IF;
11299      IF site_external_exposure_csr%ISOPEN THEN
11300        CLOSE site_external_exposure_csr;
11301      END IF;
11302      RAISE;
11303 
11304 END Get_order_exposure ;
11305 
11306 
11307 --========================================================================
11308 -- PROCEDURE : Currency_List
11309 -- Comments  : This procedure is used by the credit snapshot report to derive
11310 --             a comma delimited string of currencies defined in credit usage
11311 -- Parameters: c_entity_type       IN    'CUSTOMER' or 'SITE'
11312 --	       c_entity_id         IN    Customer_Id or Site_Id
11313 --             c_trx_curr_code     IN    Transaction Currency
11314 --             l_limit_curr_code   OUT NOCOPY   Currency Limit used for credit checking
11315 --             Curr_list           OUT NOCOPY   Comma delimited string of currencies
11316 --                                       covered by limit currency code
11317 --========================================================================
11318 Procedure currency_list (
11319    c_entity_type          IN  VARCHAR2
11320  , c_entity_id            IN  NUMBER
11321  , c_trx_curr_code        IN  VARCHAR2
11322  , l_limit_curr_code      OUT NOCOPY VARCHAR2
11323  , l_default_limit_flag   OUT NOCOPY VARCHAR2
11324  , Curr_list              OUT NOCOPY VARCHAR2) IS
11325 
11326   i                       NUMBER;
11327   l_return_status         NUMBER;
11328   l_CREDIT_CHECK_FLAG     VARCHAR2(1);
11329   l_OVERALL_CREDIT_LIMIT  NUMBER;
11330   l_TRX_CREDIT_LIMIT      NUMBER;
11331   l_include_all_flag      VARCHAR2(1);
11332   l_curr_tbl     OE_CREDIT_CHECK_UTIL.curr_tbl_type;
11333   l_global_exposure_flag  VARCHAR2(1);
11334   l_credit_limit_party_id  NUMBER ;
11335   l_use_credit_hierarchy   varchar2(1);
11336 
11337 
11338 Begin
11339 
11340  l_limit_curr_code := NULL ;
11341 
11342   for i in 1 .. l_curr_tbl.COUNT
11343   LOOP
11344     if i = 1 then null;
11345     else
11346       curr_list := concat(curr_list,',');
11347     end if;
11348     curr_list := concat(curr_list, l_curr_tbl(i).usage_curr_code);
11349   END LOOP;
11350 
11351 END Currency_List;
11352 
11353 
11354 
11355 ---========================================================================
11356 -- PROCEDURE : CONVERT_CURRENCY_AMOUNT
11357 -- Comments  :
11358 -- 21-Jun-2001 - rajkrish updated with standard dbg messages
11359 ---========================================================================
11360 
11361 FUNCTION CONVERT_CURRENCY_AMOUNT
11362 ( p_amount	                IN NUMBER := 0
11363 , p_transactional_currency 	IN VARCHAR2
11364 , p_limit_currency	        IN VARCHAR2
11365 , p_functional_currency	        IN VARCHAR2
11366 , p_conversion_date	        IN DATE := SYSDATE
11367 , p_conversion_type	        IN VARCHAR2 := 'Corporate'
11368 ) RETURN NUMBER
11369 IS
11370 
11371   l_converted_amount NUMBER;
11372   l_denominator NUMBER;
11373   l_numerator   NUMBER;
11374   l_rate        NUMBER;
11375 
11376 BEGIN
11377   BEGIN
11378     IF G_debug_flag = 'Y'
11379     THEN
11380       OE_DEBUG_PUB.ADD('OEXUCRCB: IN CONVERT_CURRENCY_AMOUNT ');
11381       OE_DEBUG_PUB.ADD('  ');
11382       OE_DEBUG_PUB.ADD('------------------------------------');
11383       OE_DEBUG_PUB.ADD('p_amount = '|| p_amount );
11384       OE_DEBUG_PUB.ADD('p_transactional_currency = '
11385                     || p_transactional_currency );
11386       OE_DEBUG_PUB.ADD('p_limit_currency = '|| p_limit_currency );
11387       OE_DEBUG_PUB.ADD('p_functional_currency = '|| p_functional_currency );
11388       OE_DEBUG_PUB.ADD('p_conversion_date = '|| p_conversion_date );
11389       OE_DEBUG_PUB.ADD('p_conversion_type = '|| p_conversion_type );
11390       OE_DEBUG_PUB.ADD('  ');
11391       OE_DEBUG_PUB.ADD('------------------------------------');
11392      END IF;
11393 
11394     -- The conversion amount can be les than or greater than
11395     -- 0. For maounts equal to 0, there is not need for
11396     -- conversion to proceed and call GL API's
11397 
11398     IF NVL(p_amount,0) <> 0
11399     THEN
11400       gl_currency_api.convert_closest_amount
11401       (  x_from_currency    =>  p_transactional_currency
11402       ,  x_to_currency      =>  p_limit_currency
11403       ,  x_conversion_date  =>  p_conversion_date
11404       ,  x_conversion_type  =>  p_conversion_type
11405       ,  x_amount           =>  p_amount
11406       ,  x_user_rate        =>  NULL
11407       ,  x_max_roll_days    =>  -1
11408       ,  x_converted_amount =>  l_converted_amount
11409       ,  x_denominator      =>  l_denominator
11410       ,  x_numerator        =>  l_numerator
11411       ,  x_rate             =>  l_rate
11412       );
11413 
11414     ELSE
11415       l_converted_amount := 0 ;
11416       IF G_debug_flag = 'Y'
11417       THEN
11418         OE_DEBUG_PUB.ADD(' No conversion, amount 0 ');
11419       END IF;
11420     END IF;
11421 
11422     IF G_debug_flag = 'Y'
11423     THEN
11424       OE_DEBUG_PUB.ADD('Convert amt using trx curr = '|| l_converted_amount );
11425     END IF;
11426 
11427     return l_converted_amount;
11428 
11429     EXCEPTION
11430     WHEN  GL_CURRENCY_API.NO_RATE  THEN
11431 
11432     DECLARE
11433       l_functional_amount  NUMBER;
11434     BEGIN
11435       IF G_debug_flag = 'Y'
11436       THEN
11437         OE_DEBUG_PUB.ADD(' Convert using functional curr traingulate');
11438       END IF;
11439 
11440       gl_currency_api.convert_closest_amount
11441         (  x_from_currency    =>  p_transactional_currency
11442         ,  x_to_currency      =>  p_functional_currency
11443         ,  x_conversion_date  =>  p_conversion_date
11444         ,  x_conversion_type  =>  p_conversion_type
11445         ,  x_amount           =>  p_amount
11446         ,  x_user_rate        =>  NULL
11447         ,  x_max_roll_days    =>  -1
11448         ,  x_converted_amount =>  l_functional_amount
11449         ,  x_denominator      =>  l_denominator
11450         ,  x_numerator        =>  l_numerator
11451         ,  x_rate             =>  l_rate
11452         );
11453 
11454       gl_currency_api.convert_closest_amount
11455         (  x_from_currency    =>  p_functional_currency
11456         ,  x_to_currency      =>  p_limit_currency
11457         ,  x_conversion_date  =>  p_conversion_date
11458         ,  x_conversion_type  =>  p_conversion_type
11459         ,  x_amount           =>  l_functional_amount
11460         ,  x_user_rate        =>  NULL
11461         ,  x_max_roll_days    =>  -1
11462         ,  x_converted_amount =>  l_converted_amount
11463         ,  x_denominator      =>  l_denominator
11464         ,  x_numerator        =>  l_numerator
11465         ,  x_rate             =>  l_rate
11466         );
11467 
11468       IF G_debug_flag = 'Y'
11469       THEN
11470         OE_DEBUG_PUB.ADD('Convert amt using functional curr = '
11471             || l_converted_amount );
11472       END IF;
11473       return l_converted_amount;
11474 
11475     END;
11476   END;
11477   IF G_debug_flag = 'Y'
11478   THEN
11479     OE_DEBUG_PUB.ADD('OEXUCRCB: OUT NOCOPY CONVERT_CURRENCY_AMOUNT ');
11480   END IF;
11481 END CONVERT_CURRENCY_AMOUNT;
11482 
11483 --
11484 --
11485 ------------------------------------------------------------
11486 -- PROCEDURE: SEND_CREDIT_HOLD_NTF
11487 -- COMMENTS:
11488 ------------------------------------------------------------
11489 PROCEDURE SEND_CREDIT_HOLD_NTF
11490   (p_header_rec        IN  OE_ORDER_PUB.header_rec_type
11491   ,p_credit_hold_level IN  OE_CREDIT_CHECK_RULES.credit_hold_level_code%TYPE
11492   ,p_cc_hold_comment   IN  OE_HOLD_SOURCES.hold_comment%TYPE
11493   ,x_return_status     OUT NOCOPY VARCHAR2
11494   )
11495 IS
11496 
11497   -- Cursor to get workflow user
11498   CURSOR wfn_to IS
11499   SELECT user_name
11500   FROM   fnd_user
11501   WHERE  user_id = p_header_rec.created_by ;
11502 
11503   -- Cursor to get the order type
11504   CURSOR c_order_type IS
11505   SELECT name
11506   FROM   oe_transaction_types_vl
11507   WHERE  transaction_type_id = p_header_rec.order_type_id;
11508 
11509   l_order_hold_comment VARCHAR2(2000);
11510   l_line_hold_count    NUMBER := 0;
11511   l_notification_id    NUMBER;
11512   l_wfn_to             VARCHAR2(100);
11513   l_order_type         VARCHAR2(30) := NULL;
11514   l_msg_count          NUMBER;
11515   l_msg_data           VARCHAR2(3000) ;
11516 
11517 BEGIN
11518   IF G_debug_flag = 'Y'
11519   THEN
11520     oe_debug_pub.ADD('In  OE_CREDIT_CHECK_UTIL.Send_Credit_Hold_NTF', 1);
11521   END IF;
11522 
11523   -- Initialize return status to success
11524   x_return_status := FND_API.G_RET_STS_SUCCESS;
11525 
11526   -- Get notification approver -- Created by
11527 
11528   BEGIN
11529     IF G_debug_flag = 'Y'
11530     THEN
11531       oe_debug_pub.ADD('Get the Notification approver ', 2);
11532     END IF;
11533 
11534     --Code added for ER 2925718
11535     l_wfn_to := fnd_profile.Value('OE_CC_NTF_RECIPIENT');
11536 
11537     IF l_wfn_to IS NULL THEN
11538     --Code added newly is ended for ER 2925718
11539     OPEN wfn_to;
11540     FETCH wfn_to INTO l_wfn_to;
11541     IF wfn_to%NOTFOUND
11542     THEN
11543      l_wfn_to := NUll ;
11544     END IF;
11545     CLOSE wfn_to;
11546     END IF;
11547   END ;
11548 
11549   IF G_debug_flag = 'Y'
11550   THEN
11551     oe_debug_pub.ADD(' l_wfn_to = '|| l_wfn_to, 2 );
11552   END IF;
11553 
11554   -- Set message attributes and send notification
11555   IF l_wfn_to is not NULL
11556   THEN
11557     BEGIN
11558       IF G_debug_flag = 'Y'
11559       THEN
11560         oe_debug_pub.ADD('Set the order type ', 2);
11561       END IF;
11562 
11563       OPEN c_order_type;
11564       FETCH c_order_type INTO l_order_type;
11565       IF c_order_type%NOTFOUND
11566       THEN
11567         l_wfn_to := NUll ;
11568       END IF;
11569       CLOSE c_order_type;
11570     END ;
11571 
11572     IF NVL(p_credit_hold_level, 'ORDER') = 'ORDER'
11573     THEN
11574       l_order_hold_comment := p_cc_hold_comment;
11575       l_line_hold_count := NULL;
11576     ELSIF p_credit_hold_level = 'LINE'
11577     THEN
11578       FND_MESSAGE.Set_Name('ONT','OE_CC_HLD_GENERAL_MSG');
11579       l_order_hold_comment := SUBSTR(FND_MESSAGE.GET,1,2000);
11580       l_line_hold_count := OE_CREDIT_CHECK_LINES_PVT.G_line_hold_count;
11581     END IF;
11582 
11583     IF G_debug_flag = 'Y'
11584     THEN
11585       oe_debug_pub.ADD(' Before send notification ', 2);
11586     END IF;
11587 
11588     l_notification_id := wf_notification.send
11589     (   role         => l_wfn_to
11590     ,   msg_type     => OE_GLOBALS.g_wfi_hdr
11591     ,   msg_name     => 'ORDER_CREDIT_HOLDS'
11592     );
11593 
11594     IF G_debug_flag = 'Y'
11595     THEN
11596       oe_debug_pub.ADD(' After send notification with ID = '||
11597            l_notification_id, 2 );
11598     END IF;
11599 
11600     wf_notification.setattrtext
11601     (   nid          => l_notification_id
11602     ,   aname        => 'ORDER_HOLD_COMMENT'
11603     ,   avalue       => l_order_hold_comment
11604     );
11605 
11606     wf_notification.setattrtext
11607     (   nid          => l_notification_id
11608     ,   aname        => 'ORDER_TYPE'
11609     ,   avalue       => l_order_type
11610     );
11611 
11612     wf_notification.setattrnumber
11613     (   nid          => l_notification_id
11614     ,   aname        => 'ORDER_NUMBER'
11615     ,   avalue       => p_header_rec.order_number
11616     );
11617 
11618     wf_notification.setattrnumber
11619     (   nid          => l_notification_id
11620     ,   aname        => 'LINE_HOLD_COUNT'
11621     ,   avalue       => l_line_hold_count
11622     );
11623 
11624     --
11625     -- Start: Bug 7476530 Fix (R12.1.1 and R12.2)
11626     --
11627     -- Ensure that the notification subject will be properly constructed.
11628     --
11629 
11630     Wf_Notification.Denormalize_Notification(nid => l_notification_id);
11631 
11632     -- End  : Bug 7476530 Fix
11633 
11634 
11635     IF G_debug_flag = 'Y'
11636     THEN
11637       oe_debug_pub.ADD('-------Message Attribute Values-------',2);
11638       oe_debug_pub.ADD('l_order_type:         '||l_order_type,2);
11639       oe_debug_pub.ADD('l_order_number:       '||p_header_rec.order_number,2);
11640       oe_debug_pub.ADD('l_order_hold_comment: '||l_order_hold_comment,2);
11641       oe_debug_pub.ADD('l_line_hold_count:    '||l_line_hold_count,2);
11642       oe_debug_pub.ADD('--------------------------------------',2);
11643     END IF;
11644 
11645   ELSE
11646     IF G_debug_flag = 'Y'
11647     THEN
11648       oe_debug_pub.ADD('No send notification l_wfn_to = '|| l_wfn_to, 2);
11649     END IF;
11650   END IF;
11651 
11652   IF G_debug_flag = 'Y'
11653   THEN
11654     oe_debug_pub.ADD('OEXUCRCB: OUT NOCOPY Send_Credit_Hold_NTF');
11655   END IF;
11656 
11657 -- No exception raised as notification send is not considered
11658 -- as a stop for credit checking
11659 
11660 EXCEPTION
11661   WHEN OTHERS THEN
11662   BEGIN
11663     x_return_status := FND_API.G_RET_STS_ERROR ;
11664     IF G_debug_flag = 'Y'
11665     THEN
11666       oe_debug_pub.ADD(' EXCEPTION OTHERS IN SEND_NOTIFICATION');
11667       oe_debug_pub.ADD( ' Errm  = '|| SUBSTR(sqlerrm,1,200) );
11668     END IF;
11669     OE_MSG_PUB.Count_And_Get
11670            ( p_count => l_msg_count,
11671              p_data  => l_msg_data
11672            );
11673     IF G_debug_flag = 'Y'
11674     THEN
11675       oe_debug_pub.ADD(' l_msg_data = ' || l_msg_data );
11676     END IF;
11677     l_msg_data := NULL ;
11678     l_msg_count  := NULL ;
11679   END ;
11680 END SEND_CREDIT_HOLD_NTF;
11681 
11682 ----------------------------------------------------------------------------
11683 --  PROCEDURE: GET_external_trx_amount           PUBLIC
11684 --  COMMENT  : Returns the transaction amount in the limit currency given the
11685 --             amount in the transaction currency. If the
11686 --             p_site_use_id IS null, the entire order is considered
11687 --             x_conversion_status provides any currency conversion
11688 --             error.
11689 --             Used for external credit checking API.
11690 -- BUG 4320650 Rounded the External transaction amount
11691 ----------------------------------------------------------------------------
11692 PROCEDURE GET_external_trx_amount
11693 ( p_transaction_curr_code IN  VARCHAR2
11694 , p_transaction_amount    IN  NUMBER
11695 , p_credit_check_rule_rec IN
11696              OE_CREDIT_CHECK_UTIL.OE_credit_rules_rec_type
11697 , p_system_parameter_rec  IN
11698              OE_CREDIT_CHECK_UTIL.OE_systems_param_rec_type
11699 , p_limit_curr_code       IN  VARCHAR2
11700 , x_amount                OUT NOCOPY NUMBER
11701 , x_conversion_status     OUT NOCOPY OE_CREDIT_CHECK_UTIL.CURR_TBL_TYPE
11702 , x_return_status         OUT NOCOPY VARCHAR2
11703 )
11704 IS
11705   l_limit_order_value NUMBER := 0;
11706 BEGIN
11707 
11708   IF G_debug_flag = 'Y'
11709   THEN
11710     OE_DEBUG_PUB.ADD('OEXUCRCB: IN GET_external_trx_amount');
11711   END IF;
11712 
11713   x_return_status := FND_API.G_RET_STS_SUCCESS;
11714   OE_CREDIT_CHECK_UTIL.g_current_order_value := NULL ;
11715 
11716   IF G_debug_flag = 'Y'
11717   THEN
11718     OE_DEBUG_PUB.ADD('Order Level Credit Check only');
11719   END IF ;
11720   -- convert amount
11721   BEGIN
11722   IF G_debug_flag = 'Y'
11723   THEN
11724     OE_DEBUG_PUB.Add(' GL_CURRENCY = '|| OE_Credit_Engine_GRP.GL_currency);
11725     OE_DEBUG_PUB.ADD(' Total order amount = '|| p_transaction_amount);
11726   END IF;
11727 
11728 
11729     l_limit_order_value :=
11730       OE_CREDIT_CHECK_UTIL.CONVERT_CURRENCY_AMOUNT
11731         ( p_amount                 => p_transaction_amount
11732         , p_transactional_currency => p_transaction_curr_code
11733         , p_limit_currency         => p_limit_curr_code
11734         , p_functional_currency    => OE_Credit_Engine_GRP.GL_currency
11735         , p_conversion_date        => SYSDATE
11736         , p_conversion_type        => p_credit_check_rule_rec.conversion_type
11737       );
11738   END ;
11739 --  x_amount := NVL(l_limit_order_value,0);
11740 
11741   OE_CREDIT_CHECK_UTIL.Rounded_Amount(p_currency_code => p_limit_curr_code
11742 			,p_unrounded_amount =>  NVL(l_limit_order_value,0)
11743 			,x_rounded_amount => x_amount);
11744 
11745   OE_CREDIT_CHECK_UTIL.g_current_order_value := x_amount ;
11746 
11747   IF G_debug_flag = 'Y'
11748   THEN
11749     OE_DEBUG_PUB.Add(' g_current_order_value = '||
11750        OE_CREDIT_CHECK_UTIL.g_current_order_value);
11751     OE_DEBUG_PUB.Add(' Final trx check order amount = '|| x_amount,1 );
11752     OE_DEBUG_PUB.Add(' ====================================');
11753     OE_DEBUG_PUB.ADD('OEXUCRCB: OUT NOCOPY Get_external_trx_amount ');
11754   END IF;
11755 
11756 EXCEPTION
11757   WHEN  GL_CURRENCY_API.NO_RATE THEN
11758     OE_DEBUG_PUB.ADD('EXCEPTION: GL_CURRENCY_API.NO_RATE ');
11759     x_conversion_status(1).usage_curr_code := p_transaction_curr_code;
11760     fnd_message.set_name('ONT', 'OE_CONVERSION_ERROR');
11761     OE_DEBUG_PUB.ADD('Exception table added ');
11762   WHEN NO_DATA_FOUND THEN
11763     x_amount := 0 ;
11764     OE_DEBUG_PUB.ADD('EXCEPTION: NO_DATA_FOUND ');
11765   WHEN TOO_MANY_ROWS THEN
11766     x_amount := 0 ;
11767     OE_DEBUG_PUB.ADD('EXCEPTION: TOO_MANY_ROWS ');
11768   WHEN OTHERS THEN
11769     G_DBG_MSG := SUBSTRB(sqlerrm,1,200);
11770     OE_DEBUG_PUB.ADD('EXCEPTION = '|| SUBSTRB(sqlerrm,1,200));
11771     x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
11772     IF OE_MSG_PUB.Check_Msg_Level(OE_MSG_PUB.G_MSG_LVL_UNEXP_ERROR) THEN
11773      OE_MSG_PUB.Add_Exc_Msg
11774       ( G_PKG_NAME
11775       , 'GET_external_trx_amount'
11776       );
11777     END IF;
11778     RAISE;
11779 END Get_external_trx_amount;
11780 
11781 
11782 -----------------------------------------------------------------------------
11783 --  PROCEDURE  : GET_default_Limit
11784 --------------------------------------------------------------------------------
11785 PROCEDURE GET_default_Limit
11786 (  p_entity_id                   IN  NUMBER
11787  , p_trx_curr_code               IN  VARCHAR2
11788  , x_limit_curr_code             OUT NOCOPY VARCHAR2
11789  , x_trx_limit                   OUT NOCOPY NUMBER
11790  , x_overall_limit               OUT NOCOPY NUMBER
11791  , x_default_limit_flag          OUT NOCOPY VARCHAR2
11792  , x_global_exposure_flag        OUT NOCOPY VARCHAR2
11793 )
11794 IS
11795 
11796 l_credit_usage_rule_set_id  NUMBER;
11797 BEGIN
11798   IF G_debug_flag = 'Y'
11799   THEN
11800    OE_DEBUG_PUB.ADD('OEXUCRCB: IN GET_default_Limit ');
11801   END IF;
11802 
11803  x_default_limit_flag    := 'N' ;
11804  x_limit_curr_code       := NULL ;
11805  x_global_exposure_flag  := 'N' ;
11806 
11807  OE_DEBUG_PUB.ADD(' calling GET_multi_default_Limit ');
11808 
11809  GET_multi_default_Limit
11810           ( p_entity_id       => p_entity_id
11811           , p_trx_curr_code   => p_trx_curr_code
11812           , x_limit_curr_code => x_limit_curr_code
11813           , x_trx_limit       => x_trx_limit
11814           , x_overall_limit   => x_overall_limit
11815           , x_return_status   => x_default_limit_flag
11816           , x_credit_usage_rule_set_id
11817                        => l_credit_usage_rule_set_id
11818           , x_global_exposure_flag => x_global_exposure_flag
11819           );
11820 
11821   IF G_debug_flag = 'Y'
11822   THEN
11823     OE_DEBUG_PUB.ADD(' Out NOCOPY GET_multi_default_Limit '
11824              || x_default_limit_flag );
11825     OE_DEBUG_PUB.ADD(' x_limit_curr_code = '|| x_limit_curr_code );
11826   END IF;
11827 
11828   IF     x_default_limit_flag = 'Y'
11829      AND x_trx_limit is NULL
11830      AND x_overall_limit is NULL
11831   THEN
11832      x_default_limit_flag := 'N' ;
11833      x_limit_curr_code    := NULL ;
11834      OE_DEBUG_PUB.ADD(' Limits NULL ');
11835 
11836   END IF;
11837 
11838   IF x_limit_curr_code IS NULL
11839   THEN
11840      x_default_limit_flag := 'N' ;
11841     OE_DEBUG_PUB.ADD(' calling GET_single_default_Limit ');
11842     GET_single_default_Limit
11843     (         p_entity_id       => p_entity_id
11844             , p_trx_curr_code   => p_trx_curr_code
11845             , x_limit_curr_code => x_limit_curr_code
11846             , x_trx_limit       => x_trx_limit
11847             , x_overall_limit   => x_overall_limit
11848             , x_return_status   => x_default_limit_flag
11849     );
11850 
11851    IF G_debug_flag = 'Y'
11852    THEN
11853      OE_DEBUG_PUB.ADD(' Out NOCOPY GET_single_default_Limit '
11854                              || x_default_limit_flag );
11855      OE_DEBUG_PUB.ADD(' x_limit_curr_code = '|| x_limit_curr_code );
11856    END IF;
11857 
11858   END IF;
11859 
11860 
11861   IF G_debug_flag = 'Y'
11862   THEN
11863     OE_DEBUG_PUB.ADD('OEXUCRCB: OUT NOCOPY GET_default_Limit ' ||
11864          x_default_limit_flag );
11865   END IF;
11866 
11867  EXCEPTION
11868   WHEN OTHERS THEN
11869    G_DBG_MSG := SUBSTR(sqlerrm,1,200);
11870     IF FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
11871     THEN
11872       FND_MSG_PUB.Add_Exc_Msg
11873       ( G_PKG_NAME
11874       , ' GET_default_Limit '
11875       );
11876     END IF;
11877     RAISE;
11878 
11879 END GET_default_Limit ;
11880 
11881 
11882 ------------------------------------------------------------------------------
11883 --  PROCEDURE  : Get_Limit_Info        PUBLIC
11884 --  COMMENT    : Returns credit profiles for the
11885 --               a) Customer
11886 --               b) Site
11887 --               c) party level
11888 ------------------------------------------------------------------------------
11889 PROCEDURE get_limit_info (
11890    p_header_id                   IN NUMBER := NULL
11891  , p_entity_type                 IN  VARCHAR2
11892  , p_entity_id                   IN  NUMBER
11893  , p_cust_account_id             IN  NUMBER
11894  , p_party_id                    IN  NUMBER
11895  , p_trx_curr_code               IN
11896                            HZ_CREDIT_PROFILE_AMTS.currency_code%TYPE
11897  , p_suppress_unused_usages_flag IN  VARCHAR2 := 'N'
11898  , p_navigate_to_next_level      IN  VARCHAR2 := 'Y'
11899  , p_precalc_exposure_used       IN  VARCHAR2 := 'N'
11900  , x_limit_curr_code             OUT NOCOPY
11901                            HZ_CREDIT_PROFILE_AMTS.currency_code%TYPE
11902  , x_trx_limit                   OUT NOCOPY NUMBER
11903  , x_overall_limit               OUT NOCOPY NUMBER
11904  , x_include_all_flag            OUT NOCOPY VARCHAR2
11905  , x_usage_curr_tbl              OUT NOCOPY
11906                    OE_CREDIT_CHECK_UTIL.curr_tbl_type
11907  , x_default_limit_flag          OUT NOCOPY VARCHAR2
11908  , x_global_exposure_flag        OUT NOCOPY VARCHAR2
11909  , x_credit_limit_entity_id      OUT NOCOPY NUMBER
11910  , x_credit_check_level          OUT NOCOPY VARCHAR2
11911 )
11912 IS
11913 
11914 
11915 l_Return_status          VARCHAR2(1) := NULL ;  --bug 4967828
11916 l_suppress_unused_usages_flag VARCHAR2(1) ;
11917 --bug 4212981
11918 l_site_cc_flag           VARCHAR2(1);
11919 l_cust_cc_flag           VARCHAR2(1);
11920 l_dummy                  VARCHAR2(1);
11921 
11922 BEGIN
11923 
11924   x_credit_limit_entity_id       := NULL ;
11925   x_credit_check_level           := NULL ;
11926   x_limit_curr_code              := NULL ;
11927   x_trx_limit                    := NULL ;
11928   x_overall_limit                := NULL ;
11929   x_include_all_flag             := 'N' ;
11930   x_default_limit_flag           := 'N' ;
11931   x_global_exposure_flag         := 'N' ;
11932   l_suppress_unused_usages_flag  := p_suppress_unused_usages_flag ;
11933   x_default_limit_flag           := 'N' ;
11934 
11935   OE_CREDIT_CHECK_UTIL.G_excl_curr_list := NULL ;
11936 
11937   IF G_debug_flag = 'Y'
11938   THEN
11939 
11940    OE_DEBUG_PUB.ADD('OEXUCRCB: IN get_limit_info', 1);
11941    OE_DEBUG_PUB.ADD(' ---------------------------------------------' );
11942    OE_DEBUG_PUB.ADD('G_ORG_ID           ==> '|| G_ORG_ID );
11943    OE_DEBUG_PUB.ADD('P_entity_Type      ==> '|| P_entity_Type );
11944    OE_DEBUG_PUB.ADD('P_entity_id        ==> '|| P_entity_id );
11945    OE_DEBUG_PUB.ADD('P_party_id         ==> '|| P_party_id );
11946    OE_DEBUG_PUB.ADD('p_trx_curr_code    ==> '|| p_trx_curr_code );
11947    OE_DEBUG_PUB.ADD('p_navigate_to_next_level ==> '||
11948            p_navigate_to_next_level );
11949 
11950    OE_DEBUG_PUB.ADD('p_suppress_unused_usages_flag ==> '||
11951               p_suppress_unused_usages_flag );
11952 
11953    OE_DEBUG_PUB.ADD(' ---------------------------------------------' );
11954 
11955    OE_DEBUG_PUB.ADD(' Call Get_Multi_Limit ');
11956   END IF;
11957 
11958   IF p_entity_type in ('SITE','CUSTOMER')
11959   THEN
11960         Get_Multi_Limit
11961         ( p_entity_type                    => p_entity_type
11962         , p_entity_id                      => p_entity_id
11963         , p_trx_curr_code                  => p_trx_curr_code
11964         , x_limit_curr_code                => x_limit_curr_code
11965         , x_trx_limit                      => x_trx_limit
11966         , x_overall_limit                  => x_overall_limit
11967         , x_global_exposure_flag           => x_global_exposure_flag
11968         --bug 4212981
11969         , x_site_cc_flag                   => l_site_cc_flag
11970         , x_cust_cc_flag                   => l_dummy
11971        );
11972 
11973     IF G_debug_flag = 'Y'
11974     THEN
11975       OE_DEBUG_PUB.ADD(' Out NOCOPY of Get_Multi_Limit ');
11976       OE_DEBUG_PUB.ADD('x_limit_curr_code ==> '|| x_limit_curr_code );
11977     END IF;
11978 
11979     IF x_limit_curr_code IS NOT NULL
11980     THEN
11981 
11982        x_credit_limit_entity_id := p_entity_id ;
11983        x_credit_check_level     := p_entity_type ;
11984 
11985     ELSIF    x_limit_curr_code IS NULL
11986           AND p_entity_type = 'SITE'
11987           AND NVL(l_site_cc_flag, 'Y') = 'Y'  --bug 4212981 , bug 4582292
11988     THEN
11989       IF G_debug_flag = 'Y'
11990       THEN
11991          OE_DEBUG_PUB.ADD('calling Get_Multi_Limit for CUSTOMER ');
11992       END IF;
11993       Get_Multi_Limit
11994         ( p_entity_type                    => 'CUSTOMER'
11995          , p_entity_id                      => p_cust_account_id
11996          , p_trx_curr_code                  => p_trx_curr_code
11997          , x_limit_curr_code                => x_limit_curr_code
11998          , x_trx_limit                      => x_trx_limit
11999          , x_overall_limit                  => x_overall_limit
12000          , x_global_exposure_flag           => x_global_exposure_flag
12001          --bug 4582292
12002          , x_site_cc_flag                   => l_dummy
12003          , x_cust_cc_flag                   => l_cust_cc_flag
12004         );
12005 
12006       IF x_limit_curr_code IS NOT NULL
12007       THEN
12008         x_credit_limit_entity_id := p_cust_account_id ;
12009         x_credit_check_level     := 'CUSTOMER' ;
12010       END IF;
12011     END IF;
12012   END IF;
12013 
12014   OE_DEBUG_PUB.ADD('p_navigate_to_next_level ==> '|| p_navigate_to_next_level );
12015   OE_DEBUG_PUB.ADD('l_site_cc_flag           ==> '|| l_site_cc_flag );
12016   OE_DEBUG_PUB.ADD('l_cust_cc_flag           ==> '|| l_cust_cc_flag );
12017   OE_DEBUG_PUB.ADD('x_limit_curr_code        ==> '|| x_limit_curr_code );
12018   OE_DEBUG_PUB.ADD('l_return_status          ==> '|| l_return_status );
12019 
12020   --IF p_navigate_to_next_level = 'Y' THEN --bug 5071518 --14505181
12021   IF p_navigate_to_next_level = 'Y' AND --14505181
12022      -- IF  --14505181
12023 	 NVL(l_site_cc_flag, 'Y') = 'Y' AND NVL(l_cust_cc_flag, 'Y') = 'Y'  --bug 4212981 , bug4582292, bug 5071518
12024   THEN
12025     -----------------------------------------------------
12026     ------- Party level changes
12027     -----------------------------------------------------
12028     IF  p_precalc_exposure_used = 'Y'
12029     THEN
12030       IF OE_CREDIT_CHECK_UTIL.G_crmgmt_installed is NULL
12031       THEN
12032         OE_CREDIT_CHECK_UTIL.G_crmgmt_installed :=
12033           AR_CMGT_CREDIT_REQUEST_API.is_Credit_Management_Installed ;
12034       END IF;
12035 
12036       -- Get party limit only if credit management is installed
12037       IF OE_CREDIT_CHECK_UTIL.G_crmgmt_installed
12038       THEN
12039         IF  x_limit_curr_code IS NULL
12040         THEN
12041           IF G_debug_flag = 'Y'
12042           THEN
12043             OE_DEBUG_PUB.ADD( 'OEXUCRCB:  GET_party_limit ');
12044           END IF;
12045 
12046           GET_party_limit
12047           (  p_party_id             => p_party_id
12048            , p_trx_curr_code         => p_trx_curr_code
12049            , x_limit_curr_code       => x_limit_curr_code
12050            , x_trx_limit             => x_trx_limit
12051            , x_overall_limit         => x_overall_limit
12052            , x_return_status         => l_return_status
12053            , x_credit_limit_entity_id => x_credit_limit_entity_id
12054           );
12055 
12056           IF G_debug_flag = 'Y'
12057           THEN
12058             OE_DEBUG_PUB.ADD( ' out NOCOPY  GET_party_limit ');
12059             OE_DEBUG_PUB.ADD( ' l_return_status ==> '|| l_return_status );
12060           END IF;
12061 
12062           IF x_limit_curr_code IS NOT NULL
12063           THEN
12064             x_credit_limit_entity_id := x_credit_limit_entity_id ;
12065             x_credit_check_level     := 'PARTY' ;
12066             x_global_exposure_flag   := 'Y' ;
12067           END IF;
12068         END IF;
12069       END IF ; -- support party
12070     END IF;
12071     --END IF; --bug 5071518 --14505181
12072 
12073     IF x_limit_curr_code IS NULL
12074        AND NVL(l_return_status,'Y') = 'Y' -- bug 4958142
12075     THEN
12076       OE_DEBUG_PUB.ADD( ' calling GET_default_Limit ');
12077       GET_default_Limit
12078        (  p_entity_id                  => p_entity_id
12079         , p_trx_curr_code              => p_trx_curr_code
12080         , x_limit_curr_code            => x_limit_curr_code
12081         , x_trx_limit                  => x_trx_limit
12082         , x_overall_limit              => x_overall_limit
12083         , x_default_limit_flag         => x_default_limit_flag
12084         , x_global_exposure_flag       => x_global_exposure_flag
12085         );
12086 
12087       IF x_limit_curr_code IS NOT NULL
12088       THEN
12089         x_credit_limit_entity_id := p_cust_account_id ;
12090         x_credit_check_level     := 'CUSTOMER' ;
12091       END IF;
12092     END IF;
12093 
12094     -- Start bug 5071518
12095     OE_DEBUG_PUB.ADD(' x_limit_curr_code    => '|| x_limit_curr_code );
12096     OE_DEBUG_PUB.ADD(' x_trx_limit          => '|| x_trx_limit );
12097     OE_DEBUG_PUB.ADD(' x_overall_limit      => '|| x_overall_limit );
12098     OE_DEBUG_PUB.ADD(' x_default_limit_flag => '|| x_default_limit_flag );
12099 
12100   END IF; -- navigate
12101 
12102   IF x_limit_curr_code IS NULL
12103   THEN
12104      OE_DEBUG_PUB.ADD(' No limits for any level ');
12105 
12106      x_trx_limit            := NULL ;
12107      x_overall_limit        := NULL ;
12108      x_include_all_flag     := 'N' ;
12109      x_default_limit_flag   := 'N' ;
12110      x_global_exposure_flag := 'N' ;
12111      x_credit_limit_entity_id := NULL ;
12112      x_credit_check_level     := NULL ;
12113 
12114   ELSE
12115     IF G_debug_flag = 'Y'
12116     THEN
12117       OE_DEBUG_PUB.ADD( ' Calling Get_Usages' );
12118       OE_DEBUG_PUB.ADD('x_limit_curr_code ==> '|| x_limit_curr_code );
12119       OE_DEBUG_PUB.ADD('x_default_limit_flag ==> '|| x_default_limit_flag );
12120       OE_DEBUG_PUB.ADD('x_global_exposure_flag ==> '|| x_global_exposure_flag );
12121       OE_DEBUG_PUB.ADD('x_include_all_flag ==> '|| x_include_all_flag );
12122       OE_DEBUG_PUB.ADD('x_credit_limit_entity_id ==> '||
12123          x_credit_limit_entity_id );
12124       OE_DEBUG_PUB.ADD('x_credit_check_level ==> '||
12125          x_credit_check_level );
12126     END IF;
12127 
12128     IF x_credit_check_level = 'PARTY'
12129     THEN
12130       l_suppress_unused_usages_flag := 'N' ;
12131     END IF;
12132 
12133     Get_Usages
12134     (   p_entity_type                 => x_credit_check_level
12135       , p_entity_id                   => x_credit_limit_entity_id
12136       , p_limit_curr_code             => x_limit_curr_code
12137       , p_suppress_unused_usages_flag => l_suppress_unused_usages_flag
12138       , p_default_limit_flag          => x_default_limit_flag
12139       , p_global_exposure_flag        => x_global_exposure_flag
12140       , x_include_all_flag            => x_include_all_flag
12141       , x_usage_curr_tbl              => x_usage_curr_tbl
12142     );
12143 
12144     IF G_debug_flag = 'Y'
12145     THEN
12146       OE_DEBUG_PUB.ADD( ' Out NOCOPY of Get_Usages ');
12147     END IF;
12148   END IF;
12149 
12150   IF G_debug_flag = 'Y'
12151   THEN
12152     OE_DEBUG_PUB.ADD('OEXUCRCB: OUT NOCOPY get_limit_info  ',1);
12153   END IF;
12154 
12155   EXCEPTION
12156   WHEN OTHERS THEN
12157    G_DBG_MSG := SUBSTR(sqlerrm,1,200);
12158 
12159     IF FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
12160     THEN
12161       FND_MSG_PUB.Add_Exc_Msg
12162       ( G_PKG_NAME
12163       , ' get_limit_info '
12164       );
12165     END IF;
12166     RAISE;
12167 
12168 END get_limit_info ;
12169 
12170 -- Linda
12171 -----------------------------------------------------
12172 -- to get the lookup meaning
12173 ------------------------------------------------------
12174 
12175 FUNCTION Get_CC_Lookup_Meaning
12176         (p_lookup_type	IN VARCHAR2,
12177          p_lookup_code	IN VARCHAR2
12178         )
12179 RETURN VARCHAR2
12180 IS
12181 
12182 l_meaning	VARCHAR2(80);
12183 
12184 BEGIN
12185   SELECT meaning
12186   INTO   l_meaning
12187   FROM   oe_lookups
12188   WHERE  lookup_type = p_lookup_type
12189   AND    lookup_code = p_lookup_code;
12190 
12191   RETURN (l_meaning);
12192 
12193 EXCEPTION
12194     When Others Then
12195        IF OE_MSG_PUB.Check_Msg_Level(OE_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
12196         THEN
12197             OE_MSG_PUB.Add_Exc_Msg
12198             (   G_PKG_NAME
12199             ,   'Get_CC_Lookup_Meaning'
12200             );
12201         END IF;
12202         RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
12203 END Get_CC_Lookup_Meaning;
12204 
12205 
12206 END OE_CREDIT_CHECK_UTIL;