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.17.12010000.5 2008/11/14 12:34:53 msundara 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    AND ctg.organization_id     = G_ORG_ID
2411    AND ctg.inventory_item_id   = ln.inventory_item_id
2412    AND trm.term_id             = ln.payment_term_id
2413    AND ln.line_category_code   = 'ORDER'
2414    AND trm.credit_check_flag   = 'Y'
2415    AND EXISTS
2416         (SELECT NULL
2417          FROM   oe_payment_types_all pt,
2418                 oe_order_headers_all h
2419          WHERE  pt.credit_check_flag = 'Y'
2420          AND    h.header_id = p_header_id
2421          AND    ln.header_id = h.header_id
2422          AND    NVL(pt.org_id, -99) = G_ORG_ID
2423          AND    pt.payment_type_code =
2424                   DECODE(ln.payment_type_code, NULL,
2425                      DECODE(h.payment_type_code, NULL, pt.payment_type_code,
2426                             h.payment_type_code),
2427                          ln.payment_type_code)
2428         );
2429 
2430 
2431  L_SELECT_LINES_VAL  C_SELECT_LINES_CSR%ROWTYPE ;
2432 
2433  l_return_status       VARCHAR2(1);
2434  I                     NUMBER ; -- INDEX
2435 
2436  l_item_id             NUMBER;
2437  l_line_id             NUMBER;
2438  l_trx_limit           NUMBER;
2439  l_limit_curr_code     VARCHAR2(15) ;
2440  l_category_id         NUMBER;
2441  l_curr_category_id    NUMBER;
2442  l_count               NUMBER := 0 ;
2443 
2444  l_ln_count            NUMBER := 0;
2445  l_grouping_id         NUMBER := 0;
2446  l_ctg_count           NUMBER := 0;
2447  l_line_value          NUMBER := 0 ;
2448 BEGIN
2449 
2450   OE_DEBUG_PUB.ADD('OEXUCRCB: IN GET_Item_Limit ');
2451 
2452 ----------------------------------------------------
2453 -- Two PL/SQL tables are used to maintain the limits
2454 -- associated with the Item categories.
2455 -- Header table with the Item category ID
2456 -- details table that contains the oe lines for that
2457 -- Item category within a bill to site for line level
2458 -- The credit checking Engine will use the information
2459 -- returned in the PL/SQL tables to CC check
2460 
2461 -----------------------------------------------------
2462 
2463   l_site_use_id := p_site_use_id ;
2464   l_tmp_lines_tbl.DELETE ;
2465   l_tmp_category_tbl.DELETE ;
2466 
2467   g_category_set_id     := NULL;
2468   l_ctg_profile_exist   := 'N' ;
2469 
2470   OE_DEBUG_PUB.ADD('Initial g_category_set_id ' || g_category_set_id   );
2471 --  OE_DEBUG_PUB.ADD(' G_profile ' || G_profile );
2472 
2473   -- For each Line ID/Item, the limits are selected
2474   -- using the Category.
2475   -- The similar selection pattern in coordination
2476   -- with the profile is used,
2477   -- that is being used for selecting the
2478   -- default limit.
2479 
2480   -- First verify if any category exist with a profile
2481 
2482   BEGIN
2483     OE_DEBUG_PUB.ADD(' Cusror select to check CTG profile exist ');
2484 
2485     OPEN C_SELECT_CTG_CREDIT_PROFILE ;
2486 
2487     FETCH C_SELECT_CTG_CREDIT_PROFILE
2488     INTO l_SELECT_CTG_CREDIT_PROFILE ;
2489 
2490     IF C_SELECT_CTG_CREDIT_PROFILE%NOTFOUND
2491     THEN
2492      l_ctg_profile_exist := 'N' ;
2493      OE_DEBUG_PUB.ADD(' Category profile do NOT exist ');
2494     ELSE
2495       l_credit_profile_id :=
2496                   l_SELECT_CTG_CREDIT_PROFILE.credit_profile_id ;
2497       l_ctg_profile_exist := 'Y' ;
2498      OE_DEBUG_PUB.ADD(' Category profile exist ');
2499     END IF;
2500     CLOSE C_SELECT_CTG_CREDIT_PROFILE ;
2501 
2502   END ;
2503 
2504 
2505    OE_DEBUG_PUB.ADD('  Out NOCOPY of CTG profile check cursor ');
2506    OE_DEBUG_PUB.ADD(' l_ctg_profile_exist = '|| l_ctg_profile_exist );
2507 
2508    IF l_ctg_profile_exist = 'Y'
2509    THEN
2510 
2511    OE_DEBUG_PUB.ADD(' Continue Item category credit get limit ');
2512 
2513     g_category_set_id   := GET_category_set_id ;
2514     OE_DEBUG_PUB.ADD('g_category_set_id ' || g_category_set_id   );
2515 
2516     FOR L_SELECT_LINES_VAL  IN  C_SELECT_LINES_CSR
2517     LOOP
2518       l_line_id          := L_SELECT_LINES_VAL.line_id ;
2519       l_item_id          := L_SELECT_LINES_VAL.item_id ;
2520       l_category_id      := L_SELECT_LINES_VAL.category_id ;
2521       l_selling_price    := L_SELECT_LINES_VAL.selling_price ;
2522       l_tax_value        := L_SELECT_LINES_VAL.tax_value ;
2523       l_ordered_quantity := L_SELECT_LINES_VAL.ordered_quantity ;
2524       l_count            := NVL(l_count,0) + 1 ;
2525 
2526       -- Insert into the TMP PL/SQL table.
2527 
2528       l_tmp_lines_tbl(l_count).grouping_id         := NULL;
2529       l_tmp_lines_tbl(l_count).item_category_id    := l_category_id ;
2530       l_tmp_lines_tbl(l_count).line_id             := l_line_id ;
2531       l_tmp_lines_tbl(l_count).unit_selling_price  := l_selling_price ;
2532       l_tmp_lines_tbl(l_count).tax_value           := l_tax_value ;
2533       l_tmp_lines_tbl(l_count).ordered_quantity    := l_ordered_quantity ;
2534 
2535       l_line_id           := NULL;
2536       l_item_id           := NULL;
2537       l_category_id       := NULL;
2538       l_selling_price     := NULL;
2539       l_tax_value         := NULL;
2540       l_ordered_quantity  := NULL;
2541 
2542     END LOOP;  -- CTG cursor loop
2543 
2544     OE_DEBUG_PUB.ADD('  Out NOCOPY of category cursor ');
2545 
2546     OE_DEBUG_PUB.ADD(' l_tmp_lines_tbl.COUNT ' || l_tmp_lines_tbl.COUNT );
2547     -- Now the TMP table needs to be scannned and relocated into
2548     -- the main table with category check.
2549 
2550     FOR I IN 1.. l_tmp_lines_tbl.COUNT
2551     LOOP
2552       IF check_category
2553       ( p_category_id       => l_tmp_lines_tbl(i).item_category_id
2554       , p_category_tmp_tbl  => l_tmp_category_tbl
2555       ) = 'N'
2556       THEN
2557 
2558         l_ctg_count := NVL(l_ctg_count,0) + 1 ;
2559 
2560         -- Always get multi first and get single if no usages found
2561 
2562           OE_DEBUG_PUB.ADD(' GET_multi_Item_Limit ');
2563 
2564           GET_multi_Item_Limit
2565           ( p_category_id         => l_tmp_lines_tbl(i).item_category_id
2566           , p_trx_curr_code       => p_trx_curr_code
2567           , x_limit_curr_code     => l_limit_curr_code
2568           , x_trx_limit           => l_trx_limit
2569           , x_return_status       => l_return_status
2570           );
2571 
2572           IF l_return_status  = 'N'
2573           THEN
2574             OE_DEBUG_PUB.ADD(' Call GET_single_Item_Limit ');
2575             GET_single_Item_Limit
2576             ( p_category_id         => l_tmp_lines_tbl(i).item_category_id
2577             , p_trx_curr_code       => p_trx_curr_code
2578             , x_limit_curr_code     => l_limit_curr_code
2579             , x_trx_limit           => l_trx_limit
2580             , x_return_status       => l_return_status
2581             );
2582 
2583           END IF;
2584 --        END IF;
2585 
2586          IF G_debug_flag = 'Y'
2587          THEN
2588             OE_DEBUG_PUB.ADD(' after getting the limits ');
2589             OE_DEBUG_PUB.ADD(' l_return_status '|| l_return_status);
2590             OE_DEBUG_PUB.ADD(' l_trx_limit '|| l_trx_limit);
2591             OE_DEBUG_PUB.ADD(' l_limit_curr_code '|| l_limit_curr_code );
2592             OE_DEBUG_PUB.ADD(' p_trx_curr_code '|| p_trx_curr_code );
2593         END IF;
2594 
2595         l_curr_category_id := l_tmp_lines_tbl(i).item_category_id ;
2596 
2597         l_tmp_category_tbl(l_ctg_count).item_category_id
2598                := l_tmp_lines_tbl(i).item_category_id ;
2599 
2600         l_tmp_category_tbl(l_ctg_count).profile_exist
2601                := l_return_status ;
2602 
2603         IF l_return_status = 'Y'
2604         THEN
2605           l_grouping_id := NVL(l_grouping_id,0) + 1;
2606 
2607           x_item_limits_tbl(l_grouping_id).grouping_id :=
2608                  l_grouping_id ;
2609 
2610           x_item_limits_tbl(l_grouping_id).item_category_id :=
2611                 l_curr_category_id ;
2612 
2613           x_item_limits_tbl(l_grouping_id).limit_curr_code :=
2614                l_limit_curr_code ;
2615 
2616           x_item_limits_tbl(l_grouping_id).item_limit :=
2617                      l_trx_limit ;
2618         END IF;
2619 
2620       END IF;
2621      -- end category_exist IF
2622 
2623      l_line_id         := NULL;
2624      l_trx_limit       := NULL;
2625      l_limit_curr_code := NULL;
2626      l_return_status   := NULL;
2627      l_curr_category_id := NULL;
2628 
2629 
2630    END LOOP;
2631 
2632    -- assign the values to the output table
2633 
2634    l_grouping_id      := NULL;
2635    l_curr_category_id := NULL;
2636 
2637    FOR ctg_id IN 1 .. x_item_limits_tbl.COUNT
2638    LOOP
2639      l_grouping_id :=
2640            x_item_limits_tbl(ctg_id).grouping_id ;
2641 
2642      l_curr_category_id := x_item_limits_tbl(ctg_id).item_category_id ;
2643 
2644      FOR ln_id IN 1 .. l_tmp_lines_tbl.COUNT
2645      LOOP
2646        IF l_tmp_lines_tbl(ln_id).item_category_id =
2647             l_curr_category_id
2648        THEN
2649          l_ln_count := NVL(l_ln_count,0) + 1 ;
2650          x_lines_tbl(l_ln_count).grouping_id        := l_grouping_id ;
2651          x_lines_tbl(l_ln_count).item_category_id   := l_curr_category_id ;
2652          x_lines_tbl(l_ln_count).line_id            :=
2653                           l_tmp_lines_tbl(ln_id).line_id ;
2654          x_lines_tbl(l_ln_count).unit_selling_price :=
2655                           l_tmp_lines_tbl(ln_id).unit_selling_price ;
2656          x_lines_tbl(l_ln_count).tax_value          :=
2657                           l_tmp_lines_tbl(ln_id).tax_value ;
2658          x_lines_tbl(l_ln_count).ordered_quantity   :=
2659                  l_tmp_lines_tbl(ln_id).ordered_quantity ;
2660 
2661          IF p_include_tax_flag = 'Y'
2662          THEN
2663            l_line_value := NVL(l_line_value,0) +
2664            ( NVL(l_tmp_lines_tbl(ln_id).tax_value,0 ) +
2665                       (  l_tmp_lines_tbl(ln_id).ordered_quantity
2666                       * l_tmp_lines_tbl(ln_id).unit_selling_price
2667                       )
2668            );
2669          ELSE
2670           l_line_value := NVL(l_line_value,0) +
2671                      (  l_tmp_lines_tbl(ln_id).ordered_quantity
2672                       * l_tmp_lines_tbl(ln_id).unit_selling_price
2673                       );
2674           END IF;
2675         END IF;
2676       END LOOP;
2677 
2678      x_item_limits_tbl(ctg_id).ctg_line_amount := NVL(l_line_value,0) ;
2679      l_line_value := NULL;
2680 
2681     END LOOP;
2682 
2683   ELSE
2684 
2685    OE_DEBUG_PUB.ADD(' No CTG credit profile found - No Item CC required ');
2686 
2687 
2688   END IF;  -- Profile check IF
2689 
2690 
2691    OE_DEBUG_PUB.ADD('OEXUCRCB: OUT NOCOPY GET_Item_Limit ');
2692 
2693 
2694   EXCEPTION
2695   WHEN OTHERS THEN
2696    G_DBG_MSG := SUBSTR(sqlerrm,1,200);
2697 
2698     IF FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
2699     THEN
2700       FND_MSG_PUB.Add_Exc_Msg
2701       ( G_PKG_NAME
2702       , ' GET_Item_Limit '
2703       );
2704     END IF;
2705     RAISE;
2706 
2707 
2708 END GET_Item_Limit ;
2709 
2710 
2711 
2712 -----------------------------------------------------------------------------
2713 --  PROCEDURE  : Get_Multi_Limit    PRIVATE
2714 --  COMMENT    :
2715 --
2716 ---------------------------------------------------------------------------
2717 PROCEDURE Get_Multi_Limit (
2718    p_entity_type                 IN  VARCHAR2
2719  , p_entity_id                   IN  NUMBER
2720  , p_trx_curr_code               IN
2721                            HZ_CREDIT_PROFILE_AMTS.currency_code%TYPE
2722  , x_limit_curr_code             OUT NOCOPY
2723                            HZ_CREDIT_PROFILE_AMTS.currency_code%TYPE
2724  , x_trx_limit                   OUT NOCOPY NUMBER
2725  , x_overall_limit               OUT NOCOPY NUMBER
2726  , x_global_exposure_flag        OUT NOCOPY VARCHAR2
2727 --bug 4212981
2728  , x_site_cc_flag                OUT NOCOPY VARCHAR2
2729  , x_cust_cc_flag                OUT NOCOPY VARCHAR2
2730 )
2731 IS
2732 
2733 l_return_status            VARCHAR2(1);
2734 l_credit_usage_rule_set_id NUMBER;
2735 
2736 BEGIN
2737 
2738   IF G_debug_flag = 'Y'
2739   THEN
2740     OE_DEBUG_PUB.ADD('OEXUCRCB: IN Get_Multi_Limit ');
2741   END IF;
2742 
2743    x_global_exposure_flag     := 'N' ;
2744 
2745    l_credit_usage_rule_set_id := NULL ;
2746 
2747    IF P_entity_Type = 'CUSTOMER'
2748    THEN
2749       GET_multi_customer_Limit
2750       ( p_entity_id       => p_entity_id
2751       , p_trx_curr_code   => p_trx_curr_code
2752       , x_limit_curr_code => x_limit_curr_code
2753       , x_trx_limit       => x_trx_limit
2754       , x_overall_limit   => x_overall_limit
2755       , x_return_status   => l_return_status
2756       , x_credit_usage_rule_set_id
2757                 => l_credit_usage_rule_set_id
2758       , x_global_exposure_flag => x_global_exposure_flag
2759       );
2760 
2761       IF G_debug_flag = 'Y'
2762       THEN
2763         OE_DEBUG_PUB.ADD(' Out NOCOPY GET_multi_customer_Limit '|| l_return_status );
2764         OE_DEBUG_PUB.ADD(' x_limit_curr_code = '|| x_limit_curr_code );
2765         OE_DEBUG_PUB.ADD(' x_trx_limit = '|| x_trx_limit );
2766         OE_DEBUG_PUB.ADD(' x_overall_limit = '|| x_overall_limit );
2767       END IF;
2768 
2769     x_cust_cc_flag := l_return_status;  --bug 4582292
2770 
2771     -- BUG 2236276
2772     -- roll up to next level if limits are NULL
2773 
2774       IF     l_return_status = 'Y'
2775          AND x_trx_limit is NULL
2776          AND x_overall_limit is NULL
2777       THEN
2778         l_return_status   := 'N' ;
2779         x_limit_curr_code := NULL ;
2780         x_global_exposure_flag := 'N' ;
2781 
2782         OE_DEBUG_PUB.ADD(' Limits NULL for customer MULTI ');
2783 
2784       END IF;
2785 
2786       IF NVL(l_return_status, 'N') = 'N' --bug 5071518
2787       THEN
2788         x_global_exposure_flag := 'N' ;
2789         l_credit_usage_rule_set_id := NULL ;
2790 
2791         IF G_debug_flag = 'Y'
2792         THEN
2793           OE_DEBUG_PUB.ADD(' Calling GET_Single_Customer_Limit ');
2794         END IF;
2795 
2796         GET_Single_Customer_Limit
2797         ( p_entity_id       => p_entity_id
2798         , p_trx_curr_code   => p_trx_curr_code
2799         , x_limit_curr_code => x_limit_curr_code
2800         , x_trx_limit       => x_trx_limit
2801         , x_overall_limit   => x_overall_limit
2802         , x_return_status   => l_return_status
2803         );
2804 
2805         IF G_debug_flag = 'Y'
2806         THEN
2807          OE_DEBUG_PUB.ADD(' Out NOCOPY GET_Single_Customer_Limit '
2808                      || l_return_status );
2809          OE_DEBUG_PUB.ADD(' x_limit_curr_code = '
2810                  || x_limit_curr_code );
2811          OE_DEBUG_PUB.ADD(' x_trx_limit = '|| x_trx_limit );
2812          OE_DEBUG_PUB.ADD(' x_overall_limit = '|| x_overall_limit );
2813         END IF;
2814 
2815         x_cust_cc_flag := l_return_status; -- bug 4582292
2816 
2817           IF     l_return_status = 'Y'
2818               AND x_trx_limit is NULL
2819               AND x_overall_limit is NULL
2820           THEN
2821             l_return_status   := 'N' ;
2822             x_limit_curr_code := NULL ;
2823             x_global_exposure_flag := 'N' ;
2824           END IF;
2825       END IF;
2826 
2827 
2828 ------------------------- Site level -------------------------
2829 
2830     ELSIF P_entity_Type = 'SITE'
2831     THEN
2832       x_global_exposure_flag := 'N' ;
2833 
2834       IF G_debug_flag = 'Y'
2835       THEN
2836         OE_DEBUG_PUB.ADD(' Call GET_multi_site_Limit ');
2837       END IF;
2838 
2839       GET_multi_site_Limit
2840       ( p_entity_id       => p_entity_id
2841       , p_trx_curr_code   => p_trx_curr_code
2842       , x_limit_curr_code => x_limit_curr_code
2843       , x_trx_limit       => x_trx_limit
2844       , x_overall_limit   => x_overall_limit
2845       , x_return_status   => l_return_status
2846       );
2847 
2848       IF G_debug_flag = 'Y'
2849       THEN
2850          OE_DEBUG_PUB.ADD(' Out NOCOPY GET_multi_site_Limit '|| l_return_status );
2851          OE_DEBUG_PUB.ADD(' x_limit_curr_code = '|| x_limit_curr_code );
2852          OE_DEBUG_PUB.ADD(' x_trx_limit = '|| x_trx_limit );
2853          OE_DEBUG_PUB.ADD(' x_overall_limit = '|| x_overall_limit );
2854       END IF;
2855 
2856     x_site_cc_flag := l_return_status;  --bug 4212981
2857     -- BUG 4158439
2858     -- roll up to next level if limits are NULL
2859 
2860       IF     l_return_status = 'Y'
2861          AND x_trx_limit is NULL
2862          AND x_overall_limit is NULL
2863       THEN
2864         l_return_status   := 'N' ;
2865         x_limit_curr_code := NULL ;
2866 
2867         OE_DEBUG_PUB.ADD(' Limits NULL for site MULTI ');
2868 
2869       END IF;
2870 
2871       IF NVL(l_return_status, 'N') = 'N'  --bug 4582292
2872       THEN
2873         GET_Single_Site_Limit
2874         ( p_entity_id       => p_entity_id
2875         , p_trx_curr_code   => p_trx_curr_code
2876         , x_limit_curr_code => x_limit_curr_code
2877         , x_trx_limit       => x_trx_limit
2878         , x_overall_limit   => x_overall_limit
2879         , x_return_status   => l_return_status
2880         );
2881 
2882         IF G_debug_flag = 'Y'
2883         THEN
2884           OE_DEBUG_PUB.ADD(' Out NOCOPY GET_Single_Site_Limit '|| l_return_status );
2885           OE_DEBUG_PUB.ADD(' x_limit_curr_code = '|| x_limit_curr_code );
2886           OE_DEBUG_PUB.ADD(' x_trx_limit = '|| x_trx_limit );
2887           OE_DEBUG_PUB.ADD(' x_overall_limit = '|| x_overall_limit );
2888         END IF;
2889 
2890         x_site_cc_flag := l_return_status; --bug 4212981
2891 
2892           -- BUG 4158439
2893           IF     l_return_status = 'Y'
2894               AND x_trx_limit is NULL
2895               AND x_overall_limit is NULL
2896           THEN
2897             l_return_status   := 'N' ;
2898             x_limit_curr_code := NULL ;
2899             OE_DEBUG_PUB.ADD(' Limits NULL for site SINGLE ');
2900           END IF;
2901 
2902       END IF;
2903 
2904     ELSE
2905       NULL;
2906     END IF;
2907 
2908     IF G_debug_flag = 'Y'
2909     THEN
2910       OE_DEBUG_PUB.ADD('OEXUCRCB: OUT NOCOPY Get_Multi_Limit ');
2911     END IF;
2912 
2913   EXCEPTION
2914   WHEN OTHERS THEN
2915    G_DBG_MSG := SUBSTR(sqlerrm,1,200);
2916 
2917     IF FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
2918     THEN
2919       FND_MSG_PUB.Add_Exc_Msg
2920       ( G_PKG_NAME
2921       , ' Get_Multi_Limit '
2922       );
2923     END IF;
2924     RAISE;
2925 
2926 
2927 END Get_Multi_Limit ;
2928 
2929 
2930 
2931 -----------------------------------------------------------------------------
2932 --  PROCEDURE  : Get_SIngle_Limit    PRIVATE
2933 --  COMMENT    : Returns the Limit for the SINGLE profile
2934 --
2935 ---------------------------------------------------------------------------
2936 PROCEDURE Get_SIngle_Limit (
2937    p_entity_type                 IN  VARCHAR2
2938  , p_entity_id                   IN  NUMBER
2939  , p_trx_curr_code               IN
2940                            HZ_CREDIT_PROFILE_AMTS.currency_code%TYPE
2941  , x_limit_curr_code             OUT NOCOPY
2942                            HZ_CREDIT_PROFILE_AMTS.currency_code%TYPE
2943  , x_trx_limit                   OUT NOCOPY NUMBER
2944  , x_overall_limit               OUT NOCOPY NUMBER
2945  , x_default_limit_flag          OUT NOCOPY VARCHAR2
2946 )
2947 IS
2948 
2949 l_return_status    VARCHAR2(1);
2950 
2951 BEGIN
2952 
2953   IF G_debug_flag = 'Y'
2954   THEN
2955     OE_DEBUG_PUB.ADD('OEXUCRCB: IN Get_SIngle_Limit ');
2956   END IF;
2957 
2958     IF P_entity_Type = 'CUSTOMER'
2959     THEN
2960       GET_Single_Customer_Limit
2961       ( p_entity_id       => p_entity_id
2962       , p_trx_curr_code   => p_trx_curr_code
2963       , x_limit_curr_code => x_limit_curr_code
2964       , x_trx_limit       => x_trx_limit
2965       , x_overall_limit   => x_overall_limit
2966       , x_return_status   => l_return_status
2967       );
2968 
2969       IF l_return_status = 'N'
2970       THEN
2971         GET_single_default_Limit
2972         ( p_entity_id       => p_entity_id
2973         , p_trx_curr_code   => p_trx_curr_code
2974         , x_limit_curr_code => x_limit_curr_code
2975         , x_trx_limit       => x_trx_limit
2976         , x_overall_limit   => x_overall_limit
2977         , x_return_status   => x_default_limit_flag
2978         );
2979 
2980       ELSE
2981        x_default_limit_flag  := 'N' ;
2982       END IF;
2983 
2984     ELSIF P_entity_Type = 'SITE'
2985     THEN
2986       GET_Single_Site_Limit
2987       ( p_entity_id       => p_entity_id
2988       , p_trx_curr_code   => p_trx_curr_code
2989       , x_limit_curr_code => x_limit_curr_code
2990       , x_trx_limit       => x_trx_limit
2991       , x_overall_limit   => x_overall_limit
2992       , x_return_status   => l_return_status
2993       );
2994 
2995      x_default_limit_flag  := 'N' ;
2996 
2997     ELSE
2998       NULL;
2999     END IF;
3000 
3001   IF G_debug_flag = 'Y'
3002   THEN
3003     OE_DEBUG_PUB.ADD('OEXUCRCB: OUT NOCOPY Get_SIngle_Limit ');
3004   END IF;
3005 
3006 
3007   EXCEPTION
3008   WHEN OTHERS THEN
3009    G_DBG_MSG := SUBSTR(sqlerrm,1,200);
3010 
3011     IF FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
3012     THEN
3013       FND_MSG_PUB.Add_Exc_Msg
3014       ( G_PKG_NAME
3015       , ' Get_SIngle_Limit '
3016       );
3017     END IF;
3018     RAISE;
3019 
3020 
3021 END Get_SIngle_Limit ;
3022 
3023 
3024 ------------------------------------------------------------------------------
3025 --  PROCEDURE  : Get_Usages     PUBLIC
3026 --  COMMENT    : Returns the Usages associated with a given
3027 --               profile amount currency
3028 --
3029 ------------------------------------------------------------------------------
3030 PROCEDURE Get_Usages (
3031   p_entity_type                 IN  VARCHAR2
3032 , p_entity_id                   IN  NUMBER
3033 , p_limit_curr_code             IN
3034                        HZ_CREDIT_PROFILE_AMTS.currency_code%TYPE
3035 , p_suppress_unused_usages_flag IN  VARCHAR2 := 'N'
3036 , p_default_limit_flag          IN  VARCHAR2 := 'N'
3037 , p_global_exposure_flag        IN  VARCHAR2 := 'N'
3038 , x_include_all_flag           OUT  NOCOPY VARCHAR2
3039 , x_usage_curr_tbl             OUT  NOCOPY OE_CREDIT_CHECK_UTIL.curr_tbl_type
3040 )
3041 IS
3042 
3043   l_count  NUMBER;
3044 
3045 --------------------------------------------------------
3046 --  This cursor identifies the usage rule sets for    --
3047 --  usages credit limit.                                     --
3048 --------------------------------------------------------
3049 
3050 CURSOR   party_rule_set_csr IS
3051   SELECT credit_usage_rule_set_id
3052   FROM   hz_credit_usages usg,
3053          hz_customer_profiles prf,
3054          hz_cust_profile_amts amt
3055   WHERE  usg.cust_acct_profile_amt_id   = amt.cust_acct_profile_amt_id
3056   AND    prf.cust_account_profile_id    = amt.cust_account_profile_id
3057   AND    amt.currency_code              = p_limit_curr_code
3058   AND    prf.cust_account_id            = -1
3059   AND    prf.site_use_id    IS NULL
3060   AND    prf.party_id                   = p_entity_id ;
3061 
3062 CURSOR   cust_rule_set_csr IS
3063   SELECT credit_usage_rule_set_id
3064   FROM   hz_credit_usages usg,
3065          hz_customer_profiles prf,
3066          hz_cust_profile_amts amt
3067   WHERE  usg.cust_acct_profile_amt_id   = amt.cust_acct_profile_amt_id
3068   AND    prf.cust_account_profile_id    = amt.cust_account_profile_id
3069   AND    amt.currency_code              = p_limit_curr_code
3070   AND    prf.cust_account_id            = p_entity_id
3071   AND    prf.site_use_id    IS NULL;
3072 
3073 CURSOR   site_rule_set_csr IS
3074   SELECT credit_usage_rule_set_id
3075   FROM   hz_credit_usages usg,
3076          hz_customer_profiles prf,
3077          hz_cust_profile_amts amt
3078   WHERE  usg.cust_acct_profile_amt_id   = amt.cust_acct_profile_amt_id
3079   AND    prf.cust_account_profile_id    = amt.cust_account_profile_id
3080   AND    amt.currency_code              = p_limit_curr_code
3081   AND    prf.site_use_id    = p_entity_id ;
3082 
3083 
3084 --------------------------------------------------------
3085 --  This cursor identifies the usage rule sets for    --
3086 --  Default credit limit.                                     --
3087 --------------------------------------------------------
3088 CURSOR   dflt_rule_set_csr IS
3089   SELECT credit_usage_rule_set_id
3090   FROM   hz_credit_usages usg,
3091          hz_credit_profiles prf,
3092          hz_credit_profile_amts amt
3093   WHERE  usg.credit_profile_amt_id      = amt.credit_profile_amt_id
3094   AND    prf.credit_profile_id          = amt.credit_profile_id
3095   AND    amt.currency_code              = p_limit_curr_code
3096   AND    prf.organization_id            = G_ORG_ID ;
3097 
3098 
3099 
3100 --------------------------------------------------------
3101 --  This cursor identifies if the include all flag    --
3102 --  is set for this usage rule set .                  --
3103 --------------------------------------------------------
3104 
3105 CURSOR   include_all_csr (c_credit_usage_rule_set_id IN NUMBER) IS
3106   SELECT 'X'
3107   FROM   hz_credit_usage_rules
3108   WHERE  credit_usage_rule_set_id = c_credit_usage_rule_set_id
3109   AND    usage_type = 'CURRENCY'
3110   AND    include_all_flag = 'Y';
3111 
3112 --------------------------------------------------------
3113 --  This cursor identifies all included usages        --
3114 --  for this usage rule set .                         --
3115 --------------------------------------------------------
3116 
3117 CURSOR   incl_curr_csr (c_credit_usage_rule_set_id IN NUMBER) IS
3118   SELECT user_code
3119   FROM   hz_credit_usage_rules cur
3120   WHERE  cur.credit_usage_rule_set_id = c_credit_usage_rule_set_id
3121   AND    cur.usage_type               = 'CURRENCY'
3122   AND    cur.user_code                IS NOT NULL
3123   AND    NVL(cur.exclude_flag,'N')    = 'N';
3124 
3125 --------------------------------------------------------
3126 --  This cursor identifies all excluded usages        --
3127 --  for this usage rule set .                         --
3128 --------------------------------------------------------
3129 
3130 CURSOR   excl_curr_csr (c_credit_usage_rule_set_id IN NUMBER) IS
3131   SELECT user_code
3132   FROM   hz_credit_usage_rules cur
3133   WHERE  cur.credit_usage_rule_set_id = c_credit_usage_rule_set_id
3134   AND    cur.usage_type               = 'CURRENCY'
3135   AND    cur.user_code                IS NOT NULL
3136   AND    cur.exclude_flag         = 'Y';
3137 
3138 --------------------------------------------------------
3139 --  This cursor identifies all currencies in which    --
3140 --  transactions are available for this entity        --
3141 --------------------------------------------------------
3142 --- BUG 2352020
3143 -- Bug 2417717 AR relationshops
3144 
3145 CURSOR   trx_curr_csr_customer IS
3146   SELECT soh.transactional_curr_code user_code
3147   FROM   oe_order_headers    soh
3148      ,   hz_cust_acct_sites_all  cas
3149      ,   hz_cust_site_uses_all   su
3150   WHERE  soh.org_id            = su.org_id
3151     AND  soh.invoice_to_org_id = su.site_use_id
3152     AND  cas.cust_acct_site_id = su.cust_acct_site_id
3153     AND  cas.cust_account_id   = p_entity_id
3154   GROUP  BY transactional_curr_code
3155   UNION
3156   SELECT pay.invoice_currency_code user_code
3157   FROM   ar_payment_schedules pay
3158      ,   hz_cust_acct_sites_all  cas
3159      ,   hz_cust_site_uses_all   su
3160   WHERE  pay.org_id               = su.org_id
3161     AND  pay.customer_site_use_id = su.site_use_id
3162     AND  cas.cust_acct_site_id = su.cust_acct_site_id
3163     AND  cas.cust_account_id   = p_entity_id
3164   GROUP  BY invoice_currency_code
3165   UNION
3166   SELECT exs.currency_code
3167   FROM   oe_credit_summaries exs
3168   WHERE  exs.balance_type     = 18
3169    AND   exs.cust_account_id  = p_entity_id
3170    AND   NVL(exs.org_id,-99)  = G_ORG_ID;              /* MOAC_SQL_CHANGE */
3171 
3172 
3173 
3174 CURSOR   trx_curr_csr_customer_global IS
3175   SELECT soh.transactional_curr_code user_code
3176   FROM   oe_order_headers_ALL     soh
3177     ,   hz_cust_acct_sites_ALL  cas
3178      ,   hz_cust_site_uses_ALL   su
3179   WHERE  soh.invoice_to_org_id = su.site_use_id
3180     AND  cas.cust_acct_site_id = su.cust_acct_site_id
3181     AND  cas.cust_account_id   = p_entity_id
3182   GROUP  BY transactional_curr_code
3183   UNION
3184   SELECT pay.invoice_currency_code user_code
3185   FROM   ar_payment_schedules_ALL pay
3186     ,   hz_cust_acct_sites_ALL  cas
3187      ,   hz_cust_site_uses_ALL   su
3188   WHERE  pay.customer_site_use_id = su.site_use_id
3189     AND  cas.cust_acct_site_id = su.cust_acct_site_id
3190     AND  cas.cust_account_id   = p_entity_id
3191   GROUP  BY invoice_currency_code
3192   UNION
3193   SELECT exs.currency_code
3194   FROM   oe_credit_summaries exs
3195   WHERE  exs.balance_type     = 18
3196    AND   exs.cust_account_id  = p_entity_id ;
3197 
3198 
3199 
3200 CURSOR   trx_curr_csr_site IS
3201   SELECT soh.transactional_curr_code user_code
3202   FROM   oe_order_headers     soh
3203   WHERE  soh.invoice_to_org_id = p_entity_id
3204   GROUP  BY transactional_curr_code
3205   UNION
3206   SELECT pay.invoice_currency_code user_code
3207   FROM   ar_payment_schedules pay
3208   WHERE  pay.customer_site_use_id = p_entity_id
3209   GROUP  BY invoice_currency_code
3210   UNION
3211   SELECT exs.currency_code
3212   FROM   oe_credit_summaries exs
3213   WHERE  balance_type  = 18
3214    AND   site_use_id   = p_entity_id ;
3215 
3216 
3217 
3218 
3219   CURSOR C_g_use_party_hierarchy IS
3220   SELECT
3221     'Y'
3222    FROM
3223     hz_hierarchy_nodes hn
3224    WHERE  hn.parent_id                     = p_entity_id
3225   AND     hn.parent_object_type           = 'ORGANIZATION'
3226   and     hn.parent_table_name            = 'HZ_PARTIES'
3227   and     hn.child_object_type            = 'ORGANIZATION'
3228   and     hn.effective_start_date  <=  sysdatE
3229   and     hn.effective_end_date    >= SYSDATE
3230   and     hn.hierarchy_type
3231                 = OE_CREDIT_CHECK_UTIL.G_hierarchy_type ;
3232 
3233   CURSOR party_txn_cur IS
3234   SELECT distinct ( currency_code)   user_code
3235   FROM   oe_credit_summaries
3236   WHERE  party_id  =  p_entity_id
3237     AND  bucket_duration     = OE_CREDIT_EXPOSURE_PVT.G_MAX_BUCKET_LENGTH ;
3238 
3239 
3240  CURSOR party_h_txn_cur IS
3241   SELECT distinct ( oes.currency_code) user_code
3242   FROM   oe_credit_summaries oes
3243      ,   hz_hierarchy_nodes hn
3244   WHERE  hn.parent_id                    = p_entity_id
3245   AND  hn.parent_object_type           = 'ORGANIZATION'
3246   and  hn.parent_table_name            = 'HZ_PARTIES'
3247   and  hn.child_object_type            = 'ORGANIZATION'
3248   and  hn.effective_start_date  <=  sysdate
3249   and  hn.effective_end_date    >= SYSDATE
3250   and  hn.hierarchy_type
3251                 = OE_CREDIT_CHECK_UTIL.G_hierarchy_type
3252   AND  oes.party_id                        =  hn.child_id
3253   AND  oes.bucket_duration     = OE_CREDIT_EXPOSURE_PVT.G_MAX_BUCKET_LENGTH ;
3254 
3255 
3256 include_all_rec         include_all_csr%rowtype;
3257 l_credit_limit_exist    VARCHAR2(1) ;
3258 
3259 
3260 l_limit_flag           VARCHAR2(1) := 'N';
3261 i                      NUMBER := 0;
3262 j                      NUMBER := 1;
3263 l_return_status        NUMBER;
3264 l_credit_check_flag    VARCHAR2(2);
3265 l_overall_limit        NUMBER;
3266 l_trx_limit            NUMBER;
3267 
3268 l_arrsize              NUMBER;
3269 
3270 l_incl_curr_list       VARCHAR2(2000);
3271 l_excl_curr_list       VARCHAR2(2000);
3272 l_trx_curr_list        VARCHAR2(2000);
3273 l_seperator            VARCHAR2(1) := '#';
3274 l_currency             VARCHAR2(10);
3275 
3276 l_start                NUMBER := 1;
3277 l_end                  NUMBER := 1;
3278 
3279 l_exclude_flag         VARCHAR2(1) := 'N' ;
3280 l_use_party_hierarchy  VARCHAR2(1) ;
3281 
3282 l_include_all_flag     VARCHAR2(1) := 'N' ;
3283 
3284 BEGIN
3285 
3286   IF G_debug_flag = 'Y'
3287   THEN
3288     OE_DEBUG_PUB.ADD('OEXUCRCB: IN get_usages ');
3289     OE_DEBUG_PUB.ADD(' p_entity_type     = '|| p_entity_type );
3290     OE_DEBUG_PUB.ADD(' p_entity_id       = '|| p_entity_id   );
3291     OE_DEBUG_PUB.ADD(' p_limit_curr_code = '|| p_limit_curr_code );
3292     OE_DEBUG_PUB.ADD(' p_suppress_unused_usages_flag = '||
3293          p_suppress_unused_usages_flag );
3294     OE_DEBUG_PUB.ADD(' p_global_exposure_flag '||
3295              p_global_exposure_flag );
3296 
3297     OE_DEBUG_PUB.ADD(' ---------------------------------------------- ');
3298 
3299   END IF;
3300 
3301   OE_CREDIT_CHECK_UTIL.G_excl_curr_list := NULL ;
3302   l_exclude_flag := 'N' ;
3303 
3304   IF G_debug_flag = 'Y'
3305   THEN
3306     OE_DEBUG_PUB.ADD(' Credit Limit found ');
3307   END IF;
3308 
3309   ---------------------------------------------------
3310   -- First get all usage rule sets for this limit  --
3311   ---------------------------------------------------
3312 
3313   IF NVL(p_default_limit_flag,'N')  = 'N'
3314   THEN
3315     IF G_debug_flag = 'Y'
3316     THEN
3317       OE_DEBUG_PUB.ADD(' Into Default limit = N ');
3318     END IF;
3319 
3320     IF p_entity_type = 'PARTY'
3321     THEN
3322       FOR rule_set_rec IN party_rule_set_csr
3323       LOOP
3324         OPEN include_all_csr
3325           (rule_set_rec.credit_usage_rule_set_id);
3326 
3327         FETCH include_all_csr
3328         INTO  include_all_rec;
3329 
3330         IF include_all_csr%FOUND
3331         THEN
3332           l_include_all_flag := 'Y';
3333         ELSE
3334           l_include_all_flag := 'N';
3335         END IF;
3336 
3337         CLOSE include_all_csr;
3338 
3339         --------------------------------------------------------
3340         -- identify the included currencies for each rule set --
3341         --------------------------------------------------------
3342           FOR incl_curr_rec
3343           IN  incl_curr_csr
3344               (rule_set_rec.credit_usage_rule_set_id)
3345           LOOP
3346             l_incl_curr_list :=
3347             l_incl_curr_list || l_seperator || incl_curr_rec.user_code;
3348           END LOOP;
3349 
3350         --------------------------------------------------------
3351         -- identify the excluded currencies for each rule set --
3352         --------------------------------------------------------
3353 
3354         FOR excl_curr_rec
3355         IN  excl_curr_csr
3356               (rule_set_rec.credit_usage_rule_set_id)
3357         LOOP
3358             l_excl_curr_list :=
3359             l_excl_curr_list || l_seperator || excl_curr_rec.user_code;
3360             l_exclude_flag := 'Y' ;
3361         END LOOP;
3362       END LOOP;
3363     ELSIF p_entity_type = 'CUSTOMER'
3364     THEN
3365       FOR rule_set_rec IN cust_rule_set_csr
3366       LOOP
3367           OPEN include_all_csr
3368              (rule_set_rec.credit_usage_rule_set_id);
3369 
3370           FETCH include_all_csr
3371           INTO  include_all_rec;
3372 
3373           IF include_all_csr%FOUND
3374           THEN
3375             l_include_all_flag := 'Y';
3376           ELSE
3377             l_include_all_flag := 'N';
3378           END IF;
3379 
3380           CLOSE include_all_csr;
3381 
3382         --------------------------------------------------------
3383         -- identify the included currencies for each rule set --
3384         --------------------------------------------------------
3385           FOR incl_curr_rec
3386           IN  incl_curr_csr
3387               (rule_set_rec.credit_usage_rule_set_id)
3388           LOOP
3389             l_incl_curr_list :=
3390             l_incl_curr_list || l_seperator || incl_curr_rec.user_code;
3391           END LOOP;
3392 
3393         --------------------------------------------------------
3394         -- identify the excluded currencies for each rule set --
3395         --------------------------------------------------------
3396 
3397           FOR excl_curr_rec
3398           IN  excl_curr_csr
3399                 (rule_set_rec.credit_usage_rule_set_id)
3400           LOOP
3401             l_excl_curr_list :=
3402             l_excl_curr_list || l_seperator || excl_curr_rec.user_code;
3403             l_exclude_flag := 'Y' ;
3404           END LOOP;
3405       END LOOP;
3406       -- End rule_set_rec
3407 
3408     ELSE   --- SITE level
3409       FOR rule_set_rec IN site_rule_set_csr
3410       LOOP
3411           OPEN include_all_csr
3412              (rule_set_rec.credit_usage_rule_set_id);
3413 
3414           FETCH include_all_csr
3415           INTO  include_all_rec;
3416 
3417           IF include_all_csr%FOUND
3418           THEN
3419             l_include_all_flag := 'Y';
3420           ELSE
3421             l_include_all_flag := 'N';
3422           END IF;
3423           CLOSE include_all_csr;
3424 
3425         --------------------------------------------------------
3426         -- identify the included currencies for each rule set --
3427         --------------------------------------------------------
3428           FOR incl_curr_rec
3429           IN  incl_curr_csr
3430             (rule_set_rec.credit_usage_rule_set_id)
3431           LOOP
3432             l_incl_curr_list :=
3433             l_incl_curr_list || l_seperator || incl_curr_rec.user_code;
3434           END LOOP;
3435 
3436         --------------------------------------------------------
3437         -- identify the excluded currencies for each rule set --
3438         --------------------------------------------------------
3439 
3440           FOR excl_curr_rec
3441           IN  excl_curr_csr
3442               (rule_set_rec.credit_usage_rule_set_id)
3443           LOOP
3444             l_excl_curr_list :=
3445             l_excl_curr_list || l_seperator || excl_curr_rec.user_code;
3446             l_exclude_flag := 'Y' ;
3447           END LOOP;
3448 
3449       END LOOP;
3450       -- End rule_set_rec
3451     END IF;
3452     -- end entity type IF
3453 
3454   ELSE
3455     -- Default limit = 'Y'
3456 
3457     IF G_debug_flag = 'Y'
3458     THEN
3459         OE_DEBUG_PUB.ADD(' Into Default limit = Y ');
3460     END IF ;
3461 
3462     FOR rule_set_rec IN dflt_rule_set_csr
3463     LOOP
3464         OPEN include_all_csr
3465              (rule_set_rec.credit_usage_rule_set_id);
3466 
3467         FETCH include_all_csr
3468         INTO  include_all_rec;
3469 
3470         IF include_all_csr%FOUND
3471         THEN
3472           l_include_all_flag := 'Y';
3473         ELSE
3474           l_include_all_flag := 'N';
3475         END IF;
3476 
3477         CLOSE include_all_csr;
3478 
3479       --------------------------------------------------------
3480       -- identify the included currencies for each rule set --
3481       --------------------------------------------------------
3482 
3483       FOR incl_curr_rec
3484       IN  incl_curr_csr
3485               (rule_set_rec.credit_usage_rule_set_id)
3486       LOOP
3487           l_incl_curr_list :=
3488 	  l_incl_curr_list || l_seperator || incl_curr_rec.user_code;
3489       END LOOP;
3490 
3491       --------------------------------------------------------
3492       -- identify the excluded currencies for each rule set --
3493       --------------------------------------------------------
3494 
3495       FOR excl_curr_rec
3496       IN  excl_curr_csr
3497               (rule_set_rec.credit_usage_rule_set_id)
3498       LOOP
3499           l_excl_curr_list :=
3500 	  l_excl_curr_list || l_seperator || excl_curr_rec.user_code;
3501           l_exclude_flag := 'Y' ;
3502       END LOOP;
3503     END LOOP;
3504       -- End dflt_rule_set_csr
3505   END IF;
3506   -- End default flag IF
3507 
3508   OE_CREDIT_CHECK_UTIL.G_excl_curr_list := l_excl_curr_list ;
3509 
3510   IF G_debug_flag = 'Y'
3511   THEN
3512     OE_DEBUG_PUB.ADD(' G_excl_curr_list => '||
3513     OE_CREDIT_CHECK_UTIL.G_excl_curr_list );
3514   END IF;
3515 -----------------------------------------------------------
3516   ---------------------------------------------
3517   -- identify all the transaction currencies
3518   --  This is required if we need to eliminate the
3519   -- currencies that were never used for any Orders
3520   -- or if Include all is set to Yes, as we need to
3521   -- find out NOCOPY the actual currencies
3522   ---------------------------------------------
3523 
3524   -- p_suppress_unused_usages_flag is used in conjunction
3525   -- with the l_include_all_flag
3526   -- The purpose of this flag is to get the transaction curr
3527   -- list even if the INCLUDE_ALL currency is set to Y
3528   -- For pre-calculated exposure, the include all flag alone
3529   -- is enough. But for online exposure calc, the transaction curr
3530   -- list is crucial even if include all currency is set to Y
3531   -- The reason being, the exposure calculation must know
3532   -- what currencies actualy have transactions against to avoid
3533   -- scanning the order tables for all currencies
3534 
3535   l_use_party_hierarchy := 'N' ;
3536   IF l_include_all_flag = 'Y' AND p_suppress_unused_usages_flag = 'Y'
3537   THEN
3538     IF p_entity_type = 'PARTY'
3539     THEN
3540       OPEN C_g_use_party_hierarchy ;
3541       FETCH C_g_use_party_hierarchy
3542       INTO l_use_party_hierarchy ;
3543       CLOSE C_g_use_party_hierarchy ;
3544 
3545       IF l_use_party_hierarchy = 'Y'
3546       THEN
3547         FOR trx_curr_rec
3548           IN party_h_txn_cur
3549         LOOP
3550           l_trx_curr_list :=
3551           l_trx_curr_list || l_seperator || trx_curr_rec.user_code;
3552         END LOOP;
3553       ELSE
3554         FOR trx_curr_rec
3555         IN party_txn_cur
3556         LOOP
3557           l_trx_curr_list :=
3558           l_trx_curr_list || l_seperator || trx_curr_rec.user_code;
3559         END LOOP;
3560       END IF; --- global
3561     END IF;
3562 
3563     IF p_entity_type = 'CUSTOMER'
3564     THEN
3565       IF p_global_exposure_flag = 'Y'
3566       THEN
3567           FOR trx_curr_rec
3568             IN trx_curr_csr_customer_global
3569           LOOP
3570             l_trx_curr_list :=
3571             l_trx_curr_list || l_seperator || trx_curr_rec.user_code;
3572           END LOOP;
3573       ELSE
3574           FOR trx_curr_rec
3575           IN trx_curr_csr_customer
3576           LOOP
3577             l_trx_curr_list :=
3578             l_trx_curr_list || l_seperator || trx_curr_rec.user_code;
3579           END LOOP;
3580       END IF; --- global
3581     END IF;
3582 
3583     IF p_entity_type = 'SITE'
3584     THEN
3585         FOR trx_curr_rec
3586         IN trx_curr_csr_site
3587         LOOP
3588           l_trx_curr_list :=
3589             l_trx_curr_list || l_seperator || trx_curr_rec.user_code;
3590         END LOOP;
3591     END IF;
3592 
3593   END IF;
3594     -- end l_include_all_flag, p_suppress IF
3595 
3596 
3597 ----------------- Start creating the usages curr table list ------
3598 
3599     IF p_suppress_unused_usages_flag = 'Y'
3600        AND l_include_all_flag = 'Y'
3601     THEN
3602 
3603       IF G_debug_flag = 'Y'
3604       THEN
3605         OE_DEBUG_PUB.ADD(' into suppress = Y ');
3606       END IF;
3607 
3608       -------------------------------------------------------
3609       -- include only the intersection of incl currencies  --
3610       -- and transaction currencies                        --
3611       -------------------------------------------------------
3612       l_start := 1;
3613       l_end   := 1;
3614 
3615       LOOP
3616         l_start := INSTRB (l_trx_curr_list,l_seperator,l_end,1);
3617         l_end   := INSTRB (l_trx_curr_list,l_seperator,l_start+1,1);
3618 
3619         IF NVL(l_start,0) = 0
3620         THEN
3621           -- List completed
3622           EXIT;
3623         END IF;
3624 
3625         IF NVL(l_end,0) = 0
3626         THEN
3627           l_end := LENGTHB (l_trx_curr_list) + 1;
3628         END IF;
3629 
3630         l_currency := SUBSTRB ( l_trx_curr_list
3631 			    , ( l_start + 1 )
3632 			    , ( l_end - l_start - 1 )
3633 			    );
3634         IF  NVL(INSTRB (l_incl_curr_list,l_currency,1,1),0) <> 0
3635           AND NVL(INSTRB (l_excl_curr_list,l_currency,1,1),0) = 0
3636         THEN
3637           i := i + 1;
3638           x_usage_curr_tbl(i).usage_curr_code := l_currency;
3639 
3640           IF l_currency = p_limit_curr_code
3641           THEN
3642             l_limit_flag := 'Y';
3643           END IF;
3644         END IF;
3645       END LOOP;
3646 
3647     ELSE
3648       IF G_debug_flag = 'Y'
3649       THEN
3650         OE_DEBUG_PUB.ADD(' into suppress = N ');
3651       END IF;
3652 
3653       -------------------------------------------------------
3654       -- first include all incl currencies (minus excl)    --
3655       -------------------------------------------------------
3656       l_start := 1;
3657       l_end   := 1;
3658 
3659       LOOP
3660         l_start := INSTRB (l_incl_curr_list,l_seperator,l_end,1);
3661         l_end   := INSTRB (l_incl_curr_list,l_seperator,l_start+1,1);
3662 
3663         IF NVL(l_start,0) = 0
3664         THEN
3665           EXIT;
3666         END IF;
3667 
3668         IF NVL(l_end,0) = 0
3669         THEN
3670           l_end := LENGTHB (l_incl_curr_list) + 1;
3671         END IF;
3672 
3673         l_currency := SUBSTRB ( l_incl_curr_list
3674                             , ( l_start + 1 )
3675   			    , ( l_end - l_start - 1 )
3676 			    );
3677 
3678         IF NVL(INSTRB (l_excl_curr_list,l_currency,1,1),0) = 0
3679         THEN
3680           i := i + 1;
3681           x_usage_curr_tbl(i).usage_curr_code := l_currency;
3682 
3683           IF l_currency = p_limit_curr_code
3684           THEN
3685             l_limit_flag := 'Y';
3686           END IF;
3687         END IF;
3688       END LOOP;
3689     END IF;
3690     -- end suppress flag IF
3691 
3692     IF l_include_all_flag = 'Y'
3693     THEN
3694       --------------------------------------------------------------
3695       -- include all trx currencies that are not already included --
3696       --------------------------------------------------------------
3697       l_start := 1;
3698       l_end   := 1;
3699 
3700       LOOP
3701         l_start := INSTRB (l_trx_curr_list,l_seperator,l_end,1);
3702         l_end   := INSTRB ( l_trx_curr_list ,l_seperator,l_start+1,1);
3703 
3704         IF NVL(l_start,0) = 0
3705         THEN
3706           EXIT;
3707         END IF;
3708 
3709         IF NVL(l_end,0) = 0
3710         THEN
3711           l_end := LENGTHB (l_trx_curr_list) + 1;
3712         END IF;
3713 
3714         l_currency := SUBSTRB ( l_trx_curr_list
3715 			      , ( l_start + 1 )
3716 			      , ( l_end - l_start - 1 )
3717 			      );
3718         IF NVL(INSTRB (l_incl_curr_list,l_currency,1,1),0) = 0
3719           AND NVL(INSTRB (l_excl_curr_list,l_currency,1,1),0) = 0
3720         THEN
3721           i := i + 1;
3722           x_usage_curr_tbl(i).usage_curr_code := l_currency;
3723 
3724           IF l_currency = p_limit_curr_code
3725           THEN
3726             l_limit_flag := 'Y';
3727           END IF;
3728         END IF;
3729       END LOOP;
3730 
3731     END IF;
3732     -- end l_include_all_flag IF
3733 
3734   -------------------------------------
3735   -- if the limit currency code is   --
3736   -- not already included, do it now --
3737   -------------------------------------
3738   IF l_limit_flag = 'N'
3739   THEN
3740     i := NVL(i,0) + 1;
3741     x_usage_curr_tbl(i).usage_curr_code := p_limit_curr_code;
3742   END IF;
3743 
3744   IF l_exclude_flag = 'Y'
3745   THEN
3746     IF p_suppress_unused_usages_flag = 'Y' THEN
3747       l_include_all_flag := 'N' ;
3748     END IF;
3749   END IF;
3750 
3751   x_include_all_flag := l_include_all_flag;
3752 
3753   IF G_debug_flag = 'Y'
3754   THEN
3755    OE_DEBUG_PUB.ADD('OEXUCRCB: OUT get_usages ');
3756   END IF;
3757 
3758 EXCEPTION
3759   WHEN OTHERS THEN
3760    G_DBG_MSG := SUBSTR(sqlerrm,1,200);
3761 
3762     IF FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
3763     THEN
3764       FND_MSG_PUB.Add_Exc_Msg
3765       ( G_PKG_NAME
3766       , 'get_usages'
3767       );
3768     END IF;
3769     RAISE;
3770 
3771 END get_usages ;
3772 
3773 
3774 -----------------------------------------------------------------------------
3775 --  PROCEDURE: GET_System_parameters           PUBLIC
3776 --  COMMENT    : Returns the OE system parameter info for the current org
3777 --  MODIFICATION:
3778 --  02/12/2002 vto Added NVL on org_id to handle multi-org/non multi-org setup
3779 ------------------------------------------------------------------------------
3780 PROCEDURE GET_System_parameters
3781 ( x_system_parameter_rec OUT NOCOPY
3782              OE_CREDIT_CHECK_UTIL.OE_systems_param_rec_type
3783 )
3784 IS
3785 BEGIN
3786   IF G_debug_flag = 'Y'
3787   THEN
3788     OE_DEBUG_PUB.ADD('OEXUCRCB: IN GET_System_parameters');
3789   END IF;
3790 
3791 --  BEGIN   /* MOAC CREDIT CHECK CHANGE */
3792   -- Start Sys Param Change
3793   /*
3794     SELECT
3795       org_id
3796     , master_organization_id
3797     , customer_relationships_flag
3798     INTO
3799       x_system_parameter_rec.org_id
3800     , x_system_parameter_rec.master_organization_id
3801     , x_system_parameter_rec.customer_relationships_flag
3802   FROM
3803     OE_system_parameters_all
3804   WHERE NVL(org_id,-99) = G_ORG_ID;
3805   */
3806 
3807   /* Start MOAC CREDIT CHECK CHANGE */
3808   /*
3809   x_system_parameter_rec.org_id := G_ORG_ID;
3810   x_system_parameter_rec.master_organization_id
3811                  := oe_sys_parameters.value('MASTER_ORGANIZATION_ID', G_ORG_ID);
3812   x_system_parameter_rec.customer_relationships_flag
3813                  :=oe_sys_parameters.value('CUSTOMER_RELATIONSHIPS_FLAG', G_ORG_ID);
3814   -- End Sys Param Change
3815 
3816     EXCEPTION
3817     WHEN NO_DATA_FOUND
3818     THEN
3819       x_system_parameter_rec := NULL ;
3820       OE_DEBUG_PUB.ADD(' Exception Get Syetem parameters');
3821   END ;
3822   */
3823   /* End MOAC CREDIT CHECK CHANGE */
3824 
3825   IF G_debug_flag = 'Y'
3826   THEN
3827     OE_DEBUG_PUB.ADD('OEXUCRCB: OUT GET_System_parameters');
3828   END IF;
3829  EXCEPTION
3830   WHEN OTHERS THEN
3831    G_DBG_MSG := SUBSTR(sqlerrm,1,200);
3832 
3833     IF FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
3834     THEN
3835       FND_MSG_PUB.Add_Exc_Msg
3836       ( G_PKG_NAME
3837       , 'GET_System_parameters'
3838       );
3839     END IF;
3840     RAISE;
3841 
3842 END GET_System_parameters ;
3843 
3844 ---------------------------------------------------------------------------
3845 --PROCEDURE: Get_Credit_Check_Rule_ID
3846 --COMMENT:   Returns the credit check rule id attached with
3847 --          the order trn type
3848 ---------------------------------------------------------------------------
3849 PROCEDURE Get_Credit_Check_Rule_ID
3850 ( p_calling_action       IN VARCHAR2
3851 , p_order_type_id        IN OE_ORDER_HEADERS.order_type_id%TYPE
3852 , x_credit_rule_id      OUT NOCOPY
3853                             OE_Credit_check_rules.credit_check_rule_id%TYPE
3854 )
3855 IS
3856 BEGIN
3857   IF G_debug_flag = 'Y'
3858   THEN
3859     OE_DEBUG_PUB.ADD('OEXUCRCB: In Get_Credit_Check_Rule_ID ');
3860     OE_DEBUG_PUB.ADD('p_order_type_id = '|| p_order_type_id );
3861     OE_DEBUG_PUB.ADD('p_calling_action = '|| p_calling_action );
3862   END IF;
3863 
3864   x_credit_rule_id := NULL ;
3865 
3866   IF p_calling_action in ('BOOKING','BOOKING_INLINE','AUTO','UPDATE')
3867   THEN
3868     IF G_debug_flag = 'Y'
3869     THEN
3870       OE_DEBUG_PUB.ADD('Selecting the order entry credit check rule');
3871     END IF;
3872 /*7194250
3873     SELECT ENTRY_CREDIT_CHECK_RULE_ID
3874     INTO   x_credit_rule_id
3875     FROM   OE_ORDER_TYPES_V
3876     WHERE  ORDER_TYPE_ID = p_order_type_id;
3877 7194250*/
3878 --7194250
3879     SELECT NVL(ENTRY_CREDIT_CHECK_RULE_ID, -1)
3880     INTO x_credit_rule_id
3881     FROM OE_ORDER_TYPES_V OT,OE_CREDIT_CHECK_RULES CCR
3882     WHERE OT.ORDER_TYPE_ID = p_order_type_id
3883     AND   ENTRY_CREDIT_CHECK_RULE_ID=CCR.CREDIT_CHECK_RULE_ID
3884     AND Trunc(SYSDATE) BETWEEN NVL(CCR.START_DATE_ACTIVE, Trunc(SYSDATE)) AND NVL(CCR.END_DATE_ACTIVE, Trunc(SYSDATE));
3885 --7194250
3886 
3887     OE_Verify_Payment_PUB.G_credit_check_rule := 'Ordering';   --ER#7479609
3888 
3889   ELSIF p_calling_action = 'SHIPPING'
3890    THEN
3891     IF G_debug_flag = 'Y'
3892     THEN
3893       OE_DEBUG_PUB.Add('Selecting the shipping credit check rule');
3894     END IF;
3895 
3896 /*7194250
3897     SELECT SHIPPING_CREDIT_CHECK_RULE_ID
3898     INTO   x_credit_rule_id
3899     FROM   OE_ORDER_TYPES_V
3900     WHERE  ORDER_TYPE_ID = p_order_type_id;
3901 7194250*/
3902 --7194250
3903     SELECT NVL(SHIPPING_CREDIT_CHECK_RULE_ID, -1)
3904     INTO x_credit_rule_id
3905     FROM OE_ORDER_TYPES_V OT,OE_CREDIT_CHECK_RULES CCR
3906     WHERE OT.ORDER_TYPE_ID = p_order_type_id
3907     AND   SHIPPING_CREDIT_CHECK_RULE_ID=CCR.CREDIT_CHECK_RULE_ID
3908     AND Trunc(SYSDATE) BETWEEN NVL(CCR.START_DATE_ACTIVE, Trunc(SYSDATE)) AND NVL(CCR.END_DATE_ACTIVE, Trunc(SYSDATE));
3909 --7194250
3910 
3911     OE_Verify_Payment_PUB.G_credit_check_rule := 'Shipping';   --ER#7479609
3912 
3913   ELSIF p_calling_action = 'PICKING'
3914   THEN
3915 
3916     IF G_debug_flag = 'Y'
3917     THEN
3918       OE_DEBUG_PUB.Add('Selecting the picking credit check rule');
3919     END IF;
3920 
3921 /*7194250
3922     SELECT PICKING_CREDIT_CHECK_RULE_ID
3923     INTO   x_credit_rule_id
3924     FROM   OE_ORDER_TYPES_V
3925     WHERE  ORDER_TYPE_ID = p_order_type_id;
3926 7194250*/
3927 --7194250
3928    SELECT NVL(PICKING_CREDIT_CHECK_RULE_ID, -1)
3929     INTO x_credit_rule_id
3930     FROM OE_ORDER_TYPES_V OT,OE_CREDIT_CHECK_RULES CCR
3931     WHERE OT.ORDER_TYPE_ID = p_order_type_id
3932     AND   PICKING_CREDIT_CHECK_RULE_ID=CCR.CREDIT_CHECK_RULE_ID
3933     AND Trunc(SYSDATE) BETWEEN NVL(CCR.START_DATE_ACTIVE, Trunc(SYSDATE)) AND NVL(CCR.END_DATE_ACTIVE, Trunc(SYSDATE));
3934 --7194250
3935 
3936     OE_Verify_Payment_PUB.G_credit_check_rule := 'Picking/Purchase Release';   --ER#7479609
3937 
3938   ELSIF p_calling_action = 'PACKING'
3939   THEN
3940     IF G_debug_flag = 'Y'
3941     THEN
3942       OE_DEBUG_PUB.Add('Selecting the packing credit check rule');
3943     END IF;
3944 
3945 /*7194250
3946     SELECT PACKING_CREDIT_CHECK_RULE_ID
3947     INTO   x_credit_rule_id
3948     FROM   OE_ORDER_TYPES_V
3949     WHERE  ORDER_TYPE_ID = p_order_type_id;
3950 7194250*/
3951 --7194250
3952     SELECT NVL(PACKING_CREDIT_CHECK_RULE_ID, -1)
3953     INTO x_credit_rule_id
3954     FROM OE_ORDER_TYPES_V OT,OE_CREDIT_CHECK_RULES CCR
3955     WHERE OT.ORDER_TYPE_ID = p_order_type_id
3956     AND   PACKING_CREDIT_CHECK_RULE_ID=CCR.CREDIT_CHECK_RULE_ID
3957     AND Trunc(SYSDATE) BETWEEN NVL(CCR.START_DATE_ACTIVE, Trunc(SYSDATE)) AND NVL(CCR.END_DATE_ACTIVE, Trunc(SYSDATE));
3958 --7194250
3959   END IF;
3960     OE_Verify_Payment_PUB.G_credit_check_rule := 'Packing';   --ER#7479609
3961 
3962   IF G_debug_flag = 'Y'
3963   THEN
3964 
3965     OE_DEBUG_PUB.ADD('OEXUCRCB: Credit Check Rule ID: '
3966        ||TO_CHAR(x_credit_rule_id) );
3967 
3968     OE_DEBUG_PUB.ADD('OEXUCRCB: Out NOCOPY Get_Credit_Check_Rule_ID');
3969   END IF;
3970 
3971 
3972 EXCEPTION
3973   WHEN NO_DATA_FOUND
3974   THEN
3975    x_credit_rule_id := NULL ;
3976    OE_DEBUG_PUB.ADD('EXCEPTION:No credit check rule found');
3977   WHEN OTHERS THEN
3978     IF OE_MSG_PUB.Check_Msg_Level(OE_MSG_PUB.G_MSG_LVL_UNEXP_ERROR) THEN
3979       OE_MSG_PUB.Add_Exc_Msg
3980       (   G_PKG_NAME
3981       ,   'Get_Credit_Check_Rule_ID'
3982       );
3983     END IF;
3984     RAISE ;
3985 END Get_Credit_Check_Rule_ID ;
3986 
3987 
3988 
3989 -----------------------------------------------------------------------------
3990 --  FUNCTION   : GET_credit_check_level
3991 --  COMMENT    : Returns ORDER or LINE
3992 --  BUG 2114156
3993 ------------------------------------------------------------------------------
3994 FUNCTION GET_credit_check_level
3995 ( p_calling_action     IN VARCHAR2
3996 , p_order_type_id      IN NUMBER
3997 ) RETURN VARCHAR2
3998 IS
3999 
4000 l_level VARCHAR2(30);
4001 l_credit_check_rule_id NUMBER;
4002 l_credit_check_rule_rec
4003         OE_CREDIT_CHECK_UTIL.OE_credit_rules_rec_type ;
4004 
4005 BEGIN
4006   IF G_debug_flag = 'Y'
4007   THEN
4008     OE_DEBUG_PUB.ADD('OEXUCRCB: IN GET_credit_check_level ');
4009     OE_DEBUG_PUB.ADD('p_calling_action = '|| p_calling_action );
4010     OE_DEBUG_PUB.ADD('p_order_type_id = '|| p_order_type_id );
4011   END IF;
4012 
4013   l_level := NULL ;
4014   l_credit_check_rule_id := NULL ;
4015 
4016   IF G_debug_flag = 'Y'
4017   THEN
4018     OE_DEBUG_PUB.ADD('  Calling Get_Credit_Check_Rule_ID ');
4019   END IF;
4020 
4021   OE_Credit_CHECK_UTIL.Get_Credit_Check_Rule_ID
4022   ( p_calling_action        => p_calling_action
4023   , p_order_type_id         => p_order_type_id
4024   , x_credit_rule_id        => l_credit_check_rule_id
4025   );
4026 
4027   IF G_debug_flag = 'Y'
4028   THEN
4029     OE_DEBUG_PUB.ADD(' out NOCOPY l_credit_check_rule_id = '||
4030        l_credit_check_rule_id );
4031   END IF;
4032 
4033   IF l_credit_check_rule_id is NULL
4034   THEN
4035     IF G_debug_flag = 'Y'
4036     THEN
4037       OE_DEBUG_PUB.ADD(' No credit check attached ');
4038     END IF;
4039 
4040     l_level := NULL ;
4041 
4042   ELSE
4043 
4044   IF G_debug_flag = 'Y'
4045   THEN
4046     OE_DEBUG_PUB.ADD('OEXUCRCB: Call GET_credit_check_rule ');
4047   END IF;
4048 
4049      OE_CREDIT_CHECK_UTIL.GET_credit_check_rule
4050     ( p_credit_check_rule_id   => l_credit_check_rule_id
4051     , x_credit_check_rules_rec => l_credit_check_rule_rec
4052     );
4053 
4054     IF G_debug_flag = 'Y'
4055     THEN
4056       OE_DEBUG_PUB.ADD('credit_check_level_code = '||
4057        l_credit_check_rule_rec.credit_check_level_code );
4058     END IF;
4059 
4060        l_level := l_credit_check_rule_rec.credit_check_level_code ;
4061 
4062   END IF;
4063 
4064   IF G_debug_flag = 'Y'
4065   THEN
4066     OE_DEBUG_PUB.ADD('OEXUCRCB: OUT NOCOPY GET_credit_check_level ' || l_level);
4067   END IF;
4068 
4069   RETURN( l_level ) ;
4070 
4071  EXCEPTION
4072   WHEN OTHERS THEN
4073    G_DBG_MSG := SUBSTR(sqlerrm,1,200);
4074 
4075     IF FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
4076     THEN
4077       FND_MSG_PUB.Add_Exc_Msg
4078       ( G_PKG_NAME
4079       , 'GET_credit_check_level'
4080       );
4081     END IF;
4082     RAISE;
4083 
4084 END GET_credit_check_level ;
4085 
4086 -----------------------------------------------------------------------------
4087 --  PROCEDURE: GET_credit_check_rule           PUBLIC
4088 --  COMMENT    : Returns the OE credit check rules info for the current org
4089 --
4090 ------------------------------------------------------------------------------
4091 PROCEDURE GET_credit_check_rule
4092 ( p_header_id              IN NUMBER := NULL
4093 , p_credit_check_rule_id   IN NUMBER
4094 , x_credit_check_rules_rec OUT NOCOPY
4095              OE_CREDIT_CHECK_UTIL.OE_credit_rules_rec_type
4096 )
4097 IS
4098 
4099 BEGIN
4100 
4101   IF G_debug_flag = 'Y'
4102   THEN
4103     OE_DEBUG_PUB.ADD('OEXUCRCB: IN GET_credit_check_rule ' );
4104   END IF;
4105 
4106   BEGIN
4107     IF G_debug_flag = 'Y'
4108     THEN
4109       OE_DEBUG_PUB.ADD(' Select for ID ' || p_credit_check_rule_id );
4110     END IF;
4111 
4112 
4113     SELECT
4114       credit_check_rule_id
4115     , name
4116     , failure_result_code
4117     , open_ar_balance_flag
4118     , uninvoiced_orders_flag
4119     , orders_on_hold_flag
4120     , shipping_interval
4121     , open_ar_days
4122     , start_date_active
4123     , end_date_active
4124     , include_payments_at_risk_flag
4125     , NVL(include_tax_flag,'N')
4126     , maximum_days_past_due
4127     , NVL(QUICK_CR_CHECK_FLAG,'N')
4128     , NVL(incl_freight_charges_flag,'N')
4129     , DECODE( shipping_interval, NULL,
4130               TO_DATE('31/12/4712','DD/MM/YYYY'), shipping_interval + SYSDATE
4131             )
4132     , NVL(credit_check_level_code,'ORDER')
4133     , NVL(credit_hold_level_code,'ORDER')
4134     , conversion_type
4135     , NVL(check_item_categories_flag,'N')
4136     , NVL(send_hold_notifications_flag,'N')
4137     , days_honor_manual_release
4138     , NVL(include_external_exposure_flag, 'N')
4139     , NVL(include_returns_flag, 'N')
4140     INTO
4141        x_credit_check_rules_rec.credit_check_rule_id
4142     ,  x_credit_check_rules_rec.name
4143     ,  x_credit_check_rules_rec.failure_result_code
4144     ,  x_credit_check_rules_rec.open_ar_balance_flag
4145     ,  x_credit_check_rules_rec.uninvoiced_orders_flag
4146     ,  x_credit_check_rules_rec.orders_on_hold_flag
4147     ,  x_credit_check_rules_rec.shipping_interval
4148     ,  x_credit_check_rules_rec.open_ar_days
4149     ,  x_credit_check_rules_rec.start_date_active
4150     ,  x_credit_check_rules_rec.end_date_active
4151     ,  x_credit_check_rules_rec.include_payments_at_risk_flag
4152     ,  x_credit_check_rules_rec.include_tax_flag
4153     ,  x_credit_check_rules_rec.maximum_days_past_due
4154     ,  x_credit_check_rules_rec.QUICK_CR_CHECK_FLAG
4155     ,  x_credit_check_rules_rec.incl_freight_charges_flag
4156     ,  x_credit_check_rules_rec.shipping_horizon
4157     ,  x_credit_check_rules_rec.credit_check_level_code
4158     ,  x_credit_check_rules_rec.credit_hold_level_code
4159     ,  x_credit_check_rules_rec.conversion_type
4160     ,  x_credit_check_rules_rec.check_item_categories_flag
4161     ,  x_credit_check_rules_rec.send_hold_notifications_flag
4162     ,  x_credit_check_rules_rec.days_honor_manual_release
4163     ,  x_credit_check_rules_rec.include_external_exposure_flag
4164     ,  x_credit_check_rules_rec.include_returns_flag
4165     FROM
4166       OE_Credit_Check_rules
4167     WHERE credit_check_rule_id = p_credit_check_rule_id ;
4168 
4169       --bug 5031301
4170       /*The Include Open Recaivables cursors which we use includes payments at risk also.
4171         This will make the cursors behave as follows:
4172 	If open_ar_balance_flag = 'Y' AND include_risk_flag ='Y' then
4173 		Just consider AR balance, as it already includes payments at risk.
4174 		Ignore payments at risk cursor value
4175 	Else if open_ar_balance_flag = 'Y' AND include_risk_flag ='N' then
4176 		Consider both AR balance and payments at risk, so that it nullifies the effect.
4177 		As such we are not considering payments at risk.
4178 	Else (both are 'N')
4179 		Do Nothing.
4180 	End if*/
4181 	IF x_credit_check_rules_rec.open_ar_balance_flag ='Y'
4182 	   AND x_credit_check_rules_rec.include_payments_at_risk_flag = 'Y'
4183 	THEN
4184 	   x_credit_check_rules_rec.include_payments_at_risk_flag := 'N';
4185 	ELSIF x_credit_check_rules_rec.open_ar_balance_flag ='Y'
4186 	   AND x_credit_check_rules_rec.include_payments_at_risk_flag = 'N'
4187 	THEN
4188 	   x_credit_check_rules_rec.include_payments_at_risk_flag := 'Y';
4189 	END IF;
4190 
4191     EXCEPTION
4192     WHEN NO_DATA_FOUND
4193     THEN
4194       x_credit_check_rules_rec := NULL ;
4195       OE_DEBUG_PUB.ADD(' Get credit check rule No_Data_Found exception ' );
4196 
4197     WHEN TOO_MANY_ROWS
4198     THEN
4199       x_credit_check_rules_rec := NULL ;
4200       OE_DEBUG_PUB.ADD(' Get credit check rule TOO_MANY_ROWS ');
4201   END ;
4202 
4203   IF G_debug_flag = 'Y'
4204   THEN
4205     OE_DEBUG_PUB.ADD(' conversion_type = '
4206       || x_credit_check_rules_rec.conversion_type );
4207   END IF;
4208 
4209   BEGIN
4210     IF NVL(x_credit_check_rules_rec.conversion_type,'Corporate')
4211      NOT IN ('Corporate','User')
4212     THEN
4213       BEGIN
4214         IF G_debug_flag = 'Y'
4215         THEN
4216           OE_DEBUG_PUB.ADD(' Select user_conversion_type ');
4217         END IF;
4218 
4219         SELECT
4220           user_conversion_type
4221         INTO
4222           x_credit_check_rules_rec.user_conversion_type
4223         FROM
4224          GL_DAILY_CONVERSION_TYPES
4225         WHERE conversion_type =  x_credit_check_rules_rec.conversion_type ;
4226 
4227         EXCEPTION
4228 
4229         WHEN NO_DATA_FOUND
4230         THEN
4231           x_credit_check_rules_rec.user_conversion_type :=
4232               x_credit_check_rules_rec.conversion_type ;
4233           OE_DEBUG_PUB.ADD(' conversion type NO_DATA_FOUND ');
4234 
4235         WHEN TOO_MANY_ROWS
4236         THEN
4237            x_credit_check_rules_rec.user_conversion_type :=
4238               x_credit_check_rules_rec.conversion_type ;
4239           OE_DEBUG_PUB.ADD(' conversion type TOO_MANY_ROWS ');
4240      END ;
4241 
4242    ELSE
4243      IF G_debug_flag = 'Y'
4244      THEN
4245       OE_DEBUG_PUB.ADD(' No need for selct user_conversion_type ');
4246      END IF;
4247 
4248     x_credit_check_rules_rec.user_conversion_type :=
4249           x_credit_check_rules_rec.conversion_type ;
4250    END IF;
4251 
4252 
4253   END ;
4254 
4255   IF G_debug_flag = 'Y'
4256   THEN
4257     OE_DEBUG_PUB.ADD('Conversion type = '
4258            || x_credit_check_rules_rec.conversion_type );
4259 
4260     OE_DEBUG_PUB.ADD('User Conversion type = '
4261            || x_credit_check_rules_rec.user_conversion_type );
4262 
4263     OE_DEBUG_PUB.ADD('OEXUCRCB: OUT NOCOPY GET_credit_check_rule ' );
4264   END IF;
4265 
4266  EXCEPTION
4267   WHEN OTHERS THEN
4268    G_DBG_MSG := SUBSTR(sqlerrm,1,200);
4269 
4270     IF FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
4271     THEN
4272       FND_MSG_PUB.Add_Exc_Msg
4273       ( G_PKG_NAME
4274       , 'GET_credit_check_rule'
4275       );
4276     END IF;
4277     RAISE;
4278 
4279 END GET_credit_check_rule ;
4280 
4281 -----------------------------------------------------------------------------
4282 --  PROCEDURE  : Rounded_Amount    PUBLIC
4283 --  COMMENT    : Returns rounded amount
4284 --  BUG  4320650
4285 ---------------------------------------------------------------------------
4286 
4287 PROCEDURE Rounded_Amount
4288 (  p_currency_code      IN   VARCHAR2
4289 ,  p_unrounded_amount   IN   NUMBER
4290 ,  x_rounded_amount     OUT NOCOPY NUMBER
4291 )
4292 IS
4293 l_precision         NUMBER;
4294 l_ext_precision     NUMBER;
4295 l_min_acct_unit     NUMBER;
4296 --
4297 l_debug_level CONSTANT NUMBER := oe_debug_pub.g_debug_level;
4298 --
4299 BEGIN
4300 
4301      IF l_debug_level  > 0 THEN
4302          oe_debug_pub.add(  'OEXUCRCB: IN  ROUNDED_AMOUNT ( )  WITH AMOUNT : ' ||P_UNROUNDED_AMOUNT , 5 ) ;
4303      END IF;
4304      FND_CURRENCY.GET_INFO(Currency_Code => p_currency_code,
4305                            precision     => l_precision,
4306                            ext_precision => l_ext_precision,
4307                            min_acct_unit => l_min_acct_unit);
4308 
4309      IF (l_min_acct_unit = 0 OR l_min_acct_unit IS NULL) THEN
4310           x_rounded_amount := ROUND(p_unrounded_amount, l_precision);
4311      ELSE
4312           x_rounded_amount := ROUND(p_unrounded_amount/l_min_acct_unit)*l_min_acct_unit;
4313      END IF;
4314      IF l_debug_level  > 0 THEN
4315          oe_debug_pub.add(  'OEXUCRCB: OUT ROUNDED AMOUNT ( ) WITH AMOUNT : '||X_ROUNDED_AMOUNT , 5 ) ;
4316      END IF;
4317 END Rounded_Amount;
4318 
4319 -----------------------------------------------------------------------------
4320 --  PROCEDURE: GET_transaction_amount           PUBLIC
4321 --  COMMENT    : Returns the transaction amount for a given order. If the
4322 --               p_site_use_id IS null, the entire order is considered
4323 --               x_conversion_status provides any currency conversion
4324 --               error.
4325 -- BUG 2056412 Freights include
4326 -- BUG 4320650 Rounded the transaction amount
4327 ------------------------------------------------------------------------------
4328 PROCEDURE GET_transaction_amount
4329 ( p_header_id              IN  NUMBER
4330 , p_transaction_curr_code  IN  VARCHAR2
4331 , p_credit_check_rule_rec IN
4332              OE_CREDIT_CHECK_UTIL.OE_credit_rules_rec_type
4333 , p_system_parameter_rec   IN
4334              OE_CREDIT_CHECK_UTIL.OE_systems_param_rec_type
4335 , p_customer_id            IN   NUMBER
4336 , p_site_use_id            IN   NUMBER
4337 , p_limit_curr_code        IN   VARCHAR2
4338 , x_amount                 OUT  NOCOPY NUMBER
4339 , x_conversion_status      OUT  NOCOPY OE_CREDIT_CHECK_UTIL.CURR_TBL_TYPE
4340 , x_return_status          OUT  NOCOPY VARCHAR2
4341 )
4342 IS
4343 
4344 l_order_value       NUMBER := 0;
4345 L_LIMIT_ORDER_VALUE NUMBER := 0;
4346 l_commitment        NUMBER := 0;
4347 l_freights          NUMBER := 0;
4348 l_freights_hdr_1    NUMBER := 0;
4349 l_freights_hdr_2    NUMBER := 0;
4350 l_prepayment        NUMBER := 0;
4351 
4352 BEGIN
4353 
4354   IF G_debug_flag = 'Y'
4355   THEN
4356     OE_DEBUG_PUB.ADD('OEXUCRCB: IN GET_transaction_amount for '
4357         || p_header_id );
4358   END IF;
4359 
4360  -- For line level, if it is customer level credit check
4361  -- all the lines belonging to the sites owned by the
4362  -- customer  in the order needs to be considered as per the RDD
4363 
4364  -- Bug 2328351 check for line ctg code as well
4365 
4366   x_return_status     := FND_API.G_RET_STS_SUCCESS;
4367 
4368   OE_CREDIT_CHECK_UTIL.g_current_order_value := NULL ;
4369 
4370   IF p_credit_check_rule_rec.credit_check_level_code = 'LINE'
4371   THEN
4372     IF G_debug_flag = 'Y'
4373     THEN
4374       OE_DEBUG_PUB.ADD('In Line level ');
4375     END IF;
4376 
4377     IF p_customer_id IS NOT NULL -- line level CC
4378     THEN
4379       -----added for Returns
4380       IF NVL(p_credit_check_rule_rec.include_returns_flag,'N')='N'
4381       THEN
4382         ---returns are not included
4383 
4384         IF G_debug_flag = 'Y'
4385         THEN
4386           OE_DEBUG_PUB.ADD('Line - Customer level select,no returns ');
4387         END IF;
4388 
4389         SELECT SUM ( DECODE( p_credit_check_rule_rec.include_tax_flag , 'Y',
4390                          NVL(l.tax_value,0), 0 )
4391                + ( l.unit_selling_price * l.ordered_quantity )
4392                )
4393         INTO   l_order_value
4394         FROM   oe_order_lines l,
4395                oe_order_headers_all h,
4396                ra_terms_b t,
4397                HZ_CUST_SITE_USES_ALL su,
4398                HZ_CUST_ACCT_SITES_ALL cas
4399         WHERE  h.header_id                   = p_header_id
4400           AND  h.org_id                      = l.org_id                      /* MOAC_SQL_CHANGE */
4401           AND  h.header_id                   = l.header_id
4402           AND  l.invoice_to_org_id           = su.site_use_id
4403           AND  su.CUST_ACCT_SITE_ID          = cas.CUST_ACCT_SITE_ID
4404           AND  cas.cust_account_id           = p_customer_id
4405           AND  l.open_flag                   = 'Y'
4406           AND  (l.invoiced_quantity IS NULL OR l.invoiced_quantity = 0)
4407           AND  t.term_id                     = l.payment_term_id
4408           AND  l.line_category_code          = 'ORDER'
4409           AND  t.credit_check_flag           = 'Y'
4410           AND  (EXISTS
4411                  (SELECT NULL
4412                   FROM   oe_payment_types_all pt
4413                   WHERE  pt.payment_type_code = NVL(l.payment_type_code,
4414                                                 NVL(h.payment_type_code, 'BME'))
4415                   AND    pt.credit_check_flag = 'Y'
4416                   AND    NVL(pt.org_id, -99)  = G_ORG_ID)
4417                 OR
4418                 (l.payment_type_code IS NULL AND h.payment_type_code IS NULL));
4419 
4420       ELSE
4421         ---returns are included
4422 
4423         IF G_debug_flag = 'Y'
4424         THEN
4425           OE_DEBUG_PUB.ADD('Line - Customer level select,with returns ');
4426         END IF;
4427 
4428         SELECT
4429           SUM ( DECODE( p_credit_check_rule_rec.include_tax_flag , 'Y',
4430             NVL(DECODE(l.line_category_code,'RETURN',(-1)*l.tax_value,l.tax_value),0), 0 )
4431             + ( l.unit_selling_price *
4432             (DECODE(l.line_category_code,'RETURN',(-1)*l.ordered_quantity,
4433             l.ordered_quantity) )
4434               ))
4435         INTO   l_order_value
4436         FROM   oe_order_lines l,
4437                oe_order_headers_all h,
4438                ra_terms_b t,
4439                HZ_CUST_SITE_USES_ALL su,
4440                HZ_CUST_ACCT_SITES_ALL cas
4441         WHERE  h.header_id                   = p_header_id
4442           AND  h.org_id                      = l.org_id                       /* MOAC_SQL_CHANGE */
4443           AND  h.header_id                   = l.header_id
4444           AND  l.invoice_to_org_id           = su.site_use_id
4445           AND  su.CUST_ACCT_SITE_ID          = cas.CUST_ACCT_SITE_ID
4446           AND  cas.cust_account_id           = p_customer_id
4447           AND  l.open_flag                   = 'Y'
4448           AND  (l.invoiced_quantity IS NULL OR l.invoiced_quantity = 0)
4449           AND  t.term_id                     = l.payment_term_id
4450           AND  t.credit_check_flag           = 'Y'
4451           AND  (EXISTS
4452                  (SELECT NULL
4453                   FROM   oe_payment_types_all pt
4454                   WHERE  pt.payment_type_code = NVL(l.payment_type_code,
4455                                                 NVL(h.payment_type_code, 'BME'))
4456                   AND    pt.credit_check_flag = 'Y'
4457                   AND    NVL(pt.org_id, -99)  = G_ORG_ID)
4458                 OR
4459                 (l.payment_type_code IS NULL AND h.payment_type_code IS NULL));
4460 
4461 
4462       END IF; ----end for checking if returns are included
4463 
4464      IF G_debug_flag = 'Y'
4465      THEN
4466        OE_DEBUG_PUB.ADD('Check for Committment profile ');
4467      END IF;
4468 
4469      IF OE_Commitment_PVT.Do_Commitment_Sequencing THEN
4470        BEGIN
4471          IF G_debug_flag = 'Y'
4472          THEN
4473            OE_DEBUG_PUB.ADD('Customer level commitment select ');
4474          END IF;
4475 
4476            SELECT NVL(SUM(P.commitment_applied_amount), 0)
4477            INTO   l_commitment
4478 	     FROM   OE_PAYMENTS P, OE_ORDER_HEADERS_ALL H, OE_ORDER_LINES L ,
4479                   HZ_CUST_SITE_USES_ALL su,
4480                   HZ_CUST_ACCT_SITES_ALL cas,
4481                   ra_terms_b t
4482            WHERE  h.header_id                 = p_header_id
4483            AND  h.org_id                      = l.org_id                       /* MOAC_SQL_CHANGE */
4484            AND  h.header_id                   = l.header_id
4485            AND  l.invoice_to_org_id           = su.site_use_id
4486            AND  su.CUST_ACCT_SITE_ID          = cas.CUST_ACCT_SITE_ID
4487            AND  cas.cust_account_id           = p_customer_id
4488            AND  l.open_flag                   = 'Y'
4489            AND  (l.invoiced_quantity IS NULL OR l.invoiced_quantity = 0)
4490            AND  t.term_id                     = l.payment_term_id
4491            AND  t.credit_check_flag           = 'Y'
4492            AND  p.header_id                   = p_header_id
4493            AND  p.line_id                     = l.line_id
4494            AND  l.line_category_code          = 'ORDER'
4495            AND  p.header_id                   = h.header_id
4496            AND  (EXISTS
4497                  (SELECT NULL
4498                   FROM   oe_payment_types_all pt
4499                   WHERE  pt.payment_type_code = NVL(l.payment_type_code,
4500                                                 NVL(h.payment_type_code, 'BME'))
4501                   AND    pt.credit_check_flag = 'Y'
4502                   AND    NVL(pt.org_id, -99)  = G_ORG_ID)
4503                 OR
4504                 (l.payment_type_code IS NULL AND h.payment_type_code IS NULL));
4505 
4506              EXCEPTION
4507              WHEN NO_DATA_FOUND
4508              THEN
4509                OE_DEBUG_PUB.ADD(' NO commitment-1 found ');
4510                l_commitment := 0 ;
4511 
4512              WHEN TOO_MANY_ROWS
4513              THEN
4514                OE_DEBUG_PUB.ADD(' Too many rows exception NO commtment-1');
4515                l_commitment := 0 ;
4516          END ;
4517        END IF; --- commitment
4518 
4519 
4520        IF  p_credit_check_rule_rec.incl_freight_charges_flag
4521               = 'Y'
4522        THEN
4523          -----added for Returns
4524          IF NVL(p_credit_check_rule_rec.include_returns_flag,'N')='N'
4525          THEN
4526            ---returns are not included
4527            IF G_debug_flag = 'Y'
4528            THEN
4529              OE_DEBUG_PUB.ADD(' Process trx freights - Line level customer without returns ');
4530            END IF;
4531 
4532            BEGIN
4533              SELECT
4534               SUM
4535               ( DECODE( p.credit_or_charge_flag, 'C', (-1), (+1) )
4536               * DECODE( p.arithmetic_operator, 'LUMPSUM',          --bug 4295299
4537                         p.operand, (l.ordered_quantity * p.adjusted_amount))
4538               )
4539              INTO l_freights
4540              FROM oe_order_lines l,
4541                   oe_order_headers_all h,
4542                   ra_terms_b t,
4543                   HZ_CUST_SITE_USES_ALL su,
4544                   HZ_CUST_ACCT_SITES_ALL cas,
4545                   oe_price_adjustments p
4546              WHERE  h.header_id                  = p_header_id
4547                AND  h.org_id                     = l.org_id                       /* MOAC_SQL_CHANGE */
4548                AND  h.header_id                  = l.header_id
4549                AND  p.line_id                    =  l.line_id
4550                AND  p.header_id                  =  l.header_id
4551                AND  p.header_id                  =  h.header_id
4552                AND  l.invoice_to_org_id          = su.site_use_id
4553                AND  p.applied_flag               =  'Y'
4554                AND  p.list_line_type_code        =  'FREIGHT_CHARGE'
4555                AND  (p.invoiced_flag IS NULL OR p.invoiced_flag =  'N' )
4556                AND  su.CUST_ACCT_SITE_ID         = cas.CUST_ACCT_SITE_ID
4557                AND  cas.cust_account_id          = p_customer_id
4558                AND  l.open_flag                  = 'Y'
4559                AND  (l.invoiced_quantity IS NULL OR l.invoiced_quantity = 0)
4560                AND  t.term_id                    = l.payment_term_id
4561                AND  l.line_category_code         = 'ORDER'
4562                AND  t.credit_check_flag          = 'Y'
4563                AND  (EXISTS
4564                      (SELECT NULL
4565                       FROM   oe_payment_types_all pt
4566                       WHERE  pt.payment_type_code = NVL(l.payment_type_code,
4567                                                 NVL(h.payment_type_code, 'BME'))
4568                       AND    pt.credit_check_flag = 'Y'
4569                       AND    NVL(pt.org_id, -99)  = G_ORG_ID)
4570                     OR
4571                     (l.payment_type_code IS NULL AND h.payment_type_code IS NULL));
4572 
4573            EXCEPTION
4574               WHEN NO_DATA_FOUND
4575               THEN
4576                 OE_DEBUG_PUB.ADD(' NO Freights found ');
4577                 l_freights := 0 ;
4578 
4579            END ;
4580          ELSE
4581            ---returns are included
4582            IF G_debug_flag = 'Y'
4583            THEN
4584              OE_DEBUG_PUB.ADD(' Process trx freights - Line level customer,with returns ');
4585            END IF;
4586 
4587            BEGIN
4588              SELECT
4589               SUM
4590               ( DECODE( p.credit_or_charge_flag, 'C', (-1), (+1) )
4591               * DECODE( p.arithmetic_operator, 'LUMPSUM',          --bug 4295299
4592                         p.operand, (l.ordered_quantity * p.adjusted_amount))
4593               )
4594              INTO l_freights
4595              FROM oe_order_lines l,
4596                   oe_order_headers_all h,
4597                   ra_terms_b t,
4598                   HZ_CUST_SITE_USES_ALL su,
4599                   HZ_CUST_ACCT_SITES_ALL cas,
4600                   oe_price_adjustments p
4601              WHERE  h.header_id                  = p_header_id
4602                AND  h.org_id                     = l.org_id                      /* MOAC_SQL_CHANGE */
4603                AND  h.header_id                  = l.header_id
4604                AND  p.line_id                    =  l.line_id
4605                AND  p.header_id                  =  l.header_id
4606                AND  p.header_id                  =  h.header_id
4607                AND  l.invoice_to_org_id          = su.site_use_id
4608                AND  p.applied_flag               =  'Y'
4609                AND  p.list_line_type_code        =  'FREIGHT_CHARGE'
4610                AND  (p.invoiced_flag IS NULL OR p.invoiced_flag =  'N' )
4611                AND  su.CUST_ACCT_SITE_ID         = cas.CUST_ACCT_SITE_ID
4612                AND  cas.cust_account_id          = p_customer_id
4613                AND  l.open_flag                  = 'Y'
4614                AND  (l.invoiced_quantity IS NULL OR l.invoiced_quantity = 0)
4615                AND  t.term_id                    = l.payment_term_id
4616                AND  t.credit_check_flag          = 'Y'
4617                AND  (EXISTS
4618                      (SELECT NULL
4619                       FROM   oe_payment_types_all pt
4620                       WHERE  pt.payment_type_code = NVL(l.payment_type_code,
4621                                                 NVL(h.payment_type_code, 'BME'))
4622                       AND    pt.credit_check_flag = 'Y'
4623                       AND    NVL(pt.org_id, -99)  = G_ORG_ID)
4624                     OR
4625                     (l.payment_type_code IS NULL AND h.payment_type_code IS NULL));
4626            EXCEPTION
4627               WHEN NO_DATA_FOUND
4628               THEN
4629                 OE_DEBUG_PUB.ADD(' NO Freights found ');
4630                 l_freights := 0 ;
4631 
4632            END ;
4633 
4634          END IF; ----end of checking if returns are included
4635 
4636        END IF; -- Freights
4637 
4638 
4639 
4640      ELSE
4641        -----added for Returns
4642        IF NVL(p_credit_check_rule_rec.include_returns_flag,'N')='N'
4643        THEN
4644          ---returns are not included
4645 
4646          IF G_debug_flag = 'Y'
4647          THEN
4648            OE_DEBUG_PUB.ADD('Line - Site level select ');
4649          END IF;
4650 
4651          SELECT SUM ( DECODE( p_credit_check_rule_rec.include_tax_flag , 'Y',
4652                     NVL(l.tax_value,0), 0 )
4653              + ( l.unit_selling_price * l.ordered_quantity )
4654                )
4655          INTO   l_order_value
4656          FROM   oe_order_lines l,
4657                 oe_order_headers_all h,
4658                 ra_terms_b t
4659          WHERE  h.header_id                   = p_header_id
4660            AND  h.org_id                      = l.org_id            /* MOAC_SQL_CHANGE */
4661            AND  h.header_id                   = l.header_id
4662            AND  l.invoice_to_org_id           = p_site_use_id
4663            AND  l.open_flag                   = 'Y'
4664            AND  l.line_category_code          = 'ORDER'
4665            AND  (l.invoiced_quantity IS NULL OR l.invoiced_quantity = 0)
4666            AND  t.term_id                     = l.payment_term_id
4667            AND  t.credit_check_flag           = 'Y'
4668            AND  (EXISTS
4669                    (SELECT NULL
4670                     FROM   oe_payment_types_all pt
4671                     WHERE  pt.payment_type_code = NVL(l.payment_type_code,
4672                                               NVL(h.payment_type_code, 'BME'))
4673                     AND    pt.credit_check_flag = 'Y'
4674                     AND    NVL(pt.org_id, -99)  = G_ORG_ID)
4675                  OR
4676                 (l.payment_type_code IS NULL AND h.payment_type_code IS NULL));
4677 
4678        ELSE
4679          ---returns are included
4680 
4681          IF G_debug_flag = 'Y'
4682          THEN
4683            OE_DEBUG_PUB.ADD('Line - Site level select,including returns ');
4684          END IF;
4685 
4686          SELECT
4687            SUM ( DECODE( p_credit_check_rule_rec.include_tax_flag , 'Y',
4688            NVL(DECODE(l.line_category_code,'RETURN',(-1)*l.tax_value,l.tax_value),0), 0 )
4689            + (l.unit_selling_price * DECODE(l.line_category_code,'RETURN',
4690            (-1)*l.ordered_quantity,l.ordered_quantity))
4691               )
4692          INTO   l_order_value
4693          FROM   oe_order_lines l,
4694                 oe_order_headers_all h,
4695                 ra_terms_b t
4696          WHERE  h.header_id                   = p_header_id
4697            AND  h.org_id                      = l.org_id            /* MOAC_SQL_CHANGE */
4698            AND  h.header_id                   = l.header_id
4699            AND  l.invoice_to_org_id           = p_site_use_id
4700            AND  l.open_flag                   = 'Y'
4701            AND  (l.invoiced_quantity IS NULL OR l.invoiced_quantity = 0)
4702            AND  t.term_id                     = l.payment_term_id
4703            AND  t.credit_check_flag           = 'Y'
4704            AND  (EXISTS
4705                    (SELECT NULL
4706                     FROM   oe_payment_types_all pt
4707                     WHERE  pt.payment_type_code = NVL(l.payment_type_code,
4708                                               NVL(h.payment_type_code, 'BME'))
4709                     AND    pt.credit_check_flag = 'Y'
4710                     AND    NVL(pt.org_id, -99)  = G_ORG_ID)
4711                  OR
4712                 (l.payment_type_code IS NULL AND h.payment_type_code IS NULL));
4713 
4714        END IF; ---end of checking for returns
4715 
4716        IF G_debug_flag = 'Y'
4717        THEN
4718          OE_DEBUG_PUB.ADD('Check for Committment ');
4719        END IF;
4720 
4721      IF OE_Commitment_PVT.Do_Commitment_Sequencing THEN
4722        BEGIN
4723            SELECT NVL(SUM(P.commitment_applied_amount), 0)
4724            INTO   l_commitment
4725 	     FROM   OE_PAYMENTS P,
4726                   OE_ORDER_HEADERS_ALL H,
4727                   OE_ORDER_LINES L,
4728                   ra_terms_b t
4729            WHERE  h.header_id                   = p_header_id
4730              AND  h.org_id                      = l.org_id            /* MOAC_SQL_CHANGE */
4731              AND  h.header_id                   = l.header_id
4732              AND  l.invoice_to_org_id           = p_site_use_id
4733              AND  l.open_flag                   = 'Y'
4734              AND  l.line_category_code   = 'ORDER'
4735              AND  (l.invoiced_quantity IS NULL OR l.invoiced_quantity = 0)
4736              AND  t.term_id                     = l.payment_term_id
4737              AND  t.credit_check_flag           = 'Y'
4738              AND  p.header_id                   = p_header_id
4739              AND  l.line_id                     = p.line_id
4740              AND  p.header_id                   = h.header_id
4741              AND  (EXISTS
4742                    (SELECT NULL
4743                     FROM   oe_payment_types_all pt
4744                     WHERE  pt.payment_type_code = NVL(l.payment_type_code,
4745                                               NVL(h.payment_type_code, 'BME'))
4746                     AND    pt.credit_check_flag = 'Y'
4747                     AND    NVL(pt.org_id, -99)  = G_ORG_ID)
4748                    OR
4749                    (l.payment_type_code IS NULL AND h.payment_type_code IS NULL));
4750 
4751            EXCEPTION
4752            WHEN NO_DATA_FOUND
4753            THEN
4754              OE_DEBUG_PUB.ADD(' NO commitment-1 found ');
4755              l_commitment := 0 ;
4756 
4757            WHEN TOO_MANY_ROWS
4758            THEN
4759           OE_DEBUG_PUB.ADD(' Too many rows excepn NO commitment-1 found ');
4760              l_commitment := 0 ;
4761          END ;
4762        END IF; --- commitment
4763 
4764        IF  p_credit_check_rule_rec.incl_freight_charges_flag
4765               = 'Y'
4766        THEN
4767 
4768          -----added for Returns
4769          IF NVL(p_credit_check_rule_rec.include_returns_flag,'N')='N'
4770          THEN
4771            ---returns are not included
4772 
4773            IF G_debug_flag = 'Y'
4774            THEN
4775              OE_DEBUG_PUB.ADD(' Process trx freights - Line level site,no returns ');
4776            END IF;
4777 
4778            BEGIN
4779              SELECT
4780               SUM
4781               ( DECODE( p.credit_or_charge_flag, 'C', (-1), (+1) )
4782               * DECODE( p.arithmetic_operator, 'LUMPSUM',          --bug 4295299
4783                         p.operand, (l.ordered_quantity * p.adjusted_amount))
4784               )
4785              INTO l_freights
4786              FROM oe_order_lines l,
4787                   oe_order_headers_all h,
4788                   ra_terms_b t,
4789                   oe_price_adjustments p
4790              WHERE  h.header_id                  = p_header_id
4791                AND  h.org_id                     = l.org_id           /* MOAC_SQL_CHANGE */
4792                AND  h.header_id                  = l.header_id
4793                AND  p.line_id                    =  l.line_id
4794                AND  p.header_id                  =  l.header_id
4795                AND  p.header_id                  =  h.header_id
4796                AND  l.invoice_to_org_id          = p_site_use_id
4797                AND  p.applied_flag               =  'Y'
4798                AND  p.list_line_type_code        =  'FREIGHT_CHARGE'
4799                AND  (p.invoiced_flag IS NULL OR p.invoiced_flag = 'N')
4800                AND  l.open_flag                  = 'Y'
4801                AND  l.line_category_code         = 'ORDER'
4802                AND  (l.invoiced_quantity IS NULL OR l.invoiced_quantity = 0)
4803                AND  t.term_id                    = l.payment_term_id
4804                AND  t.credit_check_flag          = 'Y'
4805                AND  (EXISTS
4806                       (SELECT NULL
4807                        FROM   oe_payment_types_all pt
4808                        WHERE  pt.payment_type_code = NVL(l.payment_type_code,
4809                                               NVL(h.payment_type_code, 'BME'))
4810                        AND    pt.credit_check_flag = 'Y'
4811                        AND    NVL(pt.org_id, -99)  = G_ORG_ID)
4812                      OR
4813                      (l.payment_type_code IS NULL AND h.payment_type_code IS NULL));
4814            EXCEPTION
4815              WHEN NO_DATA_FOUND
4816              THEN
4817                OE_DEBUG_PUB.ADD(' NO Freights found ');
4818                l_freights := 0 ;
4819 
4820            END ;
4821 
4822          ELSE
4823            ---returns are included
4824 
4825            IF G_debug_flag = 'Y'
4826            THEN
4827              OE_DEBUG_PUB.ADD(' Process trx freights - Line level site, with returns ');
4828            END IF;
4829 
4830            BEGIN
4831              SELECT
4832               SUM
4833               ( DECODE( p.credit_or_charge_flag, 'C', (-1), (+1) )
4834               * DECODE( p.arithmetic_operator, 'LUMPSUM',          --bug 4295299
4835                         p.operand, (l.ordered_quantity * p.adjusted_amount))
4836               )
4837              INTO l_freights
4838              FROM oe_order_lines l,
4839                   oe_order_headers_all h,
4840                   ra_terms_b t,
4841                   oe_price_adjustments p
4842              WHERE  h.header_id                  = p_header_id
4843                AND  h.org_id                     = l.org_id           /* MOAC_SQL_CHANGE */
4844                AND  h.header_id                  = l.header_id
4845                AND  p.line_id                    =  l.line_id
4846                AND  p.header_id                  =  l.header_id
4847                AND  p.header_id                  =  h.header_id
4848                AND  l.invoice_to_org_id          = p_site_use_id
4849                AND  p.applied_flag               =  'Y'
4850                AND  p.list_line_type_code        =  'FREIGHT_CHARGE'
4851                AND  (p.invoiced_flag IS NULL OR p.invoiced_flag = 'N')
4852                AND  l.open_flag                  = 'Y'
4853                AND  (l.invoiced_quantity IS NULL OR l.invoiced_quantity = 0)
4854                AND  t.term_id                    = l.payment_term_id
4855                AND  t.credit_check_flag          = 'Y'
4856                AND  (EXISTS
4857                       (SELECT NULL
4858                        FROM   oe_payment_types_all pt
4859                        WHERE  pt.payment_type_code = NVL(l.payment_type_code,
4860                                               NVL(h.payment_type_code, 'BME'))
4861                        AND    pt.credit_check_flag = 'Y'
4862                        AND    NVL(pt.org_id, -99)  = G_ORG_ID)
4863                      OR
4864                      (l.payment_type_code IS NULL AND h.payment_type_code IS NULL));
4865 
4866            EXCEPTION
4867              WHEN NO_DATA_FOUND
4868              THEN
4869                OE_DEBUG_PUB.ADD(' NO Freights found ');
4870                l_freights := 0 ;
4871 
4872            END ;
4873 
4874          END IF; ---end for checking if returns are included
4875 
4876        END IF; -- Freights
4877 
4878     END IF; -- site or cust line level
4879 
4880   ELSE --- Header level CC
4881     -----added for Returns
4882     -----exclude prepayments if any
4883     IF NVL(p_credit_check_rule_rec.include_returns_flag,'N')='N'
4884     THEN
4885       ---returns are not included
4886 
4887       IF G_debug_flag = 'Y'
4888       THEN
4889         OE_DEBUG_PUB.ADD('In Order header level select ');
4890       END IF;
4891 
4892       SELECT SUM ( DECODE( p_credit_check_rule_rec.include_tax_flag , 'Y',
4893                         NVL(l.tax_value,0), 0 )
4894                + ( l.unit_selling_price * l.ordered_quantity )
4895              )
4896       INTO   l_order_value
4897       FROM   oe_order_lines l,
4898              oe_order_headers_all h,
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.open_flag                   = 'Y'
4904         AND  l.line_category_code   = 'ORDER'
4905         AND  (l.invoiced_quantity IS NULL OR l.invoiced_quantity = 0)
4906         AND  t.term_id                     = l.payment_term_id
4907         AND  t.credit_check_flag           = 'Y'
4908         AND  (EXISTS
4909                (SELECT NULL
4910                 FROM   oe_payment_types_all pt
4911                 WHERE  pt.payment_type_code = NVL(l.payment_type_code,
4912                                               NVL(h.payment_type_code, 'BME'))
4913                 AND    pt.credit_check_flag = 'Y'
4914                 AND    NVL(pt.org_id, -99)  = G_ORG_ID)
4915               OR
4916               (l.payment_type_code IS NULL AND h.payment_type_code IS NULL));
4917 
4918     ELSE
4919       ---returns are included
4920 
4921       IF G_debug_flag = 'Y'
4922       THEN
4923         OE_DEBUG_PUB.ADD('In Order header level select, with returns ');
4924       END IF;
4925 
4926       SELECT
4927         SUM ( DECODE( p_credit_check_rule_rec.include_tax_flag , 'Y',
4928          NVL(DECODE(l.line_category_code,'RETURN',(-1)*l.tax_value,l.tax_value),0), 0 )
4929         + (l.unit_selling_price * DECODE(l.line_category_code,'RETURN',
4930          (-1)*l.ordered_quantity,l.ordered_quantity))
4931         )
4932       INTO   l_order_value
4933       FROM   oe_order_lines l,
4934              oe_order_headers_all h,
4935              ra_terms_b t
4936       WHERE  h.header_id                   = p_header_id
4937         AND  h.org_id                      = l.org_id           /* MOAC_SQL_CHANGE */
4938         AND  h.header_id                   = l.header_id
4939         AND  l.open_flag                   = 'Y'
4940         AND  (l.invoiced_quantity IS NULL OR l.invoiced_quantity = 0)
4941         AND  t.term_id                     = l.payment_term_id
4942         AND  t.credit_check_flag           = 'Y'
4943         AND  (EXISTS
4944                (SELECT NULL
4945                 FROM   oe_payment_types_all pt
4946                 WHERE  pt.payment_type_code = NVL(l.payment_type_code,
4947                                               NVL(h.payment_type_code, 'BME'))
4948                 AND    pt.credit_check_flag = 'Y'
4949                 AND    NVL(pt.org_id, -99)  = G_ORG_ID)
4950               OR
4951               (l.payment_type_code IS NULL AND h.payment_type_code IS NULL));
4952 
4953 
4954     END IF; ---end for checking if returns are included
4955 
4956      IF G_debug_flag = 'Y'
4957      THEN
4958        OE_DEBUG_PUB.ADD('Check for Committment ');
4959      END IF ;
4960 
4961      IF OE_Commitment_PVT.Do_Commitment_Sequencing
4962      THEN
4963        BEGIN
4964          IF G_debug_flag = 'Y'
4965          THEN
4966            OE_DEBUG_PUB.ADD('In Order header commitment');
4967          END IF;
4968 
4969          SELECT NVL(SUM(P.commitment_applied_amount), 0)
4970          INTO   l_commitment
4971          FROM   oe_order_lines l,
4972                 oe_order_headers_all h,
4973                 ra_terms_b t,
4974                 oe_payments p
4975          WHERE  h.header_id                   = p_header_id
4976            AND  h.org_id                      = l.org_id           /* MOAC_SQL_CHANGE */
4977            AND  h.header_id                   = l.header_id
4978            AND  p.header_id                   = p_header_id
4979            AND  p.header_id                   = h.header_id
4980            AND  p.line_id                     = l.line_id
4981            AND  l.open_flag                   = 'Y'
4982            AND  l.line_category_code          = 'ORDER'
4983            AND  (l.invoiced_quantity IS NULL OR l.invoiced_quantity = 0)
4984            AND  t.term_id                     = l.payment_term_id
4985            AND  t.credit_check_flag           = 'Y'
4986            AND  (EXISTS
4987                   (SELECT NULL
4988                    FROM   oe_payment_types_all pt
4989                    WHERE  pt.payment_type_code = NVL(l.payment_type_code,
4990                                                  NVL(h.payment_type_code,'BME'))
4991                    AND    pt.credit_check_flag = 'Y'
4992                    AND    NVL(pt.org_id, -99)  = G_ORG_ID)
4993                  OR
4994                  (l.payment_type_code IS NULL AND h.payment_type_code IS NULL));
4995 
4996          EXCEPTION
4997            WHEN NO_DATA_FOUND
4998            THEN
4999              OE_DEBUG_PUB.ADD(' NO commitment-1 found ');
5000              l_commitment := 0 ;
5001 
5002             WHEN TOO_MANY_ROWS
5003             THEN
5004               OE_DEBUG_PUB.ADD(' Too many rows excepn NO commitment-1 found ');
5005               l_commitment := 0 ;
5006          END ;
5007      END IF; -- commitment
5008 
5009      --
5010      -- Get prepayment amount if prepayment is used
5011      -- the order is assumed to have at least one line with
5012      -- payment type with credit_check_flag = Y since it passes
5013      -- check the check to determine if credit check is required
5014      --
5015      IF G_MULTIPLE_PAYMENTS_ENABLED THEN
5016        IF G_debug_flag = 'Y' THEN
5017          OE_DEBUG_PUB.ADD('In Order header prepayment');
5018        END IF;
5019 
5020        SELECT SUM(P.prepaid_amount)
5021        INTO   l_prepayment
5022        FROM   oe_payments p
5023        WHERE  p.header_id   = p_header_id
5024        AND    p.line_id IS NULL;
5025 
5026      END IF; -- prepayment
5027 
5028      IF  p_credit_check_rule_rec.incl_freight_charges_flag = 'Y'
5029      THEN
5030 
5031        -----added for Returns
5032        IF NVL(p_credit_check_rule_rec.include_returns_flag,'N')='N'
5033        THEN
5034          ---returns are not included
5035 
5036          IF G_debug_flag = 'Y'
5037          THEN
5038            OE_DEBUG_PUB.ADD(' Process trx freights - order level ');
5039          END IF;
5040 
5041          BEGIN
5042 
5043             SELECT
5044               SUM
5045               ( DECODE( P.CREDIT_OR_CHARGE_FLAG, 'C', (-1), (+1) )
5046               * DECODE( p.arithmetic_operator, 'LUMPSUM',          --bug 4295299
5047                         p.operand, (l.ordered_quantity * p.adjusted_amount))
5048               )
5049             INTO l_freights_hdr_1
5050             FROM   oe_price_adjustments p
5051                  , oe_order_lines   l
5052                  , oe_order_headers_all h
5053                  , ra_terms_b t
5054             WHERE  h.header_id           = p_header_id
5055               AND  h.org_id              = l.org_id           /* MOAC_SQL_CHANGE */
5056               AND  p.line_id             =  l.line_id
5057               AND  p.header_id           =  l.header_id
5058               AND  p.header_id           =  h.header_id
5059               AND  h.booked_flag         =  'Y'
5060               AND  h.open_flag           =  'Y'
5061               AND  l.open_flag           =  'Y'
5062               AND  l.line_category_code  =  'ORDER'
5063               AND  p.applied_flag        =  'Y'
5064               AND  p.list_line_type_code =  'FREIGHT_CHARGE'
5065               AND  (p.invoiced_flag IS NULL OR p.invoiced_flag = 'N')
5066               AND  (l.invoiced_quantity IS NULL OR l.invoiced_quantity = 0)
5067               AND  t.term_id             = l.payment_term_id
5068               AND  t.credit_check_flag   = 'Y'
5069               AND  (EXISTS
5070                      (SELECT NULL
5071                       FROM   oe_payment_types_all pt
5072                       WHERE  pt.payment_type_code = NVL(l.payment_type_code,
5073                                                     NVL(h.payment_type_code,'BME'))
5074                       AND    pt.credit_check_flag = 'Y'
5075                       AND    NVL(pt.org_id, -99)  = G_ORG_ID)
5076                     OR
5077                     (l.payment_type_code IS NULL AND h.payment_type_code IS NULL));
5078 
5079            SELECT
5080             SUM(DECODE(P.CREDIT_OR_CHARGE_FLAG, 'C', (-1), (+1) ) * P.OPERAND )
5081            INTO l_freights_hdr_2
5082            FROM
5083                oe_price_adjustments p
5084              , oe_order_headers h
5085            WHERE  h.header_id           = p_header_id
5086              AND  p.line_id             IS NULL
5087              AND  p.header_id           =  h.header_id
5088              AND  h.order_category_code IN ('ORDER','MIXED')
5089              AND  h.open_flag  =  'Y'
5090              AND  h.booked_flag         =  'Y'
5091              AND  p.applied_flag        =  'Y'
5092              AND  p.list_line_type_code = 'FREIGHT_CHARGE'
5093              AND  (p.invoiced_flag IS NULL OR p.invoiced_flag = 'N');
5094 
5095 
5096            l_freights := NVL(l_freights_hdr_2,0) + NVL(l_freights_hdr_1,0) ;
5097 
5098           EXCEPTION
5099             WHEN NO_DATA_FOUND
5100             THEN
5101              l_freights := 0 ;
5102           END ;
5103       ELSE
5104         ---returns are included
5105 
5106          IF G_debug_flag = 'Y'
5107          THEN
5108            OE_DEBUG_PUB.ADD(' Process trx freights - order level,with returns ');
5109          END IF;
5110 
5111          BEGIN
5112             SELECT
5113               SUM
5114               ( DECODE( P.CREDIT_OR_CHARGE_FLAG, 'C', (-1), (+1) )
5115               * DECODE( p.arithmetic_operator, 'LUMPSUM',          --bug 4295299
5116                         p.operand, (l.ordered_quantity * p.adjusted_amount))
5117               )
5118             INTO l_freights_hdr_1
5119             FROM oe_price_adjustments p
5120                , oe_order_lines   l
5121                , oe_order_headers_all h
5122                , ra_terms_b t
5123             WHERE  h.header_id           = p_header_id
5124               AND  h.org_id              = l.org_id           /* MOAC_SQL_CHANGE */
5125               AND  p.line_id             =  l.line_id
5126               AND  p.header_id           =  l.header_id
5127               AND  p.header_id           =  h.header_id
5128               AND  h.booked_flag         =  'Y'
5129               AND  h.open_flag           =  'Y'
5130               AND  l.open_flag           =  'Y'
5131               AND  p.applied_flag        =  'Y'
5132               AND  p.list_line_type_code =  'FREIGHT_CHARGE'
5133               AND  (p.invoiced_flag IS NULL OR p.invoiced_flag = 'N' )
5134               AND  (l.invoiced_quantity IS NULL OR l.invoiced_quantity = 0)
5135               AND  t.term_id             = l.payment_term_id
5136               AND  t.credit_check_flag   = 'Y'
5137               AND  (EXISTS
5138                      (SELECT NULL
5139                       FROM   oe_payment_types_all pt
5140                       WHERE  pt.payment_type_code = NVL(l.payment_type_code,
5141                                                NVL(h.payment_type_code, 'BME'))
5142                       AND    pt.credit_check_flag = 'Y'
5143                       AND    NVL(pt.org_id, -99)  = G_ORG_ID)
5144                    OR
5145                  (l.payment_type_code IS NULL AND h.payment_type_code IS NULL));
5146 
5147          -- no need to check for credit_check_flag since the order
5148          -- already have at least one line with the flag set.
5149          SELECT
5150             SUM(DECODE(P.CREDIT_OR_CHARGE_FLAG, 'C', (-1), (+1) ) * P.OPERAND )
5151            INTO l_freights_hdr_2
5152            FROM
5153                oe_price_adjustments p
5154              , oe_order_headers h
5155            WHERE  h.header_id           = p_header_id
5156              AND  p.line_id             IS NULL
5157              AND  p.header_id           =  h.header_id
5158              AND  h.order_category_code IN ('ORDER','MIXED','RETURN')
5159              AND  h.open_flag  =  'Y'
5160              AND  h.booked_flag         =  'Y'
5161              AND  p.applied_flag        =  'Y'
5162              AND  p.list_line_type_code = 'FREIGHT_CHARGE'
5163              AND  (p.invoiced_flag IS NULL OR p.invoiced_flag = 'N');
5164 
5165 
5166            l_freights := NVL(l_freights_hdr_2,0) + NVL(l_freights_hdr_1,0) ;
5167 
5168           EXCEPTION
5169             WHEN NO_DATA_FOUND
5170             THEN
5171              l_freights := 0 ;
5172           END ;
5173 
5174       END IF; --end of checkig if returns are included
5175     END IF; -- freights
5176 
5177   END IF; -- Hdr or line
5178 
5179   IF G_debug_flag = 'Y'
5180   THEN
5181     OE_DEBUG_PUB.ADD(' l_order_value = '|| l_order_value );
5182     OE_DEBUG_PUB.ADD(' l_commitment  = '|| l_commitment  );
5183     OE_DEBUG_PUB.ADD(' l_freights    = ' || l_freights );
5184   END IF;
5185 
5186 
5187   -- convert amount
5188  BEGIN
5189   IF G_debug_flag = 'Y'
5190   THEN
5191     OE_DEBUG_PUB.Add(' GL_CURRENCY = '||
5192            OE_Credit_Engine_GRP.GL_currency );
5193   END IF;
5194 
5195      l_order_value :=   NVL(l_order_value,0)
5196                       - NVL(l_commitment,0)
5197                       - NVL(l_prepayment,0)
5198                       + NVL(l_freights,0);
5199   IF G_debug_flag = 'Y'
5200   THEN
5201     OE_DEBUG_PUB.ADD(' Total order amount = '|| l_order_value );
5202   END IF;
5203 
5204   l_limit_order_value :=
5205         OE_CREDIT_CHECK_UTIL.CONVERT_CURRENCY_AMOUNT
5206         ( p_amount	           => l_order_value
5207         , p_transactional_currency => p_transaction_curr_code
5208         , p_limit_currency	   => p_limit_curr_code
5209         , p_functional_currency	   => OE_Credit_Engine_GRP.GL_currency
5210         , p_conversion_date	   => SYSDATE
5211         , p_conversion_type	   => p_credit_check_rule_rec.conversion_type
5212         );
5213 
5214 
5215  END ;
5216 
5217 -- x_amount := NVL(l_limit_order_value,0) ;
5218 
5219   OE_CREDIT_CHECK_UTIL.Rounded_Amount(p_currency_code => p_limit_curr_code
5220 			,p_unrounded_amount =>  NVL(l_limit_order_value,0)
5221 			,x_rounded_amount => x_amount);
5222 
5223   OE_CREDIT_CHECK_UTIL.g_current_order_value := x_amount ;
5224 
5225   IF G_debug_flag = 'Y'
5226   THEN
5227     OE_DEBUG_PUB.Add(' g_current_order_value = '||
5228        OE_CREDIT_CHECK_UTIL.g_current_order_value );
5229     OE_DEBUG_PUB.Add(' Final trx check order amount = '|| x_amount,1 );
5230     OE_DEBUG_PUB.Add(' ====================================');
5231   END IF;
5232 
5233   IF G_debug_flag = 'Y'
5234   THEN
5235     OE_DEBUG_PUB.ADD('OEXUCRCB: OUT NOCOPY GET_transaction_amount ');
5236   END IF;
5237 
5238 EXCEPTION
5239    WHEN  GL_CURRENCY_API.NO_RATE
5240    THEN
5241     OE_DEBUG_PUB.ADD('EXCEPTION: GL_CURRENCY_API.NO_RATE ');
5242     x_conversion_status(1).usage_curr_code := p_transaction_curr_code;
5243     fnd_message.set_name('ONT', 'OE_CONVERSION_ERROR');
5244     OE_DEBUG_PUB.ADD('Exception table added ');
5245 
5246   WHEN NO_DATA_FOUND
5247   THEN
5248     x_amount := 0 ;
5249     OE_DEBUG_PUB.ADD('EXCEPTION: NO_DATA_FOUND ');
5250 
5251   WHEN TOO_MANY_ROWS
5252   THEN
5253     x_amount := 0 ;
5254     OE_DEBUG_PUB.ADD('EXCEPTION: TOO_MANY_ROWS ');
5255 
5256   WHEN OTHERS THEN
5257    G_DBG_MSG := SUBSTR(sqlerrm,1,200);
5258     OE_DEBUG_PUB.ADD('EXCEPTION = '||
5259 SUBSTR(sqlerrm,1,200) );
5260    x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
5261 
5262     IF FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
5263     THEN
5264       FND_MSG_PUB.Add_Exc_Msg
5265       ( G_PKG_NAME
5266       , 'GET_transaction_amount'
5267       );
5268     END IF;
5269     RAISE;
5270 END GET_transaction_amount ;
5271 
5272 
5273 --========================================================================
5274 -- PROCEDURE : Get_Past_Due_Invoice
5275 -- Comments  : for pre-claculated cc the check will be made
5276 --             from summary table
5277 -- Parameters:
5278 --
5279 --========================================================================
5280 PROCEDURE Get_Past_Due_Invoice
5281 ( p_customer_id        IN   NUMBER
5282 , p_site_use_id        IN   NUMBER
5283 , p_party_id           IN   NUMBER
5284 , p_credit_check_rule_rec IN
5285              OE_CREDIT_CHECK_UTIL.OE_credit_rules_rec_type
5286 , p_system_parameter_rec   IN
5287              OE_CREDIT_CHECK_UTIL.OE_systems_param_rec_type
5288 , p_credit_level       IN   VARCHAR2
5289 , p_usage_curr         IN   oe_credit_check_util.curr_tbl_type
5290 , p_include_all_flag   IN   VARCHAR2
5291 , p_global_exposure_flag IN VARCHAR2 := 'N'
5292 , x_exist_flag         OUT  NOCOPY VARCHAR2
5293 , x_return_status      OUT  NOCOPY VARCHAR2
5294 )
5295 IS
5296   l_maximum_days_past_due   NUMBER;
5297   l_dummy                   VARCHAR2(30);
5298 BEGIN
5299   IF G_debug_flag = 'Y'
5300   THEN
5301     OE_DEBUG_PUB.ADD('OEXUCRCB: In Get_Past_Due_Invoice');
5302   END IF;
5303 
5304   -- Initialize return status to success
5305   x_return_status := FND_API.G_RET_STS_SUCCESS;
5306 
5307   IF NVL(p_credit_check_rule_rec.quick_cr_check_flag,'N')  = 'N'
5308   THEN
5309  -- Bug2408466
5310  -- REmove the OLD code with DECODES
5311   IF G_debug_flag = 'Y'
5312   THEN
5313     OE_DEBUG_PUB.ADD('maximum_days_past_due ==> '||
5314          p_credit_check_rule_rec.maximum_days_past_due,1 );
5315 
5316     OE_DEBUG_PUB.ADD('p_credit_level ==> '|| p_credit_level );
5317     OE_DEBUG_PUB.ADD('p_include_all_flag ==> '|| p_include_all_flag);
5318     OE_DEBUG_PUB.ADD('p_global_exposure_flag ==> '||
5319        p_global_exposure_flag );
5320   END IF;
5321 
5322   IF NVL(p_global_exposure_flag,'N') = 'N'
5323   THEN
5324    BEGIN
5325      IF G_debug_flag = 'Y'
5326      THEN
5327        OE_DEBUG_PUB.Add(' Into NOT Global ');
5328      END IF;
5329     --bug 4174163
5330     --IF NVL(p_credit_check_rule_rec.maximum_days_past_due,0) > 0
5331     IF p_credit_check_rule_rec.maximum_days_past_due is not null
5332 	and p_credit_check_rule_rec.maximum_days_past_due >= 0
5333     THEN
5334       IF p_credit_level = 'CUSTOMER'
5335       THEN
5336         BEGIN
5337           IF G_debug_flag = 'Y'
5338           THEN
5339             OE_DEBUG_PUB.Add(' Into CUSTOMER ');
5340           END IF;
5341 
5342             FOR i IN 1..p_usage_curr.count
5343             LOOP
5344               IF G_debug_flag = 'Y'
5345               THEN
5346                 OE_DEBUG_PUB.Add('Currency code = '
5347                           || p_usage_curr(i).usage_curr_code );
5348               END IF;
5349               BEGIN
5350                 SELECT 'Y'
5351                 INTO   x_exist_flag
5352                 FROM   ar_payment_schedules
5353                 WHERE  customer_id = p_customer_id
5354                   AND  ( invoice_currency_code
5355                             = p_usage_curr(i).usage_curr_code
5356                    OR p_include_all_flag = 'Y' )
5357                   AND  NVL(receipt_confirmed_flag, 'Y') = 'Y'
5358                   AND    gl_date_closed = to_date( '31-12-4712', 'DD-MM-YYYY')
5359                   AND  amount_due_remaining > 0
5360                   AND  due_date <
5361                    sysdate - p_credit_check_rule_rec.maximum_days_past_due;
5362 
5363                   -- Invoices found
5364                   x_exist_flag := 'Y' ;
5365 
5366                  IF G_debug_flag = 'Y'
5367                  THEN
5368                    OE_DEBUG_PUB.Add('Invoices found ' );
5369                  END IF;
5370 
5371                  EXIT;
5372 
5373               EXCEPTION
5374               WHEN NO_DATA_FOUND THEN
5375                  OE_DEBUG_PUB.Add(' No Invoices Past due found ' );
5376 
5377                  x_exist_flag  := 'N' ;
5378 
5379               WHEN TOO_MANY_ROWS THEN
5380                  OE_DEBUG_PUB.Add('Invoices found ' );
5381                 x_exist_flag  := 'Y' ;
5382                 EXIT;
5383             END;
5384           END LOOP;
5385         END ;
5386 
5387       ELSE
5388         BEGIN
5389           IF G_debug_flag = 'Y'
5390           THEN
5391             OE_DEBUG_PUB.Add(' Into SITE ');
5392           END IF;
5393 
5394           FOR i IN 1..p_usage_curr.count
5395           LOOP
5396             IF G_debug_flag = 'Y'
5397             THEN
5398               OE_DEBUG_PUB.Add(' Currency code = '
5399                  || p_usage_curr(i).usage_curr_code );
5400             END IF;
5401             BEGIN
5402               SELECT 'Y'
5403               INTO   x_exist_flag
5404               FROM   ar_payment_schedules
5405               WHERE  customer_site_use_id = p_site_use_id
5406                 AND  ( invoice_currency_code  = p_usage_curr(i).usage_curr_code
5407                      OR p_include_all_flag = 'Y' )
5408                 AND  NVL(receipt_confirmed_flag, 'Y') = 'Y'
5409                 AND  gl_date_closed = to_date( '31-12-4712', 'DD-MM-YYYY')
5410                 AND  amount_due_remaining > 0
5411                 AND  due_date <
5412                 sysdate - p_credit_check_rule_rec.maximum_days_past_due;
5413 
5414                -- Invoices found
5415                x_exist_flag := 'Y' ;
5416 
5417                IF G_debug_flag = 'Y'
5418                THEN
5419                  OE_DEBUG_PUB.Add('Invoices found ' );
5420                END IF;
5421 
5422              EXIT;
5423 
5424              EXCEPTION
5425              WHEN NO_DATA_FOUND THEN
5426                OE_DEBUG_PUB.Add('No Invoices Past due found in this curr' );
5427               x_exist_flag  := 'N' ;
5428              WHEN TOO_MANY_ROWS THEN
5429               OE_DEBUG_PUB.Add('Invoices found ' );
5430               x_exist_flag  := 'Y' ;
5431               EXIT;
5432             END;
5433           END LOOP;
5434         END ;
5435       END IF;
5436 
5437     ELSE
5438       IF G_debug_flag = 'Y'
5439       THEN
5440         OE_DEBUG_PUB.Add(' No need to check ' );
5441       END IF;
5442       x_exist_flag := 'N' ;
5443     END IF;
5444   END;
5445 
5446  ELSIF p_global_exposure_flag = 'Y'
5447  THEN
5448    BEGIN
5449      IF G_debug_flag = 'Y'
5450      THEN
5451        OE_DEBUG_PUB.Add(' Into GLOBAL checking ');
5452      END IF;
5453     --bug 4174163
5454     --IF NVL(p_credit_check_rule_rec.maximum_days_past_due,0) > 0
5455     IF p_credit_check_rule_rec.maximum_days_past_due is not null
5456 	and p_credit_check_rule_rec.maximum_days_past_due >= 0
5457     THEN
5458       IF p_credit_level = 'CUSTOMER'
5459       THEN
5460         BEGIN
5461           IF G_debug_flag = 'Y'
5462           THEN
5463             OE_DEBUG_PUB.Add(' Into CUSTOMER ');
5464           END IF;
5465 
5466             FOR i IN 1..p_usage_curr.count
5467             LOOP
5468                IF G_debug_flag = 'Y'
5469                THEN
5470                 OE_DEBUG_PUB.Add('Currency code = '
5471                           || p_usage_curr(i).usage_curr_code );
5472                END IF;
5473 
5474               BEGIN
5475                 SELECT 'Y'
5476                 INTO   x_exist_flag
5477                 FROM   ar_payment_schedules_ALL
5478                 WHERE  customer_id = p_customer_id
5479                   AND  ( invoice_currency_code
5480                             = p_usage_curr(i).usage_curr_code
5481                    OR p_include_all_flag = 'Y' )
5482                   AND  NVL(receipt_confirmed_flag, 'Y') = 'Y'
5483                   AND    gl_date_closed = to_date( '31-12-4712', 'DD-MM-YYYY')
5484                   AND  amount_due_remaining > 0
5485                   AND  due_date <
5486                    sysdate - p_credit_check_rule_rec.maximum_days_past_due;
5487 
5488                   -- Invoices found
5489                   x_exist_flag := 'Y' ;
5490 
5491                   IF G_debug_flag = 'Y'
5492                   THEN
5493                     OE_DEBUG_PUB.Add('Invoices found ' );
5494                  end if;
5495 
5496                  EXIT;
5497 
5498               EXCEPTION
5499               WHEN NO_DATA_FOUND THEN
5500                  OE_DEBUG_PUB.Add(' No Invoices Past due found ' );
5501 
5502                  x_exist_flag  := 'N' ;
5503 
5504               WHEN TOO_MANY_ROWS THEN
5505                  OE_DEBUG_PUB.Add('Invoices found ' );
5506                 x_exist_flag  := 'Y' ;
5507                 EXIT;
5508             END;
5509           END LOOP;
5510         END ;
5511       END IF;
5512     ELSE
5513      OE_DEBUG_PUB.Add(' No need to check ' );
5514       x_exist_flag := 'N' ;
5515     END IF;
5516 
5517 
5518   END ;
5519   END IF;
5520   ---- End Global
5521 
5522 ELSE
5523   --bug 4174163
5524   --IF NVL(p_credit_check_rule_rec.maximum_days_past_due,0) > 0
5525   IF p_credit_check_rule_rec.maximum_days_past_due is not null
5526 	and p_credit_check_rule_rec.maximum_days_past_due >= 0
5527   THEN
5528     IF G_debug_flag = 'Y'
5529     THEN
5530       oe_debug_pub.add('calling get_invoices_over_duedate ');
5531     END IF;
5532 
5533      OE_CREDIT_EXPOSURE_PVT.get_invoices_over_duedate
5534      ( p_customer_id          => p_customer_id
5535      , p_site_use_id          => p_site_use_id
5536      , p_party_id             => p_party_id
5537      , p_credit_check_rule_rec => p_credit_check_rule_rec
5538      , p_credit_level         => p_credit_level
5539      , p_usage_curr           => p_usage_curr
5540      , p_include_all_flag     => NVL(p_include_all_flag,'N')
5541      , p_global_exposure_flag => NVL(p_global_exposure_flag,'N')
5542      , p_org_id               => G_org_id   --bug# 5031301
5543      , x_exist_flag           => x_exist_flag
5544      );
5545   ELSE
5546     x_exist_flag := 'N' ;
5547   END IF;
5548 
5549 END IF; -- precalc
5550 
5551  IF x_exist_flag IS NULL
5552  THEN
5553    x_exist_flag := 'N' ;
5554   END IF ;
5555 
5556   IF G_debug_flag = 'Y'
5557   THEN
5558     OE_DEBUG_PUB.Add(' x_exist_flag = '|| x_exist_flag );
5559     OE_DEBUG_PUB.ADD('OEXUCRCB: Out NOCOPY Get_Past_Due_Invoice');
5560   END IF;
5561 
5562  EXCEPTION
5563   WHEN OTHERS THEN
5564      x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
5565      IF OE_MSG_PUB.Check_Msg_Level(OE_MSG_PUB.G_MSG_LVL_UNEXP_ERROR) THEN
5566         OE_MSG_PUB.Add_Exc_Msg (G_PKG_NAME, 'Get_Past_Due_Invoice');
5567      END IF;
5568      RAISE;
5569 END Get_Past_Due_Invoice ;
5570 
5571 
5572 
5573 
5574 --========================================================================
5575 -- PROCEDURE : Get_order_exposure
5576 -- Comments  : Returns the exposure in the limit currency
5577 --             used for online/Header level credit checking
5578 -- BUG 3449827,3463348: return correct values when p_need_exposure_flag enabled
5579 --========================================================================
5580 PROCEDURE Get_order_exposure
5581 ( p_header_id              IN  NUMBER
5582 , p_transaction_curr_code  IN  VARCHAR2
5583 , p_customer_id            IN  NUMBER
5584 , p_site_use_id            IN  NUMBER
5585 , p_credit_check_rule_rec IN
5586              OE_CREDIT_CHECK_UTIL.OE_credit_rules_rec_type
5587 , p_system_parameter_rec   IN
5588              OE_CREDIT_CHECK_UTIL.OE_systems_param_rec_type
5589 , p_credit_level           IN  VARCHAR2
5590 , p_limit_curr_code        IN  VARCHAR2
5591 , p_usage_curr             IN  oe_credit_check_util.curr_tbl_type
5592 , p_include_all_flag       IN  VARCHAR2
5593 , p_global_exposure_flag   IN  VARCHAR2 := 'N'
5594 , p_need_exposure_details  IN  VARCHAR2 := 'N'
5595 , x_total_exposure         OUT NOCOPY NUMBER
5596 , x_ar_amount              OUT NOCOPY NUMBER
5597 , x_order_amount           OUT NOCOPY NUMBER
5598 , x_order_hold_amount      OUT NOCOPY NUMBER
5599 , x_conversion_status      OUT NOCOPY CURR_TBL_TYPE
5600 , x_return_status          OUT NOCOPY VARCHAR2
5601 )
5602 IS
5603 
5604 l_est_valid_days NUMBER :=
5605      to_number(nvl(fnd_profile.value('ONT_EST_AUTH_VALID_DAYS'),'0'));
5606 
5607 
5608 l_total_from_ar             NUMBER := 0 ;
5609 l_total_from_br             NUMBER := 0 ;
5610 l_total_on_order            NUMBER := 0 ;
5611 l_total_commitment          NUMBER := 0 ;
5612 l_total_exposure            NUMBER := 0 ;
5613 
5614 l_total_on_hold             NUMBER := 0 ;
5615 
5616 l_total_no_hold             NUMBER := 0 ;
5617 
5618 l_limit_total_exposure      NUMBER := 0 ;
5619 l_limit_current_order       NUMBER := 0 ;
5620 
5621 l_usage_total_commitment    NUMBER := 0 ;
5622 l_usage_total_exposure      NUMBER := 0 ;
5623 
5624 l_uninvoiced_hdr_freight1  NUMBER := 0 ;
5625 l_uninvoiced_hdr_freight2  NUMBER := 0 ;
5626 l_uninvoiced_line_freight1 NUMBER := 0 ;
5627 
5628 l_hold_hdr_freight1        NUMBER := 0 ;
5629 l_hold_hdr_freight2        NUMBER := 0 ;
5630 
5631 l_no_hold_hdr_freight1     NUMBER := 0 ;
5632 l_no_hold_hdr_freight2     NUMBER := 0 ;
5633 l_external_exposure        NUMBER := 0 ;
5634 
5635 l_cum_total_from_ar       NUMBER := 0 ;
5636 l_cum_payments_at_risk    NUMBER := 0 ;
5637 l_cum_total_on_order      NUMBER := 0 ;
5638 l_cum_total_on_hold       NUMBER := 0 ;
5639 l_cum_total_no_hold       NUMBER := 0;
5640 l_cum_total_commitment    NUMBER := 0;
5641 l_cum_external_exposure   NUMBER := 0;
5642 l_cum_uninv_order_total   NUMBER := 0;
5643 
5644 l_payments_at_risk        NUMBER := 0 ;
5645 l_payments_at_risk_br     NUMBER := 0 ;
5646 
5647 l_exposure_amount         NUMBER := 0 ; --bug 2714553
5648 
5649 -----------------------------------------
5650 ------ Variables for setting default values
5651 ------------------------------------------
5652 
5653 l_open_ar_days            NUMBER;
5654 l_uninvoiced_orders_flag  VARCHAR2(1) ;
5655 l_orders_on_hold_flag     VARCHAR2(1) ;
5656 l_include_tax_flag        VARCHAR2(1) ;
5657 l_shipping_horizon        DATE        := TO_DATE('31/12/4712', 'DD/MM/YYYY');
5658 l_include_risk_flag       VARCHAR2(1) ;
5659 l_quick_cr_check_flag     VARCHAR2(1) ;
5660 l_freight_charges_flag    VARCHAR2(1) ;
5661 l_open_ar_balance_flag    VARCHAR2(1) ;
5662 l_current_usage_cur       VARCHAR2(100);
5663 l_incl_external_exposure_flag VARCHAR2(1);
5664 l_drawee_site_use_id      NUMBER;
5665 l_need_exposure_details   VARCHAR2(1) := NVL(p_need_exposure_details, 'N');
5666 l_include_returns_flag    VARCHAR2(1);
5667 l_header_id               NUMBER;
5668 ---------------------------------------------------------------
5669 -- Cursor definitions
5670 -- a) In order related cursors, use l_header_id instead of
5671 --    p_header_id. This is done to remove the NVL on p_header_id
5672 --    as p_header_id will be coming in as NULL for the
5673 --    exposure reports.
5674 --
5675 -- b) Removed NVL on ordered_quantity and unit_selling_price as these
5676 --    will always have a value for booked orders.
5677 ---------------------------------------------------------------
5678 --- CUSTOMER LEVEL CURSORS
5679 
5680 -- External exposure cursor
5681 CURSOR cust_external_exposure_csr (p_curr_code IN VARCHAR2 default NULL) IS
5682    SELECT SUM(balance)
5683    FROM   oe_credit_summaries
5684    WHERE  balance_type     = 18
5685    AND    cust_account_id  = p_customer_id
5686    AND    NVL(org_id,-99)  = G_ORG_ID
5687    AND    currency_code    = p_curr_code;
5688 
5689 CURSOR cust_external_csr_global
5690  (p_curr_code IN VARCHAR2 default NULL) IS
5691    SELECT SUM(balance)
5692    FROM   oe_credit_summaries
5693    WHERE  balance_type     = 18
5694    AND    cust_account_id  = p_customer_id
5695    AND    currency_code    = p_curr_code;
5696 
5697 
5698 -- AR BALANCE
5699 -- Bug2417717 Support customer relationships
5700 -- The exposure must include transactions where
5701 -- created by the bill to sites owned by the customer
5702 
5703    CURSOR cust_ar_balance (p_curr_code IN VARCHAR2 default NULL) IS
5704     SELECT SUM(NVL(ps.amount_due_remaining,0))
5705     FROM   ar_payment_schedules ps
5706         ,  hz_cust_site_uses_all su
5707         ,  hz_cust_acct_sites_all cas
5708     WHERE  ps.CUSTOMER_SITE_USE_ID = su.site_use_id
5709       AND  ps.org_id               = su.org_id                   /* MOAC_SQL_CHANGE */
5710       AND  ps.status               = 'OP'
5711       AND  su.cust_acct_site_id  =  cas.cust_acct_site_id
5712       AND  cas.cust_account_id   = p_customer_id
5713       AND  su.site_use_code       =
5714            DECODE(l_open_ar_days,0,site_use_code,'BILL_TO' )
5715       AND  ps.invoice_currency_code =
5716            p_curr_code
5717       AND  NVL(ps.receipt_confirmed_flag, 'Y') = 'Y'
5718       AND  ps.gl_date_closed = to_date( '31-12-4712', 'DD-MM-YYYY')
5719       AND  sysdate - ps.trx_date >
5720    NVL(p_credit_check_rule_rec.OPEN_AR_DAYS, sysdate - ps.trx_date - 1);
5721 
5722 ---------------------- BR support -------------------
5723 
5724 CURSOR cust_BR_balance (p_curr_code IN VARCHAR2 default NULL) IS
5725     SELECT SUM(NVL(ps.amount_due_remaining,0))
5726     FROM   ar_payment_schedules ps
5727         ,  hz_cust_site_uses_all su
5728         ,  hz_cust_acct_sites_all cas
5729     WHERE  ps.CUSTOMER_SITE_USE_ID = su.site_use_id
5730       AND  ps.org_id               = su.org_id                    /* MOAC_SQL_CHANGE */
5731       AND  ps.status               = 'OP'
5732       AND  su.cust_acct_site_id    =  cas.cust_acct_site_id
5733       AND  cas.cust_account_id     = p_customer_id
5734       AND  ps.invoice_currency_code =
5735            p_curr_code
5736       AND    NVL(ps.receipt_confirmed_flag, 'Y') = 'Y'
5737       AND  su.site_use_code        = 'DRAWEE'
5738       AND    ps.gl_date_closed = to_date( '31-12-4712', 'DD-MM-YYYY') ;
5739 
5740 --  PAY AT RISK
5741 
5742 CURSOR cust_pay_risk (p_curr_code IN VARCHAR2 default NULL) IS
5743 SELECT SUM(NVL(crh.amount,0))
5744     FROM   ar_cash_receipt_history crh
5745          , ar_cash_receipts_all cr
5746          ,  hz_cust_site_uses_all su
5747          ,  hz_cust_acct_sites_all cas
5748     WHERE  crh.cash_receipt_id        = cr.cash_receipt_id
5749     AND    crh.org_id                 = cr.org_id                    /* MOAC_SQL_CHANGE */
5750     AND    NVL(cr.confirmed_flag,'Y') = 'Y'
5751     AND    crh.current_record_flag    = 'Y'
5752     AND    crh.status <> DECODE ( crh.factor_flag
5753                                 , 'Y', 'RISK_ELIMINATED'
5754                                 , 'CLEARED')
5755     AND    NVL( cr.reversal_category, cr.status||'X' )  <>  cr.status
5756     AND    crh.status <> 'REVERSED'
5757     AND    cr.currency_code           =
5758               p_curr_code
5759     AND    cr.pay_from_customer    = cas.cust_account_id
5760     AND    cr.org_id               = cas.org_id
5761     AND    cr.CUSTOMER_SITE_USE_ID = su.site_use_id
5762     AND    su.cust_acct_site_id    = cas.cust_acct_site_id
5763     AND    cas.cust_account_id     = p_customer_id
5764     AND   su.site_use_code        =
5765                 DECODE(l_open_ar_days,0,
5766            site_use_code,'BILL_TO' )
5767     AND    sysdate - cr.receipt_date >
5768            NVL(p_credit_check_rule_rec.OPEN_AR_DAYS,
5769               sysdate - cr.receipt_date - 1)
5770     AND  NOT EXISTS
5771            (
5772            SELECT
5773              'X'
5774            FROM
5775              ar_receivable_applications rap
5776            WHERE
5777                   rap.cash_receipt_id  =  cr.cash_receipt_id
5778              AND  rap.applied_payment_schedule_id  =  -2
5779              AND  rap.display  =  'Y'
5780          ) ;
5781 
5782 
5783 CURSOR cust_br_pay_risk (p_curr_code IN VARCHAR2 default NULL) IS
5784 SELECT SUM(NVL(crh.amount,0))
5785     FROM   ar_cash_receipt_history crh
5786          , ar_cash_receipts_all cr
5787          ,  hz_cust_site_uses_all su
5788          ,  hz_cust_acct_sites_all cas
5789     WHERE  crh.cash_receipt_id        = cr.cash_receipt_id
5790     AND    crh.org_id                 = cr.org_id                    /* MOAC_SQL_CHANGE */
5791     AND    NVL(cr.confirmed_flag,'Y') = 'Y'
5792     AND    crh.current_record_flag    = 'Y'
5793     AND    crh.status <> DECODE ( crh.factor_flag
5794                                 , 'Y', 'RISK_ELIMINATED'
5795                                 , 'CLEARED')
5796     AND    NVL( cr.reversal_category, cr.status||'X' )  <>  cr.status
5797     AND    crh.status <> 'REVERSED'
5798     AND    cr.currency_code           =
5799               p_curr_code
5800     AND    cr.pay_from_customer    = cas.cust_account_id
5801     AND    cr.org_id               = cas.org_id
5802     AND    cr.CUSTOMER_SITE_USE_ID = su.site_use_id
5803     AND    su.cust_acct_site_id    = cas.cust_acct_site_id
5804     AND    cas.cust_account_id     = p_customer_id
5805      AND  su.site_use_code        = 'DRAWEE'
5806     AND  NOT EXISTS
5807            (
5808            SELECT
5809              'X'
5810            FROM
5811              ar_receivable_applications rap
5812            WHERE
5813                   rap.cash_receipt_id  =  cr.cash_receipt_id
5814              AND  rap.applied_payment_schedule_id  =  -2
5815              AND  rap.display  =  'Y' );
5816 
5817 
5818 
5819 ---CUSTOMER UNINVOICED ORDERS
5820 
5821 CURSOR cust_uninvoiced_orders (p_curr_code IN VARCHAR2 default NULL) IS
5822     SELECT SUM (
5823                  ( l.ordered_quantity * l.unit_selling_price )
5824                +   DECODE(l_include_tax_flag, 'Y',
5825                     NVL(l.tax_value,0), 0   )
5826                )
5827     FROM    oe_order_lines_all l
5828           , oe_order_headers h
5829           , hz_cust_site_uses_all su
5830           , hz_cust_acct_sites_all cas
5831     WHERE  h.invoice_to_org_id     = su.site_use_id
5832     AND    h.org_id                = su.org_id
5833     AND    su.cust_acct_site_id    = cas.cust_acct_site_id
5834     AND    cas.cust_account_id     = p_customer_id
5835     AND    h.header_id             = l.header_id
5836     AND    h.org_id                = l.org_id                   /* MOAC_SQL_CHANGE */
5837     AND    NVL(L.SCHEDULE_SHIP_DATE,NVL(L.REQUEST_DATE,NVL(H.REQUEST_DATE,H.CREATION_DATE)))
5838            <= l_shipping_horizon
5839     AND    (l.invoiced_quantity IS NULL OR l.invoiced_quantity = 0)
5840     AND    h.open_flag   = 'Y'
5841     AND    l.line_category_code = 'ORDER'
5842     AND    h.booked_flag = 'Y'
5843     AND    l.open_flag = 'Y'
5844     AND    h.header_id <> l_header_id
5845     AND    h.transactional_curr_code = p_curr_code
5846     AND    (EXISTS
5847              (SELECT NULL
5848               FROM   oe_payment_types_all pt
5849               WHERE  pt.payment_type_code = NVL(l.payment_type_code,
5850                                             NVL(h.payment_type_code, 'BME'))
5851               AND    pt.credit_check_flag = 'Y'
5852               AND    NVL(pt.org_id, -99)  = G_ORG_ID)
5853            OR
5854            (l.payment_type_code IS NULL AND h.payment_type_code IS NULL));
5855 
5856 ---CUSTOMER UNINVOICED ORDERS, including Returns
5857 
5858 CURSOR cust_uninv_orders_ret(p_curr_code IN VARCHAR2 default NULL) IS
5859     SELECT
5860       SUM (
5861       ( DECODE(l.line_category_code,'RETURN',(-1)*l.ordered_quantity,l.ordered_quantity)
5862       * l.unit_selling_price )
5863       +   DECODE(l_include_tax_flag, 'Y',
5864       NVL(DECODE(l.line_category_code,'RETURN',(-1)*l.tax_value,l.tax_value),0),0
5865           ))
5866     FROM   oe_order_lines l
5867          , oe_order_headers_all h
5868          ,  hz_cust_site_uses_all su
5869          ,  hz_cust_acct_sites_all cas
5870     WHERE  h.invoice_to_org_id     = su.site_use_id
5871     AND    h.org_id                = su.org_id
5872     AND    su.cust_acct_site_id    = cas.cust_acct_site_id
5873     AND    cas.cust_account_id     = p_customer_id
5874     AND    h.header_id             = l.header_id
5875     AND    h.org_id                = l.org_id                     /* MOAC_SQL_CHANGE */
5876     AND    NVL(L.SCHEDULE_SHIP_DATE,NVL(L.REQUEST_DATE,NVL(H.REQUEST_DATE,H.CREATION_DATE)))
5877            <= l_shipping_horizon
5878     AND    (l.invoiced_quantity IS NULL OR l.invoiced_quantity = 0)
5879     AND    h.open_flag   = 'Y'
5880     AND    h.booked_flag = 'Y'
5881     AND    l.open_flag = 'Y'
5882     AND    h.header_id <> l_header_id
5883     AND    h.transactional_curr_code = p_curr_code
5884     AND    (EXISTS
5885              (SELECT NULL
5886               FROM   oe_payment_types_all pt
5887               WHERE  pt.payment_type_code = NVL(l.payment_type_code,
5888                                             NVL(h.payment_type_code, 'BME'))
5889               AND    pt.credit_check_flag = 'Y'
5890               AND    NVL(pt.org_id, -99)  = G_ORG_ID)
5891            OR
5892            (l.payment_type_code IS NULL AND h.payment_type_code IS NULL));
5893 
5894 
5895 -------------------------------------------------
5896 ------- commitments -- Exsiting code enhancement
5897 ------------------------------------------------
5898 
5899 Cursor customer_commitment_total (p_curr_code IN VARCHAR2 default NULL) IS
5900        SELECT NVL(SUM(P.commitment_applied_amount), 0)
5901         FROM  OE_PAYMENTS P, OE_ORDER_HEADERS_ALL H, OE_ORDER_LINES L
5902             , hz_cust_site_uses_all su
5903             , hz_cust_acct_sites_all cas
5904 	WHERE H.invoice_to_org_id     = su.site_use_id
5905         AND   h.org_id                = su.org_id
5906         AND   su.cust_acct_site_id    = cas.cust_acct_site_id
5907         AND   cas.cust_account_id     = p_customer_id
5908         AND   H.TRANSACTIONAL_CURR_CODE = p_curr_code
5909 	AND   H.OPEN_FLAG      = 'Y'
5910 	AND   H.BOOKED_FLAG    = 'Y'
5911 	AND   H.HEADER_ID      = P.HEADER_ID
5912 	AND   H.HEADER_ID      <> l_header_id
5913         AND   L.HEADER_ID                = H.HEADER_ID
5914         AND   L.ORG_ID                   = H.ORG_ID             /* MOAC_SQL_CHANGE */
5915         AND   L.LINE_ID                  = P.LINE_ID
5916         AND   (l.invoiced_quantity IS NULL OR l.invoiced_quantity = 0)
5917 	AND   L.OPEN_FLAG                = 'Y'
5918 	AND   L.LINE_CATEGORY_CODE       = 'ORDER'
5919 	AND   NVL(L.SCHEDULE_SHIP_DATE,NVL(L.REQUEST_DATE,NVL(H.REQUEST_DATE,H.CREATION_DATE)))
5920 	         	        <= l_shipping_horizon
5921         AND    (EXISTS
5922                  (SELECT NULL
5923                   FROM   oe_payment_types_all pt
5924                   WHERE  pt.payment_type_code = NVL(l.payment_type_code,
5925                                                 NVL(h.payment_type_code, 'BME'))
5926                   AND    pt.credit_check_flag = 'Y'
5927                   AND    NVL(pt.org_id, -99)  = G_ORG_ID)
5928                 OR
5929                 (l.payment_type_code IS NULL AND h.payment_type_code IS NULL));
5930 Cursor site_commitment_total (p_curr_code IN VARCHAR2 default NULL)  IS
5931       SELECT NVL(SUM(P.commitment_applied_amount), 0)
5932 	FROM   OE_PAYMENTS P, OE_ORDER_HEADERS_ALL H, OE_ORDER_LINES L
5933 	WHERE  H.INVOICE_TO_ORG_ID = p_site_use_id
5934         AND    H.TRANSACTIONAL_CURR_CODE = p_curr_code
5935 	AND    H.OPEN_FLAG      = 'Y'
5936 	AND    H.BOOKED_FLAG    = 'Y'
5937 	AND    H.HEADER_ID      = P.HEADER_ID
5938         AND    H.ORG_ID         = L.ORG_ID               /* MOAC_SQL_CHANGE */
5939 	AND    H.HEADER_ID      <> l_header_id
5940         AND    L.HEADER_ID                = H.HEADER_ID
5941         AND    L.LINE_ID                  = P.LINE_ID
5942         AND    (l.invoiced_quantity IS NULL OR l.invoiced_quantity = 0)
5943 	AND    L.OPEN_FLAG                = 'Y'
5944 	AND    L.LINE_CATEGORY_CODE       = 'ORDER'
5945 	AND    NVL(L.SCHEDULE_SHIP_DATE,NVL(L.REQUEST_DATE,NVL(H.REQUEST_DATE,H.CREATION_DATE)))
5946 	         	        <= l_shipping_horizon
5947         AND    (EXISTS
5948                  (SELECT NULL
5949                   FROM   oe_payment_types_all pt
5950                   WHERE  pt.payment_type_code = NVL(l.payment_type_code,
5951                                                 NVL(h.payment_type_code, 'BME'))
5952                   AND    pt.credit_check_flag = 'Y'
5953                   AND    NVL(pt.org_id, -99)  = G_ORG_ID)
5954                 OR
5955                 (l.payment_type_code IS NULL AND h.payment_type_code IS NULL));
5956 
5957 -------------------- End commitment cursors -----------------
5958 
5959 -- Customer orders not on hold
5960 
5961   CURSOR cust_orders_not_on_hold (p_curr_code IN VARCHAR2 default NULL) IS
5962     SELECT SUM (
5963                  (l.ordered_quantity * l.unit_selling_price )
5964                +   DECODE(l_include_tax_flag, 'Y',
5965                     NVL(l.tax_value,0), 0   )
5966                )
5967     FROM   oe_order_lines l
5968          , oe_order_headers_all h
5969          , hz_cust_site_uses_all su
5970          , hz_cust_acct_sites_all cas
5971     WHERE  h.invoice_to_org_id     = su.site_use_id
5972     AND    h.org_id                = su.org_id
5973     AND    su.cust_acct_site_id    = cas.cust_acct_site_id
5974     AND    cas.cust_account_id     = p_customer_id
5975     AND    h.header_id = l.header_id
5976     AND    h.org_id    = l.org_id                           /* MOAC_SQL_CHANGE */
5977     AND    NVL(L.SCHEDULE_SHIP_DATE,NVL(L.REQUEST_DATE,NVL(H.REQUEST_DATE,H.CREATION_DATE)))
5978            <= l_shipping_horizon
5979     AND    (l.invoiced_quantity IS NULL OR l.invoiced_quantity = 0)
5980     AND    h.open_flag = 'Y'
5981     AND    l.line_category_code = 'ORDER'
5982     AND    h.booked_flag = 'Y'
5983     AND    l.open_flag = 'Y'
5984     AND    h.header_id <> l_header_id
5985     AND    NOT EXISTS ( SELECT  1
5986                     FROM    oe_order_holds_all oh --Performance issue (SQL ID-14880589 FTS on OE_ORDER_HOLDS_ALL)
5987                     WHERE   h.header_id  = oh.header_id
5988                      AND     oh.hold_release_id IS NULL )
5989     AND    h.transactional_curr_code = p_curr_code
5990     AND    (EXISTS
5991              (SELECT NULL
5992               FROM   oe_payment_types_all pt
5993               WHERE  pt.payment_type_code = NVL(l.payment_type_code,
5994                                             NVL(h.payment_type_code, 'BME'))
5995               AND    pt.credit_check_flag = 'Y'
5996               AND    NVL(pt.org_id, -99)  = G_ORG_ID)
5997            OR
5998            (l.payment_type_code IS NULL AND h.payment_type_code IS NULL));
5999 
6000 -- Customer orders not on hold including Returns
6001 
6002   CURSOR cust_ord_not_on_hold_ret (p_curr_code IN VARCHAR2 default NULL) IS
6003     SELECT
6004       SUM (
6005       ( DECODE(l.line_category_code,'RETURN',(-1)*l.ordered_quantity,l.ordered_quantity)
6006       * l.unit_selling_price )
6007       +   DECODE(l_include_tax_flag, 'Y',
6008       NVL(DECODE(l.line_category_code,'RETURN',(-1)*l.tax_value,l.tax_value),0),0 )
6009            )
6010     FROM   oe_order_lines l
6011          , oe_order_headers_all h
6012          , hz_cust_site_uses_all su
6013          , hz_cust_acct_sites_all cas
6014     WHERE  h.invoice_to_org_id     = su.site_use_id
6015     AND    h.org_id                = su.org_id
6016     AND    su.cust_acct_site_id    = cas.cust_acct_site_id
6017     AND    cas.cust_account_id     = p_customer_id
6018     AND    h.header_id = l.header_id
6019     AND    h.org_id    = l.org_id                           /* MOAC_SQL_CHANGE */
6020     AND    NVL(L.SCHEDULE_SHIP_DATE,NVL(L.REQUEST_DATE,NVL(H.REQUEST_DATE,H.CREATION_DATE)))
6021            <= l_shipping_horizon
6022     AND    (l.invoiced_quantity IS NULL OR l.invoiced_quantity = 0)
6023     AND    h.open_flag = 'Y'
6024     AND    h.booked_flag = 'Y'
6025     AND    l.open_flag = 'Y'
6026     AND    h.header_id <> l_header_id
6027     AND    NOT EXISTS ( SELECT  1
6028                     FROM    oe_order_holds_all oh --Performance issue (SQL ID-14880618 FTS on OE_ORDER_HOLDS_ALL)
6029 		    WHERE   h.header_id  = oh.header_id
6030                      AND     oh.hold_release_id IS NULL )
6031     AND    h.transactional_curr_code = p_curr_code
6032     AND    (EXISTS
6033              (SELECT NULL
6034               FROM   oe_payment_types_all pt
6035               WHERE  pt.payment_type_code = NVL(l.payment_type_code,
6036                                             NVL(h.payment_type_code, 'BME'))
6037               AND    pt.credit_check_flag = 'Y'
6038               AND    NVL(pt.org_id, -99)  = G_ORG_ID)
6039            OR
6040            (l.payment_type_code IS NULL AND h.payment_type_code IS NULL));
6041 
6042 -- Customer orders on hold
6043   CURSOR cust_orders_on_hold (p_curr_code IN VARCHAR2 default NULL) IS
6044     SELECT SUM (
6045                  (l.ordered_quantity * l.unit_selling_price )
6046                +   DECODE(l_include_tax_flag, 'Y',
6047                     NVL(l.tax_value,0), 0   )
6048                )
6049     FROM   oe_order_lines l
6050          , oe_order_headers_all h
6051          , hz_cust_site_uses_all su
6052          , hz_cust_acct_sites_all cas
6053     WHERE  h.invoice_to_org_id     = su.site_use_id
6054     AND    h.org_id                = su.org_id
6055     AND    su.cust_acct_site_id    = cas.cust_acct_site_id
6056     AND    cas.cust_account_id     = p_customer_id
6057     AND    h.header_id = l.header_id
6058     AND    h.org_id    = l.org_id                           /* MOAC_SQL_CHANGE */
6059     AND    NVL(L.SCHEDULE_SHIP_DATE,NVL(L.REQUEST_DATE,NVL(H.REQUEST_DATE,H.CREATION_DATE)))
6060            <= l_shipping_horizon
6061     AND    (l.invoiced_quantity IS NULL OR l.invoiced_quantity = 0)
6062     AND    h.open_flag = 'Y'
6063     AND    l.line_category_code = 'ORDER'
6064     AND    h.booked_flag = 'Y'
6065     AND    l.open_flag = 'Y'
6066     AND    h.header_id <> l_header_id
6067     AND    EXISTS ( SELECT  1
6068                     FROM    oe_order_holds_all oh
6069                     WHERE   h.header_id  = oh.header_id
6070                      AND     oh.hold_release_id IS NULL )
6071     AND    h.transactional_curr_code = p_curr_code
6072     AND    (EXISTS
6073              (SELECT NULL
6074               FROM   oe_payment_types_all pt
6075               WHERE  pt.payment_type_code = NVL(l.payment_type_code,
6076                                             NVL(h.payment_type_code, 'BME'))
6077               AND    pt.credit_check_flag = 'Y'
6078               AND    NVL(pt.org_id, -99)  = G_ORG_ID)
6079            OR
6080            (l.payment_type_code IS NULL AND h.payment_type_code IS NULL));
6081 
6082 -- Customer orders on hold including Returns
6083 
6084   CURSOR cust_ord_on_hold_ret (p_curr_code IN VARCHAR2 default NULL) IS
6085     SELECT
6086       SUM (
6087       ( DECODE(l.line_category_code,'RETURN',(-1)*l.ordered_quantity,l.ordered_quantity)
6088       * l.unit_selling_price )
6089       +   DECODE(l_include_tax_flag, 'Y',
6090       NVL(DECODE(l.line_category_code,'RETURN',(-1)*l.tax_value,l.tax_value),0),0 )
6091            )
6092     FROM   oe_order_lines l
6093          , oe_order_headers_all h
6094          , hz_cust_site_uses_all su
6095          , hz_cust_acct_sites_all cas
6096     WHERE  h.invoice_to_org_id     = su.site_use_id
6097     AND    h.org_id                = su.org_id
6098     AND    su.cust_acct_site_id    = cas.cust_acct_site_id
6099     AND    su.org_id               = cas.org_id
6100     AND    cas.cust_account_id     = p_customer_id
6101     AND    h.header_id = l.header_id
6102     AND    h.org_id    = l.org_id
6103     AND    NVL(L.SCHEDULE_SHIP_DATE,NVL(L.REQUEST_DATE,NVL(H.REQUEST_DATE,H.CREATION_DATE)))
6104            <= l_shipping_horizon
6105     AND    (l.invoiced_quantity IS NULL OR l.invoiced_quantity = 0)
6106     AND    h.open_flag = 'Y'
6107     AND    h.booked_flag = 'Y'
6108     AND    l.open_flag = 'Y'
6109     AND    h.header_id <> l_header_id
6110     AND    EXISTS ( SELECT  1
6111                     FROM    oe_order_holds_all oh
6112                     WHERE   h.header_id  = oh.header_id
6113                      AND     oh.hold_release_id IS NULL )
6114     AND    h.transactional_curr_code = p_curr_code
6115     AND    (EXISTS
6116              (SELECT NULL
6117               FROM   oe_payment_types_all pt
6118               WHERE  pt.payment_type_code = NVL(l.payment_type_code,
6119                                             NVL(h.payment_type_code, 'BME'))
6120               AND    pt.credit_check_flag = 'Y'
6121               AND    NVL(pt.org_id, -99)  = G_ORG_ID)
6122            OR
6123            (l.payment_type_code IS NULL AND h.payment_type_code IS NULL));
6124 
6125 -------------------------------------------------
6126 --Fix Freight charges CURSORS for shipping Horizons
6127 -------------------------------------------------
6128 -- customer hdr freights , Does not include curr order
6129 CURSOR cust_uninv_hdr_freight1 (p_curr_code IN VARCHAR2 default null) IS
6130 SELECT
6131       SUM
6132       ( DECODE( P.CREDIT_OR_CHARGE_FLAG, 'C', (-1), (+1) )
6133       * DECODE( p.arithmetic_operator, 'LUMPSUM',          --bug 4295299
6134                 p.operand, (l.ordered_quantity * p.adjusted_amount))
6135       )
6136 FROM   oe_price_adjustments p
6137      , oe_order_lines   l
6138      , oe_order_headers_all h
6139      , hz_cust_site_uses_all su
6140      , hz_cust_acct_sites_all cas
6141 WHERE  h.invoice_to_org_id   = su.site_use_id
6142   AND  h.org_id              = su.org_id
6143   AND  su.cust_acct_site_id  = cas.cust_acct_site_id
6144   AND  cas.cust_account_id   = p_customer_id
6145   AND  p.line_id             =  l.line_id
6146   AND  NVL(L.SCHEDULE_SHIP_DATE,NVL(L.REQUEST_DATE,NVL(H.REQUEST_DATE,H.CREATION_DATE)))
6147            <= l_shipping_horizon
6148   AND  (l.invoiced_quantity IS NULL OR l.invoiced_quantity = 0)
6149   AND  p.header_id           =  l.header_id
6150   AND  p.header_id           =  h.header_id
6151   AND  h.header_id           =  l.header_id
6152   AND  h.org_id              =  l.org_id                     /* MOAC_SQL_CHANGE */
6153   AND  h.booked_flag         =  'Y'
6154   AND  h.open_flag  = 'Y'
6155   AND  l.open_flag  =  'Y'
6156   AND  l.line_category_code  =  'ORDER'
6157   AND  p.applied_flag        =  'Y'
6158   AND  p.list_line_type_code =  'FREIGHT_CHARGE'
6159   AND  (p.invoiced_flag IS NULL OR p.invoiced_flag = 'N')
6160   AND  h.transactional_curr_code = p_curr_code
6161   AND  h.header_id           <> l_header_id
6162   AND  (EXISTS
6163          (SELECT NULL
6164           FROM   oe_payment_types_all pt
6165           WHERE  pt.payment_type_code = NVL(l.payment_type_code,
6166                                         NVL(h.payment_type_code, 'BME'))
6167           AND    pt.credit_check_flag = 'Y'
6168           AND    NVL(pt.org_id, -99)  = G_ORG_ID)
6169         OR
6170         (l.payment_type_code IS NULL AND h.payment_type_code IS NULL));
6171 
6172 -- customer hdr freights , Does not include curr order,
6173 -- including Returns
6174 
6175 CURSOR cust_uninv_hdr_freight1_ret (p_curr_code IN VARCHAR2 default null) IS
6176 SELECT
6177       SUM
6178       ( DECODE( P.CREDIT_OR_CHARGE_FLAG, 'C', (-1), (+1) )
6179       * DECODE( p.arithmetic_operator, 'LUMPSUM',          --bug 4295299
6180                 p.operand, (l.ordered_quantity * p.adjusted_amount))
6181       )
6182 FROM   oe_price_adjustments p
6183      , oe_order_lines   l
6184      , oe_order_headers_all h
6185      , hz_cust_site_uses_all su
6186      , hz_cust_acct_sites_all cas
6187 WHERE  h.invoice_to_org_id   = su.site_use_id
6188   AND  h.org_id              = su.org_id
6189   AND  su.cust_acct_site_id  = cas.cust_acct_site_id
6190   AND  cas.cust_account_id   = p_customer_id
6191   AND  p.line_id             =  l.line_id
6192   AND  NVL(L.SCHEDULE_SHIP_DATE,NVL(L.REQUEST_DATE,NVL(H.REQUEST_DATE,H.CREATION_DATE)))
6193            <= l_shipping_horizon
6194   AND  (l.invoiced_quantity IS NULL OR l.invoiced_quantity = 0)
6195   AND  p.header_id           =  l.header_id
6196   AND  p.header_id           =  h.header_id
6197   AND  h.header_id           =  l.header_id
6198   AND  h.org_id              =  l.org_id                     /* MOAC_SQL_CHANGE */
6199   AND  h.booked_flag         =  'Y'
6200   AND  h.open_flag  = 'Y'
6201   AND  l.open_flag  =  'Y'
6202   AND  p.applied_flag        =  'Y'
6203   AND  p.list_line_type_code =  'FREIGHT_CHARGE'
6204   AND  ( p.invoiced_flag IS NULL OR p.invoiced_flag = 'N')
6205   AND  h.transactional_curr_code = p_curr_code
6206   AND  h.header_id           <> l_header_id
6207   AND  (EXISTS
6208          (SELECT NULL
6209           FROM   oe_payment_types_all pt
6210           WHERE  pt.payment_type_code = NVL(l.payment_type_code,
6211                                         NVL(h.payment_type_code, 'BME'))
6212           AND    pt.credit_check_flag = 'Y'
6213           AND    NVL(pt.org_id, -99)  = G_ORG_ID)
6214         OR
6215         (l.payment_type_code IS NULL AND h.payment_type_code IS NULL));
6216 
6217 
6218 -- customer freights 2
6219 -- check if there is at least on line with credit check flag = Y, then
6220 -- include the header freight.
6221 CURSOR cust_uninv_hdr_freight2 (p_curr_code IN VARCHAR2 default null) IS
6222 SELECT
6223       SUM( DECODE( P.CREDIT_OR_CHARGE_FLAG, 'C', (-1), (+1) ) * P.OPERAND )
6224 FROM
6225        oe_price_adjustments p
6226      , oe_order_headers h
6227      , hz_cust_site_uses_all su
6228      , hz_cust_acct_sites_all cas
6229 WHERE  h.invoice_to_org_id   = su.site_use_id
6230   AND  h.org_id              = su.org_id                       /* MOAC_SQL_CHANGE */
6231   AND  su.cust_acct_site_id  = cas.cust_acct_site_id
6232   AND  cas.cust_account_id   = p_customer_id
6233   AND  NVL(h.request_date, h.creation_date) <= l_shipping_horizon
6234   AND  h.transactional_curr_code = p_curr_code
6235   AND  p.line_id IS NULL
6236   AND  p.header_id           =  h.header_id
6237   AND  h.order_category_code IN ('ORDER','MIXED')
6238   AND  open_flag  =  'Y'
6239   AND  h.booked_flag         =  'Y'
6240   AND  p.applied_flag        =  'Y'
6241   AND  p.list_line_type_code = 'FREIGHT_CHARGE'
6242   AND  (p.invoiced_flag IS NULL OR p.invoiced_flag = 'N')
6243   AND  h.header_id           <> l_header_id
6244   AND  EXISTS
6245         (SELECT NULL
6246          FROM   oe_payment_types_all pt,
6247                 oe_order_lines l
6248          WHERE  pt.credit_check_flag = 'Y'
6249          AND    l.header_id = h.header_id
6250          AND    l.org_id    = pt.org_id                       /* MOAC_SQL_CHANGE */
6251          AND    NVL(pt.org_id, -99) = G_ORG_ID
6252          AND    pt.payment_type_code =
6253                   DECODE(l.payment_type_code, NULL,
6254                      DECODE(h.payment_type_code, NULL, pt.payment_type_code,
6255                             h.payment_type_code),
6256                          l.payment_type_code)
6257         );
6258 
6259 
6260 -- customer freights 2 including Returns
6261 -- check if there is at least on line with credit check flag = Y, then
6262 -- include the header freight.
6263 
6264 CURSOR cust_uninv_hdr_freight2_ret (p_curr_code IN VARCHAR2 default null) IS
6265 SELECT
6266       SUM( DECODE( P.CREDIT_OR_CHARGE_FLAG, 'C', (-1), (+1) ) * P.OPERAND )
6267 FROM
6268        oe_price_adjustments p
6269      , oe_order_headers_all h
6270      , hz_cust_site_uses_all su
6271      , hz_cust_acct_sites_all cas
6272 WHERE  h.invoice_to_org_id   = su.site_use_id
6273   AND  h.org_id              = su.org_id                     /* MOAC_SQL_CHANGE */
6274   AND  su.cust_acct_site_id  = cas.cust_acct_site_id
6275   AND  cas.cust_account_id   = p_customer_id
6276   AND  NVL(h.request_date, h.creation_date) <= l_shipping_horizon
6277   AND  h.transactional_curr_code = p_curr_code
6278   AND  p.line_id IS NULL
6279   AND  p.header_id           =  h.header_id
6280   AND  h.order_category_code IN ('ORDER','MIXED','RETURN')
6281   AND  open_flag  =  'Y'
6282   AND  h.booked_flag         =  'Y'
6283   AND  p.applied_flag        =  'Y'
6284   AND  p.list_line_type_code = 'FREIGHT_CHARGE'
6285   AND  (p.invoiced_flag IS NULL OR p.invoiced_flag = 'N')
6286   AND  h.header_id           <> l_header_id
6287   AND  EXISTS
6288         (SELECT NULL
6289          FROM   oe_payment_types_all pt,
6290                 oe_order_lines l
6291          WHERE  pt.credit_check_flag = 'Y'
6292          AND    l.header_id = h.header_id
6293          AND    l.org_id    = pt.org_id                     /* MOAC_SQL_CHANGE */
6294          AND    NVL(pt.org_id, -99) = G_ORG_ID
6295          AND    pt.payment_type_code =
6296                   DECODE(l.payment_type_code, NULL,
6297                      DECODE(h.payment_type_code, NULL, pt.payment_type_code,
6298                             h.payment_type_code),
6299                          l.payment_type_code)
6300         );
6301 
6302 
6303 -- customer freights not on hold 1
6304  CURSOR cust_no_hold_hdr_freight1 (p_curr_code IN VARCHAR2 default null) IS
6305 SELECT
6306       SUM
6307       ( DECODE( P.CREDIT_OR_CHARGE_FLAG, 'C', (-1), (+1) )
6308       * DECODE( p.arithmetic_operator, 'LUMPSUM',          --bug 4295299
6309                 p.operand, (l.ordered_quantity * p.adjusted_amount))
6310       )
6311 FROM   oe_price_adjustments p
6312      , oe_order_lines   l
6313      , oe_order_headers_all h
6314      , hz_cust_site_uses_all su
6315      , hz_cust_acct_sites_all cas
6316 WHERE  h.invoice_to_org_id   = su.site_use_id
6317   AND  h.org_id              = su.org_id
6318   AND  su.cust_acct_site_id  = cas.cust_acct_site_id
6319   AND  cas.cust_account_id   = p_customer_id
6320   AND  p.line_id             =  l.line_id
6321   AND  NVL(L.SCHEDULE_SHIP_DATE,NVL(L.REQUEST_DATE,NVL(H.REQUEST_DATE,H.CREATION_DATE)))
6322            <= l_shipping_horizon
6323   AND  (l.invoiced_quantity IS NULL OR l.invoiced_quantity = 0)
6324   AND  l.header_id          = h.header_id
6325   AND  l.org_id             = h.org_id                  /* MOAC_SQL_CHANGE */
6326   AND  p.header_id           =  l.header_id
6327   AND  p.header_id           =  h.header_id
6328   AND  h.booked_flag         =  'Y'
6329   AND  h.open_flag  = 'Y'
6330   AND  l.open_flag  =  'Y'
6331   AND  l.line_category_code  =  'ORDER'
6332   AND  p.applied_flag        =  'Y'
6333   AND  p.list_line_type_code =  'FREIGHT_CHARGE'
6334   AND  (p.invoiced_flag IS NULL OR p.invoiced_flag = 'N')
6335   AND  h.transactional_curr_code = p_curr_code
6336   AND  h.header_id           <> l_header_id
6337   AND  NOT EXISTS ( SELECT  1
6338                     FROM    oe_order_holds_all oh --Performance issue (SQL ID-14880775 FTS on OE_ORDER_HOLDS_ALL)
6339                     WHERE   h.header_id = oh.header_id
6340                     AND     oh.line_id IS NULL
6341                     AND     oh.hold_release_id IS NULL )
6342   AND (EXISTS
6343          (SELECT NULL
6344           FROM   oe_payment_types_all pt
6345           WHERE  pt.payment_type_code = NVL(l.payment_type_code,
6346                                         NVL(h.payment_type_code, 'BME'))
6347           AND    pt.credit_check_flag = 'Y'
6348           AND    NVL(pt.org_id, -99)  = G_ORG_ID)
6349        OR
6350        (l.payment_type_code IS NULL AND h.payment_type_code IS NULL));
6351 
6352 
6353 -- customer freights not on hold 1
6354  CURSOR cust_no_hold_hdr_freight1_ret (p_curr_code IN VARCHAR2 default null) IS
6355 SELECT
6356       SUM
6357       ( DECODE( P.CREDIT_OR_CHARGE_FLAG, 'C', (-1), (+1) )
6358       * DECODE( p.arithmetic_operator, 'LUMPSUM',          --bug 4295299
6359                 p.operand, (l.ordered_quantity * p.adjusted_amount))
6360       )
6361 FROM   oe_price_adjustments p
6362      , oe_order_lines   l
6363      , oe_order_headers_all h
6364      , hz_cust_site_uses_all su
6365      , hz_cust_acct_sites_all cas
6366 WHERE  h.invoice_to_org_id   = su.site_use_id
6367   AND  h.org_id              = su.org_id
6368   AND  su.cust_acct_site_id  = cas.cust_acct_site_id
6369   AND  cas.cust_account_id   = p_customer_id
6370   AND  p.line_id             =  l.line_id
6371   AND  NVL(L.SCHEDULE_SHIP_DATE,NVL(L.REQUEST_DATE,NVL(H.REQUEST_DATE,H.CREATION_DATE)))
6372            <= l_shipping_horizon
6373   AND  (l.invoiced_quantity IS NULL OR l.invoiced_quantity = 0)
6374   AND  l.header_id          = h.header_id
6375   AND  l.org_id             = h.org_id                     /* MOAC_SQL_CHANGE */
6376   AND  p.header_id           =  l.header_id
6377   AND  p.header_id           =  h.header_id
6378   AND  h.booked_flag         =  'Y'
6379   AND  h.open_flag  = 'Y'
6380   AND  l.open_flag  =  'Y'
6381   AND  p.applied_flag        =  'Y'
6382   AND  p.list_line_type_code =  'FREIGHT_CHARGE'
6383   AND  ( p.invoiced_flag IS NULL OR p.invoiced_flag = 'N')
6384   AND  h.transactional_curr_code = p_curr_code
6385   AND  h.header_id           <> l_header_id
6386   AND  NOT EXISTS ( SELECT  1
6387                     FROM    oe_order_holds_all oh --Performance issue (SQL ID-14880801 FTS on OE_ORDER_HOLDS_ALL)
6388                     WHERE   h.header_id = oh.header_id
6389                     AND     oh.line_id IS NULL
6390                     AND     oh.hold_release_id IS NULL )
6391   AND (EXISTS
6392          (SELECT NULL
6393           FROM   oe_payment_types_all pt
6394           WHERE  pt.payment_type_code = NVL(l.payment_type_code,
6395                                         NVL(h.payment_type_code, 'BME'))
6396           AND    pt.credit_check_flag = 'Y'
6397           AND    NVL(pt.org_id, -99)  = G_ORG_ID)
6398        OR
6399        (l.payment_type_code IS NULL AND h.payment_type_code IS NULL));
6400 
6401 -- customer freights on hold 1
6402 
6403  CURSOR cust_hold_hdr_freight1 (p_curr_code IN VARCHAR2 default null) IS
6404 SELECT
6405       SUM
6406       ( DECODE( P.CREDIT_OR_CHARGE_FLAG, 'C', (-1), (+1) )
6407       * DECODE( p.arithmetic_operator, 'LUMPSUM',          --bug 4295299
6408                 p.operand, (l.ordered_quantity * p.adjusted_amount))
6409       )
6410 FROM   oe_price_adjustments p
6411      , oe_order_lines   l
6412      , oe_order_headers_all h
6413      , hz_cust_site_uses_all su
6414      , hz_cust_acct_sites_all cas
6415 WHERE  h.invoice_to_org_id   = su.site_use_id
6416   AND  h.org_id              = su.org_id
6417   AND  su.cust_acct_site_id  = cas.cust_acct_site_id
6418   AND  cas.cust_account_id   = p_customer_id
6419   AND  p.line_id             =  l.line_id
6420   AND  NVL(L.SCHEDULE_SHIP_DATE,NVL(L.REQUEST_DATE,NVL(H.REQUEST_DATE,H.CREATION_DATE)))
6421            <= l_shipping_horizon
6422   AND  (l.invoiced_quantity IS NULL OR l.invoiced_quantity = 0)
6423   AND  l.header_id          = h.header_id
6424   AND  l.org_id             = h.org_id                    /* MOAC_SQL_CHANGE */
6425   AND  p.header_id           =  l.header_id
6426   AND  p.header_id           =  h.header_id
6427   AND  h.booked_flag         =  'Y'
6428   AND  h.open_flag  = 'Y'
6429   AND  l.open_flag  =  'Y'
6430   AND  l.line_category_code  =  'ORDER'
6431   AND  p.applied_flag        =  'Y'
6432   AND  p.list_line_type_code =  'FREIGHT_CHARGE'
6433   AND  (p.invoiced_flag IS NULL OR p.invoiced_flag = 'N')
6434   AND  h.transactional_curr_code = p_curr_code
6435   AND  h.header_id           <> l_header_id
6436   AND  EXISTS ( SELECT  1
6437                     FROM    oe_order_holds_all oh
6438                     WHERE   h.header_id = oh.header_id
6439                     AND     oh.line_id IS NULL
6440                     AND     oh.hold_release_id IS NULL )
6441   AND (EXISTS
6442          (SELECT NULL
6443           FROM   oe_payment_types_all pt
6444           WHERE  pt.payment_type_code = NVL(l.payment_type_code,
6445                                         NVL(h.payment_type_code, 'BME'))
6446           AND    pt.credit_check_flag = 'Y'
6447           AND    NVL(pt.org_id, -99)  = G_ORG_ID)
6448        OR
6449        (l.payment_type_code IS NULL AND h.payment_type_code IS NULL));
6450 
6451 
6452 -- customer freights on hold 1 with returns
6453 
6454  CURSOR cust_hold_hdr_freight1_ret (p_curr_code IN VARCHAR2 default null) IS
6455 SELECT
6456       SUM
6457       ( DECODE( P.CREDIT_OR_CHARGE_FLAG, 'C', (-1), (+1) )
6458       * DECODE( p.arithmetic_operator, 'LUMPSUM',          --bug 4295299
6459                 p.operand, (l.ordered_quantity * p.adjusted_amount))
6460       )
6461 FROM   oe_price_adjustments p
6462      , oe_order_lines   l
6463      , oe_order_headers_all h
6464      , hz_cust_site_uses_all su
6465      , hz_cust_acct_sites_all cas
6466 WHERE  h.invoice_to_org_id   = su.site_use_id
6467   AND  h.org_id              = su.org_id
6468   AND  su.cust_acct_site_id  = cas.cust_acct_site_id
6469   AND  su.org_id             = cas.org_id
6470   AND  cas.cust_account_id   = p_customer_id
6471   AND  p.line_id             =  l.line_id
6472   AND  NVL(L.SCHEDULE_SHIP_DATE,NVL(L.REQUEST_DATE,NVL(H.REQUEST_DATE,H.CREATION_DATE)))
6473            <= l_shipping_horizon
6474   AND  (l.invoiced_quantity IS NULL OR l.invoiced_quantity = 0)
6475   AND  l.header_id          = h.header_id
6476   AND  l.org_id             = h.org_id
6477   AND  p.header_id           =  l.header_id
6478   AND  p.header_id           =  h.header_id
6479   AND  h.booked_flag         =  'Y'
6480   AND  h.open_flag  = 'Y'
6481   AND  l.open_flag  =  'Y'
6482   AND  p.applied_flag        =  'Y'
6483   AND  p.list_line_type_code =  'FREIGHT_CHARGE'
6484   AND  ( p.invoiced_flag IS NULL OR p.invoiced_flag = 'N')
6485   AND  h.transactional_curr_code = p_curr_code
6486   AND  h.header_id           <> l_header_id
6487   AND  EXISTS ( SELECT  1
6488                     FROM    oe_order_holds_all oh
6489                     WHERE   h.header_id = oh.header_id
6490                     AND     oh.line_id IS NULL
6491                     AND     oh.hold_release_id IS NULL )
6492   AND (EXISTS
6493          (SELECT NULL
6494           FROM   oe_payment_types_all pt
6495           WHERE  pt.payment_type_code = NVL(l.payment_type_code,
6496                                         NVL(h.payment_type_code, 'BME'))
6497           AND    pt.credit_check_flag = 'Y'
6498           AND    NVL(pt.org_id, -99)  = G_ORG_ID)
6499        OR
6500        (l.payment_type_code IS NULL AND h.payment_type_code IS NULL));
6501 
6502 -- customer not on hold freight 2
6503  CURSOR cust_no_hold_hdr_freight2 (p_curr_code IN VARCHAR2 default null) IS
6504 SELECT
6505       SUM( DECODE( P.CREDIT_OR_CHARGE_FLAG, 'C', (-1), (+1) ) * P.OPERAND )
6506 FROM
6507        oe_price_adjustments p
6508      , oe_order_headers h
6509      , hz_cust_site_uses_all su
6510      , hz_cust_acct_sites_all cas
6511 WHERE  h.invoice_to_org_id   = su.site_use_id
6512   AND  h.org_id              = su.org_id
6513   AND  su.cust_acct_site_id  = cas.cust_acct_site_id
6514   AND  cas.cust_account_id   = p_customer_id
6515   AND  NVL(h.request_date, h.creation_date) <= l_shipping_horizon
6516   AND  h.transactional_curr_code = p_curr_code
6517   AND  p.line_id IS NULL
6518   AND  p.header_id           =  h.header_id
6519   AND  h.order_category_code IN ('ORDER','MIXED')
6520   AND  h.open_flag  =  'Y'
6521   AND  h.booked_flag         =  'Y'
6522   AND  p.applied_flag        =  'Y'
6523   AND  p.list_line_type_code = 'FREIGHT_CHARGE'
6524   AND  (p.invoiced_flag IS NULL OR p.invoiced_flag = 'N')
6525   AND  h.header_id           <> l_header_id
6526   AND  NOT EXISTS ( SELECT  1
6527                     FROM    oe_order_holds_all oh --Performance issue (SQL ID-14880869 FTS on OE_ORDER_HOLDS_ALL)
6528                     WHERE   h.header_id = oh.header_id
6529                     AND     oh.line_id IS NULL
6530                     AND     oh.hold_release_id IS NULL )
6531   AND  EXISTS
6532         (SELECT NULL
6533          FROM   oe_payment_types_all pt,
6534                 oe_order_lines_all l --Performance issue (SQL ID-14880869 FTS on OE_ORDER_HOLDS_ALL)
6535          WHERE  pt.credit_check_flag = 'Y'
6536          AND    l.header_id = h.header_id
6537          AND    l.org_id    = pt.org_id                     /* MOAC_SQL_CHANGE */
6538          AND    NVL(pt.org_id, -99) = G_ORG_ID
6539          AND    pt.payment_type_code =
6540                   DECODE(l.payment_type_code, NULL,
6541                      DECODE(h.payment_type_code, NULL, pt.payment_type_code,
6542                             h.payment_type_code),
6543                          l.payment_type_code)
6544         );
6545 
6546 -- customer not on hold freight 2 including Returns
6547 
6548  CURSOR cust_no_hold_hdr_freight2_ret (p_curr_code IN VARCHAR2 default null) IS
6549 SELECT
6550       SUM( DECODE( P.CREDIT_OR_CHARGE_FLAG, 'C', (-1), (+1) ) * P.OPERAND )
6551 FROM
6552        oe_price_adjustments p
6553      , oe_order_headers h
6554      , hz_cust_site_uses_all su
6555      , hz_cust_acct_sites_all cas
6556 WHERE  h.invoice_to_org_id   = su.site_use_id
6557   AND  h.org_id              = su.org_id
6558   AND  su.cust_acct_site_id  = cas.cust_acct_site_id
6559   AND  cas.cust_account_id   = p_customer_id
6560   AND  NVL(h.request_date, h.creation_date) <= l_shipping_horizon
6561   AND  h.transactional_curr_code = p_curr_code
6562   AND  p.line_id IS NULL
6563   AND  p.header_id           =  h.header_id
6564   AND  h.order_category_code IN ('ORDER','MIXED','RETURN')
6565   AND  h.open_flag  =  'Y'
6566   AND  h.booked_flag         =  'Y'
6567   AND  p.applied_flag        =  'Y'
6568   AND  p.list_line_type_code = 'FREIGHT_CHARGE'
6569   AND  ( p.invoiced_flag IS NULL OR p.invoiced_flag = 'N')
6570   AND  h.header_id           <> l_header_id
6571   AND  NOT EXISTS ( SELECT  1
6572                     FROM    oe_order_holds_all oh --Performance issue (SQL ID-14880892 FTS on OE_ORDER_HOLDS_ALL)
6573                     WHERE   h.header_id = oh.header_id
6574                     AND     oh.line_id IS NULL
6575                     AND     oh.hold_release_id IS NULL )
6576   AND  EXISTS
6577         (SELECT NULL
6578          FROM   oe_payment_types_all pt,
6579                 oe_order_lines_all l --Performance issue (SQL ID-14880892 FTS on OE_ORDER_HOLDS_ALL)
6580          WHERE  pt.credit_check_flag = 'Y'
6581          AND    l.header_id = h.header_id
6582          AND    l.org_id    = pt.org_id                  /* MOAC_SQL_CHANGE */
6583          AND    NVL(pt.org_id, -99) = G_ORG_ID
6584          AND    pt.payment_type_code =
6585                   DECODE(l.payment_type_code, NULL,
6586                      DECODE(h.payment_type_code, NULL, pt.payment_type_code,
6587                             h.payment_type_code),
6588                          l.payment_type_code)
6589         );
6590 
6591 -- customer on hold  freight 2
6592  CURSOR cust_hold_hdr_freight2 (p_curr_code IN VARCHAR2 default null) IS
6593 SELECT
6594       SUM( DECODE( P.CREDIT_OR_CHARGE_FLAG, 'C', (-1), (+1) ) * P.OPERAND )
6595 FROM
6596        oe_price_adjustments p
6597      , oe_order_headers h
6598      , hz_cust_site_uses_all su
6599      , hz_cust_acct_sites_all cas
6600 WHERE  h.invoice_to_org_id   = su.site_use_id
6601   AND  h.org_id              = su.org_id
6602   AND  su.cust_acct_site_id  = cas.cust_acct_site_id
6603   AND  cas.cust_account_id   = p_customer_id
6604   AND  NVL(h.request_date, h.creation_date) <= l_shipping_horizon
6605   AND  h.transactional_curr_code = p_curr_code
6606   AND  p.line_id IS NULL
6607   AND  p.header_id           =  h.header_id
6608   AND  h.order_category_code IN ('ORDER','MIXED')
6609   AND  h.open_flag  =  'Y'
6610   AND  h.booked_flag         =  'Y'
6611   AND  p.applied_flag        =  'Y'
6612   AND  p.list_line_type_code = 'FREIGHT_CHARGE'
6613   AND  (p.invoiced_flag IS NULL OR p.invoiced_flag = 'N')
6614   AND  h.header_id           <> l_header_id
6615   AND  EXISTS ( SELECT  1
6616                     FROM    oe_order_holds_all oh --Performance issue (SQL ID-14880915 FTS on OE_ORDER_HOLDS_ALL)
6617                     WHERE   h.header_id = oh.header_id
6618                     AND     oh.line_id IS NULL
6619                     AND     oh.hold_release_id IS NULL )
6620   AND  EXISTS
6621         (SELECT NULL
6622          FROM   oe_payment_types_all pt,
6623                 oe_order_lines_all l --Performance issue (SQL ID-14880915 FTS on OE_ORDER_HOLDS_ALL)
6624          WHERE  pt.credit_check_flag = 'Y'
6625          AND    l.header_id = h.header_id
6626          AND    l.org_id    = pt.org_id                   /* MOAC_SQL_CHANGE */
6627          AND    NVL(pt.org_id, -99) = G_ORG_ID
6628          AND    pt.payment_type_code =
6629                   DECODE(l.payment_type_code, NULL,
6630                      DECODE(h.payment_type_code, NULL, pt.payment_type_code,
6631                             h.payment_type_code),
6632                          l.payment_type_code)
6633         );
6634 
6635 -- customer on hold freight 2 including Returns
6636 
6637  CURSOR cust_hold_hdr_freight2_ret (p_curr_code IN VARCHAR2 default null) IS
6638 SELECT
6639       SUM( DECODE( P.CREDIT_OR_CHARGE_FLAG, 'C', (-1), (+1) ) * P.OPERAND )
6640 FROM
6641        oe_price_adjustments p
6642      , oe_order_headers h
6643      , hz_cust_site_uses_all su
6644      , hz_cust_acct_sites_all cas
6645 WHERE  h.invoice_to_org_id   = su.site_use_id
6646   AND  h.org_id              = su.org_id
6647   AND  su.cust_acct_site_id  = cas.cust_acct_site_id
6648   AND  cas.cust_account_id   = p_customer_id
6649   AND  NVL(h.request_date, h.creation_date) <= l_shipping_horizon
6650   AND  h.transactional_curr_code = p_curr_code
6651   AND  p.line_id IS NULL
6652   AND  p.header_id           =  h.header_id
6653   AND  h.order_category_code IN ('ORDER','MIXED','RETURN')
6654   AND  h.open_flag  =  'Y'
6655   AND  h.booked_flag         =  'Y'
6656   AND  p.applied_flag        =  'Y'
6657   AND  p.list_line_type_code = 'FREIGHT_CHARGE'
6658   AND  ( p.invoiced_flag IS NULL OR p.invoiced_flag = 'N')
6659   AND  h.header_id           <> l_header_id
6660   AND  EXISTS ( SELECT  1
6661                     FROM    oe_order_holds_all oh
6662                     WHERE   h.header_id = oh.header_id
6663                     AND     oh.line_id IS NULL
6664                     AND     oh.hold_release_id IS NULL )
6665   AND  EXISTS
6666         (SELECT NULL
6667          FROM   oe_payment_types_all pt,
6668                 oe_order_lines l
6669          WHERE  pt.credit_check_flag = 'Y'
6670          AND    l.header_id = h.header_id
6671          AND    l.org_id    = pt.org_id                      /* MOAC_SQL_CHANGE */
6672          AND    NVL(pt.org_id, -99) = G_ORG_ID
6673          AND    pt.payment_type_code =
6674                   DECODE(l.payment_type_code, NULL,
6675                      DECODE(h.payment_type_code, NULL, pt.payment_type_code,
6676                             h.payment_type_code),
6677                          l.payment_type_code)
6678         );
6679 
6680 ------------------------
6681 --- SITE LEVEL CURSORS
6682 -------------------------
6683 
6684 -- site external exposure cursor
6685 CURSOR site_external_exposure_csr (p_curr_code IN VARCHAR2 default NULL) IS
6686    SELECT SUM(balance)
6687    FROM   oe_credit_summaries
6688    WHERE  balance_type  = 18
6689    AND    site_use_id   = p_site_use_id
6690    AND    currency_code = p_curr_code;
6691 
6692 
6693 CURSOR site_ar_balance (p_curr_code IN VARCHAR2 default NULL) IS
6694 SELECT SUM(NVL(amount_due_remaining,0) )
6695     FROM   ar_payment_schedules
6696     WHERE  customer_site_use_id = p_site_use_id
6697     AND    status               = 'OP'
6698     AND    invoice_currency_code =
6699             p_curr_code
6700     AND    (receipt_confirmed_flag IS NULL OR receipt_confirmed_flag = 'Y')
6701     AND    gl_date_closed = to_date( '31-12-4712', 'DD-MM-YYYY')
6702     AND    sysdate - trx_date >
6703           NVL(p_credit_check_rule_rec.OPEN_AR_DAYS, sysdate - trx_date - 1);
6704 
6705   -- PAY AT RISK
6706 
6707 CURSOR site_pay_risk (p_curr_code IN VARCHAR2 default NULL) IS
6708 SELECT SUM(NVL(crh.amount,0))
6709     FROM   ar_cash_receipt_history crh
6710          , ar_cash_receipts_all cr
6711          , hz_cust_site_uses_all s
6712          , hz_cust_acct_sites_all a
6713      WHERE  crh.cash_receipt_id = cr.cash_receipt_id
6714     AND    crh.org_id           = cr.org_id
6715     AND    crh.current_record_flag = 'Y'
6716     AND    crh.status <> DECODE ( crh.factor_flag
6717                                 , 'Y', 'RISK_ELIMINATED'
6718                                 , 'CLEARED' )
6719     AND    NVL( cr.reversal_category, cr.status||'X' )  <>  cr.status
6720     AND    crh.status <> 'REVERSED'
6721     AND    cr.currency_code =
6722            p_curr_code
6723     AND    cr.customer_site_use_id = s.site_use_id
6724     AND    cr.org_id               = s.org_id                    /* MOAC_SQL_CHANGE */
6725     AND    cr.pay_from_customer    = a.cust_account_id
6726     AND    s.cust_acct_site_id     = a.cust_acct_site_id
6727     AND    s.site_use_id           = p_site_use_id
6728     AND    sysdate - cr.receipt_date
6729            > NVL(p_credit_check_rule_rec.OPEN_AR_DAYS,
6730                sysdate - cr.receipt_date - 1)
6731    AND  NOT EXISTS
6732          (
6733            SELECT
6734              'X'
6735            FROM
6736              ar_receivable_applications rap
6737            WHERE
6738                   rap.cash_receipt_id  =  cr.cash_receipt_id
6739              AND  rap.applied_payment_schedule_id  =  -2
6740              AND  rap.display  =  'Y'
6741          ) ;
6742 
6743 
6744 ------------------------ SITE BR ------------------------------
6745 CURSOR site_br_balance (p_curr_code IN VARCHAR2 default NULL) IS
6746 SELECT SUM(NVL(amount_due_remaining,0) )
6747     FROM   ar_payment_schedules
6748     WHERE  customer_site_use_id = l_drawee_site_use_id
6749     AND    status               = 'OP'
6750     AND    invoice_currency_code = p_curr_code
6751     AND    (receipt_confirmed_flag IS NULL OR receipt_confirmed_flag = 'Y')
6752     AND    gl_date_closed = to_date( '31-12-4712', 'DD-MM-YYYY');
6753 
6754 CURSOR site_br_pay_risk (p_curr_code IN VARCHAR2 default NULL) IS
6755 SELECT SUM(NVL(crh.amount,0))
6756     FROM   ar_cash_receipt_history crh
6757          , ar_cash_receipts_all cr
6758     WHERE  crh.cash_receipt_id = cr.cash_receipt_id
6759     AND    crh.org_id          = cr.org_id                      /* MOAC_SQL_CHANGE */
6760     AND    crh.current_record_flag = 'Y'
6761     AND    crh.status <> DECODE ( crh.factor_flag
6762                                 , 'Y', 'RISK_ELIMINATED'
6763                                 , 'CLEARED' )
6764     AND    NVL( cr.reversal_category, cr.status||'X' )  <>  cr.status
6765     AND    crh.status <> 'REVERSED'
6766     AND    cr.currency_code        = p_curr_code
6767     AND    cr.pay_from_customer    = p_customer_id
6768     AND    cr.customer_site_use_id = l_drawee_site_use_id
6769     AND  NOT EXISTS
6770          (
6771            SELECT
6772              'X'
6773            FROM
6774              ar_receivable_applications rap
6775            WHERE
6776                   rap.cash_receipt_id  =  cr.cash_receipt_id
6777              AND  rap.applied_payment_schedule_id  =  -2
6778              AND  rap.display  =  'Y'
6779          ) ;
6780 
6781 
6782 
6783 -- SITE UNINVOICED ORDERS
6784 
6785 CURSOR site_uninvoiced_orders (p_curr_code IN VARCHAR2 default NULL) IS
6786     SELECT SUM (
6787                  ( l.ordered_quantity * l.unit_selling_price )
6788                +   DECODE(l_include_tax_flag, 'Y',
6789                     NVL(l.tax_value,0), 0   )
6790                )
6791     FROM   oe_order_lines l
6792          , oe_order_headers_all h
6793     WHERE  h.invoice_to_org_id = p_site_use_id
6794     AND    h.header_id      = l.header_id
6795     AND    h.org_id         = l.org_id           /* MOAC_SQL_CHANGE */
6796     AND    NVL(L.SCHEDULE_SHIP_DATE,NVL(L.REQUEST_DATE,NVL(H.REQUEST_DATE,H.CREATION_DATE)))
6797            <= l_shipping_horizon
6798     AND    (l.invoiced_quantity IS NULL OR l.invoiced_quantity = 0)
6799     AND    h.open_flag   = 'Y'
6800     AND    l.line_category_code = 'ORDER'
6801     AND    h.booked_flag = 'Y'
6802     AND    l.open_flag = 'Y'
6803     AND    h.header_id <> l_header_id
6804     AND    h.transactional_curr_code = p_curr_code
6805     AND    (EXISTS
6806              (SELECT NULL
6807               FROM   oe_payment_types_all pt
6808               WHERE  pt.payment_type_code = NVL(l.payment_type_code,
6809                                             NVL(h.payment_type_code, 'BME'))
6810               AND    pt.credit_check_flag = 'Y'
6811               AND    NVL(pt.org_id, -99)  = G_ORG_ID)
6812             OR
6813             (l.payment_type_code IS NULL AND h.payment_type_code IS NULL));
6814 
6815 
6816 
6817 -- SITE UNINVOICED ORDERS including RETURNS
6818 
6819   CURSOR site_uninvoiced_orders_ret (p_curr_code IN VARCHAR2 default NULL) IS
6820     SELECT
6821       SUM (
6822       ( DECODE(l.line_category_code,'RETURN',(-1)*l.ordered_quantity,l.ordered_quantity)
6823       * l.unit_selling_price )
6824       +   DECODE(l_include_tax_flag, 'Y',
6825       NVL(DECODE(l.line_category_code,'RETURN',(-1)*l.tax_value,l.tax_value),0),0 )
6826            )
6827     FROM   oe_order_lines l
6828          , oe_order_headers_all h
6829     WHERE  h.invoice_to_org_id = p_site_use_id
6830     AND    h.header_id      = l.header_id
6831     AND    h.org_id         = l.org_id                    /* MOAC_SQL_CHANGE */
6832     AND    NVL(L.SCHEDULE_SHIP_DATE,NVL(L.REQUEST_DATE,NVL(H.REQUEST_DATE,H.CREATION_DATE)))
6833            <= l_shipping_horizon
6834     AND    (l.invoiced_quantity IS NULL OR l.invoiced_quantity = 0)
6835     AND    h.open_flag   = 'Y'
6836     AND    h.booked_flag = 'Y'
6837     AND    l.open_flag = 'Y'
6838     AND    h.header_id <> l_header_id
6839     AND    h.transactional_curr_code = p_curr_code
6840     AND    (EXISTS
6841              (SELECT NULL
6842               FROM   oe_payment_types_all pt
6843               WHERE  pt.payment_type_code = NVL(l.payment_type_code,
6844                                             NVL(h.payment_type_code, 'BME'))
6845               AND    pt.credit_check_flag = 'Y'
6846               AND    NVL(pt.org_id, -99)  = G_ORG_ID)
6847             OR
6848             (l.payment_type_code IS NULL AND h.payment_type_code IS NULL));
6849 
6850 
6851   -- site orders not on hold
6852 
6853   CURSOR site_orders_not_on_hold (p_curr_code IN VARCHAR2 default NULL) IS
6854     SELECT SUM( (l.ordered_quantity * l.unit_selling_price )
6855                +   DECODE( l_include_tax_flag, 'Y',
6856                            NVL(l.tax_value,0), 0
6857                          )
6858                )
6859     FROM   oe_order_lines l
6860          , oe_order_headers_all h
6861     WHERE  h.invoice_to_org_id = p_site_use_id
6862     AND    h.header_id         = l.header_id
6863     AND    h.org_id            = l.org_id                 /* MOAC_SQL_CHANGE */
6864     AND    NVL(L.SCHEDULE_SHIP_DATE,NVL(L.REQUEST_DATE,NVL(H.REQUEST_DATE,H.CREATION_DATE)))
6865            <= l_shipping_horizon
6866     AND    (l.invoiced_quantity IS NULL OR l.invoiced_quantity = 0)
6867     AND    h.open_flag                = 'Y'
6868     AND    l.line_category_code       = 'ORDER'
6869     AND    h.booked_flag              = 'Y'
6870     AND    l.open_flag  = 'Y'
6871     AND    h.header_id <> l_header_id
6872     AND    NOT EXISTS ( SELECT  1
6873                     FROM    oe_order_holds_all oh
6874                     WHERE   h.header_id  = oh.header_id
6875                      AND     oh.hold_release_id IS NULL )
6876     AND    h.transactional_curr_code = p_curr_code
6877     AND    (EXISTS
6878              (SELECT NULL
6879               FROM   oe_payment_types_all pt
6880               WHERE  pt.payment_type_code = NVL(l.payment_type_code,
6881                                             NVL(h.payment_type_code, 'BME'))
6882               AND    pt.credit_check_flag = 'Y'
6883               AND    NVL(pt.org_id, -99)  = G_ORG_ID)
6884             OR
6885             (l.payment_type_code IS NULL AND h.payment_type_code IS NULL));
6886 
6887 
6888 
6889 -- site orders not on hold including Returns
6890 
6891   CURSOR site_orders_not_on_hold_ret (p_curr_code IN VARCHAR2 default NULL) IS
6892     SELECT
6893       SUM (
6894       ( DECODE(l.line_category_code,'RETURN',(-1)*l.ordered_quantity,l.ordered_quantity)
6895       * l.unit_selling_price )
6896       +   DECODE(l_include_tax_flag, 'Y',
6897       NVL(DECODE(l.line_category_code,'RETURN',(-1)*l.tax_value,l.tax_value),0),0 )
6898            )
6899     FROM   oe_order_lines l
6900          , oe_order_headers_all h
6901     WHERE  h.invoice_to_org_id = p_site_use_id
6902     AND    h.header_id         = l.header_id
6903     AND    h.org_id            = l.org_id          /* MOAC_SQL_CHANGE */
6904     AND    NVL(L.SCHEDULE_SHIP_DATE,NVL(L.REQUEST_DATE,NVL(H.REQUEST_DATE,H.CREATION_DATE)))
6905            <= l_shipping_horizon
6906     AND    (l.invoiced_quantity IS NULL OR l.invoiced_quantity = 0)
6907     AND    h.open_flag                = 'Y'
6908     AND    h.booked_flag              = 'Y'
6909     AND    l.open_flag  = 'Y'
6910     AND    h.header_id <> l_header_id
6911     AND    NOT EXISTS ( SELECT  1
6912                     FROM    oe_order_holds_all oh
6913                     WHERE   h.header_id  = oh.header_id
6914                     AND     oh.hold_release_id IS NULL )
6915     AND    h.transactional_curr_code = p_curr_code
6916     AND    (EXISTS
6917              (SELECT NULL
6918               FROM   oe_payment_types_all pt
6919               WHERE  pt.payment_type_code = NVL(l.payment_type_code,
6920                                             NVL(h.payment_type_code, 'BME'))
6921               AND    pt.credit_check_flag = 'Y'
6922               AND    NVL(pt.org_id, -99)  = G_ORG_ID)
6923             OR
6924             (l.payment_type_code IS NULL AND h.payment_type_code IS NULL));
6925 
6926 -- site orders on hold
6927   CURSOR site_orders_on_hold (p_curr_code IN VARCHAR2 default NULL) IS
6928     SELECT SUM( (l.ordered_quantity * l.unit_selling_price )
6929                +   DECODE( l_include_tax_flag, 'Y',
6930                            NVL(l.tax_value,0), 0
6931                          )
6932                )
6933     FROM   oe_order_lines l
6934          , oe_order_headers_all h
6935     WHERE  h.invoice_to_org_id = p_site_use_id
6936     AND    h.header_id         = l.header_id
6937     AND    h.org_id            = l.org_id           /* MOAC_SQL_CHANGE */
6938     AND    NVL(L.SCHEDULE_SHIP_DATE,NVL(L.REQUEST_DATE,NVL(H.REQUEST_DATE,H.CREATION_DATE)))
6939            <= l_shipping_horizon
6940     AND    (l.invoiced_quantity IS NULL OR l.invoiced_quantity = 0)
6941     AND    h.open_flag                = 'Y'
6942     AND    l.line_category_code       = 'ORDER'
6943     AND    h.booked_flag              = 'Y'
6944     AND    l.open_flag  = 'Y'
6945     AND    h.header_id <> l_header_id
6946     AND    EXISTS ( SELECT  1
6947                     FROM    oe_order_holds_all oh
6948                     WHERE   h.header_id  = oh.header_id
6949                      AND     oh.hold_release_id IS NULL )
6950     AND    h.transactional_curr_code = p_curr_code
6951     AND    (EXISTS
6952              (SELECT NULL
6953               FROM   oe_payment_types_all pt
6954               WHERE  pt.payment_type_code = NVL(l.payment_type_code,
6955                                             NVL(h.payment_type_code, 'BME'))
6956               AND    pt.credit_check_flag = 'Y'
6957               AND    NVL(pt.org_id, -99)  = G_ORG_ID)
6958             OR
6959             (l.payment_type_code IS NULL AND h.payment_type_code IS NULL));
6960 
6961 -- site orders on hold including Returns
6962 
6963   CURSOR site_orders_on_hold_ret (p_curr_code IN VARCHAR2 default NULL) IS
6964     SELECT
6965       SUM (
6966       ( DECODE(l.line_category_code,'RETURN',(-1)*l.ordered_quantity,l.ordered_quantity)      * l.unit_selling_price )
6967       +   DECODE(l_include_tax_flag, 'Y',
6968       NVL(DECODE(l.line_category_code,'RETURN',(-1)*l.tax_value,l.tax_value),0),0 )
6969            )
6970     FROM   oe_order_lines l
6971          , oe_order_headers_all h
6972     WHERE  h.invoice_to_org_id = p_site_use_id
6973     AND    h.header_id         = l.header_id
6974     AND    h.org_id            = l.org_id               /* MOAC_SQL_CHANGE */
6975     AND    NVL(L.SCHEDULE_SHIP_DATE,NVL(L.REQUEST_DATE,NVL(H.REQUEST_DATE,H.CREATION_DATE)))
6976            <= l_shipping_horizon
6977     AND    (l.invoiced_quantity IS NULL OR l.invoiced_quantity = 0)
6978     AND    h.open_flag                = 'Y'
6979     AND    h.booked_flag              = 'Y'
6980     AND    l.open_flag  = 'Y'
6981     AND    h.header_id <> l_header_id
6982     AND    EXISTS ( SELECT  1
6983                     FROM    oe_order_holds_all oh --Performance issue (SQL ID-14881132 FTS on OE_ORDER_HOLDS_ALL)
6984                     WHERE   h.header_id  = oh.header_id
6985                     AND     oh.hold_release_id IS NULL )
6986     AND    h.transactional_curr_code = p_curr_code
6987     AND    (EXISTS
6988              (SELECT NULL
6989               FROM   oe_payment_types_all pt
6990               WHERE  pt.payment_type_code = NVL(l.payment_type_code,
6991                                             NVL(h.payment_type_code, 'BME'))
6992               AND    pt.credit_check_flag = 'Y'
6993               AND    NVL(pt.org_id, -99)  = G_ORG_ID)
6994             OR
6995             (l.payment_type_code IS NULL AND h.payment_type_code IS NULL));
6996 
6997 -- site hdr freights , Does not include curr order
6998 CURSOR site_uninv_hdr_freight1 (p_curr_code IN VARCHAR2 default null) IS
6999 SELECT
7000       SUM
7001       ( DECODE( P.CREDIT_OR_CHARGE_FLAG, 'C', (-1), (+1) )
7002       * DECODE( p.arithmetic_operator, 'LUMPSUM',          --bug 4295299
7003                 p.operand, (l.ordered_quantity * p.adjusted_amount))
7004       )
7005 FROM   oe_price_adjustments p
7006      , oe_order_lines   l
7007      , oe_order_headers_all h
7008 WHERE  h.invoice_to_org_id   = p_site_use_id
7009   AND  p.line_id             =  l.line_id
7010   AND    NVL(L.SCHEDULE_SHIP_DATE,NVL(L.REQUEST_DATE,NVL(H.REQUEST_DATE,H.CREATION_DATE)))
7011            <= l_shipping_horizon
7012   AND  (l.invoiced_quantity IS NULL OR l.invoiced_quantity = 0)
7013   AND  l.header_id          = h.header_id
7014   AND  l.org_id             = h.org_id           /* MOAC_SQL_CHANGE */
7015   AND  p.header_id           =  l.header_id
7016   AND  p.header_id           =  h.header_id
7017   AND  h.booked_flag         =  'Y'
7018   AND  h.open_flag  = 'Y'
7019   AND  l.open_flag  =  'Y'
7020   AND  l.line_category_code  =  'ORDER'
7021   AND  p.applied_flag        =  'Y'
7022   AND  p.list_line_type_code =  'FREIGHT_CHARGE'
7023   AND  (p.invoiced_flag IS NULL OR p.invoiced_flag = 'N')
7024   AND  h.transactional_curr_code = p_curr_code
7025   AND  h.header_id           <> l_header_id
7026   AND  (EXISTS
7027          (SELECT NULL
7028           FROM   oe_payment_types_all pt
7029           WHERE  pt.payment_type_code = NVL(l.payment_type_code,
7030                                         NVL(h.payment_type_code, 'BME'))
7031           AND    pt.credit_check_flag = 'Y'
7032           AND    NVL(pt.org_id, -99)  = G_ORG_ID)
7033         OR
7034         (l.payment_type_code IS NULL AND h.payment_type_code IS NULL));
7035 
7036 
7037 -- sitehdr freights , Does not include curr order
7038 -- Including Returns
7039 
7040 CURSOR site_uninv_hdr_freight1_ret (p_curr_code IN VARCHAR2 default null) IS
7041 SELECT
7042       SUM
7043       ( DECODE( P.CREDIT_OR_CHARGE_FLAG, 'C', (-1), (+1) )
7044       * DECODE( p.arithmetic_operator, 'LUMPSUM',          --bug 4295299
7045                 p.operand, (l.ordered_quantity * p.adjusted_amount))
7046       )
7047 FROM   oe_price_adjustments p
7048      , oe_order_lines   l
7049      , oe_order_headers_all h
7050 WHERE  h.invoice_to_org_id   = p_site_use_id
7051   AND  p.line_id             =  l.line_id
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  l.header_id          = h.header_id
7056   AND  l.org_id             = h.org_id           /* MOAC_SQL_CHANGE */
7057   AND  p.header_id           =  l.header_id
7058   AND  p.header_id           =  h.header_id
7059   AND  h.booked_flag         =  'Y'
7060   AND  h.open_flag  = 'Y'
7061   AND  l.open_flag  =  'Y'
7062   AND  p.applied_flag        =  'Y'
7063   AND  p.list_line_type_code =  'FREIGHT_CHARGE'
7064   AND  (p.invoiced_flag IS NULL OR p.invoiced_flag = 'N')
7065   AND  h.transactional_curr_code = p_curr_code
7066   AND  h.header_id           <> l_header_id
7067   AND  (EXISTS
7068          (SELECT NULL
7069           FROM   oe_payment_types_all pt
7070           WHERE  pt.payment_type_code = NVL(l.payment_type_code,
7071                                         NVL(h.payment_type_code, 'BME'))
7072           AND    pt.credit_check_flag = 'Y'
7073           AND    NVL(pt.org_id, -99)  = G_ORG_ID)
7074         OR
7075         (l.payment_type_code IS NULL AND h.payment_type_code IS NULL));
7076 
7077 -- sitefreights 2
7078 CURSOR site_uninv_hdr_freight2 (p_curr_code IN VARCHAR2 default null) IS
7079 SELECT
7080       SUM( DECODE( P.CREDIT_OR_CHARGE_FLAG, 'C', (-1), (+1) ) * P.OPERAND )
7081 FROM
7082        oe_price_adjustments p
7083      , oe_order_headers h
7084 WHERE  h.invoice_to_org_id   = p_site_use_id
7085   AND  NVL(h.request_date, h.creation_date) <= l_shipping_horizon
7086   AND  h.transactional_curr_code = p_curr_code
7087   AND  p.line_id IS NULL
7088   AND  p.header_id           =  h.header_id
7089   AND  h.order_category_code IN ('ORDER','MIXED')
7090   AND  h.open_flag  =  'Y'
7091   AND  h.booked_flag         =  'Y'
7092   AND  p.applied_flag        =  'Y'
7093   AND  p.list_line_type_code = 'FREIGHT_CHARGE'
7094   AND  (p.invoiced_flag IS NULL OR p.invoiced_flag = 'N')
7095   AND  h.header_id           <> l_header_id
7096   AND  EXISTS
7097         (SELECT NULL
7098          FROM   oe_payment_types_all pt,
7099                 oe_order_lines l
7100          WHERE  pt.credit_check_flag = 'Y'
7101          AND    l.header_id = h.header_id
7102          AND    l.org_id    = pt.org_id          /* MOAC_SQL_CHANGE */
7103          AND    NVL(pt.org_id, -99) = G_ORG_ID
7104          AND    pt.payment_type_code =
7105                   DECODE(l.payment_type_code, NULL,
7106                      DECODE(h.payment_type_code, NULL, pt.payment_type_code,
7107                             h.payment_type_code),
7108                          l.payment_type_code)
7109         );
7110 
7111 -- sitefreights 2 including Returns
7112 
7113 CURSOR site_uninv_hdr_freight2_ret (p_curr_code IN VARCHAR2 default null) IS
7114 SELECT
7115       SUM( DECODE( P.CREDIT_OR_CHARGE_FLAG, 'C', (-1), (+1) ) * P.OPERAND )
7116 FROM
7117        oe_price_adjustments p
7118      , oe_order_headers h
7119 WHERE  h.invoice_to_org_id   = p_site_use_id
7120   AND  NVL(h.request_date, h.creation_date) <= l_shipping_horizon
7121   AND  h.transactional_curr_code = p_curr_code
7122   AND  p.line_id IS NULL
7123   AND  p.header_id           =  h.header_id
7124   AND  h.order_category_code IN ('ORDER','MIXED','RETURN')
7125   AND  h.open_flag  =  'Y'
7126   AND  h.booked_flag         =  'Y'
7127   AND  p.applied_flag        =  'Y'
7128   AND  p.list_line_type_code = 'FREIGHT_CHARGE'
7129   AND  (p.invoiced_flag IS NULL OR p.invoiced_flag = 'N')
7130   AND  h.header_id           <> l_header_id
7131   AND  EXISTS
7132         (SELECT NULL
7133          FROM   oe_payment_types_all pt,
7134                 oe_order_lines l
7135          WHERE  pt.credit_check_flag = 'Y'
7136          AND    l.header_id = h.header_id
7137          AND    l.org_id    = pt.org_id          /* MOAC_SQL_CHANGE */
7138          AND    NVL(pt.org_id, -99) = G_ORG_ID
7139          AND    pt.payment_type_code =
7140                   DECODE(l.payment_type_code, NULL,
7141                      DECODE(h.payment_type_code, NULL, pt.payment_type_code,
7142                             h.payment_type_code),
7143                          l.payment_type_code)
7144        );
7145 
7146 -- site freights not on hold 1
7147  CURSOR site_no_hold_hdr_freight1 (p_curr_code IN VARCHAR2 default null) IS
7148 SELECT
7149       SUM
7150       ( DECODE( P.CREDIT_OR_CHARGE_FLAG, 'C', (-1), (+1) )
7151       * DECODE( p.arithmetic_operator, 'LUMPSUM',          --bug 4295299
7152                 p.operand, (l.ordered_quantity * p.adjusted_amount))
7153       )
7154 FROM   oe_price_adjustments p
7155      , oe_order_lines   l
7156      , oe_order_headers_all h
7157 WHERE  h.invoice_to_org_id   = p_site_use_id
7158   AND  p.line_id             =  l.line_id
7159   AND  NVL(L.SCHEDULE_SHIP_DATE,NVL(L.REQUEST_DATE,NVL(H.REQUEST_DATE,H.CREATION_DATE)))
7160            <= l_shipping_horizon
7161   AND  (l.invoiced_quantity IS NULL OR l.invoiced_quantity = 0)
7162   AND  l.header_id          = h.header_id
7163   AND  l.org_id             = h.org_id                 /* MOAC_SQL_CHANGE */
7164   AND  p.header_id           =  l.header_id
7165   AND  p.header_id           =  h.header_id
7166   AND  h.booked_flag         =  'Y'
7167   AND  h.open_flag  = 'Y'
7168   AND  l.open_flag  =  'Y'
7169   AND  l.line_category_code  =  'ORDER'
7170   AND  p.applied_flag        =  'Y'
7171   AND  p.list_line_type_code =  'FREIGHT_CHARGE'
7172   AND  (p.invoiced_flag IS NULL OR p.invoiced_flag = 'N')
7173   AND  h.transactional_curr_code = p_curr_code
7174   AND  h.header_id           <> l_header_id
7175   AND  NOT EXISTS ( SELECT  1
7176                     FROM    oe_order_holds_all oh --Modified the query to access oe_order_holds_all
7177                     WHERE   h.header_id = oh.header_id --instead of oe_order_holds to avoid FTS (SQL ID#14881276)
7178                     AND     oh.line_id IS NULL
7179                     AND     oh.hold_release_id IS NULL )
7180   AND (EXISTS
7181              (SELECT NULL
7182               FROM   oe_payment_types_all pt
7183               WHERE  pt.payment_type_code = NVL(l.payment_type_code,
7184                                             NVL(h.payment_type_code, 'BME'))
7185               AND    pt.credit_check_flag = 'Y'
7186               AND    NVL(pt.org_id, -99)  = G_ORG_ID)
7187        OR
7188        (l.payment_type_code IS NULL AND h.payment_type_code IS NULL));
7189 
7190 
7191 -- sitefreights not on hold 1 including Returns
7192 
7193  CURSOR site_no_hold_hdr_freight1_ret (p_curr_code IN VARCHAR2 default null) IS
7194 SELECT
7195       SUM
7196       ( DECODE( P.CREDIT_OR_CHARGE_FLAG, 'C', (-1), (+1) )
7197       * DECODE( p.arithmetic_operator, 'LUMPSUM',          --bug 4295299
7198                 p.operand, (l.ordered_quantity * p.adjusted_amount))
7199       )
7200 FROM   oe_price_adjustments p
7201      , oe_order_lines   l
7202      , oe_order_headers_all h
7203 WHERE  h.invoice_to_org_id   = p_site_use_id
7204   AND  p.line_id             =  l.line_id
7205   AND  NVL(L.SCHEDULE_SHIP_DATE,NVL(L.REQUEST_DATE,NVL(H.REQUEST_DATE,H.CREATION_DATE)))
7206            <= l_shipping_horizon
7207   AND  (l.invoiced_quantity IS NULL OR l.invoiced_quantity = 0)
7208   AND  l.header_id          = h.header_id
7209   AND  l.org_id             = h.org_id                 /* MOAC_SQL_CHANGE */
7210   AND  p.header_id           =  l.header_id
7211   AND  p.header_id           =  h.header_id
7212   AND  h.booked_flag         =  'Y'
7213   AND  h.open_flag  = 'Y'
7214   AND  l.open_flag  =  'Y'
7215   AND  p.applied_flag        =  'Y'
7216   AND  p.list_line_type_code =  'FREIGHT_CHARGE'
7217   AND  (p.invoiced_flag IS NULL OR p.invoiced_flag = 'N')
7218   AND  h.transactional_curr_code = p_curr_code
7219   AND  h.header_id           <> l_header_id
7220   AND  NOT EXISTS ( SELECT  1
7221                     FROM    oe_order_holds_all oh   --Modified the query to select from
7222                     WHERE   h.header_id = oh.header_id --oe_order_holds_all to avoid FTS (SQL#14881293)
7223                     AND     oh.line_id IS NULL
7224                     AND     oh.hold_release_id IS NULL )
7225   AND (EXISTS
7226              (SELECT NULL
7227               FROM   oe_payment_types_all pt
7228               WHERE  pt.payment_type_code = NVL(l.payment_type_code,
7229                                             NVL(h.payment_type_code, 'BME'))
7230               AND    pt.credit_check_flag = 'Y'
7231               AND    NVL(pt.org_id, -99)  = G_ORG_ID)
7232        OR
7233        (l.payment_type_code IS NULL AND h.payment_type_code IS NULL));
7234 
7235 -- site freights on hold 1
7236  CURSOR site_hold_hdr_freight1 (p_curr_code IN VARCHAR2 default null) IS
7237 SELECT
7238       SUM
7239       ( DECODE( P.CREDIT_OR_CHARGE_FLAG, 'C', (-1), (+1) )
7240       * DECODE( p.arithmetic_operator, 'LUMPSUM',          --bug 4295299
7241                 p.operand, (l.ordered_quantity * p.adjusted_amount))
7242       )
7243 FROM   oe_price_adjustments p
7244      , oe_order_lines   l
7245      , oe_order_headers_all h
7246 WHERE  h.invoice_to_org_id   = p_site_use_id
7247   AND  p.line_id             =  l.line_id
7248   AND  NVL(L.SCHEDULE_SHIP_DATE,NVL(L.REQUEST_DATE,NVL(H.REQUEST_DATE,H.CREATION_DATE)))
7249            <= l_shipping_horizon
7250   AND  (l.invoiced_quantity IS NULL OR l.invoiced_quantity = 0)
7251   AND  l.header_id          = h.header_id
7252   AND  l.org_id             = h.org_id                 /* MOAC_SQL_CHANGE */
7253   AND  p.header_id           =  l.header_id
7254   AND  p.header_id           =  h.header_id
7255   AND  h.booked_flag         =  'Y'
7256   AND  h.open_flag  = 'Y'
7257   AND  l.open_flag  =  'Y'
7258   AND  l.line_category_code  =  'ORDER'
7259   AND  p.applied_flag        =  'Y'
7260   AND  p.list_line_type_code =  'FREIGHT_CHARGE'
7261   AND  (p.invoiced_flag IS NULL OR p.invoiced_flag = 'N')
7262   AND  h.transactional_curr_code = p_curr_code
7263   AND  h.header_id           <> l_header_id
7264   AND  EXISTS ( SELECT  1
7265                     FROM    oe_order_holds_all oh
7266                     WHERE   h.header_id = oh.header_id
7267                     AND     oh.line_id IS NULL
7268                     AND     oh.hold_release_id IS NULL )
7269   AND (EXISTS
7270              (SELECT NULL
7271               FROM   oe_payment_types_all pt
7272               WHERE  pt.payment_type_code = NVL(l.payment_type_code,
7273                                             NVL(h.payment_type_code, 'BME'))
7274               AND    pt.credit_check_flag = 'Y'
7275               AND    NVL(pt.org_id, -99)  = G_ORG_ID)
7276        OR
7277        (l.payment_type_code IS NULL AND h.payment_type_code IS NULL));
7278 
7279 -- sitefreights on hold 1 including Returns
7280 
7281  CURSOR site_hold_hdr_freight1_ret (p_curr_code IN VARCHAR2 default null) IS
7282 SELECT
7283       SUM
7284       ( DECODE( P.CREDIT_OR_CHARGE_FLAG, 'C', (-1), (+1) )
7285       * DECODE( p.arithmetic_operator, 'LUMPSUM',          --bug 4295299
7286                 p.operand, (l.ordered_quantity * p.adjusted_amount))
7287       )
7288 FROM   oe_price_adjustments p
7289      , oe_order_lines   l
7290      , oe_order_headers_all h
7291 WHERE  h.invoice_to_org_id   = p_site_use_id
7292   AND  p.line_id             =  l.line_id
7293   AND  NVL(L.SCHEDULE_SHIP_DATE,NVL(L.REQUEST_DATE,NVL(H.REQUEST_DATE,H.CREATION_DATE)))
7294            <= l_shipping_horizon
7295   AND  (l.invoiced_quantity IS NULL OR l.invoiced_quantity = 0)
7296   AND  l.header_id          = h.header_id
7297   AND  l.org_id             = h.org_id                 /* MOAC_SQL_CHANGE */
7298   AND  p.header_id           =  l.header_id
7299   AND  p.header_id           =  h.header_id
7300   AND  h.booked_flag         =  'Y'
7301   AND  h.open_flag  = 'Y'
7302   AND  l.open_flag  =  'Y'
7303   AND  p.applied_flag        =  'Y'
7304   AND  p.list_line_type_code =  'FREIGHT_CHARGE'
7305   AND  (p.invoiced_flag IS NULL OR p.invoiced_flag = 'N')
7306   AND  h.transactional_curr_code = p_curr_code
7307   AND  h.header_id           <> l_header_id
7308   AND  EXISTS ( SELECT  1
7309                     FROM    oe_order_holds_all oh
7310                     WHERE   h.header_id = oh.header_id
7311                     AND     oh.line_id IS NULL
7312                     AND     oh.hold_release_id IS NULL )
7313   AND  EXISTS
7314         (SELECT NULL
7315          FROM   oe_payment_types_all pt,
7316                 oe_order_lines l
7317          WHERE  pt.credit_check_flag = 'Y'
7318          AND    l.header_id = h.header_id
7319          AND    l.org_id    = pt.org_id                /* MOAC_SQL_CHANGE */
7320          AND    NVL(pt.org_id, -99) = G_ORG_ID
7321          AND    pt.payment_type_code =
7322                   DECODE(l.payment_type_code, NULL,
7323                      DECODE(h.payment_type_code, NULL, pt.payment_type_code,
7324                             h.payment_type_code),
7325                          l.payment_type_code)
7326         );
7327 
7328 
7329 -- site not on hold freight 2
7330  CURSOR site_no_hold_hdr_freight2 (p_curr_code IN VARCHAR2 default null) IS
7331 SELECT
7332       SUM( DECODE( P.CREDIT_OR_CHARGE_FLAG, 'C', (-1), (+1) ) * P.OPERAND )
7333 FROM
7334        oe_price_adjustments p
7335      , oe_order_headers h
7336 WHERE  h.invoice_to_org_id   = p_site_use_id
7337   AND  NVL(h.request_date, h.creation_date) <= l_shipping_horizon
7338   AND  h.transactional_curr_code = p_curr_code
7339   AND  p.line_id IS NULL
7340   AND  p.header_id           =  h.header_id
7341   AND  h.order_category_code IN ('ORDER','MIXED')
7342   AND  h.open_flag  =  'Y'
7343   AND  h.booked_flag         =  'Y'
7344   AND  p.applied_flag        =  'Y'
7345   AND  p.list_line_type_code = 'FREIGHT_CHARGE'
7346   AND  (p.invoiced_flag IS NULL OR p.invoiced_flag = 'N')
7347   AND  h.header_id           <> l_header_id
7348   AND  NOT EXISTS ( SELECT  1
7349                     FROM    oe_order_holds_all oh
7350                     WHERE   h.header_id = oh.header_id
7351                     AND     oh.line_id IS NULL
7352                     AND     oh.hold_release_id IS NULL )
7353   AND  EXISTS
7354         (SELECT NULL
7355          FROM   oe_payment_types_all pt,
7356                 oe_order_lines l
7357          WHERE  pt.credit_check_flag = 'Y'
7358          AND    l.header_id = h.header_id
7359          AND    l.org_id    = pt.org_id              /* MOAC_SQL_CHANGE */
7360          AND    NVL(pt.org_id, -99) = G_ORG_ID
7361          AND    pt.payment_type_code =
7362                   DECODE(l.payment_type_code, NULL,
7363                      DECODE(h.payment_type_code, NULL, pt.payment_type_code,
7364                             h.payment_type_code),
7365                          l.payment_type_code)
7366         );
7367 
7368 
7369 -- site not on hold freight 2 including Returns
7370 
7371  CURSOR site_no_hold_hdr_freight2_ret (p_curr_code IN VARCHAR2 default null) IS
7372 SELECT
7373       SUM( DECODE( P.CREDIT_OR_CHARGE_FLAG, 'C', (-1), (+1) ) * P.OPERAND )
7374 FROM
7375        oe_price_adjustments p
7376      , oe_order_headers h
7377 WHERE  h.invoice_to_org_id   = p_site_use_id
7378   AND  NVL(h.request_date, h.creation_date) <= l_shipping_horizon
7379   AND  h.transactional_curr_code = p_curr_code
7380   AND  p.line_id IS NULL
7381   AND  p.header_id           =  h.header_id
7382   AND  h.order_category_code IN ('ORDER','MIXED','RETURN')
7383   AND  h.open_flag  =  'Y'
7384   AND  h.booked_flag         =  'Y'
7385   AND  p.applied_flag        =  'Y'
7386   AND  p.list_line_type_code = 'FREIGHT_CHARGE'
7387   AND  (p.invoiced_flag IS NULL OR p.invoiced_flag = 'N')
7388   AND  h.header_id           <> l_header_id
7389   AND  NOT EXISTS ( SELECT  1
7390                     FROM    oe_order_holds_all oh
7391                     WHERE   h.header_id = oh.header_id
7392                     AND     oh.line_id IS NULL
7393                     AND     oh.hold_release_id IS NULL )
7394   AND  EXISTS
7395         (SELECT NULL
7396          FROM   oe_payment_types_all pt,
7397                 oe_order_lines l
7398          WHERE  pt.credit_check_flag = 'Y'
7399          AND    l.header_id = h.header_id
7400          AND    l.org_id    = pt.org_id                  /* MOAC_SQL_CHANGE */
7401          AND    NVL(pt.org_id, -99) = G_ORG_ID
7402          AND    pt.payment_type_code =
7403                   DECODE(l.payment_type_code, NULL,
7404                      DECODE(h.payment_type_code, NULL, pt.payment_type_code,
7405                             h.payment_type_code),
7406                          l.payment_type_code)
7407         );
7408 
7409 -- site on hold freight 2
7410 
7411  CURSOR site_hold_hdr_freight2 (p_curr_code IN VARCHAR2 default null) IS
7412 SELECT
7413       SUM( DECODE( P.CREDIT_OR_CHARGE_FLAG, 'C', (-1), (+1) ) * P.OPERAND )
7414 FROM
7415        oe_price_adjustments p
7416      , oe_order_headers h
7417 WHERE  h.invoice_to_org_id   = p_site_use_id
7418   AND  NVL(h.request_date, h.creation_date) <= l_shipping_horizon
7419   AND  h.transactional_curr_code = p_curr_code
7420   AND  p.line_id IS NULL
7421   AND  p.header_id           =  h.header_id
7422   AND  h.order_category_code IN ('ORDER','MIXED')
7423   AND  h.open_flag  =  'Y'
7424   AND  h.booked_flag         =  'Y'
7425   AND  p.applied_flag        =  'Y'
7426   AND  p.list_line_type_code = 'FREIGHT_CHARGE'
7427   AND  (p.invoiced_flag IS NULL OR p.invoiced_flag = 'N')
7428   AND  h.header_id           <> l_header_id
7429   AND  EXISTS ( SELECT  1
7430                     FROM    oe_order_holds_all oh
7431                     WHERE   h.header_id = oh.header_id
7432                     AND     oh.line_id IS NULL
7433                     AND     oh.hold_release_id IS NULL )
7434   AND  EXISTS
7435         (SELECT NULL
7436          FROM   oe_payment_types_all pt,
7437                 oe_order_lines l
7438          WHERE  pt.credit_check_flag = 'Y'
7439          AND    l.header_id = h.header_id
7440          AND    l.org_id    = pt.org_id             /* MOAC_SQL_CHANGE */
7441          AND    NVL(pt.org_id, -99) = G_ORG_ID
7442          AND    pt.payment_type_code =
7443                   DECODE(l.payment_type_code, NULL,
7444                      DECODE(h.payment_type_code, NULL, pt.payment_type_code,
7445                             h.payment_type_code),
7446                          l.payment_type_code)
7447         );
7448 
7449 -- site on hold freight 2 including Returns
7450 
7451  CURSOR site_hold_hdr_freight2_ret (p_curr_code IN VARCHAR2 default null) IS
7452 SELECT
7453       SUM( DECODE( P.CREDIT_OR_CHARGE_FLAG, 'C', (-1), (+1) ) * P.OPERAND )
7454 FROM
7455        oe_price_adjustments p
7456      , oe_order_headers h
7457 WHERE  h.invoice_to_org_id   = p_site_use_id
7458   AND  NVL(h.request_date, h.creation_date) <= l_shipping_horizon
7459   AND  h.transactional_curr_code = p_curr_code
7460   AND  p.line_id IS NULL
7461   AND  p.header_id           =  h.header_id
7462   AND  h.order_category_code IN ('ORDER','MIXED','RETURN')
7463   AND  h.open_flag  =  'Y'
7464   AND  h.booked_flag         =  'Y'
7465   AND  p.applied_flag        =  'Y'
7466   AND  p.list_line_type_code = 'FREIGHT_CHARGE'
7467   AND  (p.invoiced_flag IS NULL OR p.invoiced_flag = 'N')
7468   AND  h.header_id           <> l_header_id
7469   AND  EXISTS ( SELECT  1
7470                     FROM    oe_order_holds_all oh
7471                     WHERE   h.header_id = oh.header_id
7472                     AND     oh.line_id IS NULL
7473                     AND     oh.hold_release_id IS NULL )
7474   AND  EXISTS
7475         (SELECT NULL
7476          FROM   oe_payment_types_all pt,
7477                 oe_order_lines l
7478          WHERE  pt.credit_check_flag = 'Y'
7479          AND    l.header_id = h.header_id
7480          AND    l.org_id    = pt.org_id            /* MOAC_SQL_CHANGE */
7481          AND    NVL(pt.org_id, -99) = G_ORG_ID
7482          AND    pt.payment_type_code =
7483                   DECODE(l.payment_type_code, NULL,
7484                      DECODE(h.payment_type_code, NULL, pt.payment_type_code,
7485                             h.payment_type_code),
7486                          l.payment_type_code)
7487         );
7488 
7489 
7490 -------------------------------------------------------------
7491 ------------ GLOBAL EXPOSURE CURSORS
7492 -- Discussed with the performance team and
7493 -- was advised to have separate cursors to avoid any
7494 -- performance related Issues , especially if ORG was indexed
7495 -- down the line.
7496 
7497 -- Byg 2417717 - AR relationships
7498 -------------------------------------------------------------
7499 -- AR BALANCE
7500 --Bug 7570339
7501 /*CURSOR cust_ar_balance_global
7502        (p_curr_code IN VARCHAR2 default NULL) IS
7503     SELECT SUM(NVL(ps.amount_due_remaining,0))
7504     FROM   ar_payment_schedules_ALL ps
7505          , hz_cust_site_uses_ALL su
7506          , hz_cust_acct_sites_ALL cas
7507     WHERE  ps.customer_site_use_id = su.site_use_id
7508     AND    ps.status               = 'OP'
7509     AND    cas.cust_acct_site_id   = su.cust_acct_site_id
7510     AND    cas.cust_account_id     = p_customer_id
7511     AND    su.site_use_code        =
7512              DECODE(l_open_ar_days,0,site_use_code,'BILL_TO' )
7513     AND    ps.invoice_currency_code = p_curr_code
7514     AND    (ps.receipt_confirmed_flag IS NULL OR ps.receipt_confirmed_flag='Y')
7515     AND    ps.gl_date_closed = to_date( '31-12-4712', 'DD-MM-YYYY')
7516     AND    sysdate - ps.trx_date >
7517     NVL(p_credit_check_rule_rec.OPEN_AR_DAYS, sysdate - ps.trx_date - 1); */
7518 
7519 CURSOR cust_ar_balance_global
7520        (p_curr_code IN VARCHAR2 default NULL) IS
7521     SELECT SUM(NVL(amount_due_remaining,0)) FROM (
7522     SELECT NVL(ps.amount_due_remaining,0) amount_due_remaining,ps.PAYMENT_SCHEDULE_ID
7523     FROM   ar_payment_schedules_ALL ps
7524          , hz_cust_site_uses_ALL su
7525          , hz_cust_acct_sites_ALL cas
7526     WHERE  ps.customer_site_use_id = su.site_use_id
7527     AND    ps.status               = 'OP'
7528     AND    cas.cust_acct_site_id   = su.cust_acct_site_id
7529     AND    cas.cust_account_id     = p_customer_id
7530     AND    su.site_use_code        =
7531              DECODE(l_open_ar_days,0,site_use_code,'BILL_TO' )
7532     AND    ps.invoice_currency_code = p_curr_code
7533     AND    (ps.receipt_confirmed_flag IS NULL OR ps.receipt_confirmed_flag='Y')
7534     AND    ps.gl_date_closed = to_date( '31-12-4712', 'DD-MM-YYYY')
7535     AND    sysdate - ps.trx_date >
7536     NVL(p_credit_check_rule_rec.OPEN_AR_DAYS, sysdate - ps.trx_date - 1)
7537 UNION
7538 
7539    SELECT NVL(ps.amount_due_remaining,0) amount_due_remaining,ps.PAYMENT_SCHEDULE_ID
7540     FROM   ar_payment_schedules_ALL ps
7541     WHERE  ps.status               = 'OP'
7542     AND    ps.CUSTOMER_ID     = p_customer_id
7543     AND    ps.CUSTOMER_SITE_USE_ID IS NULL
7544     AND    ps.invoice_currency_code = p_curr_code
7545     AND    (ps.receipt_confirmed_flag IS NULL OR ps.receipt_confirmed_flag='Y')
7546     AND    ps.gl_date_closed = to_date( '31-12-4712', 'DD-MM-YYYY')
7547     AND    sysdate - ps.trx_date >
7548     NVL(p_credit_check_rule_rec.OPEN_AR_DAYS, sysdate - ps.trx_date - 1));
7549 
7550 --  PAY AT RISK
7551 --Bug 7570339
7552 
7553 /*CURSOR cust_pay_risk_global
7554        (p_curr_code IN VARCHAR2 default NULL) IS
7555 SELECT SUM(NVL(crh.amount,0))
7556     FROM   ar_cash_receipt_history_ALL crh
7557          , ar_cash_receipts_ALL cr
7558          , hz_cust_site_uses_ALL su
7559          , hz_cust_acct_sites_ALL cas
7560     WHERE  crh.cash_receipt_id        = cr.cash_receipt_id
7561     AND    (cr.confirmed_flag IS NULL OR cr.confirmed_flag = 'Y')
7562     AND    crh.current_record_flag    = 'Y'
7563     AND    crh.status <> DECODE ( crh.factor_flag
7564                                 , 'Y', 'RISK_ELIMINATED'
7565                                 , 'CLEARED')
7566     AND    NVL( cr.reversal_category, cr.status||'X' )  <>  cr.status
7567     AND    crh.status <> 'REVERSED'
7568     AND    cr.currency_code           = p_curr_code
7569     AND    cr.pay_from_customer       = cas.cust_account_id
7570     AND    cr.customer_site_use_id    = su.site_use_id
7571     AND    cas.cust_acct_site_id      = su.cust_acct_site_id
7572     AND    cas.cust_account_id        = p_customer_id
7573     AND    su.site_use_code           =
7574              DECODE(l_open_ar_days,0,site_use_code,'BILL_TO' )
7575     AND    sysdate - cr.receipt_date >
7576              NVL(p_credit_check_rule_rec.OPEN_AR_DAYS,
7577               sysdate - cr.receipt_date - 1)
7578     AND  NOT EXISTS
7579            (
7580            SELECT
7581              'X'
7582            FROM
7583              ar_receivable_applications_ALL rap
7584            WHERE
7585                   rap.cash_receipt_id  =  cr.cash_receipt_id
7586              AND  rap.applied_payment_schedule_id  =  -2
7587              AND  rap.display  =  'Y'
7588          ) ;
7589 */
7590 CURSOR cust_pay_risk_global
7591        (p_curr_code IN VARCHAR2 default NULL) IS
7592 SELECT SUM(NVL(amount,0)) FROM (
7593 SELECT NVL(crh.amount,0) amount,cr.pay_from_customer,cr.cash_receipt_id
7594     FROM   ar_cash_receipt_history_ALL crh
7595          , ar_cash_receipts_ALL cr
7596          , hz_cust_site_uses_ALL su
7597          , hz_cust_acct_sites_ALL cas
7598     WHERE  crh.cash_receipt_id        = cr.cash_receipt_id
7599     AND    (cr.confirmed_flag IS NULL OR cr.confirmed_flag = 'Y')
7600     AND    crh.current_record_flag    = 'Y'
7601     AND    crh.status <> DECODE ( crh.factor_flag
7602                                 , 'Y', 'RISK_ELIMINATED'
7603                                 , 'CLEARED')
7604     AND    NVL( cr.reversal_category, cr.status||'X' )  <>  cr.status
7605     AND    crh.status <> 'REVERSED'
7606     AND    cr.currency_code           = p_curr_code
7607     AND    cr.pay_from_customer       = cas.cust_account_id
7608     AND    cr.customer_site_use_id    = su.site_use_id
7609     AND    cas.cust_acct_site_id      = su.cust_acct_site_id
7610     AND    cas.cust_account_id        = p_customer_id
7611     AND    su.site_use_code           =
7612              DECODE(l_open_ar_days,0,site_use_code,'BILL_TO' )
7613     AND    sysdate - cr.receipt_date >
7614              NVL(p_credit_check_rule_rec.OPEN_AR_DAYS,
7615               sysdate - cr.receipt_date - 1)
7616     AND  NOT EXISTS
7617            (
7618            SELECT
7619              'X'
7620            FROM
7621              ar_receivable_applications_ALL rap
7622            WHERE
7623                   rap.cash_receipt_id  =  cr.cash_receipt_id
7624              AND  rap.applied_payment_schedule_id  =  -2
7625              AND  rap.display  =  'Y'
7626          )
7627   UNION
7628   SELECT NVL(crh.amount,0) amount,cr.pay_from_customer,cr.cash_receipt_id
7629     FROM   ar_cash_receipt_history_ALL crh
7630          , ar_cash_receipts_ALL cr
7631    WHERE  crh.cash_receipt_id        = cr.cash_receipt_id
7632     AND    (cr.confirmed_flag IS NULL OR cr.confirmed_flag = 'Y')
7633     AND    crh.current_record_flag    = 'Y'
7634     AND    crh.status <> DECODE ( crh.factor_flag
7635                                 , 'Y', 'RISK_ELIMINATED'
7636                                 , 'CLEARED')
7637     AND    NVL( cr.reversal_category, cr.status||'X' )  <>  cr.status
7638     AND    crh.status <> 'REVERSED'
7639     AND    cr.currency_code           = p_curr_code
7640     AND    cr.pay_from_customer       = p_customer_id
7641     AND    cr.customer_site_use_id IS NULL
7642     AND    sysdate - cr.receipt_date >
7643              NVL(p_credit_check_rule_rec.OPEN_AR_DAYS,
7644               sysdate - cr.receipt_date - 1)
7645     AND  NOT EXISTS
7646            (
7647            SELECT
7648              'X'
7649            FROM
7650              ar_receivable_applications_ALL rap
7651            WHERE
7652                   rap.cash_receipt_id  =  cr.cash_receipt_id
7653              AND  rap.applied_payment_schedule_id  =  -2
7654              AND  rap.display  =  'Y'
7655          )
7656 );
7657 
7658 
7659 ----------------------------- BR -----------------------------
7660 CURSOR cust_br_balance_global
7661        (p_curr_code IN VARCHAR2 default NULL) IS
7662     SELECT SUM(NVL(ps.amount_due_remaining,0))
7663     FROM   ar_payment_schedules_ALL ps
7664         ,  hz_cust_site_uses_ALL su
7665         ,  hz_cust_acct_sites_ALL cas
7666     WHERE  ps.customer_site_use_id = su.site_use_id
7667     AND    ps.status               = 'OP'
7668     AND    cas.cust_acct_site_id   = su.cust_acct_site_id
7669     AND    cas.cust_account_id     = p_customer_id
7670     AND    su.site_use_code        = 'DRAWEE'
7671     AND    ps.invoice_currency_code = p_curr_code
7672     AND    (ps.receipt_confirmed_flag IS NULL OR ps.receipt_confirmed_flag='Y')
7673     AND    ps.gl_date_closed = to_date( '31-12-4712', 'DD-MM-YYYY') ;
7674 
7675 CURSOR cust_br_pay_risk_global
7676        (p_curr_code IN VARCHAR2 default NULL) IS
7677     SELECT SUM(NVL(crh.amount,0))
7678     FROM   ar_cash_receipt_history_ALL crh
7679          , ar_cash_receipts_ALL cr
7680         ,  hz_cust_site_uses_ALL su
7681         ,  hz_cust_acct_sites_ALL cas
7682     WHERE  crh.cash_receipt_id        = cr.cash_receipt_id
7683     AND    (cr.confirmed_flag IS NULL OR cr.confirmed_flag = 'Y')
7684     AND    crh.current_record_flag    = 'Y'
7685     AND    crh.status <> DECODE ( crh.factor_flag
7686                                 , 'Y', 'RISK_ELIMINATED'
7687                                 , 'CLEARED')
7688     AND    NVL( cr.reversal_category, cr.status||'X' )  <>  cr.status
7689     AND    crh.status <> 'REVERSED'
7690     AND    cr.currency_code           = p_curr_code
7691     AND    cr.pay_from_customer       = cas.cust_account_id
7692     AND    cr.customer_site_use_id    = su.site_use_id
7693     AND    cas.cust_acct_site_id      = su.cust_acct_site_id
7694     AND    cas.cust_account_id        = p_customer_id
7695     AND    su.site_use_code        = 'DRAWEE'
7696     AND    NOT EXISTS
7697            (
7698            SELECT
7699              'X'
7700            FROM
7701              ar_receivable_applications_ALL rap
7702            WHERE
7703                   rap.cash_receipt_id  =  cr.cash_receipt_id
7704              AND  rap.applied_payment_schedule_id  =  -2
7705              AND  rap.display  =  'Y');
7706 
7707 
7708 ---CUSTOMER UNINVOICED ORDERS
7709 
7710 CURSOR cust_uninvoiced_orders_global
7711        (p_curr_code IN VARCHAR2 default NULL) IS
7712     SELECT SUM (
7713                  ( l.ordered_quantity * l.unit_selling_price )
7714                +   DECODE(l_include_tax_flag, 'Y',
7715                     NVL(l.tax_value,0), 0   )
7716                )
7717     FROM   oe_order_lines_ALL l
7718          , oe_order_headers_ALL h
7719          , hz_cust_site_uses_ALL su
7720          , hz_cust_acct_sites_ALL cas
7721     WHERE  h.invoice_to_org_id = su.site_use_id
7722     AND    cas.cust_acct_site_id  = su.cust_acct_site_id
7723     AND    cas.cust_account_id    = p_customer_id
7724     AND    h.header_id      = l.header_id
7725     AND    NVL(L.SCHEDULE_SHIP_DATE,NVL(L.REQUEST_DATE,NVL(H.REQUEST_DATE,H.CREATION_DATE)))
7726            <= l_shipping_horizon
7727     AND    (l.invoiced_quantity IS NULL OR l.invoiced_quantity = 0)
7728     AND    h.open_flag   = 'Y'
7729     AND    l.line_category_code = 'ORDER'
7730     AND    h.booked_flag = 'Y'
7731     AND    l.open_flag = 'Y'
7732     AND    h.header_id <> l_header_id
7733     AND    h.transactional_curr_code = p_curr_code
7734     AND    (EXISTS
7735              (SELECT NULL
7736               FROM   oe_payment_types_all pt
7737               WHERE  pt.payment_type_code = NVL(l.payment_type_code,
7738                                             NVL(h.payment_type_code, 'BME'))
7739               AND    pt.credit_check_flag = 'Y'
7740               AND    NVL(pt.org_id, -99)  = NVL(h.org_id, -99))
7741            OR
7742            (l.payment_type_code IS NULL AND h.payment_type_code IS NULL));
7743 
7744 
7745 ---CUSTOMER UNINVOICED ORDERS including Returns
7746 
7747 CURSOR cust_uninv_orders_global_ret
7748        (p_curr_code IN VARCHAR2 default NULL) IS
7749     SELECT
7750       SUM (
7751       ( DECODE(l.line_category_code,'RETURN',(-1)*l.ordered_quantity,l.ordered_quantity)
7752       * l.unit_selling_price )
7753       +   DECODE(l_include_tax_flag, 'Y',
7754       NVL(DECODE(l.line_category_code,'RETURN',(-1)*l.tax_value,l.tax_value),0),0 )
7755            )
7756     FROM   oe_order_lines_ALL l
7757          , oe_order_headers_ALL h
7758          , hz_cust_site_uses_ALL su
7759          , hz_cust_acct_sites_ALL cas
7760     WHERE  h.invoice_to_org_id = su.site_use_id
7761     AND    cas.cust_acct_site_id  = su.cust_acct_site_id
7762     AND    cas.cust_account_id    = p_customer_id
7763     AND    h.header_id      = l.header_id
7764     AND    NVL(L.SCHEDULE_SHIP_DATE,NVL(L.REQUEST_DATE,NVL(H.REQUEST_DATE,H.CREATION_DATE)))
7765            <= l_shipping_horizon
7766     AND    (l.invoiced_quantity IS NULL OR l.invoiced_quantity = 0)
7767     AND    h.open_flag   = 'Y'
7768     AND    h.booked_flag = 'Y'
7769     AND    l.open_flag = 'Y'
7770     AND    h.header_id <> l_header_id
7771     AND    h.transactional_curr_code = p_curr_code
7772     AND    (EXISTS
7773              (SELECT NULL
7774               FROM   oe_payment_types_all pt
7775               WHERE  pt.payment_type_code = NVL(l.payment_type_code,
7776                                             NVL(h.payment_type_code, 'BME'))
7777               AND    pt.credit_check_flag = 'Y'
7778               AND    NVL(pt.org_id, -99)  = NVL(h.org_id, -99))
7779            OR
7780            (l.payment_type_code IS NULL AND h.payment_type_code IS NULL));
7781 
7782 
7783 
7784 -------------------------------------------------
7785 ------- commitments -- Exiting code enhancement
7786 ------------------------------------------------
7787 -------- There is no multi org table for OE_PAYMENTS_ALL
7788 
7789 Cursor cust_commitment_total_global
7790  (p_curr_code IN VARCHAR2 default NULL) IS
7791       SELECT NVL(SUM(P.commitment_applied_amount), 0)
7792 	FROM   OE_PAYMENTS P
7793              , OE_ORDER_HEADERS_ALL H
7794              , OE_ORDER_LINES_ALL L
7795              , hz_cust_site_uses_ALL su
7796              , hz_cust_acct_sites_ALL cas
7797 	WHERE  H.invoice_to_org_id   = su.site_use_id
7798         AND    cas.cust_acct_site_id  = su.cust_acct_site_id
7799         AND    cas.cust_account_id    = p_customer_id
7800         AND    H.TRANSACTIONAL_CURR_CODE = p_curr_code
7801 	AND    H.OPEN_FLAG      = 'Y'
7802 	AND    H.BOOKED_FLAG    = 'Y'
7803 	AND    H.HEADER_ID      = P.HEADER_ID
7804 	AND    H.HEADER_ID      <> l_header_id
7805         AND    L.HEADER_ID                = H.HEADER_ID
7806         AND    L.LINE_ID                  = P.LINE_ID
7807         AND    (l.invoiced_quantity IS NULL OR l.invoiced_quantity = 0)
7808 	AND    L.OPEN_FLAG                = 'Y'
7809 	AND    L.LINE_CATEGORY_CODE       = 'ORDER'
7810 	AND    NVL(L.SCHEDULE_SHIP_DATE,NVL(L.REQUEST_DATE,NVL(H.REQUEST_DATE,H.CREATION_DATE)))
7811 	         	        <= l_shipping_horizon
7812         AND    (EXISTS
7813                  (SELECT NULL
7814                   FROM   oe_payment_types_all pt
7815                   WHERE  pt.payment_type_code = NVL(l.payment_type_code,
7816                                                 NVL(h.payment_type_code, 'BME'))
7817                   AND    pt.credit_check_flag = 'Y'
7818                   AND    NVL(pt.org_id, -99)  = NVL(h.org_id, -99))
7819                 OR
7820                 (l.payment_type_code IS NULL AND h.payment_type_code IS NULL));
7821 
7822 
7823 
7824 -- Customer orders not on hold global
7825 
7826   CURSOR cust_orders_not_on_hold_global
7827          (p_curr_code IN VARCHAR2 default NULL) IS
7828     SELECT SUM (
7829                  ( l.ordered_quantity * l.unit_selling_price )
7830                +   DECODE(l_include_tax_flag, 'Y',
7831                     NVL(l.tax_value,0), 0   )
7832                )
7833     FROM   oe_order_lines_ALL l
7834          , oe_order_headers_ALL h
7835          , hz_cust_site_uses_ALL su
7836          , hz_cust_acct_sites_ALL cas
7837     WHERE  h.invoice_to_org_id     = su.site_use_id
7838     AND    cas.cust_acct_site_id  = su.cust_acct_site_id
7839     AND    cas.cust_account_id    = p_customer_id
7840     AND    h.header_id = l.header_id
7841     AND    NVL(L.SCHEDULE_SHIP_DATE,NVL(L.REQUEST_DATE,NVL(H.REQUEST_DATE,H.CREATION_DATE)))
7842            <= l_shipping_horizon
7843     AND    (l.invoiced_quantity IS NULL OR l.invoiced_quantity = 0)
7844     AND    h.open_flag = 'Y'
7845     AND    l.line_category_code = 'ORDER'
7846     AND    h.booked_flag = 'Y'
7847     AND    l.open_flag = 'Y'
7848     AND    h.header_id <> l_header_id
7849     AND    NOT EXISTS ( SELECT  1
7850                     FROM    oe_order_holds_ALL oh
7851                     WHERE   h.header_id  = oh.header_id
7852                      AND     oh.hold_release_id IS NULL )
7853     AND    h.transactional_curr_code = p_curr_code
7854     AND    (EXISTS
7855              (SELECT NULL
7856               FROM   oe_payment_types_all pt
7857               WHERE  pt.payment_type_code = NVL(l.payment_type_code,
7858                                             NVL(h.payment_type_code, 'BME'))
7859               AND    pt.credit_check_flag = 'Y'
7860               AND    NVL(pt.org_id, -99)  = NVL(h.org_id, -99))
7861            OR
7862            (l.payment_type_code IS NULL AND h.payment_type_code IS NULL));
7863 
7864 
7865 -- Customer orders not on hold global including Returns
7866 
7867   CURSOR cust_ord_not_on_hold_glb_ret
7868          (p_curr_code IN VARCHAR2 default NULL) IS
7869     SELECT
7870        SUM (
7871       ( DECODE(l.line_category_code,'RETURN',(-1)*l.ordered_quantity,l.ordered_quantity)
7872       * l.unit_selling_price )
7873       +   DECODE(l_include_tax_flag, 'Y',
7874       NVL(DECODE(l.line_category_code,'RETURN',(-1)*l.tax_value,l.tax_value),0),0 )
7875            )
7876     FROM   oe_order_lines_ALL l
7877          , oe_order_headers_ALL h
7878          , hz_cust_site_uses_ALL su
7879          , hz_cust_acct_sites_ALL cas
7880     WHERE  h.invoice_to_org_id     = su.site_use_id
7881     AND    cas.cust_acct_site_id  = su.cust_acct_site_id
7882     AND    cas.cust_account_id    = p_customer_id
7883     AND    h.header_id = l.header_id
7884     AND    NVL(L.SCHEDULE_SHIP_DATE,NVL(L.REQUEST_DATE,NVL(H.REQUEST_DATE,H.CREATION_DATE)))
7885            <= l_shipping_horizon
7886     AND    (l.invoiced_quantity IS NULL OR l.invoiced_quantity = 0)
7887     AND    h.open_flag = 'Y'
7888     AND    h.booked_flag = 'Y'
7889     AND    l.open_flag = 'Y'
7890     AND    h.header_id <> l_header_id
7891     AND    NOT EXISTS ( SELECT  1
7892                     FROM    oe_order_holds_ALL oh
7893                     WHERE   h.header_id  = oh.header_id
7894                      AND     oh.hold_release_id IS NULL )
7895     AND    h.transactional_curr_code = p_curr_code
7896     AND   (EXISTS
7897              (SELECT NULL
7898               FROM   oe_payment_types_all pt
7899               WHERE  pt.payment_type_code = NVL(l.payment_type_code,
7900                                             NVL(h.payment_type_code, 'BME'))
7901               AND    pt.credit_check_flag = 'Y'
7902               AND    NVL(pt.org_id, -99)  = NVL(h.org_id, -99))
7903            OR
7904            (l.payment_type_code IS NULL AND h.payment_type_code IS NULL));
7905 
7906 -- Customer orders on hold global
7907 
7908   CURSOR cust_orders_on_hold_global
7909          (p_curr_code IN VARCHAR2 default NULL) IS
7910     SELECT SUM (
7911                  ( l.ordered_quantity * l.unit_selling_price )
7912                +   DECODE(l_include_tax_flag, 'Y',
7913                     NVL(l.tax_value,0), 0   )
7914                )
7915     FROM   oe_order_lines_ALL l
7916          , oe_order_headers_ALL h
7917          , hz_cust_site_uses_ALL su
7918          , hz_cust_acct_sites_ALL cas
7919     WHERE  h.invoice_to_org_id     = su.site_use_id
7920     AND    cas.cust_acct_site_id  = su.cust_acct_site_id
7921     AND    cas.cust_account_id    = p_customer_id
7922     AND    h.header_id = l.header_id
7923     AND    NVL(L.SCHEDULE_SHIP_DATE,NVL(L.REQUEST_DATE,NVL(H.REQUEST_DATE,H.CREATION_DATE)))
7924            <= l_shipping_horizon
7925     AND    (l.invoiced_quantity IS NULL OR l.invoiced_quantity = 0)
7926     AND    h.open_flag = 'Y'
7927     AND    l.line_category_code = 'ORDER'
7928     AND    h.booked_flag = 'Y'
7929     AND    l.open_flag = 'Y'
7930     AND    h.header_id <> l_header_id
7931     AND     EXISTS ( SELECT  1
7932                     FROM    oe_order_holds_ALL oh
7933                     WHERE   h.header_id  = oh.header_id
7934                      AND     oh.hold_release_id IS NULL )
7935     AND    h.transactional_curr_code = p_curr_code
7936     AND    (EXISTS
7937              (SELECT NULL
7938               FROM   oe_payment_types_all pt
7939               WHERE  pt.payment_type_code = NVL(l.payment_type_code,
7940                                             NVL(h.payment_type_code, 'BME'))
7941               AND    pt.credit_check_flag = 'Y'
7942               AND    NVL(pt.org_id, -99)  = NVL(h.org_id, -99))
7943            OR
7944            (l.payment_type_code IS NULL AND h.payment_type_code IS NULL));
7945 
7946 -- Customer orders on hold global including Returns
7947 
7948   CURSOR cust_ord_on_hold_glb_ret
7949          (p_curr_code IN VARCHAR2 default NULL) IS
7950     SELECT
7951        SUM (
7952       ( DECODE(l.line_category_code,'RETURN',(-1)*l.ordered_quantity,l.ordered_quantity)
7953       * l.unit_selling_price )
7954       +   DECODE(l_include_tax_flag, 'Y',
7955       NVL(DECODE(l.line_category_code,'RETURN',(-1)*l.tax_value,l.tax_value),0),0 )
7956            )
7957     FROM   oe_order_lines_ALL l
7958          , oe_order_headers_ALL h
7959          , hz_cust_site_uses_ALL su
7960          , hz_cust_acct_sites_ALL cas
7961     WHERE  h.invoice_to_org_id     = su.site_use_id
7962     AND    cas.cust_acct_site_id  = su.cust_acct_site_id
7963     AND    cas.cust_account_id    = p_customer_id
7964     AND    h.header_id = l.header_id
7965     AND    NVL(L.SCHEDULE_SHIP_DATE,NVL(L.REQUEST_DATE,NVL(H.REQUEST_DATE,H.CREATION_DATE)))
7966            <= l_shipping_horizon
7967     AND    (l.invoiced_quantity IS NULL OR l.invoiced_quantity = 0)
7968     AND    h.open_flag = 'Y'
7969     AND    h.booked_flag = 'Y'
7970     AND    l.open_flag = 'Y'
7971     AND    h.header_id <> l_header_id
7972     AND    EXISTS ( SELECT  1
7973                     FROM    oe_order_holds_ALL oh
7974                     WHERE   h.header_id  = oh.header_id
7975                      AND     oh.hold_release_id IS NULL )
7976     AND    h.transactional_curr_code = p_curr_code
7977     AND   (EXISTS
7978              (SELECT NULL
7979               FROM   oe_payment_types_all pt
7980               WHERE  pt.payment_type_code = NVL(l.payment_type_code,
7981                                             NVL(h.payment_type_code, 'BME'))
7982               AND    pt.credit_check_flag = 'Y'
7983               AND    NVL(pt.org_id, -99)  = NVL(h.org_id, -99))
7984            OR
7985            (l.payment_type_code IS NULL AND h.payment_type_code IS NULL));
7986 
7987 -- customer hdr freights , Does not include curr order
7988 --- There is not multi org table for oe_price_adjustments
7989 
7990 CURSOR cust_uninv_hdr_freight1_global
7991        (p_curr_code IN VARCHAR2 default null) IS
7992 SELECT
7993       SUM
7994       ( DECODE( P.CREDIT_OR_CHARGE_FLAG, 'C', (-1), (+1) )
7995       * DECODE( p.arithmetic_operator, 'LUMPSUM',          --bug 4295299
7996                 p.operand, (l.ordered_quantity * p.adjusted_amount))
7997       )
7998 FROM   oe_price_adjustments p
7999      , oe_order_lines_ALL   l
8000      , oe_order_headers_ALL h
8001      , hz_cust_site_uses_ALL su
8002      , hz_cust_acct_sites_ALL cas
8003 WHERE  h.invoice_to_org_id    = su.site_use_id
8004   AND  cas.cust_acct_site_id  = su.cust_acct_site_id
8005   AND  cas.cust_account_id    = p_customer_id
8006   AND  p.line_id             =  l.line_id
8007   AND  NVL(L.SCHEDULE_SHIP_DATE,NVL(L.REQUEST_DATE,NVL(H.REQUEST_DATE,H.CREATION_DATE)))
8008            <= l_shipping_horizon
8009   AND  (l.invoiced_quantity IS NULL OR l.invoiced_quantity = 0)
8010   AND  l.header_id          = h.header_id
8011   AND  p.header_id           =  l.header_id
8012   AND  p.header_id           =  h.header_id
8013   AND  h.booked_flag         =  'Y'
8014   AND  h.open_flag  = 'Y'
8015   AND  l.open_flag  =  'Y'
8016   AND  l.line_category_code  =  'ORDER'
8017   AND  p.applied_flag        =  'Y'
8018   AND  p.list_line_type_code =  'FREIGHT_CHARGE'
8019   AND  ( p.invoiced_flag IS NULL OR p.invoiced_flag = 'N')
8020   AND  h.transactional_curr_code = p_curr_code
8021   AND  h.header_id           <> l_header_id
8022   AND  (EXISTS
8023              (SELECT NULL
8024               FROM   oe_payment_types_all pt
8025               WHERE  pt.payment_type_code = NVL(l.payment_type_code,
8026                                             NVL(h.payment_type_code, 'BME'))
8027               AND    pt.credit_check_flag = 'Y'
8028               AND    NVL(pt.org_id, -99)  = NVL(h.org_id, -99))
8029         OR
8030         (l.payment_type_code IS NULL AND h.payment_type_code IS NULL));
8031 
8032 
8033 -- customer hdr freights including Returns, Does not include curr order
8034 --- There is not multi org table for oe_price_adjustments
8035 
8036 CURSOR cust_uninv_hdr_fr1_glb_ret
8037        (p_curr_code IN VARCHAR2 default null) IS
8038 SELECT
8039       SUM
8040       ( DECODE( P.CREDIT_OR_CHARGE_FLAG, 'C', (-1), (+1) )
8041       * DECODE( p.arithmetic_operator, 'LUMPSUM',          --bug 4295299
8042                 p.operand, (l.ordered_quantity * p.adjusted_amount))
8043       )
8044 FROM   oe_price_adjustments p
8045      , oe_order_lines_ALL   l
8046      , oe_order_headers_ALL h
8047      , hz_cust_site_uses_ALL su
8048      , hz_cust_acct_sites_ALL cas
8049 WHERE  h.invoice_to_org_id    = su.site_use_id
8050   AND  cas.cust_acct_site_id  = su.cust_acct_site_id
8051   AND  cas.cust_account_id    = p_customer_id
8052   AND  p.line_id             =  l.line_id
8053   AND  NVL(L.SCHEDULE_SHIP_DATE,NVL(L.REQUEST_DATE,NVL(H.REQUEST_DATE,H.CREATION_DATE)))
8054            <= l_shipping_horizon
8055   AND  (l.invoiced_quantity IS NULL OR l.invoiced_quantity = 0)
8056   AND  l.header_id          = h.header_id
8057   AND  p.header_id           =  l.header_id
8058   AND  p.header_id           =  h.header_id
8059   AND  h.booked_flag         =  'Y'
8060   AND  h.open_flag  = 'Y'
8061   AND  l.open_flag  =  'Y'
8062   AND  p.applied_flag        =  'Y'
8063   AND  p.list_line_type_code =  'FREIGHT_CHARGE'
8064   AND  ( p.invoiced_flag IS NULL OR p.invoiced_flag = 'N')
8065   AND  h.transactional_curr_code = p_curr_code
8066   AND  h.header_id           <> l_header_id
8067   AND  (EXISTS
8068              (SELECT NULL
8069               FROM   oe_payment_types_all pt
8070               WHERE  pt.payment_type_code = NVL(l.payment_type_code,
8071                                             NVL(h.payment_type_code, 'BME'))
8072               AND    pt.credit_check_flag = 'Y'
8073               AND    NVL(pt.org_id, -99)  = NVL(h.org_id, -99))
8074         OR
8075         (l.payment_type_code IS NULL AND h.payment_type_code IS NULL));
8076 
8077 
8078 
8079 -- customer freights 2
8080 CURSOR cust_uninv_hdr_freight2_global
8081        (p_curr_code IN VARCHAR2 default null) IS
8082 SELECT
8083       SUM( DECODE( P.CREDIT_OR_CHARGE_FLAG, 'C', (-1), (+1) ) * P.OPERAND )
8084 FROM
8085        oe_price_adjustments p
8086      , oe_order_headers_ALL h
8087      , hz_cust_site_uses_ALL su
8088      , hz_cust_acct_sites_ALL cas
8089 WHERE  h.invoice_to_org_id     = su.site_use_id
8090   AND  cas.cust_acct_site_id  = su.cust_acct_site_id
8091   AND  cas.cust_account_id    = p_customer_id
8092   AND  NVL(h.request_date, h.creation_date) <= l_shipping_horizon
8093   AND  h.transactional_curr_code = p_curr_code
8094   AND  p.line_id IS NULL
8095   AND  p.header_id           =  h.header_id
8096   AND  h.order_category_code IN ('ORDER','MIXED')
8097   AND  open_flag  =  'Y'
8098   AND  h.booked_flag         =  'Y'
8099   AND  p.applied_flag        =  'Y'
8100   AND  p.list_line_type_code = 'FREIGHT_CHARGE'
8101   AND  ( p.invoiced_flag IS NULL OR p.invoiced_flag = 'N')
8102   AND  h.header_id           <> l_header_id
8103   AND  EXISTS
8104          ( SELECT  NULL
8105              FROM  oe_payment_types_all t,
8106                    oe_order_lines_all l
8107              WHERE t.credit_check_flag = 'Y'
8108              AND   NVL(t.org_id,-99) = NVL(h.org_id, -99)
8109              AND   l.header_id = h.header_id
8110              AND   t.payment_type_code =
8111                    DECODE(l.payment_type_code, NULL,
8112                      DECODE(h.payment_type_code, NULL, t.payment_type_code,
8113                             h.payment_type_code),
8114                           l.payment_type_code)
8115          );
8116 
8117 
8118 -- customer freights 2 including Returns
8119 
8120 CURSOR cust_uninv_hdr_fr2_glb_ret
8121        (p_curr_code IN VARCHAR2 default null) IS
8122 SELECT
8123       SUM( DECODE( P.CREDIT_OR_CHARGE_FLAG, 'C', (-1), (+1) ) * P.OPERAND )
8124 FROM
8125        oe_price_adjustments p
8126      , oe_order_headers_ALL h
8127      , hz_cust_site_uses_ALL su
8128      , hz_cust_acct_sites_ALL cas
8129 WHERE  h.invoice_to_org_id     = su.site_use_id
8130   AND  cas.cust_acct_site_id  = su.cust_acct_site_id
8131   AND  cas.cust_account_id    = p_customer_id
8132   AND  NVL(h.request_date, h.creation_date) <= l_shipping_horizon
8133   AND  h.transactional_curr_code = p_curr_code
8134   AND  p.line_id IS NULL
8135   AND  p.header_id           =  h.header_id
8136   AND  h.order_category_code IN ('ORDER','MIXED','RETURN')
8137   AND  open_flag  =  'Y'
8138   AND  h.booked_flag         =  'Y'
8139   AND  p.applied_flag        =  'Y'
8140   AND  p.list_line_type_code = 'FREIGHT_CHARGE'
8141   AND  (p.invoiced_flag IS NULL OR p.invoiced_flag = 'N')
8142   AND  h.header_id           <> l_header_id
8143   AND  EXISTS
8144          ( SELECT  NULL
8145              FROM  oe_payment_types_all t,
8146                    oe_order_lines_all l
8147              WHERE t.credit_check_flag = 'Y'
8148              AND   NVL(t.org_id,-99) = NVL(h.org_id, -99)
8149              AND   l.header_id = h.header_id
8150              AND   t.payment_type_code =
8151                    DECODE(l.payment_type_code, NULL,
8152                      DECODE(h.payment_type_code, NULL, t.payment_type_code,
8153                             h.payment_type_code),
8154                           l.payment_type_code)
8155          );
8156 
8157 -- customer freights not on hold 1 global
8158  CURSOR cust_no_hold_hdr_freight1_glb
8159         (p_curr_code IN VARCHAR2 default null) IS
8160 SELECT
8161       SUM
8162       ( DECODE( P.CREDIT_OR_CHARGE_FLAG, 'C', (-1), (+1) )
8163       * DECODE( p.arithmetic_operator, 'LUMPSUM',          --bug 4295299
8164                 p.operand, (l.ordered_quantity * p.adjusted_amount))
8165       )
8166 FROM   oe_price_adjustments p
8167      , oe_order_lines_ALL   l
8168      , oe_order_headers_ALL h
8169      , hz_cust_site_uses_ALL su
8170      , hz_cust_acct_sites_ALL cas
8171 WHERE  h.invoice_to_org_id     = su.site_use_id
8172   AND  cas.cust_acct_site_id  = su.cust_acct_site_id
8173   AND  cas.cust_account_id    = p_customer_id
8174   AND  p.line_id             =  l.line_id
8175   AND  NVL(L.SCHEDULE_SHIP_DATE,NVL(L.REQUEST_DATE,NVL(H.REQUEST_DATE,H.CREATION_DATE)))
8176            <= l_shipping_horizon
8177   AND  (l.invoiced_quantity IS NULL OR l.invoiced_quantity = 0)
8178   AND  l.header_id          = h.header_id
8179   AND  p.header_id           =  l.header_id
8180   AND  p.header_id           =  h.header_id
8181   AND  h.booked_flag         =  'Y'
8182   AND  h.open_flag  = 'Y'
8183   AND  l.open_flag  =  'Y'
8184   AND  l.line_category_code  =  'ORDER'
8185   AND  p.applied_flag        =  'Y'
8186   AND  p.list_line_type_code =  'FREIGHT_CHARGE'
8187   AND  (p.invoiced_flag IS NULL OR p.invoiced_flag = 'N')
8188   AND  h.transactional_curr_code = p_curr_code
8189   AND  h.header_id           <> l_header_id
8190   AND  NOT EXISTS ( SELECT  1
8191                     FROM    oe_order_holds_ALL oh
8192                     WHERE   h.header_id = oh.header_id
8193                     AND     oh.line_id IS NULL
8194                     AND     oh.hold_release_id IS NULL )
8195   AND  (EXISTS
8196              (SELECT NULL
8197               FROM   oe_payment_types_all pt
8198               WHERE  pt.payment_type_code = NVL(l.payment_type_code,
8199                                             NVL(h.payment_type_code, 'BME'))
8200               AND    pt.credit_check_flag = 'Y'
8201               AND    NVL(pt.org_id, -99)  = NVL(h.org_id, -99))
8202         OR
8203         (l.payment_type_code IS NULL AND h.payment_type_code IS NULL));
8204 
8205 
8206 -- customer freights not on hold 1 global including Returns
8207 
8208 CURSOR cust_no_hold_hdr_fr1_glb_ret
8209         (p_curr_code IN VARCHAR2 default null) IS
8210 SELECT
8211       SUM
8212       ( DECODE( P.CREDIT_OR_CHARGE_FLAG, 'C', (-1), (+1) )
8213       * DECODE( p.arithmetic_operator, 'LUMPSUM',          --bug 4295299
8214                 p.operand, (l.ordered_quantity * p.adjusted_amount))
8215       )
8216 FROM   oe_price_adjustments p
8217      , oe_order_lines_ALL   l
8218      , oe_order_headers_ALL h
8219      , hz_cust_site_uses_ALL su
8220      , hz_cust_acct_sites_ALL cas
8221 WHERE  h.invoice_to_org_id     = su.site_use_id
8222   AND  cas.cust_acct_site_id  = su.cust_acct_site_id
8223   AND  cas.cust_account_id    = p_customer_id
8224   AND  p.line_id             =  l.line_id
8225   AND  NVL(L.SCHEDULE_SHIP_DATE,NVL(L.REQUEST_DATE,NVL(H.REQUEST_DATE,H.CREATION_DATE)))
8226           <= l_shipping_horizon
8227   AND  (l.invoiced_quantity IS NULL OR l.invoiced_quantity = 0)
8228   AND  l.header_id          = h.header_id
8229   AND  p.header_id           =  l.header_id
8230   AND  p.header_id           =  h.header_id
8231   AND  h.booked_flag         =  'Y'
8232   AND  h.open_flag  = 'Y'
8233   AND  l.open_flag  =  'Y'
8234   AND  p.applied_flag        =  'Y'
8235   AND  p.list_line_type_code =  'FREIGHT_CHARGE'
8236   AND  (p.invoiced_flag IS NULL OR p.invoiced_flag = 'N')
8237   AND  h.transactional_curr_code = p_curr_code
8238   AND  h.header_id           <> l_header_id
8239   AND  NOT EXISTS ( SELECT  1
8240                     FROM    oe_order_holds_ALL oh
8241                     WHERE   h.header_id = oh.header_id
8242                     AND     oh.line_id IS NULL
8243                     AND     oh.hold_release_id IS NULL )
8244   AND  (EXISTS
8245              (SELECT NULL
8246               FROM   oe_payment_types_all pt
8247               WHERE  pt.payment_type_code = NVL(l.payment_type_code,
8248                                             NVL(h.payment_type_code, 'BME'))
8249               AND    pt.credit_check_flag = 'Y'
8250               AND    NVL(pt.org_id, -99)  = NVL(h.org_id, -99))
8251         OR
8252         (l.payment_type_code IS NULL AND h.payment_type_code IS NULL));
8253 
8254 -- customer freights on hold 1 global
8255  CURSOR cust_hold_hdr_freight1_glb
8256         (p_curr_code IN VARCHAR2 default null) IS
8257 SELECT
8258       SUM
8259       ( DECODE( P.CREDIT_OR_CHARGE_FLAG, 'C', (-1), (+1) )
8260       * DECODE( p.arithmetic_operator, 'LUMPSUM',          --bug 4295299
8261                 p.operand, (l.ordered_quantity * p.adjusted_amount))
8262       )
8263 FROM   oe_price_adjustments p
8264      , oe_order_lines_ALL   l
8265      , oe_order_headers_ALL h
8266      , hz_cust_site_uses_ALL su
8267      , hz_cust_acct_sites_ALL cas
8268 WHERE  h.invoice_to_org_id     = su.site_use_id
8269   AND  cas.cust_acct_site_id  = su.cust_acct_site_id
8270   AND  cas.cust_account_id    = p_customer_id
8271   AND  p.line_id             =  l.line_id
8272   AND  NVL(L.SCHEDULE_SHIP_DATE,NVL(L.REQUEST_DATE,NVL(H.REQUEST_DATE,H.CREATION_DATE)))
8273            <= l_shipping_horizon
8274   AND  (l.invoiced_quantity IS NULL OR l.invoiced_quantity = 0)
8275   AND  l.header_id          = h.header_id
8276   AND  p.header_id           =  l.header_id
8277   AND  p.header_id           =  h.header_id
8278   AND  h.booked_flag         =  'Y'
8279   AND  h.open_flag  = 'Y'
8280   AND  l.open_flag  =  'Y'
8281   AND  l.line_category_code  =  'ORDER'
8282   AND  p.applied_flag        =  'Y'
8283   AND  p.list_line_type_code =  'FREIGHT_CHARGE'
8284   AND  (p.invoiced_flag IS NULL OR p.invoiced_flag = 'N')
8285   AND  h.transactional_curr_code = p_curr_code
8286   AND  h.header_id           <> l_header_id
8287   AND  EXISTS ( SELECT  1
8288                     FROM    oe_order_holds_ALL oh
8289                     WHERE   h.header_id = oh.header_id
8290                     AND     oh.line_id IS NULL
8291                     AND     oh.hold_release_id IS NULL )
8292   AND  (EXISTS
8293              (SELECT NULL
8294               FROM   oe_payment_types_all pt
8295               WHERE  pt.payment_type_code = NVL(l.payment_type_code,
8296                                             NVL(h.payment_type_code, 'BME'))
8297               AND    pt.credit_check_flag = 'Y'
8298               AND    NVL(pt.org_id, -99)  = NVL(h.org_id, -99))
8299         OR
8300         (l.payment_type_code IS NULL AND h.payment_type_code IS NULL));
8301 
8302 
8303 -- customer freights on hold 1 global including Returns
8304 
8305 CURSOR cust_hold_hdr_fr1_glb_ret
8306         (p_curr_code IN VARCHAR2 default null) IS
8307 SELECT
8308       SUM
8309       ( DECODE( P.CREDIT_OR_CHARGE_FLAG, 'C', (-1), (+1) )
8310       * DECODE( p.arithmetic_operator, 'LUMPSUM',          --bug 4295299
8311                 p.operand, (l.ordered_quantity * p.adjusted_amount))
8312       )
8313 FROM   oe_price_adjustments p
8314      , oe_order_lines_ALL   l
8315      , oe_order_headers_ALL h
8316      , hz_cust_site_uses_ALL su
8317      , hz_cust_acct_sites_ALL cas
8318 WHERE  h.invoice_to_org_id     = su.site_use_id
8319   AND  cas.cust_acct_site_id  = su.cust_acct_site_id
8320   AND  cas.cust_account_id    = p_customer_id
8321   AND  p.line_id             =  l.line_id
8322   AND  NVL(L.SCHEDULE_SHIP_DATE,NVL(L.REQUEST_DATE,NVL(H.REQUEST_DATE,H.CREATION_DATE)))
8323           <= l_shipping_horizon
8324   AND  (l.invoiced_quantity IS NULL OR l.invoiced_quantity = 0)
8325   AND  l.header_id          = h.header_id
8326   AND  p.header_id           =  l.header_id
8327   AND  p.header_id           =  h.header_id
8328   AND  h.booked_flag         =  'Y'
8329   AND  h.open_flag  = 'Y'
8330   AND  l.open_flag  =  'Y'
8331   AND  p.applied_flag        =  'Y'
8332   AND  p.list_line_type_code =  'FREIGHT_CHARGE'
8333   AND  (p.invoiced_flag IS NULL OR p.invoiced_flag = 'N')
8334   AND  h.transactional_curr_code = p_curr_code
8335   AND  h.header_id           <> l_header_id
8336   AND  EXISTS ( SELECT  1
8337                     FROM    oe_order_holds_ALL oh
8338                     WHERE   h.header_id = oh.header_id
8339                     AND     oh.line_id IS NULL
8340                     AND     oh.hold_release_id IS NULL )
8341   AND  (EXISTS
8342              (SELECT NULL
8343               FROM   oe_payment_types_all pt
8344               WHERE  pt.payment_type_code = NVL(l.payment_type_code,
8345                                             NVL(h.payment_type_code, 'BME'))
8346               AND    pt.credit_check_flag = 'Y'
8347               AND    NVL(pt.org_id, -99)  = NVL(h.org_id, -99))
8348         OR
8349         (l.payment_type_code IS NULL AND h.payment_type_code IS NULL));
8350 
8351 
8352 -- customer not on hold freight 2 global
8353  CURSOR cust_no_hold_hdr_freight2_glb
8354         (p_curr_code IN VARCHAR2 default null) IS
8355 SELECT
8356       SUM( DECODE( P.CREDIT_OR_CHARGE_FLAG, 'C', (-1), (+1) ) * P.OPERAND )
8357 FROM
8358        oe_price_adjustments p
8359      , oe_order_headers_ALL h
8360      , hz_cust_site_uses_ALL su
8361      , hz_cust_acct_sites_ALL cas
8362 WHERE  h.invoice_to_org_id     = su.site_use_id
8363   AND  cas.cust_acct_site_id  = su.cust_acct_site_id
8364   AND  cas.cust_account_id    = p_customer_id
8365   AND  NVL(h.request_date, h.creation_date) <= l_shipping_horizon
8366   AND  h.transactional_curr_code = p_curr_code
8367   AND  p.line_id IS NULL
8368   AND  p.header_id           =  h.header_id
8369   AND  h.order_category_code IN ('ORDER','MIXED')
8370   AND  h.open_flag  =  'Y'
8371   AND  h.booked_flag         =  'Y'
8372   AND  p.applied_flag        =  'Y'
8373   AND  p.list_line_type_code = 'FREIGHT_CHARGE'
8374   AND  (p.invoiced_flag IS NULL OR p.invoiced_flag = 'N')
8375   AND  h.header_id           <> l_header_id
8376   AND  NOT EXISTS ( SELECT  1
8377                     FROM    oe_order_holds_ALL oh
8378                     WHERE   h.header_id = oh.header_id
8379                     AND     oh.line_id IS NULL
8380                     AND     oh.hold_release_id IS NULL )
8381   AND  EXISTS
8382          ( SELECT  NULL
8383              FROM  oe_payment_types_all t,
8384                    oe_order_lines_all l
8385              WHERE t.credit_check_flag = 'Y'
8386              AND   NVL(t.org_id,-99) = NVL(h.org_id, -99)
8387              AND   l.header_id = h.header_id
8388              AND   t.payment_type_code =
8389                    DECODE(l.payment_type_code, NULL,
8390                      DECODE(h.payment_type_code, NULL, t.payment_type_code,
8391                             h.payment_type_code),
8392                           l.payment_type_code)
8393          );
8394 
8395 
8396 -- customer not on hold freight 2 global including Returns
8397 
8398 CURSOR cust_no_hold_hdr_fr2_glb_ret
8399         (p_curr_code IN VARCHAR2 default null) IS
8400 SELECT
8401       SUM( DECODE( P.CREDIT_OR_CHARGE_FLAG, 'C', (-1), (+1) ) * P.OPERAND )
8402 FROM
8403        oe_price_adjustments p
8404      , oe_order_headers_ALL h
8405      , hz_cust_site_uses_ALL su
8406      , hz_cust_acct_sites_ALL cas
8407 WHERE  h.invoice_to_org_id     = su.site_use_id
8408   AND  cas.cust_acct_site_id  = su.cust_acct_site_id
8409   AND  cas.cust_account_id    = p_customer_id
8410   AND  NVL(h.request_date, h.creation_date) <= l_shipping_horizon
8411   AND  h.transactional_curr_code = p_curr_code
8412   AND  p.line_id IS NULL
8413   AND  p.header_id           =  h.header_id
8414   AND  h.order_category_code IN ('ORDER','MIXED','RETURN')
8415   AND  h.open_flag  =  'Y'
8416   AND  h.booked_flag         =  'Y'
8417   AND  p.applied_flag        =  'Y'
8418   AND  p.list_line_type_code = 'FREIGHT_CHARGE'
8419   AND  (p.invoiced_flag IS NULL OR p.invoiced_flag = 'N')
8420   AND  h.header_id           <> l_header_id
8421   AND  NOT EXISTS ( SELECT  1
8422                     FROM    oe_order_holds_ALL oh
8423                     WHERE   h.header_id = oh.header_id
8424                     AND     oh.line_id IS NULL
8425                     AND     oh.hold_release_id IS NULL )
8426   AND  EXISTS
8427          ( SELECT  NULL
8428              FROM  oe_payment_types_all t,
8429                    oe_order_lines_all l
8430              WHERE t.credit_check_flag = 'Y'
8431              AND   NVL(t.org_id,-99) = NVL(h.org_id, -99)
8432              AND   l.header_id = h.header_id
8433              AND   t.payment_type_code =
8434                    DECODE(l.payment_type_code, NULL,
8435                      DECODE(h.payment_type_code, NULL, t.payment_type_code,
8436                             h.payment_type_code),
8437                           l.payment_type_code)
8438          );
8439 
8440 -- customer on hold freight 2 global
8441  CURSOR cust_hold_hdr_freight2_glb
8442         (p_curr_code IN VARCHAR2 default null) IS
8443 SELECT
8444       SUM( DECODE( P.CREDIT_OR_CHARGE_FLAG, 'C', (-1), (+1) ) * P.OPERAND )
8445 FROM
8446        oe_price_adjustments p
8447      , oe_order_headers_ALL h
8448      , hz_cust_site_uses_ALL su
8449      , hz_cust_acct_sites_ALL cas
8450 WHERE  h.invoice_to_org_id     = su.site_use_id
8451   AND  cas.cust_acct_site_id  = su.cust_acct_site_id
8452   AND  cas.cust_account_id    = p_customer_id
8453   AND  NVL(h.request_date, h.creation_date) <= l_shipping_horizon
8454   AND  h.transactional_curr_code = p_curr_code
8455   AND  p.line_id IS NULL
8456   AND  p.header_id           =  h.header_id
8457   AND  h.order_category_code IN ('ORDER','MIXED')
8458   AND  h.open_flag  =  'Y'
8459   AND  h.booked_flag         =  'Y'
8460   AND  p.applied_flag        =  'Y'
8461   AND  p.list_line_type_code = 'FREIGHT_CHARGE'
8462   AND  (p.invoiced_flag IS NULL OR p.invoiced_flag = 'N')
8463   AND  h.header_id           <> l_header_id
8464   AND  EXISTS ( SELECT  1
8465                     FROM    oe_order_holds_ALL oh
8466                     WHERE   h.header_id = oh.header_id
8467                     AND     oh.line_id IS NULL
8468                     AND     oh.hold_release_id IS NULL )
8469   AND  EXISTS
8470          ( SELECT  NULL
8471              FROM  oe_payment_types_all t,
8472                    oe_order_lines_all l
8473              WHERE t.credit_check_flag = 'Y'
8474              AND   NVL(t.org_id,-99) = NVL(h.org_id, -99)
8475              AND   l.header_id = h.header_id
8476              AND   t.payment_type_code =
8477                    DECODE(l.payment_type_code, NULL,
8478                      DECODE(h.payment_type_code, NULL, t.payment_type_code,
8479                             h.payment_type_code),
8480                           l.payment_type_code)
8481          );
8482 
8483 -- customer on hold freight 2 global including Returns
8484 
8485 CURSOR cust_hold_hdr_fr2_glb_ret
8486         (p_curr_code IN VARCHAR2 default null) IS
8487 SELECT
8488       SUM( DECODE( P.CREDIT_OR_CHARGE_FLAG, 'C', (-1), (+1) ) * P.OPERAND )
8489 FROM
8490        oe_price_adjustments p
8491      , oe_order_headers_ALL h
8492      , hz_cust_site_uses_ALL su
8493      , hz_cust_acct_sites_ALL cas
8494 WHERE  h.invoice_to_org_id     = su.site_use_id
8495   AND  cas.cust_acct_site_id  = su.cust_acct_site_id
8496   AND  cas.cust_account_id    = p_customer_id
8497   AND  NVL(h.request_date, h.creation_date) <= l_shipping_horizon
8498   AND  h.transactional_curr_code = p_curr_code
8499   AND  p.line_id IS NULL
8500   AND  p.header_id           =  h.header_id
8501   AND  h.order_category_code IN ('ORDER','MIXED','RETURN')
8502   AND  h.open_flag  =  'Y'
8503   AND  h.booked_flag         =  'Y'
8504   AND  p.applied_flag        =  'Y'
8505   AND  p.list_line_type_code = 'FREIGHT_CHARGE'
8506   AND  (p.invoiced_flag IS NULL OR p.invoiced_flag = 'N')
8507   AND  h.header_id           <> l_header_id
8508   AND  EXISTS ( SELECT  1
8509                     FROM    oe_order_holds_ALL oh
8510                     WHERE   h.header_id = oh.header_id
8511                     AND     oh.line_id IS NULL
8512                     AND     oh.hold_release_id IS NULL )
8513   AND  EXISTS
8514          ( SELECT  NULL
8515              FROM  oe_payment_types_all t,
8516                    oe_order_lines_all l
8517              WHERE t.credit_check_flag = 'Y'
8518              AND   NVL(t.org_id,-99) = NVL(h.org_id, -99)
8519              AND   l.header_id = h.header_id
8520              AND   t.payment_type_code =
8521                    DECODE(l.payment_type_code, NULL,
8522                      DECODE(h.payment_type_code, NULL, t.payment_type_code,
8523                             h.payment_type_code),
8524                           l.payment_type_code)
8525          );
8526 
8527 ----------------------- END Global exposure cursors ---------
8528 
8529    l_cum_order_amount        NUMBER := 0 ;
8530    l_cum_order_hold_amount   NUMBER := 0 ;
8531    l_cum_ar_amount           NUMBER := 0 ;
8532 
8533    l_limit_cum_order_amount        NUMBER := 0 ;
8534    l_limit_cum_order_hold_amount   NUMBER := 0 ;
8535    l_limit_cum_ar_amount           NUMBER := 0 ;
8536 
8537    l_order_amount        NUMBER := 0 ;
8538    l_order_hold_amount   NUMBER := 0 ;
8539    l_ar_amount           NUMBER := 0 ;
8540 
8541 
8542 BEGIN
8543   IF G_debug_flag = 'Y'
8544   THEN
8545     OE_DEBUG_PUB.ADD('OEXUCRCB: IN Get_order_exposure',1);
8546   END IF;
8547 
8548   x_return_status := FND_API.G_RET_STS_SUCCESS;
8549 
8550   IF G_debug_flag = 'Y'
8551   THEN
8552     OE_DEBUG_PUB.Add('exposure Input parameters ');
8553     OE_DEBUG_PUB.Add(' ');
8554     OE_DEBUG_PUB.Add('--------------------------------------------');
8555     OE_DEBUG_PUB.Add('p_customer_id          = '|| p_customer_id, 1);
8556     OE_DEBUG_PUB.Add('p_site_use_id          = '|| p_site_use_id, 1);
8557     OE_DEBUG_PUB.Add('p_header_id            = '|| p_header_id);
8558     OE_DEBUG_PUB.Add('p_credit_check_rule_id = '
8559                  || p_credit_check_rule_rec.credit_check_rule_id
8560                   );
8561 
8562     OE_DEBUG_PUB.Add('Conversion type = '
8563                  || p_credit_check_rule_rec.conversion_type
8564                   );
8565 
8566     OE_DEBUG_PUB.Add('p_credit_level         = '|| p_credit_level, 1);
8567     OE_DEBUG_PUB.Add('p_limit_curr_code      = '|| p_limit_curr_code);
8568     OE_DEBUG_PUB.Add('p_include_all_flag     = '|| p_include_all_flag);
8569     OE_DEBUG_PUB.Add('p_global_exposure_flag = '|| p_global_exposure_flag, 1);
8570     OE_DEBUG_PUB.Add('p_need_exposure_details= '|| p_need_exposure_details);
8571     OE_DEBUG_PUB.Add('----------------End Parameters------------------------ ');
8572     OE_DEBUG_PUB.Add(' ');
8573     OE_DEBUG_PUB.Add('Local Variables');
8574     OE_DEBUG_PUB.Add('l_need_exposure_details = '||l_need_exposure_details);
8575     OE_DEBUG_PUB.Add(' ');
8576 
8577   --------------------------------------------------------------------
8578   --------- Assign default values: credit check rules ----------------
8579   --------------------------------------------------------------------
8580 
8581     OE_DEBUG_PUB.Add(' Assign Default Values: Credit rules ');
8582   END IF;
8583 
8584   l_open_ar_days           := p_credit_check_rule_rec.open_ar_days ;
8585   l_uninvoiced_orders_flag :=
8586                NVL(p_credit_check_rule_rec.uninvoiced_orders_flag,'N') ;
8587   l_orders_on_hold_flag    :=
8588                NVL(p_credit_check_rule_rec.orders_on_hold_flag,'N') ;
8589   l_include_tax_flag       :=
8590                NVL(p_credit_check_rule_rec.include_tax_flag,'N') ;
8591   l_shipping_horizon       := p_credit_check_rule_rec.shipping_horizon ;
8592   l_include_risk_flag      :=
8593           NVL(p_credit_check_rule_rec.include_payments_at_risk_flag,'N') ;
8594   l_quick_cr_check_flag    :=
8595                NVL(p_credit_check_rule_rec.quick_cr_check_flag,'N') ;
8596   l_freight_charges_flag   :=
8597                 NVL(p_credit_check_rule_rec.incl_freight_charges_flag,'N') ;
8598   l_open_ar_balance_flag   :=
8599                 NVL(p_credit_check_rule_rec.open_ar_balance_flag,'N');
8600   l_incl_external_exposure_flag   :=
8601                 NVL(p_credit_check_rule_rec.include_external_exposure_flag,'N');
8602   l_header_id              := NVL(p_header_id,0);
8603   -----added for Returns-------------------
8604   l_include_returns_flag   :=
8605                 NVL(p_credit_check_rule_rec.include_returns_flag,'N');
8606 
8607   IF G_debug_flag = 'Y'
8608   THEN
8609     OE_DEBUG_PUB.Add(' Credit rule setup values ');
8610     OE_DEBUG_PUB.Add(' ');
8611     OE_DEBUG_PUB.Add(' -----------------------------------------------');
8612     OE_DEBUG_PUB.Add(' l_open_ar_days           = '|| l_open_ar_days );
8613     OE_DEBUG_PUB.Add(' l_uninvoiced_orders_flag = '||
8614                          l_uninvoiced_orders_flag );
8615     OE_DEBUG_PUB.Add(' l_orders_on_hold_flag    = '|| l_orders_on_hold_flag );
8616     OE_DEBUG_PUB.Add(' l_include_tax_flag       = '|| l_include_tax_flag );
8617     OE_DEBUG_PUB.Add(' l_shipping_horizon       = '|| l_shipping_horizon );
8618     OE_DEBUG_PUB.Add(' l_include_risk_flag      = '|| l_include_risk_flag );
8619     OE_DEBUG_PUB.Add(' l_quick_cr_check_flag    = '|| l_quick_cr_check_flag );
8620     OE_DEBUG_PUB.Add(' l_freight_charges_flag   = '|| l_freight_charges_flag );
8621     OE_DEBUG_PUB.Add(' l_open_ar_balance_flag   = '|| l_open_ar_balance_flag );
8622     OE_DEBUG_PUB.Add(' l_incl_external_exposure_flag = ' ||
8623                      l_incl_external_exposure_flag );
8624     OE_DEBUG_PUB.Add(' l_include_returns_flag = ' ||
8625                      l_include_returns_flag );
8626     OE_DEBUG_PUB.Add(' -------------------------------------------------- ');
8627     OE_DEBUG_PUB.Add(' ');
8628   END IF;
8629 
8630 
8631   IF p_credit_level = 'CUSTOMER'
8632   THEN
8633     -- Select total exposure using CUSTOMER CURSORs
8634 
8635     IF G_debug_flag = 'Y'
8636     THEN
8637       OE_DEBUG_PUB.Add('Get_order_Exposure CUSTOMER ',1);
8638     END IF;
8639 
8640     -- The exposure calculation must be done for all the
8641     --  usage currencies as part of the multi currency
8642     --  set up.
8643     l_current_usage_cur := NULL ;
8644 
8645     FOR i IN 1..p_usage_curr.count
8646     LOOP
8647        l_current_usage_cur := NULL ;
8648       IF G_debug_flag = 'Y'
8649       THEN
8650        OE_DEBUG_PUB.ADD(' ');
8651        OE_DEBUG_PUB.ADD('############################### ');
8652        OE_DEBUG_PUB.ADD('USAGE CURR = '|| p_usage_curr(i).usage_curr_code );
8653        OE_DEBUG_PUB.ADD('############################### ');
8654        OE_DEBUG_PUB.ADD(' ');
8655        OE_DEBUG_PUB.ADD('l_current_usage_cur = '|| l_current_usage_cur );
8656        OE_DEBUG_PUB.ADD(' ');
8657        OE_DEBUG_PUB.ADD('.');
8658       END IF;
8659 
8660        l_current_usage_cur := p_usage_curr(i).usage_curr_code ;
8661 
8662       -- get external exposure
8663       IF l_incl_external_exposure_flag = 'Y'
8664       THEN
8665         --- Bug2352020
8666         IF p_global_exposure_flag = 'Y'
8667         THEN
8668           IF G_debug_flag = 'Y'
8669           THEN
8670             OE_DEBUG_PUB.Add(' Get cust_external_csr_global ');
8671           END IF;
8672 
8673           OPEN cust_external_csr_global (p_usage_curr(i).usage_curr_code);
8674           FETCH cust_external_csr_global INTO l_external_exposure;
8675           IF cust_external_csr_global%NOTFOUND
8676           THEN
8677             OE_DEBUG_PUB.Add(' No cust_external_csr_global balance found');
8678             l_external_exposure := 0;
8679           END IF;
8680           CLOSE cust_external_csr_global ;
8681 
8682         ELSE
8683 
8684           OE_DEBUG_PUB.Add(' Get customer external exposure balance ');
8685 
8686           OPEN cust_external_exposure_csr (p_usage_curr(i).usage_curr_code);
8687           FETCH cust_external_exposure_csr INTO l_external_exposure;
8688           IF cust_external_exposure_csr%NOTFOUND
8689           THEN
8690             OE_DEBUG_PUB.Add(' No external exposure balance found');
8691             l_external_exposure := 0;
8692           END IF;
8693           CLOSE cust_external_exposure_csr;
8694        END IF ; -- p_global check
8695 
8696       END IF; -- external check
8697       l_cum_external_exposure := l_cum_external_exposure +
8698                                  NVL(l_external_exposure, 0);
8699 
8700 ------------------------AR exposure -------------------------
8701 
8702       IF l_open_ar_balance_flag = 'Y'
8703       THEN
8704 
8705         IF p_global_exposure_flag = 'Y'
8706         THEN
8707           IF G_debug_flag = 'Y'
8708           THEN
8709             OE_DEBUG_PUB.Add(' Get cust_ar_balance_global ');
8710           END IF;
8711 
8712             OPEN cust_ar_balance_global (p_usage_curr(i).usage_curr_code);
8713             FETCH cust_ar_balance_global INTO l_total_from_ar ;
8714 
8715             IF cust_ar_balance_global%NOTFOUND
8716             THEN
8717               IF G_debug_flag = 'Y'
8718               THEN
8719                 OE_DEBUG_PUB.Add(' No AR balance found');
8720               END IF;
8721 
8722               l_total_from_ar := 0 ;
8723             END IF;
8724 
8725             CLOSE cust_ar_balance_global;
8726 
8727         ELSE
8728           IF G_debug_flag = 'Y'
8729           THEN
8730             OE_DEBUG_PUB.Add(' Get cust_ar_balance ');
8731           END IF;
8732 
8733             OPEN cust_ar_balance (p_usage_curr(i).usage_curr_code);
8734             FETCH cust_ar_balance INTO l_total_from_ar ;
8735 
8736             IF cust_ar_balance%NOTFOUND
8737             THEN
8738               IF G_debug_flag = 'Y'
8739               THEN
8740                 OE_DEBUG_PUB.Add(' No AR balance found');
8741               END IF;
8742 
8743               l_total_from_ar := 0 ;
8744             END IF;
8745 
8746             CLOSE cust_ar_balance;
8747        	end if;
8748       END IF;
8749 
8750       IF l_include_risk_flag = 'Y'
8751       THEN
8752         IF p_global_exposure_flag = 'Y'
8753         THEN
8754           IF G_debug_flag = 'Y'
8755           THEN
8756             OE_DEBUG_PUB.Add(' Get cust_pay_risk_global  ');
8757           END IF;
8758 
8759             OPEN cust_pay_risk_global (p_usage_curr(i).usage_curr_code);
8760             FETCH cust_pay_risk_global INTO l_payments_at_risk;
8761             IF cust_pay_risk_global%NOTFOUND
8762             THEN
8763               l_payments_at_risk := 0 ;
8764                IF G_debug_flag = 'Y'
8765                THEN
8766                  OE_DEBUG_PUB.Add(' No Pay at risk found ');
8767                END IF;
8768             END IF;
8769 
8770             CLOSE cust_pay_risk_global;
8771         ELSE
8772            IF G_debug_flag = 'Y'
8773            THEN
8774              OE_DEBUG_PUB.Add(' Get cust_pay_risk  ');
8775            END IF;
8776 
8777             OPEN cust_pay_risk (p_usage_curr(i).usage_curr_code);
8778             FETCH cust_pay_risk INTO l_payments_at_risk;
8779             IF cust_pay_risk%NOTFOUND
8780             THEN
8781               l_payments_at_risk := 0 ;
8782               OE_DEBUG_PUB.Add(' No Pay at risk found ');
8783             END IF;
8784 
8785             CLOSE cust_pay_risk;
8786         END IF;  -- Global
8787       END IF;
8788 
8789 -------------------------------------- BR support ---------------
8790      IF l_open_ar_days > 0
8791      THEN
8792       IF oe_credit_check_util.Check_drawee_exists
8793          (p_cust_account_id => p_customer_id )  = 'Y'
8794       THEN
8795         IF G_debug_flag = 'Y'
8796         THEN
8797           OE_DEBUG_PUB.Add(' Call DRAWEE BR exposure ');
8798         END IF;
8799 
8800         IF p_global_exposure_flag = 'Y'
8801         THEN
8802           IF G_debug_flag = 'Y'
8803           THEN
8804             OE_DEBUG_PUB.Add(' Get cust_br_balance_global ');
8805           END IF;
8806 
8807             OPEN cust_br_balance_global (p_usage_curr(i).usage_curr_code);
8808             FETCH cust_br_balance_global INTO l_total_from_br ;
8809 
8810             IF cust_br_balance_global%NOTFOUND
8811             THEN
8812                IF G_debug_flag = 'Y'
8813                THEN
8814                  OE_DEBUG_PUB.Add(' No AR balance found');
8815                END IF;
8816 
8817               l_total_from_br := 0 ;
8818             END IF;
8819 
8820             CLOSE cust_br_balance_global;
8821 
8822        ELSE
8823          IF G_debug_flag = 'Y'
8824          THEN
8825            OE_DEBUG_PUB.Add(' Get cust_br_balance ');
8826          END IF;
8827 
8828             OPEN cust_br_balance (p_usage_curr(i).usage_curr_code);
8829             FETCH cust_br_balance INTO l_total_from_br ;
8830 
8831             IF cust_br_balance%NOTFOUND
8832             THEN
8833               OE_DEBUG_PUB.Add(' No AR balance found');
8834               l_total_from_br := 0 ;
8835             END IF;
8836 
8837             CLOSE cust_br_balance;
8838         end if;
8839       END IF;
8840 
8841       IF l_include_risk_flag = 'Y'
8842       THEN
8843         IF p_global_exposure_flag = 'Y'
8844         THEN
8845           IF G_debug_flag = 'Y'
8846           THEN
8847             OE_DEBUG_PUB.Add(' Get cust_pay_risk_global  ');
8848           END IF;
8849 
8850             OPEN cust_br_pay_risk_global (p_usage_curr(i).usage_curr_code);
8851             FETCH cust_br_pay_risk_global INTO l_payments_at_risk_br;
8852             IF cust_br_pay_risk_global%NOTFOUND
8853             THEN
8854               l_payments_at_risk_br := 0 ;
8855               OE_DEBUG_PUB.Add(' No Pay at risk found ');
8856             END IF;
8857 
8858             CLOSE cust_br_pay_risk_global;
8859         ELSE
8860           IF G_debug_flag = 'Y'
8861           THEN
8862             OE_DEBUG_PUB.Add(' Get cust_pay_risk  ');
8863           END IF;
8864 
8865             OPEN cust_br_pay_risk (p_usage_curr(i).usage_curr_code);
8866             FETCH cust_br_pay_risk INTO l_payments_at_risk_br;
8867             IF cust_br_pay_risk%NOTFOUND
8868             THEN
8869               l_payments_at_risk_br := 0 ;
8870               OE_DEBUG_PUB.Add(' No Pay at risk found ');
8871             END IF;
8872             CLOSE cust_br_pay_risk;
8873         END IF;  -- Global
8874       ELSE
8875         IF G_debug_flag = 'Y'
8876         THEN
8877           OE_DEBUG_PUB.Add(' No Drawee check required ');
8878         END IF;
8879 
8880       END IF; -- DRAWEE
8881     ELSE
8882      IF G_debug_flag = 'Y'
8883      THEN
8884         OE_DEBUG_PUB.Add(' No Drawee check - NO horizon ' ||
8885           p_credit_check_rule_rec.OPEN_AR_DAYS) ;
8886      END IF;
8887     END IF;
8888 
8889 ------------------- end AR exposure --------------------
8890 
8891 ------------------- OM Exposure logic ------------------------
8892 -------------------------------------------------------------
8893     IF l_uninvoiced_orders_flag = 'Y'
8894     THEN
8895     BEGIN
8896       IF G_debug_flag = 'Y'
8897       THEN
8898         OE_DEBUG_PUB.Add(' Begin OM Exposure calculation ');
8899       END IF;
8900 
8901       IF OE_Commitment_PVT.Do_Commitment_Sequencing
8902       THEN
8903         IF p_global_exposure_flag = 'Y'
8904         THEN
8905           IF G_debug_flag = 'Y'
8906           THEN
8907             OE_DEBUG_PUB.Add('  cust_commitments_global');
8908           END IF;
8909 
8910           OPEN cust_commitment_total_global
8911               (p_usage_curr(i).usage_curr_code);
8912           FETCH cust_commitment_total_global
8913               INTO l_total_commitment ;
8914 
8915           IF cust_commitment_total_global%NOTFOUND
8916           THEN
8917             l_total_commitment := 0 ;
8918             OE_DEBUG_PUB.Add('No commitment amount found ');
8919           END IF;
8920 
8921           CLOSE cust_commitment_total_global ;
8922         ELSE
8923           IF G_debug_flag = 'Y'
8924           THEN
8925             OE_DEBUG_PUB.Add('  cust_commitments ');
8926           END IF;
8927 
8928           OPEN customer_commitment_total (p_usage_curr(i).usage_curr_code);
8929           FETCH customer_commitment_total INTO l_total_commitment ;
8930 
8931           IF customer_commitment_total%NOTFOUND
8932           THEN
8933             l_total_commitment := 0 ;
8934             OE_DEBUG_PUB.Add('No commitment amount found ');
8935           END IF;
8936 
8937           CLOSE customer_commitment_total ;
8938         END IF ; -- Global
8939       END IF; -- Commitment_Sequencing
8940 
8941       --
8942       -- Check the l_orders_on_hold_flag.
8943       -- IF Y, process the uninvoiced cursors
8944       -- ELSE process the no hold cursors
8945       --
8946 
8947       IF l_orders_on_hold_flag = 'Y'
8948       THEN
8949         IF p_global_exposure_flag = 'Y'
8950         THEN
8951 
8952           ----added for Returns
8953           IF l_include_returns_flag='N'
8954           THEN
8955             -----returns are not included
8956 
8957             IF G_debug_flag = 'Y'
8958             THEN
8959               OE_DEBUG_PUB.Add(' select  cust_uninvoiced_orders_global  ');
8960             END IF;
8961 
8962             OPEN cust_uninvoiced_orders_global(p_usage_curr(i).usage_curr_code);
8963             FETCH cust_uninvoiced_orders_global INTO l_total_on_order;
8964 
8965             IF cust_uninvoiced_orders_global%NOTFOUND
8966             THEN
8967               l_total_on_order := 0 ;
8968               OE_DEBUG_PUB.Add('No Uninvoiced Order amount found ');
8969             END IF;
8970             CLOSE cust_uninvoiced_orders_global;
8971 
8972           ELSE
8973             -----returns are included
8974             IF G_debug_flag = 'Y'
8975             THEN
8976               OE_DEBUG_PUB.Add(' select  cust_uninv_orders_global_ret ');
8977             END IF;
8978 
8979             OPEN cust_uninv_orders_global_ret(p_usage_curr(i).usage_curr_code);
8980             FETCH cust_uninv_orders_global_ret  INTO l_total_on_order;
8981 
8982             IF cust_uninv_orders_global_ret%NOTFOUND
8983             THEN
8984               l_total_on_order := 0 ;
8985               OE_DEBUG_PUB.Add('No Uninvoiced Order amount found ');
8986             END IF;
8987 
8988             CLOSE cust_uninv_orders_global_ret;
8989 
8990           END IF; ---end for checking if returns are included
8991 
8992         ELSE
8993 
8994           ----added for Returns
8995           IF l_include_returns_flag='N'
8996           THEN
8997             -----returns are not included
8998             IF G_debug_flag = 'Y'
8999             THEN
9000               OE_DEBUG_PUB.Add(' select  cust_uninvoiced_orders  ');
9001             END IF;
9002 
9003             OPEN cust_uninvoiced_orders(p_usage_curr(i).usage_curr_code);
9004             FETCH cust_uninvoiced_orders INTO l_total_on_order;
9005 
9006             IF cust_uninvoiced_orders%NOTFOUND
9007             THEN
9008               l_total_on_order := 0 ;
9009               OE_DEBUG_PUB.Add('No Uninvoiced Order amount found ');
9010             END IF;
9011 
9012             CLOSE cust_uninvoiced_orders;
9013 
9014           ELSE
9015             -----returns are included
9016             IF G_debug_flag = 'Y'
9017             THEN
9018               OE_DEBUG_PUB.Add(' select  cust_uninv_orders_ret  ');
9019             END IF;
9020 
9021             OPEN cust_uninv_orders_ret(p_usage_curr(i).usage_curr_code);
9022             FETCH cust_uninv_orders_ret INTO l_total_on_order;
9023 
9024             IF cust_uninv_orders_ret%NOTFOUND
9025             THEN
9026               l_total_on_order := 0 ;
9027               OE_DEBUG_PUB.Add('No Uninvoiced Order amount found ');
9028             END IF;
9029 
9030             CLOSE cust_uninv_orders_ret;
9031 
9032           END IF; -----end of checking if returns are included
9033         END IF ; --- Global
9034 
9035         IF l_freight_charges_flag ='Y'
9036         THEN
9037           IF p_global_exposure_flag = 'Y'
9038           THEN
9039 
9040             ----added for Returns
9041             IF l_include_returns_flag='N'
9042             THEN
9043               -----returns are not included
9044               IF G_debug_flag = 'Y'
9045               THEN
9046                 OE_DEBUG_PUB.Add('  cust_uninv_hdr_freight1_global  ');
9047               END IF;
9048 
9049               OPEN cust_uninv_hdr_freight1_global
9050                  (p_usage_curr(i).usage_curr_code);
9051 
9052               FETCH cust_uninv_hdr_freight1_global
9053                   INTO l_uninvoiced_hdr_freight1;
9054 
9055               IF cust_uninv_hdr_freight1_global%NOTFOUND
9056               THEN
9057                 l_uninvoiced_hdr_freight1 := 0 ;
9058                 OE_DEBUG_PUB.Add('No Uninvoiced Order Freight1 found ');
9059               END IF;
9060 
9061               CLOSE cust_uninv_hdr_freight1_global;
9062 
9063             ELSE
9064               -----returns are included
9065               IF G_debug_flag = 'Y'
9066               THEN
9067                 OE_DEBUG_PUB.Add('  open cust_uninv_hdr_fr1_glb_ret  ');
9068               END IF;
9069 
9070               OPEN cust_uninv_hdr_fr1_glb_ret
9071                  (p_usage_curr(i).usage_curr_code);
9072 
9073               FETCH cust_uninv_hdr_fr1_glb_ret
9074                   INTO l_uninvoiced_hdr_freight1;
9075 
9076               IF cust_uninv_hdr_fr1_glb_ret%NOTFOUND
9077               THEN
9078                 l_uninvoiced_hdr_freight1 := 0 ;
9079                 OE_DEBUG_PUB.Add('No Uninvoiced Order Freight1 found ');
9080               END IF;
9081 
9082               CLOSE cust_uninv_hdr_fr1_glb_ret;
9083 
9084             END IF;  --end of checking if returns are included
9085 
9086             ----added for Returns
9087             IF l_include_returns_flag='N'
9088             THEN
9089               -----returns are not included
9090 
9091               IF G_debug_flag = 'Y'
9092               THEN
9093                 OE_DEBUG_PUB.Add('  cust_uninv_hdr_freight2_global  ');
9094               END IF;
9095 
9096 
9097               OPEN cust_uninv_hdr_freight2_global
9098                 (p_usage_curr(i).usage_curr_code);
9099 
9100               FETCH cust_uninv_hdr_freight2_global
9101                 INTO l_uninvoiced_hdr_freight2;
9102 
9103               IF cust_uninv_hdr_freight2_global%NOTFOUND
9104               THEN
9105                 l_uninvoiced_hdr_freight2 := 0 ;
9106                 IF G_debug_flag = 'Y'
9107                 THEN
9108                   OE_DEBUG_PUB.Add('No Uninvoiced Order Freight2 found ');
9109                 END IF;
9110               END IF;
9111 
9112               CLOSE cust_uninv_hdr_freight2_global ;
9113 
9114             ELSE
9115               -----returns are included
9116 
9117               IF G_debug_flag = 'Y'
9118               THEN
9119                 OE_DEBUG_PUB.Add(' open cust_uninv_hdr_fr2_glb_ret ');
9120               END IF;
9121 
9122               OPEN cust_uninv_hdr_fr2_glb_ret
9123                 (p_usage_curr(i).usage_curr_code);
9124 
9125               FETCH cust_uninv_hdr_fr2_glb_ret
9126                 INTO l_uninvoiced_hdr_freight2;
9127 
9128               IF cust_uninv_hdr_fr2_glb_ret%NOTFOUND
9129               THEN
9130                 l_uninvoiced_hdr_freight2 := 0 ;
9131                 IF G_debug_flag = 'Y'
9132                 THEN
9133                   OE_DEBUG_PUB.Add('No Uninvoiced Order Freight2 found ');
9134                 END IF;
9135               END IF;
9136 
9137               CLOSE cust_uninv_hdr_fr2_glb_ret;
9138 
9139             END IF;   ----end of checking if returns are included
9140 
9141           ELSE
9142 
9143             ----added for Returns
9144             IF l_include_returns_flag='N'
9145             THEN
9146               -----returns are not included
9147 
9148               IF G_debug_flag = 'Y'
9149               THEN
9150                 OE_DEBUG_PUB.Add('  cust_uninv_hdr_freight1  ');
9151               END IF;
9152 
9153               OPEN cust_uninv_hdr_freight1(p_usage_curr(i).usage_curr_code);
9154               FETCH cust_uninv_hdr_freight1 INTO l_uninvoiced_hdr_freight1;
9155 
9156               IF cust_uninv_hdr_freight1%NOTFOUND
9157               THEN
9158                 l_uninvoiced_hdr_freight1 := 0 ;
9159                 IF G_debug_flag = 'Y'
9160                 THEN
9161                   OE_DEBUG_PUB.Add('No Uninvoiced Order Freight1 found ');
9162                 END IF;
9163               END IF;
9164 
9165               CLOSE cust_uninv_hdr_freight1;
9166 
9167               IF G_debug_flag = 'Y'
9168               THEN
9169                 OE_DEBUG_PUB.Add('  cust_uninv_hdr_freight2  ');
9170               END IF;
9171 
9172               OPEN cust_uninv_hdr_freight2(p_usage_curr(i).usage_curr_code);
9173               FETCH cust_uninv_hdr_freight2 INTO l_uninvoiced_hdr_freight2;
9174 
9175               IF cust_uninv_hdr_freight2%NOTFOUND
9176               THEN
9177                 l_uninvoiced_hdr_freight2 := 0 ;
9178                 IF G_debug_flag = 'Y'
9179                 THEN
9180                   OE_DEBUG_PUB.Add('No Uninvoiced Order Freight2 found ');
9181                 END IF;
9182               END IF;
9183               CLOSE cust_uninv_hdr_freight2;
9184 
9185             ELSE
9186               -----returns are included
9187 
9188               IF G_debug_flag = 'Y'
9189               THEN
9190                 OE_DEBUG_PUB.Add(' open cust_uninv_hdr_freight1_ret ');
9191               END IF;
9192 
9193               OPEN cust_uninv_hdr_freight1_ret(p_usage_curr(i).usage_curr_code);
9194               FETCH cust_uninv_hdr_freight1_ret INTO l_uninvoiced_hdr_freight1;
9195 
9196               IF cust_uninv_hdr_freight1_ret%NOTFOUND
9197               THEN
9198                 l_uninvoiced_hdr_freight1 := 0 ;
9199                 IF G_debug_flag = 'Y'
9200                 THEN
9201                   OE_DEBUG_PUB.Add('No Uninvoiced Order Freight1 found ');
9202                 END IF;
9203               END IF;
9204 
9205               CLOSE cust_uninv_hdr_freight1_ret;
9206 
9207               IF G_debug_flag = 'Y'
9208               THEN
9209                 OE_DEBUG_PUB.Add(' open cust_uninv_hdr_freight2_ret ');
9210               END IF;
9211 
9212               OPEN cust_uninv_hdr_freight2_ret(p_usage_curr(i).usage_curr_code);
9213               FETCH cust_uninv_hdr_freight2_ret INTO l_uninvoiced_hdr_freight2;
9214 
9215               IF cust_uninv_hdr_freight2_ret%NOTFOUND
9216               THEN
9217                 l_uninvoiced_hdr_freight2 := 0 ;
9218                 IF G_debug_flag = 'Y'
9219                 THEN
9220                   OE_DEBUG_PUB.Add('No Uninvoiced Order Freight2 found ');
9221                 END IF;
9222               END IF;
9223               CLOSE cust_uninv_hdr_freight2_ret;
9224 
9225             END IF; -----end of checking if returns are included
9226 
9227           END IF ; --- Global
9228 
9229         END IF; -- freight charges
9230 
9231 
9232       ELSE  -- Do not include orders on hold
9233             -- l_orders_on_hold_flag <> 'Y'
9234 
9235         IF p_global_exposure_flag = 'Y'
9236         THEN
9237 
9238           ----added for Returns
9239           IF l_include_returns_flag='N'
9240           THEN
9241             -----returns are not included
9242 
9243             IF G_debug_flag = 'Y'
9244             THEN
9245               OE_DEBUG_PUB.Add('  cust_orders_not_on_hold_global  ');
9246             END IF;
9247 
9248             OPEN cust_orders_not_on_hold_global
9249                 (p_usage_curr(i).usage_curr_code);
9250             FETCH cust_orders_not_on_hold_global
9251                 INTO l_total_no_hold;
9252 
9253             IF cust_orders_not_on_hold_global%NOTFOUND
9254             THEN
9255               l_total_no_hold := 0 ;
9256               OE_DEBUG_PUB.Add('No Orders not on hold amount found ');
9257             END IF;
9258 
9259             CLOSE cust_orders_not_on_hold_global ;
9260 
9261             -- If the l_need_exposure_details flag enabled, get the
9262             -- OM amount on hold
9263             IF l_need_exposure_details = 'Y' THEN
9264               IF G_debug_flag = 'Y' THEN
9265                 OE_DEBUG_PUB.Add('  cust_orders_on_hold_global  ');
9266               END IF;
9267               OPEN  cust_orders_on_hold_global(p_usage_curr(i).usage_curr_code);
9268               FETCH cust_orders_on_hold_global
9269               INTO  l_total_on_hold;
9270 
9271               IF cust_orders_on_hold_global%NOTFOUND THEN
9272                 l_total_on_hold := 0 ;
9273                 OE_DEBUG_PUB.Add('No global orders on hold amount found ');
9274               END IF;
9275               CLOSE cust_orders_on_hold_global ;
9276             END IF;
9277 
9278           ELSE
9279             -----returns are included
9280 
9281             IF G_debug_flag = 'Y'
9282             THEN
9283               OE_DEBUG_PUB.Add(' open cust_ord_not_on_hold_glb_ret  ');
9284             END IF;
9285 
9286             OPEN cust_ord_not_on_hold_glb_ret
9287                 (p_usage_curr(i).usage_curr_code);
9288             FETCH cust_ord_not_on_hold_glb_ret
9289                 INTO l_total_no_hold;
9290 
9291             IF cust_ord_not_on_hold_glb_ret%NOTFOUND
9292             THEN
9293               l_total_no_hold := 0 ;
9294               OE_DEBUG_PUB.Add('No Orders not on hold amount found ');
9295             END IF;
9296 
9297             CLOSE cust_ord_not_on_hold_glb_ret ;
9298 
9299             -- If the l_need_exposure_details flag enabled, get the
9300             -- OM amount on hold
9301             IF l_need_exposure_details = 'Y' THEN
9302               IF G_debug_flag = 'Y' THEN
9303                 OE_DEBUG_PUB.Add('  cust_ord_on_hold_glb_ret  ');
9304               END IF;
9305               OPEN  cust_ord_on_hold_glb_ret(p_usage_curr(i).usage_curr_code);
9306               FETCH cust_ord_on_hold_glb_ret
9307               INTO  l_total_on_hold;
9308 
9309               IF cust_ord_on_hold_glb_ret%NOTFOUND THEN
9310                 l_total_on_hold := 0 ;
9311                 OE_DEBUG_PUB.Add('No return global orders on hold amount found ');
9312               END IF;
9313               CLOSE cust_ord_on_hold_glb_ret ;
9314             END IF;
9315 
9316           END IF; -----end of checking if returns are included
9317 
9318           IF l_freight_charges_flag ='Y'
9319           THEN
9320             --
9321             -- Get header freight if the site is the same as the given site
9322             -- or the site belong to the same customer as the given site
9323             -- if the credit level is CUSTOMER.
9324             --
9325 
9326             ----added for Returns
9327             IF l_include_returns_flag='N'
9328             THEN
9329               -----returns are not included
9330 
9331               IF G_debug_flag = 'Y'
9332               THEN
9333                 OE_DEBUG_PUB.Add('  cust_no_hold_hdr_freight1_glb ');
9334               END IF;
9335 
9336               OPEN cust_no_hold_hdr_freight1_glb
9337                   (p_usage_curr(i).usage_curr_code);
9338 
9339               FETCH cust_no_hold_hdr_freight1_glb
9340                     INTO l_no_hold_hdr_freight1;
9341 
9342               IF cust_no_hold_hdr_freight1_glb%NOTFOUND
9343               THEN
9344                 l_no_hold_hdr_freight1 := 0 ;
9345                 IF G_debug_flag = 'Y'
9346                 THEN
9347                   OE_DEBUG_PUB.Add('No orders without hold freight1 amount found ');
9348                 END IF;
9349               END IF;
9350 
9351               CLOSE cust_no_hold_hdr_freight1_glb ;
9352 
9353               IF G_debug_flag = 'Y'
9354               THEN
9355                 OE_DEBUG_PUB.Add('  cust_no_hold_hdr_freight2_glb ');
9356               END IF;
9357 
9358               OPEN cust_no_hold_hdr_freight2_glb
9359                 (p_usage_curr(i).usage_curr_code);
9360 
9361               FETCH cust_no_hold_hdr_freight2_glb
9362                 INTO l_no_hold_hdr_freight2;
9363 
9364               IF cust_no_hold_hdr_freight2_glb%NOTFOUND
9365               THEN
9366                 l_hold_hdr_freight2 := 0 ;
9367                 IF G_debug_flag = 'Y'
9368                 THEN
9369                   OE_DEBUG_PUB.Add('No orders without hold freight2 amount found');
9370                 END IF;
9371               END IF;
9372               CLOSE cust_no_hold_hdr_freight2_glb ;
9373 
9374               -- If the l_need_exposure_details flag enabled, get the
9375               -- OM amount on hold
9376               IF l_need_exposure_details = 'Y' THEN
9377                 IF G_debug_flag = 'Y' THEN
9378                   OE_DEBUG_PUB.Add('  cust_hold_hdr_freight1_glb  ');
9379                 END IF;
9380 
9381                 OPEN  cust_hold_hdr_freight1_glb
9382                       (p_usage_curr(i).usage_curr_code);
9383                 FETCH cust_hold_hdr_freight1_glb
9384                 INTO  l_hold_hdr_freight1;
9385 
9386                 IF cust_hold_hdr_freight1_glb%NOTFOUND THEN
9387                   l_hold_hdr_freight1 := 0 ;
9388                   OE_DEBUG_PUB.Add
9389                     ('No orders on hold with freight1 amount found ');
9390                 END IF;
9391 
9392                 CLOSE cust_hold_hdr_freight1_glb;
9393 
9394                 -- get header freight2 on hold
9395                 IF G_debug_flag = 'Y' THEN
9396                   OE_DEBUG_PUB.Add('  cust_hold_hdr_freight2_glb  ');
9397                 END IF;
9398 
9399                 OPEN  cust_hold_hdr_freight2_glb
9400                     (p_usage_curr(i).usage_curr_code);
9401                 FETCH cust_hold_hdr_freight2_glb
9402                 INTO  l_hold_hdr_freight2;
9403 
9404                 IF cust_hold_hdr_freight2_glb%NOTFOUND THEN
9405                   l_hold_hdr_freight2 := 0 ;
9406                   OE_DEBUG_PUB.Add
9407                     ('No orders on hold with freight2 amount found ');
9408                 END IF;
9409 
9410                 CLOSE cust_hold_hdr_freight2_glb;
9411               END IF;
9412             ELSE
9413 
9414               -----returns are included
9415 
9416               IF G_debug_flag = 'Y'
9417               THEN
9418                 OE_DEBUG_PUB.Add('open  cust_no_hold_hdr_fr1_glb_ret ');
9419               END IF;
9420 
9421               OPEN cust_no_hold_hdr_fr1_glb_ret
9422                   (p_usage_curr(i).usage_curr_code);
9423 
9424               FETCH cust_no_hold_hdr_fr1_glb_ret
9425                     INTO l_no_hold_hdr_freight1;
9426 
9427               IF cust_no_hold_hdr_fr1_glb_ret%NOTFOUND
9428               THEN
9429                 l_no_hold_hdr_freight1 := 0 ;
9430                 IF G_debug_flag = 'Y'
9431                 THEN
9432                   OE_DEBUG_PUB.Add('No orders without hold freight1 amount found ');
9433                 END IF;
9434               END IF;
9435 
9436               CLOSE cust_no_hold_hdr_fr1_glb_ret ;
9437 
9438               IF G_debug_flag = 'Y'
9439               THEN
9440                 OE_DEBUG_PUB.Add('open  cust_no_hold_hdr_fr2_glb_ret ');
9441               END IF;
9442 
9443               OPEN cust_no_hold_hdr_fr2_glb_ret
9444                 (p_usage_curr(i).usage_curr_code);
9445 
9446               FETCH cust_no_hold_hdr_fr2_glb_ret
9447                 INTO l_no_hold_hdr_freight2;
9448 
9449               IF cust_no_hold_hdr_fr2_glb_ret%NOTFOUND
9450               THEN
9451                 l_hold_hdr_freight2 := 0 ;
9452                 IF G_debug_flag = 'Y'
9453                 THEN
9454                   OE_DEBUG_PUB.Add('No orders without hold freight2 amount found');
9455                 END IF;
9456               END IF;
9457               CLOSE cust_no_hold_hdr_fr2_glb_ret ;
9458 
9459               -- If the l_need_exposure_details flag enabled, get the
9460               -- OM amount on hold
9461               IF l_need_exposure_details = 'Y' THEN
9462                 IF G_debug_flag = 'Y' THEN
9463                   OE_DEBUG_PUB.Add('  cust_hold_hdr_fr1_glb_ret  ');
9464                 END IF;
9465 
9466                 OPEN  cust_hold_hdr_fr1_glb_ret
9467                       (p_usage_curr(i).usage_curr_code);
9468                 FETCH cust_hold_hdr_fr1_glb_ret
9469                 INTO  l_hold_hdr_freight1;
9470 
9471                 IF cust_hold_hdr_fr1_glb_ret%NOTFOUND THEN
9472                   l_hold_hdr_freight1 := 0 ;
9473                   OE_DEBUG_PUB.Add
9474                     ('No orders on hold with freight1 amount found ');
9475                 END IF;
9476 
9477                 CLOSE cust_hold_hdr_fr1_glb_ret;
9478 
9479                 -- get header freight2 on hold
9480                 IF G_debug_flag = 'Y' THEN
9481                   OE_DEBUG_PUB.Add('  cust_hold_hdr_fr2_glb_ret  ');
9482                 END IF;
9483 
9484                 OPEN  cust_hold_hdr_fr2_glb_ret
9485                     (p_usage_curr(i).usage_curr_code);
9486                 FETCH cust_hold_hdr_fr2_glb_ret
9487                 INTO  l_hold_hdr_freight2;
9488 
9489                 IF cust_hold_hdr_fr2_glb_ret%NOTFOUND THEN
9490                   l_hold_hdr_freight2 := 0 ;
9491                   OE_DEBUG_PUB.Add
9492                     ('No orders on hold with freight2 amount found ');
9493                 END IF;
9494 
9495                 CLOSE cust_hold_hdr_fr2_glb_ret;
9496               END IF;
9497 
9498             END IF; ---end of checking if returns are included
9499 
9500           END IF; -- freight = Y
9501 
9502         ELSE  -- uninvoiced orders not on hold - Non global
9503 
9504           ----added for Returns
9505           IF l_include_returns_flag = 'N'
9506           THEN
9507             -----returns are not included
9508 
9509             IF G_debug_flag = 'Y'
9510             THEN
9511               OE_DEBUG_PUB.Add('  cust_orders_not_on_hold ');
9512             END IF;
9513 
9514             OPEN cust_orders_not_on_hold (p_usage_curr(i).usage_curr_code);
9515             FETCH cust_orders_not_on_hold INTO l_total_no_hold;
9516 
9517             IF cust_orders_not_on_hold%NOTFOUND
9518             THEN
9519               l_total_no_hold := 0 ;
9520               IF G_debug_flag = 'Y'
9521               THEN
9522                 OE_DEBUG_PUB.Add('No orders not on hold amount found ');
9523               END IF;
9524             END IF;
9525 
9526             CLOSE cust_orders_not_on_hold;
9527 
9528             -- If the l_need_exposure_details flag enabled, get the
9529             -- OM amount on hold
9530             IF l_need_exposure_details = 'Y' THEN
9531               IF G_debug_flag = 'Y' THEN
9532                  OE_DEBUG_PUB.Add('  cust_orders_on_hold ');
9533               END IF;
9534 
9535               OPEN cust_orders_on_hold (p_usage_curr(i).usage_curr_code);
9536               FETCH cust_orders_on_hold INTO l_total_on_hold;
9537 
9538               IF cust_orders_on_hold%NOTFOUND THEN
9539                 l_total_on_hold := 0 ;
9540                 IF G_debug_flag = 'Y' THEN
9541                   OE_DEBUG_PUB.Add('No customer orders on hold amount found ');
9542                 END IF;
9543               END IF;
9544               CLOSE cust_orders_on_hold;
9545             END IF;
9546 
9547           ELSE
9548             -----returns are not included
9549 
9550             IF G_debug_flag = 'Y'
9551             THEN
9552               OE_DEBUG_PUB.Add('  cust_ord_not_on_hold_ret ');
9553             END IF;
9554 
9555             OPEN cust_ord_not_on_hold_ret (p_usage_curr(i).usage_curr_code);
9556             FETCH cust_ord_not_on_hold_ret INTO l_total_no_hold;
9557 
9558             IF cust_ord_not_on_hold_ret%NOTFOUND
9559             THEN
9560               l_total_no_hold := 0 ;
9561               IF G_debug_flag = 'Y'
9562               THEN
9563                 OE_DEBUG_PUB.Add('No orders not on hold amount found ');
9564               END IF;
9565             END IF;
9566 
9567             CLOSE cust_ord_not_on_hold_ret;
9568 
9569             -- If the l_need_exposure_details flag enabled, get the
9570             -- OM amount on hold
9571             IF l_need_exposure_details = 'Y' THEN
9572               IF G_debug_flag = 'Y' THEN
9573                  OE_DEBUG_PUB.Add('  cust_ord_on_hold_ret ');
9574               END IF;
9575 
9576               OPEN cust_ord_on_hold_ret (p_usage_curr(i).usage_curr_code);
9577               FETCH cust_ord_on_hold_ret INTO l_total_on_hold;
9578 
9579               IF cust_ord_on_hold_ret%NOTFOUND THEN
9580                 l_total_on_hold := 0 ;
9581                 IF G_debug_flag = 'Y' THEN
9582                   OE_DEBUG_PUB.Add('No customer orders on hold amount found ');
9583                 END IF;
9584               END IF;
9585               CLOSE cust_ord_on_hold_ret;
9586             END IF;
9587 
9588           END IF; -----end of checking if returns are included
9589 
9590           IF l_freight_charges_flag ='Y'
9591           THEN
9592             --
9593             -- Get header freight if the site is the same as the given site
9594             -- or the site belong to the same customer as the given site
9595             -- if the credit level is CUSTOMER.
9596             --
9597             ----added for Returns
9598             IF l_include_returns_flag='N'
9599             THEN
9600               -----returns are not included
9601 
9602               IF G_debug_flag = 'Y'
9603               THEN
9604                 OE_DEBUG_PUB.Add('  cust_no_hold_hdr_freight1 ');
9605               END IF;
9606 
9607               OPEN cust_no_hold_hdr_freight1(p_usage_curr(i).usage_curr_code);
9608               FETCH cust_no_hold_hdr_freight1 INTO l_no_hold_hdr_freight1;
9609 
9610               IF cust_no_hold_hdr_freight1%NOTFOUND
9611               THEN
9612                 l_no_hold_hdr_freight1 := 0 ;
9613                 IF G_debug_flag = 'Y'
9614                 THEN
9615                   OE_DEBUG_PUB.Add('No orders without hold freight1 amount found ');
9616                 END IF;
9617               END IF;
9618 
9619               CLOSE cust_no_hold_hdr_freight1;
9620 
9621               IF G_debug_flag = 'Y'
9622               THEN
9623                 OE_DEBUG_PUB.Add('  cust_no_hold_hdr_freight2 ');
9624               END IF;
9625 
9626               OPEN cust_no_hold_hdr_freight2(p_usage_curr(i).usage_curr_code);
9627               FETCH cust_no_hold_hdr_freight2 INTO l_no_hold_hdr_freight2;
9628 
9629               IF cust_no_hold_hdr_freight2%NOTFOUND
9630               THEN
9631                 l_no_hold_hdr_freight2 := 0 ;
9632                 IF G_debug_flag = 'Y'
9633                 THEN
9634                   OE_DEBUG_PUB.Add('No orders without hold freight2 amount found');
9635                 END IF;
9636               END IF;
9637               CLOSE cust_no_hold_hdr_freight2;
9638 
9639               -- If the l_need_exposure_details flag enabled, get the
9640               -- OM amount on hold
9641               IF l_need_exposure_details = 'Y' THEN
9642                 --
9643                 -- Get cust on hold header freight1
9644                 --
9645                 IF G_debug_flag = 'Y' THEN
9646                   OE_DEBUG_PUB.Add('  cust_hold_hdr_freight1 ');
9647                 END IF;
9648 
9649                 OPEN cust_hold_hdr_freight1(p_usage_curr(i).usage_curr_code);
9650                 FETCH cust_hold_hdr_freight1 INTO l_hold_hdr_freight1;
9651 
9652                 IF cust_hold_hdr_freight1%NOTFOUND THEN
9653                   l_hold_hdr_freight1 := 0 ;
9654                   IF G_debug_flag = 'Y' THEN
9655                     OE_DEBUG_PUB.Add('No orders with hold freight1 amount found ');
9656                   END IF;
9657                 END IF;
9658 
9659                 CLOSE cust_hold_hdr_freight1;
9660                 --
9661                 -- Get cust on hold header freight2
9662                 --
9663                 IF G_debug_flag = 'Y' THEN
9664                   OE_DEBUG_PUB.Add('  cust_hold_hdr_freight2 ');
9665                 END IF;
9666 
9667                 OPEN cust_hold_hdr_freight2(p_usage_curr(i).usage_curr_code);
9668                 FETCH cust_hold_hdr_freight2 INTO l_hold_hdr_freight2;
9669 
9670                 IF cust_hold_hdr_freight2%NOTFOUND THEN
9671                   l_hold_hdr_freight2 := 0 ;
9672                   IF G_debug_flag = 'Y' THEN
9673                     OE_DEBUG_PUB.Add('No orders with hold freight2 amount found ');
9674                   END IF;
9675                 END IF;
9676 
9677                 CLOSE cust_hold_hdr_freight2;
9678               END IF; -- need details
9679 
9680             ELSE
9681               -----returns are included
9682 
9683               IF G_debug_flag = 'Y'
9684               THEN
9685                 OE_DEBUG_PUB.Add('  cust_no_hold_hdr_freight1_ret ');
9686               END IF;
9687 
9688               OPEN cust_no_hold_hdr_freight1_ret(p_usage_curr(i).usage_curr_code);
9689               FETCH cust_no_hold_hdr_freight1_ret INTO l_no_hold_hdr_freight1;
9690 
9691               IF cust_no_hold_hdr_freight1_ret%NOTFOUND
9692               THEN
9693                 l_no_hold_hdr_freight1 := 0 ;
9694                 IF G_debug_flag = 'Y'
9695                 THEN
9696                   OE_DEBUG_PUB.Add('No orders without hold freight1 amount found ');
9697                 END IF;
9698               END IF;
9699 
9700               CLOSE cust_no_hold_hdr_freight1_ret;
9701 
9702               IF G_debug_flag = 'Y'
9703               THEN
9704                 OE_DEBUG_PUB.Add('open  cust_no_hold_hdr_freight2_ret ');
9705               END IF;
9706 
9707               OPEN cust_no_hold_hdr_freight2_ret(p_usage_curr(i).usage_curr_code);
9708               FETCH cust_no_hold_hdr_freight2_ret INTO l_no_hold_hdr_freight2;
9709 
9710               IF cust_no_hold_hdr_freight2_ret%NOTFOUND
9711               THEN
9712                 l_no_hold_hdr_freight2 := 0 ;
9713                 IF G_debug_flag = 'Y'
9714                 THEN
9715                   OE_DEBUG_PUB.Add('No orders without hold freight2 amount found');
9716                 END IF;
9717               END IF;
9718 
9719               CLOSE cust_no_hold_hdr_freight2_ret;
9720 
9721 
9722               -- If the l_need_exposure_details flag enabled, get the
9723               -- OM amount on hold
9724               IF l_need_exposure_details = 'Y' THEN
9725                 --
9726                 -- Get cust on hold header freight1 with returns
9727                 --
9728                 IF G_debug_flag = 'Y' THEN
9729                   OE_DEBUG_PUB.Add('  cust_hold_hdr_freight1_ret ');
9730                 END IF;
9731 
9732                 OPEN cust_hold_hdr_freight1_ret(p_usage_curr(i).usage_curr_code);
9733                 FETCH cust_hold_hdr_freight1_ret INTO l_hold_hdr_freight1;
9734 
9735                 IF cust_hold_hdr_freight1_ret%NOTFOUND THEN
9736                   l_hold_hdr_freight1 := 0 ;
9737                   IF G_debug_flag = 'Y' THEN
9738                     OE_DEBUG_PUB.Add('No orders with hold freight1 amount found ');
9739                   END IF;
9740                 END IF;
9741 
9742                 CLOSE cust_hold_hdr_freight1_ret;
9743                 --
9744                 -- Get cust on hold header freight2
9745                 --
9746                 IF G_debug_flag = 'Y' THEN
9747                   OE_DEBUG_PUB.Add('  cust_hold_hdr_freight2_ret ');
9748                 END IF;
9749 
9750                 OPEN cust_hold_hdr_freight2_ret(p_usage_curr(i).usage_curr_code);
9751                 FETCH cust_hold_hdr_freight2_ret INTO l_hold_hdr_freight2;
9752 
9753                 IF cust_hold_hdr_freight2_ret%NOTFOUND THEN
9754                   l_hold_hdr_freight2 := 0 ;
9755                   IF G_debug_flag = 'Y' THEN
9756                     OE_DEBUG_PUB.Add('No orders with hold freight2 amount found ');
9757                   END IF;
9758                 END IF;
9759 
9760                 CLOSE cust_hold_hdr_freight2_ret;
9761               END IF; -- need details
9762             END IF; ---end of checking if returns are included
9763 
9764           END IF; -- include freight charges
9765         END IF; -- is global
9766       END IF;  -- Orders on hold
9767 
9768     END ;
9769   ELSE
9770     IF G_debug_flag = 'Y'
9771     THEN
9772       OE_DEBUG_PUB.Add(' No OM Exposure calculation ',1);
9773     END IF;
9774   END IF; -- Uninvoiced Orders
9775 
9776 
9777 ----------------------- End OM Exposure ------------------
9778 
9779     l_cum_total_from_ar := l_cum_total_from_ar
9780                          + NVL(l_total_from_ar,0)
9781                          + NVL(l_total_from_br,0) ;
9782 
9783     l_cum_payments_at_risk := l_cum_payments_at_risk
9784                          + NVL(l_payments_at_risk,0)
9785                          + NVL(l_payments_at_risk_br ,0);
9786 
9787     l_cum_total_on_order := l_cum_total_on_order
9788                          + NVL(l_total_on_order,0)
9789                          + NVL(l_uninvoiced_hdr_freight1,0)
9790                          + NVL(l_uninvoiced_hdr_freight2,0);
9791 
9792     l_cum_total_no_hold := l_cum_total_no_hold
9793                          + NVL(l_total_no_hold,0)
9794                          + NVL(l_no_hold_hdr_freight1,0)
9795                          + NVL(l_no_hold_hdr_freight2,0);
9796 
9797     l_cum_total_on_hold := l_cum_total_on_hold
9798                          + NVL(l_total_on_hold,0)
9799                          + NVL(l_hold_hdr_freight1,0)
9800                          + NVL(l_hold_hdr_freight2,0);
9801 
9802     l_cum_total_commitment := l_cum_total_commitment
9803                             + NVL(l_total_commitment,0) ;
9804 
9805     IF l_orders_on_hold_flag = 'Y' THEN
9806       l_cum_uninv_order_total := l_cum_total_on_order;
9807     ELSE
9808       l_cum_uninv_order_total := l_cum_total_no_hold;
9809     END IF;
9810 
9811     l_usage_total_exposure
9812                      := NVL(l_cum_total_from_ar,0)
9813                         + NVL(l_cum_payments_at_risk,0)
9814                         + NVL(l_cum_uninv_order_total,0)
9815                         - NVL(l_cum_total_commitment,0)
9816                         + NVL(l_cum_external_exposure,0) ;
9817 
9818     --
9819     -- Set the detail output variables only when detail is selected.
9820     --
9821     IF l_need_exposure_details = 'Y' THEN
9822       -- Add hold amount to order amount if hold flag is not set
9823       -- because the uninvoiced order amount is not available.
9824       IF l_orders_on_hold_flag = 'Y' THEN
9825         l_cum_order_amount := l_cum_uninv_order_total -
9826                               NVL(l_cum_total_commitment,0);
9827       ELSE
9828         l_cum_order_amount :=  l_cum_uninv_order_total
9829                              - NVL(l_cum_total_commitment,0)
9830                              + l_cum_total_on_hold;
9831       END IF;
9832 
9833       l_cum_order_hold_amount := l_cum_total_on_hold;
9834       l_cum_ar_amount    := NVL(l_cum_total_from_ar,0) +
9835                             NVL(l_cum_payments_at_risk,0) ;
9836     END IF;
9837 
9838     IF G_debug_flag = 'Y'
9839     THEN
9840 
9841       OE_DEBUG_PUB.ADD(' l_usage_total_exposure    = '
9842                     || l_usage_total_exposure );
9843       OE_DEBUG_PUB.ADD(' l_cum_total_from_ar       = '
9844                     || l_cum_total_from_ar );
9845       OE_DEBUG_PUB.ADD(' l_total_from_ar           = '
9846                     || l_total_from_ar);
9847       OE_DEBUG_PUB.ADD(' l_total_from_br           = '
9848                     || l_total_from_br);
9849       OE_DEBUG_PUB.ADD(' l_cum_payments_at_risk    = '
9850                     || l_cum_payments_at_risk );
9851       OE_DEBUG_PUB.ADD(' l_payments_at_risk        = '
9852                     || l_payments_at_risk);
9853       OE_DEBUG_PUB.ADD(' l_payments_at_risk_br     = '
9854                     || l_payments_at_risk_br);
9855       OE_DEBUG_PUB.ADD(' l_cum_total_on_order      = '
9856                     || l_cum_total_on_order );
9857       OE_DEBUG_PUB.ADD(' l_total_on_order          = '
9858                     || l_total_on_order );
9859       OE_DEBUG_PUB.ADD(' l_uninvoiced_hdr_freight1 = '
9860                     || l_uninvoiced_hdr_freight1 );
9861       OE_DEBUG_PUB.ADD(' l_uninvoiced_hdr_freight2 = '
9862                     || l_uninvoiced_hdr_freight2 );
9863       OE_DEBUG_PUB.ADD(' l_cum_total_commitment      = '
9864                     || l_cum_total_commitment );
9865       OE_DEBUG_PUB.ADD(' l_total_commitment          = '
9866                     || l_total_commitment );
9867       OE_DEBUG_PUB.ADD(' l_usage_total_exposure    = '
9868                     || l_usage_total_exposure );
9869 
9870       -- no hold
9871       OE_DEBUG_PUB.ADD(' l_cum_total_no_hold       = '
9872                     || l_cum_total_no_hold );
9873       OE_DEBUG_PUB.ADD(' l_total_no_hold           = '
9874                     || l_total_no_hold );
9875       OE_DEBUG_PUB.ADD(' l_no_hold_hdr_freight1    = '
9876                     || l_no_hold_hdr_freight1 );
9877       OE_DEBUG_PUB.ADD(' l_no_hold_hdr_freight2    = '
9878                       || l_no_hold_hdr_freight2);
9879       -- external
9880       OE_DEBUG_PUB.ADD(' l_external_exposure       = '
9881                     || l_external_exposure );
9882       OE_DEBUG_PUB.ADD(' l_cum_external_exposure   = '
9883                     || l_cum_external_exposure );
9884       -- details
9885       OE_DEBUG_PUB.ADD(' l_cum_total_on_hold       = '
9886                     || l_cum_total_on_hold );
9887       OE_DEBUG_PUB.ADD(' l_total_on_hold           = '
9888                     || l_total_on_hold );
9889       OE_DEBUG_PUB.ADD(' l_hold_hdr_freight1       = '
9890                     || l_hold_hdr_freight1 );
9891       OE_DEBUG_PUB.ADD(' l_hold_hdr_freight2       = '
9892                     || l_hold_hdr_freight2);
9893       OE_DEBUG_PUB.ADD(' l_cum_order_amount        = '
9894                     || l_cum_order_amount );
9895       OE_DEBUG_PUB.ADD(' l_cum_order_hold_amount   = '
9896                     || l_cum_order_hold_amount );
9897       OE_DEBUG_PUB.ADD(' l_cum_ar_amount           = '
9898                     || l_cum_ar_amount);
9899 
9900       OE_DEBUG_PUB.ADD(' Call currency conversion for exposure  ' );
9901       OE_DEBUG_PUB.Add(' GL_CURRENCY = '||
9902          OE_Credit_Engine_GRP.GL_currency );
9903     END IF;
9904 
9905 
9906     IF OE_Credit_Engine_GRP.GL_currency IS NULL
9907     THEN
9908       OE_DEBUG_PUB.ADD(' Call GET_GL_currency ');
9909 
9910       OE_Credit_Engine_GRP.GL_currency :=
9911                    OE_CREDIT_CHECK_UTIL.GET_GL_currency ;
9912 
9913           OE_DEBUG_PUB.ADD(' GL_CURRENCY  after = '
9914                  || OE_Credit_Engine_GRP.GL_currency );
9915 
9916     END IF;
9917 
9918     l_limit_total_exposure :=
9919     OE_CREDIT_CHECK_UTIL.CONVERT_CURRENCY_AMOUNT
9920       ( p_amount	            => l_usage_total_exposure
9921       , p_transactional_currency  => p_usage_curr(i).usage_curr_code
9922       , p_limit_currency	    => p_limit_curr_code
9923       , p_functional_currency     => OE_Credit_Engine_GRP.GL_currency
9924       , p_conversion_date	    => SYSDATE
9925       , p_conversion_type	    => p_credit_check_rule_rec.conversion_type
9926       );
9927 
9928     l_total_exposure := NVL(l_total_exposure,0)
9929                       + NVL(l_limit_total_exposure,0) ;
9930 
9931     IF p_need_exposure_details = 'Y'
9932     THEN
9933       IF G_debug_flag = 'Y'
9934       THEN
9935         oe_debug_pub.add( ' Into p_need_exposure_details ');
9936       END IF;
9937 
9938       l_limit_cum_order_amount :=
9939         OE_CREDIT_CHECK_UTIL.CONVERT_CURRENCY_AMOUNT
9940         ( p_amount                  => l_cum_order_amount
9941         , p_transactional_currency  => p_usage_curr(i).usage_curr_code
9942         , p_limit_currency          => p_limit_curr_code
9943         , p_functional_currency     => OE_Credit_Engine_GRP.GL_currency
9944         , p_conversion_date         => SYSDATE
9945         , p_conversion_type         =>
9946                                     p_credit_check_rule_rec.conversion_type
9947         );
9948 
9949 
9950       l_limit_cum_order_hold_amount :=
9951         OE_CREDIT_CHECK_UTIL.CONVERT_CURRENCY_AMOUNT
9952            ( p_amount                  =>l_cum_order_hold_amount
9953            , p_transactional_currency  => p_usage_curr(i).usage_curr_code
9954            , p_limit_currency          => p_limit_curr_code
9955            , p_functional_currency     => OE_Credit_Engine_GRP.GL_currency
9956            , p_conversion_date         => SYSDATE
9957            , p_conversion_type         =>
9958                  p_credit_check_rule_rec.conversion_type
9959            );
9960 
9961       l_limit_cum_ar_amount :=
9962         OE_CREDIT_CHECK_UTIL.CONVERT_CURRENCY_AMOUNT
9963            ( p_amount                  => l_cum_ar_amount
9964            , p_transactional_currency  => p_usage_curr(i).usage_curr_code
9965            , p_limit_currency          => p_limit_curr_code
9966            , p_functional_currency     => OE_Credit_Engine_GRP.GL_currency
9967            , p_conversion_date         => SYSDATE
9968            , p_conversion_type         =>
9969               p_credit_check_rule_rec.conversion_type
9970            );
9971 
9972       l_order_amount := l_order_amount +
9973                NVL(l_limit_cum_order_amount,0) ;
9974 
9975       l_order_hold_amount := l_order_hold_amount +
9976                 NVL(l_limit_cum_order_hold_amount,0) ;
9977 
9978       l_ar_amount := l_ar_amount +
9979                 NVL(l_limit_cum_ar_amount,0) ;
9980 
9981     END IF;
9982 
9983     IF G_debug_flag = 'Y'
9984     THEN
9985       OE_DEBUG_PUB.ADD(' l_limit_total_exposure = '
9986                       || l_limit_total_exposure );
9987       OE_DEBUG_PUB.ADD(' l_total_exposure       = '|| l_total_exposure );
9988     END IF;
9989 
9990     l_limit_total_exposure     := 0;
9991     l_usage_total_exposure     := 0;
9992     l_cum_uninv_order_total    := 0;
9993 
9994     l_cum_total_on_order       := 0;
9995     l_total_on_order           := 0;
9996     l_uninvoiced_hdr_freight1  := 0;
9997     l_uninvoiced_hdr_freight2  := 0;
9998 
9999     l_cum_total_commitment     := 0;
10000     l_total_commitment         := 0;
10001 
10002     l_cum_payments_at_risk     := 0;
10003     l_payments_at_risk         := 0;
10004     l_payments_at_risk_br      := 0;
10005 
10006     l_cum_total_from_ar        := 0;
10007     l_total_from_ar            := 0;
10008     l_total_from_br            := 0;
10009 
10010     l_cum_external_exposure    := 0;
10011     l_external_exposure        := 0;
10012 
10013     l_cum_total_no_hold        := 0;
10014     l_total_no_hold            := 0;
10015     l_no_hold_hdr_freight1     := 0;
10016     l_no_hold_hdr_freight2     := 0;
10017 
10018     l_cum_total_on_hold        := 0;
10019     l_total_on_hold            := 0;
10020     l_hold_hdr_freight1        := 0;
10021     l_hold_hdr_freight2        := 0;
10022 
10023     l_cum_order_amount         := 0;
10024     l_cum_order_hold_amount    := 0 ;
10025     l_cum_ar_amount            := 0 ;
10026 
10027     l_limit_cum_order_amount           := 0;
10028     l_limit_cum_order_hold_amount      := 0 ;
10029     l_limit_cum_ar_amount              := 0 ;
10030 
10031     IF G_debug_flag = 'Y'
10032     THEN
10033       OE_DEBUG_PUB.Add('--------------------------');
10034       OE_DEBUG_PUB.Add(' ');
10035     END IF;
10036 
10037     END LOOP ; -- CURRENCY LOOP
10038 
10039   ELSE -- SITE
10040     IF G_debug_flag = 'Y'
10041     THEN
10042       OE_DEBUG_PUB.Add('Get_order_Exposure SITE : ',1);
10043     END IF;
10044 
10045     l_current_usage_cur := NULL ;
10046 
10047     FOR i IN 1..p_usage_curr.count
10048     LOOP
10049       l_current_usage_cur := NULL ;
10050 
10051       IF G_debug_flag = 'Y'
10052       THEN
10053         OE_DEBUG_PUB.ADD('  ');
10054         OE_DEBUG_PUB.ADD('############################### ');
10055         OE_DEBUG_PUB.ADD('USAGE CURR = '|| p_usage_curr(i).usage_curr_code );
10056         OE_DEBUG_PUB.ADD('############################### ');
10057         OE_DEBUG_PUB.ADD('  ');
10058         OE_DEBUG_PUB.ADD('l_current_usage_cur = '||
10059                   l_current_usage_cur );
10060         OE_DEBUG_PUB.ADD('  ');
10061         OE_DEBUG_PUB.ADD('.');
10062       END IF;
10063 
10064       l_current_usage_cur := p_usage_curr(i).usage_curr_code ;
10065 
10066       -- get site external exposure
10067       IF l_incl_external_exposure_flag = 'Y'
10068       THEN
10069         OE_DEBUG_PUB.Add(' Get site external exposure balance ');
10070 
10071         OPEN site_external_exposure_csr (p_usage_curr(i).usage_curr_code);
10072         FETCH site_external_exposure_csr INTO l_external_exposure;
10073         IF site_external_exposure_csr%NOTFOUND
10074         THEN
10075           OE_DEBUG_PUB.Add(' No external exposure balance found');
10076           l_external_exposure := 0;
10077         END IF;
10078         CLOSE site_external_exposure_csr;
10079       END IF;
10080       l_cum_external_exposure := l_cum_external_exposure +
10081                                  NVL(l_external_exposure, 0);
10082 
10083       IF l_open_ar_balance_flag = 'Y'
10084       THEN
10085         IF G_debug_flag = 'Y'
10086         THEN
10087           OE_DEBUG_PUB.Add(' Get site_ar_balance ');
10088         END IF;
10089 
10090         OPEN site_ar_balance (p_usage_curr(i).usage_curr_code);
10091         FETCH site_ar_balance INTO l_total_from_ar;
10092         IF site_ar_balance%NOTFOUND
10093         THEN
10094           l_total_from_ar := 0 ;
10095           OE_DEBUG_PUB.Add(' No site_ar_balance found ');
10096         END IF;
10097 
10098         CLOSE site_ar_balance;
10099       END IF;
10100 
10101       IF l_include_risk_flag = 'Y'
10102       THEN
10103         IF G_debug_flag = 'Y'
10104         THEN
10105           OE_DEBUG_PUB.Add(' Get site_pay_risk ');
10106         END IF;
10107         OPEN site_pay_risk (p_usage_curr(i).usage_curr_code);
10108         FETCH site_pay_risk INTO l_payments_at_risk;
10109         IF site_pay_risk%NOTFOUND
10110         THEN
10111           l_payments_at_risk := 0 ;
10112           OE_DEBUG_PUB.Add(' No site_pay_risk found ');
10113         END IF;
10114 
10115         CLOSE site_pay_risk;
10116       END IF;
10117 
10118       l_drawee_site_use_id := NULL ;
10119 ----------------------------- BR ------------------------
10120       IF l_open_ar_balance_flag = 'Y'
10121       THEN
10122         l_drawee_site_use_id :=
10123            oe_credit_check_util.get_drawee_site_use_id ( p_site_use_id);
10124       END IF;
10125 
10126       IF G_debug_flag = 'Y'
10127       THEN
10128         OE_DEBUG_PUB.Add(' l_drawee_site_use_id ==> '|| l_drawee_site_use_id );
10129       END IF;
10130 
10131       IF l_drawee_site_use_id is NOT NULL
10132       THEN
10133         IF l_open_ar_balance_flag = 'Y'
10134         THEN
10135           IF G_debug_flag = 'Y'
10136           THEN
10137              OE_DEBUG_PUB.Add(' Get site_br_balance ');
10138           END IF;
10139           OPEN site_br_balance (p_usage_curr(i).usage_curr_code);
10140           FETCH site_br_balance INTO l_total_from_br;
10141           IF site_br_balance%NOTFOUND
10142           THEN
10143             l_total_from_br := 0 ;
10144             OE_DEBUG_PUB.Add(' No site_br_balance found ');
10145           END IF;
10146 
10147           CLOSE site_br_balance;
10148         END IF;
10149 
10150         IF l_include_risk_flag = 'Y'
10151         THEN
10152           IF G_debug_flag = 'Y'
10153           THEN
10154             OE_DEBUG_PUB.Add(' Get site_br_pay_risk ');
10155           END IF;
10156           OPEN site_br_pay_risk (p_usage_curr(i).usage_curr_code);
10157           FETCH site_br_pay_risk INTO l_payments_at_risk_br;
10158           IF site_br_pay_risk%NOTFOUND
10159           THEN
10160             l_payments_at_risk_br := 0 ;
10161             OE_DEBUG_PUB.Add(' No site_pay_risk found ');
10162           END IF;
10163 
10164           CLOSE site_br_pay_risk;
10165         END IF; --ar
10166       ELSE
10167         IF G_debug_flag = 'Y'
10168         THEN
10169          OE_DEBUG_PUB.Add(' No site BR required ');
10170         END IF;
10171       END IF;
10172 --vto2
10173       IF l_uninvoiced_orders_flag = 'Y'
10174       THEN
10175         BEGIN
10176           IF G_debug_flag = 'Y'
10177           THEN
10178             OE_DEBUG_PUB.Add(' Begin OM Exposure for site ');
10179           END IF;
10180 
10181           IF OE_Commitment_PVT.Do_Commitment_Sequencing THEN
10182             IF G_debug_flag = 'Y'
10183             THEN
10184               OE_DEBUG_PUB.Add('  site_commitments ');
10185             END IF;
10186 
10187             OPEN site_commitment_total (p_usage_curr(i).usage_curr_code);
10188             FETCH site_commitment_total INTO l_total_commitment ;
10189             IF site_commitment_total%NOTFOUND
10190             THEN
10191               l_total_commitment := 0 ;
10192               OE_DEBUG_PUB.Add('No site commitments found ');
10193             END IF;
10194 
10195             CLOSE site_commitment_total ;
10196           END IF;
10197 
10198           IF l_orders_on_hold_flag = 'Y'
10199           THEN
10200 
10201             ----added for Returns
10202             IF l_include_returns_flag='N'
10203             THEN
10204               -----returns are not included
10205 
10206               IF G_debug_flag = 'Y'
10207               THEN
10208                 OE_DEBUG_PUB.Add(' Get site_uninvoiced_orders,site_uninvoiced_orders ');
10209               END IF;
10210 
10211               OPEN site_uninvoiced_orders(p_usage_curr(i).usage_curr_code);
10212               FETCH site_uninvoiced_orders INTO l_total_on_order;
10213 
10214               IF site_uninvoiced_orders%NOTFOUND
10215               THEN
10216                 l_total_on_order := 0 ;
10217                 OE_DEBUG_PUB.Add(' No site_uninvoiced_orders found ');
10218               END IF;
10219 
10220               CLOSE site_uninvoiced_orders;
10221 
10222             ELSE
10223               -----returns are included
10224 
10225               IF G_debug_flag = 'Y'
10226               THEN
10227                 OE_DEBUG_PUB.Add(' open site_uninvoiced_orders_ret ');
10228               END IF;
10229 
10230               OPEN site_uninvoiced_orders_ret(p_usage_curr(i).usage_curr_code);
10231               FETCH site_uninvoiced_orders_ret INTO l_total_on_order;
10232 
10233               IF site_uninvoiced_orders_ret%NOTFOUND
10234               THEN
10235                 l_total_on_order := 0 ;
10236                 OE_DEBUG_PUB.Add(' No site_uninvoiced_orders found ');
10237               END IF;
10238 
10239               CLOSE site_uninvoiced_orders_ret;
10240 
10241             END IF; ---end of checking if returns are included
10242 
10243             IF l_freight_charges_flag ='Y'
10244             THEN
10245 
10246               ----added for Returns
10247               IF l_include_returns_flag='N'
10248               THEN
10249                 -----returns are not included
10250                 IF G_debug_flag = 'Y'
10251                 THEN
10252                   OE_DEBUG_PUB.Add(' Get site_uninv_hdr_freight1 ');
10253                 END IF;
10254 
10255                 OPEN site_uninv_hdr_freight1(p_usage_curr(i).usage_curr_code);
10256                 FETCH site_uninv_hdr_freight1 INTO l_uninvoiced_hdr_freight1;
10257 
10258                 IF site_uninv_hdr_freight1%NOTFOUND
10259                 THEN
10260                   l_uninvoiced_hdr_freight1 := 0 ;
10261                   OE_DEBUG_PUB.Add(' No site_uninv_hdr_freight1 found ');
10262                 END IF;
10263 
10264                 CLOSE site_uninv_hdr_freight1;
10265 
10266                 IF G_debug_flag = 'Y'
10267                 THEN
10268                   OE_DEBUG_PUB.Add(' Get site_uninv_hdr_freight2 ');
10269                 END IF;
10270 
10271                 OPEN site_uninv_hdr_freight2(p_usage_curr(i).usage_curr_code);
10272 
10273                 FETCH site_uninv_hdr_freight2 INTO l_uninvoiced_hdr_freight2;
10274 
10275                 IF site_uninv_hdr_freight2%NOTFOUND
10276                 THEN
10277                   l_uninvoiced_hdr_freight2 := 0 ;
10278                   OE_DEBUG_PUB.Add(' No site_uninv_hdr_freight2 found ');
10279                 END IF;
10280 
10281                 CLOSE site_uninv_hdr_freight2;
10282 
10283               ELSE
10284                 -----returns are included
10285                 IF G_debug_flag = 'Y'
10286                 THEN
10287                   OE_DEBUG_PUB.Add(' Get site_uninv_hdr_freight1_ret ');
10288                 END IF;
10289 
10290                 OPEN site_uninv_hdr_freight1_ret(p_usage_curr(i).usage_curr_code);
10291                 FETCH site_uninv_hdr_freight1_ret INTO l_uninvoiced_hdr_freight1;
10292 
10293                 IF site_uninv_hdr_freight1_ret%NOTFOUND
10294                 THEN
10295                   l_uninvoiced_hdr_freight1 := 0 ;
10296                   OE_DEBUG_PUB.Add(' No site_uninv_hdr_freight1 found ');
10297                 END IF;
10298 
10299                 CLOSE site_uninv_hdr_freight1_ret;
10300 
10301                 IF G_debug_flag = 'Y'
10302                 THEN
10303                   OE_DEBUG_PUB.Add(' Get site_uninv_hdr_freight2_ret ');
10304                 END IF;
10305 
10306                 OPEN site_uninv_hdr_freight2_ret(p_usage_curr(i).usage_curr_code);
10307 
10308                 FETCH site_uninv_hdr_freight2_ret INTO l_uninvoiced_hdr_freight2;
10309 
10310                 IF site_uninv_hdr_freight2_ret%NOTFOUND
10311                 THEN
10312                   l_uninvoiced_hdr_freight2 := 0 ;
10313                   OE_DEBUG_PUB.Add(' No site_uninv_hdr_freight2_ret found ');
10314                 END IF;
10315 
10316                 CLOSE site_uninv_hdr_freight2_ret;
10317 
10318               END IF; ----end of checking if returns are included
10319 
10320             END IF; -- freight = Y
10321           ELSE -- do not include orders on hold
10322 
10323             ----added for Returns
10324             IF l_include_returns_flag='N'
10325             THEN
10326               -----returns are not included
10327 
10328               IF G_debug_flag = 'Y'
10329               THEN
10330                 OE_DEBUG_PUB.Add(' Get site_orders_not_on_hold ');
10331               END IF;
10332 
10333               OPEN site_orders_not_on_hold (p_usage_curr(i).usage_curr_code);
10334 
10335               FETCH site_orders_not_on_hold INTO l_total_no_hold;
10336 
10337               IF site_orders_not_on_hold%NOTFOUND
10338               THEN
10339                 l_total_no_hold := 0 ;
10340                 OE_DEBUG_PUB.Add(' No site orders not on hold found ');
10341               END IF;
10342 
10343               CLOSE site_orders_not_on_hold;
10344               -- Get orders on hold amount if need_exposure_details is enabled
10345               IF l_need_exposure_details = 'Y'
10346               THEN
10347                 IF G_debug_flag = 'Y'
10348                 THEN
10349                   OE_DEBUG_PUB.Add(' Get site_orders_on_hold ');
10350                 END IF;
10351 
10352                 OPEN site_orders_on_hold (p_usage_curr(i).usage_curr_code);
10353                 FETCH site_orders_on_hold INTO l_total_on_hold;
10354 
10355                 IF site_orders_on_hold%NOTFOUND
10356                 THEN
10357                   l_total_on_hold := 0 ;
10358                   OE_DEBUG_PUB.Add(' No site orders on hold found ');
10359                 END IF;
10360 
10361                 CLOSE site_orders_on_hold;
10362               END IF;
10363 
10364             ELSE
10365               -----returns are included
10366 
10367               IF G_debug_flag = 'Y'
10368               THEN
10369                 OE_DEBUG_PUB.Add(' Get site_orders_not_on_hold_ret ');
10370               END IF;
10371 
10372               OPEN site_orders_not_on_hold_ret (p_usage_curr(i).usage_curr_code);
10373 
10374               FETCH site_orders_not_on_hold_ret INTO l_total_no_hold;
10375 
10376               IF site_orders_not_on_hold_ret%NOTFOUND
10377               THEN
10378                 l_total_no_hold := 0 ;
10379                 OE_DEBUG_PUB.Add(' No site orders not on hold found ');
10380               END IF;
10381 
10382               CLOSE site_orders_not_on_hold_ret;
10383 
10384               -- Get orders on hold amount if need_exposure_details is enabled
10385               IF l_need_exposure_details = 'Y'
10386               THEN
10387                 IF G_debug_flag = 'Y'
10388                 THEN
10389                   OE_DEBUG_PUB.Add(' Get site_orders_on_hold_ret ');
10390                 END IF;
10391 
10392                 OPEN site_orders_on_hold_ret(p_usage_curr(i).usage_curr_code);
10393                 FETCH site_orders_on_hold_ret INTO l_total_on_hold;
10394 
10395                 IF site_orders_on_hold_ret%NOTFOUND
10396                 THEN
10397                   l_total_on_hold := 0 ;
10398                   OE_DEBUG_PUB.Add(' No site orders on hold found ');
10399                 END IF;
10400 
10401                 CLOSE site_orders_on_hold_ret;
10402               END IF;
10403             END IF; ----end of checking of returns are included
10404 
10405             IF l_freight_charges_flag ='Y'
10406             THEN
10407               --
10408               -- Get header freight if the site is the same as the given site
10409               -- or the site belong to the same customer as the given site
10410               -- if the credit level is CUSTOMER.
10411               --
10412 
10413               ----added for Returns
10414               IF l_include_returns_flag='N'
10415               THEN
10416                 -----returns are not included
10417                 IF G_debug_flag = 'Y'
10418                 THEN
10419                   OE_DEBUG_PUB.Add(' Get site_no_hold_hdr_freight1 ');
10420                 END IF;
10421 
10422                 OPEN site_no_hold_hdr_freight1(p_usage_curr(i).usage_curr_code);
10423                 FETCH site_no_hold_hdr_freight1 INTO l_no_hold_hdr_freight1;
10424 
10425                 IF site_no_hold_hdr_freight1%NOTFOUND
10426                 THEN
10427                   l_no_hold_hdr_freight1 := 0 ;
10428                   OE_DEBUG_PUB.Add(' No site_no_hold_hdr_freight1  found ');
10429                 END IF;
10430 
10431                 CLOSE site_no_hold_hdr_freight1;
10432 
10433                 IF G_debug_flag = 'Y'
10434                 THEN
10435                   OE_DEBUG_PUB.Add(' Get  site_no_hold_hdr_freight2 ');
10436                 END IF;
10437 
10438                 OPEN site_no_hold_hdr_freight2(p_usage_curr(i).usage_curr_code);
10439 
10440                 FETCH site_no_hold_hdr_freight2 INTO l_no_hold_hdr_freight2;
10441 
10442                 IF site_no_hold_hdr_freight2%NOTFOUND
10443                 THEN
10444                   l_no_hold_hdr_freight2 := 0 ;
10445                   OE_DEBUG_PUB.Add(' No site_no_hold_hdr_freight2 found ');
10446                 END IF;
10447 
10448                 CLOSE site_no_hold_hdr_freight2;
10449 
10450                 -- Get orders on hold amount if need_exposure_details is enabled
10451                 IF l_need_exposure_details = 'Y'
10452                 THEN
10453                   IF G_debug_flag = 'Y'
10454                   THEN
10455                     OE_DEBUG_PUB.Add(' Get site_hold_hdr_freight1 ');
10456                   END IF;
10457 
10458                   OPEN site_hold_hdr_freight1(p_usage_curr(i).usage_curr_code);
10459                   FETCH site_hold_hdr_freight1 INTO l_hold_hdr_freight1;
10460 
10461                   IF site_hold_hdr_freight1%NOTFOUND
10462                   THEN
10463                     l_hold_hdr_freight1 := 0 ;
10464                     OE_DEBUG_PUB.Add(' No site_hold_hdr_freight1  found ');
10465                   END IF;
10466 
10467                   CLOSE site_hold_hdr_freight1;
10468 
10469                   IF G_debug_flag = 'Y'
10470                   THEN
10471                     OE_DEBUG_PUB.Add(' Get site_hold_hdr_freight2 ');
10472                   END IF;
10473 
10474                   OPEN site_hold_hdr_freight2(p_usage_curr(i).usage_curr_code);
10475                   FETCH site_hold_hdr_freight2 INTO l_hold_hdr_freight2;
10476 
10477                   IF site_hold_hdr_freight2%NOTFOUND
10478                   THEN
10479                     l_hold_hdr_freight2 := 0 ;
10480                     OE_DEBUG_PUB.Add(' No site_hold_hdr_freight2 found ');
10481                   END IF;
10482                   CLOSE site_hold_hdr_freight2;
10483                 END IF; -- details freight on hold
10484               ELSE
10485                 -----returns are included
10486                 IF G_debug_flag = 'Y'
10487                 THEN
10488                   OE_DEBUG_PUB.Add(' Get site_no_hold_hdr_freight1_ret ');
10489                 END IF;
10490 
10491                 OPEN site_no_hold_hdr_freight1_ret(p_usage_curr(i).usage_curr_code);
10492                 FETCH site_no_hold_hdr_freight1_ret INTO l_no_hold_hdr_freight1;
10493 
10494                 IF site_no_hold_hdr_freight1_ret%NOTFOUND
10495                 THEN
10496                   l_no_hold_hdr_freight1 := 0 ;
10497                   OE_DEBUG_PUB.Add(' No site_no_hold_hdr_freight1  found ');
10498                 END IF;
10499 
10500                 CLOSE site_no_hold_hdr_freight1_ret;
10501 
10502                 IF G_debug_flag = 'Y'
10503                 THEN
10504                   OE_DEBUG_PUB.Add(' Get  site_no_hold_hdr_freight2_ret ');
10505                 END IF;
10506 
10507                 OPEN site_no_hold_hdr_freight2_ret(p_usage_curr(i).usage_curr_code);
10508 
10509                 FETCH site_no_hold_hdr_freight2_ret INTO l_no_hold_hdr_freight2;
10510 
10511                 IF site_no_hold_hdr_freight2_ret%NOTFOUND
10512                 THEN
10513                   l_no_hold_hdr_freight2 := 0 ;
10514                   OE_DEBUG_PUB.Add(' No site_no_hold_hdr_freight2_ret found ');
10515                 END IF;
10516 
10517                 CLOSE site_no_hold_hdr_freight2_ret;
10518 
10519                 -- Get orders on hold amount if need_exposure_details is enabled
10520                 IF l_need_exposure_details = 'Y'
10521                 THEN
10522                   IF G_debug_flag = 'Y'
10523                   THEN
10524                     OE_DEBUG_PUB.Add(' Get site_hold_hdr_freight1_ret ');
10525                   END IF;
10526 
10527                   OPEN site_hold_hdr_freight1_ret(p_usage_curr(i).usage_curr_code);
10528                   FETCH site_hold_hdr_freight1_ret INTO l_hold_hdr_freight1;
10529 
10530                   IF site_hold_hdr_freight1_ret%NOTFOUND
10531                   THEN
10532                     l_hold_hdr_freight1 := 0 ;
10533                     OE_DEBUG_PUB.Add(' No site_hold_hdr_freight1_ret  found ');
10534                   END IF;
10535 
10536                   CLOSE site_hold_hdr_freight1_ret;
10537 
10538                   IF G_debug_flag = 'Y'
10539                   THEN
10540                     OE_DEBUG_PUB.Add(' Get site_hold_hdr_freight2_ret ');
10541                   END IF;
10542 
10543                   OPEN site_hold_hdr_freight2_ret(p_usage_curr(i).usage_curr_code);
10544                   FETCH site_hold_hdr_freight2_ret INTO l_hold_hdr_freight2;
10545 
10546                   IF site_hold_hdr_freight2_ret%NOTFOUND
10547                   THEN
10548                     l_hold_hdr_freight2 := 0 ;
10549                     OE_DEBUG_PUB.Add(' No site_hold_hdr_freight2_ret found ');
10550                   END IF;
10551                   CLOSE site_hold_hdr_freight2_ret;
10552                 END IF; -- details freight on hold
10553               END IF; -----end of checking if returns are included
10554             END IF;
10555           END IF; -- Orders on hold
10556         END;
10557       ELSE
10558         IF G_debug_flag = 'Y'
10559         THEN
10560           OE_DEBUG_PUB.Add(' No OM Exposure calculation for site ',1);
10561         END IF;
10562       END IF;
10563 
10564       l_cum_total_from_ar := l_cum_total_from_ar + NVL(l_total_from_ar,0) +
10565                     NVL(l_total_from_br,0) ;
10566 
10567       l_cum_payments_at_risk := l_cum_payments_at_risk
10568                                 + NVL(l_payments_at_risk,0)
10569                                 + NVL(l_payments_at_risk_br ,0 );
10570 
10571       l_cum_total_on_order := l_cum_total_on_order + NVL(l_total_on_order,0)
10572                                   + NVL(l_uninvoiced_hdr_freight1,0)
10573                                   + NVL(l_uninvoiced_hdr_freight2,0);
10574       l_cum_total_on_hold := l_cum_total_on_hold + NVL(l_total_on_hold,0)
10575                                   + NVL(l_hold_hdr_freight1,0)
10576                                   + NVL(l_hold_hdr_freight2,0);
10577 
10578       l_cum_total_no_hold := l_cum_total_no_hold + NVL(l_total_no_hold,0)
10579                                  + NVL(l_no_hold_hdr_freight1,0)
10580                                  + NVL(l_no_hold_hdr_freight2,0);
10581 
10582       IF l_orders_on_hold_flag = 'Y' THEN
10583         l_cum_uninv_order_total := l_cum_total_on_order;
10584       ELSE
10585         l_cum_uninv_order_total := l_cum_total_no_hold;
10586       END IF;
10587 
10588       l_cum_total_commitment := l_cum_total_commitment +
10589               NVL(l_total_commitment,0);
10590 
10591       l_usage_total_exposure := NVL(l_cum_total_from_ar,0)
10592                     + NVL(l_cum_payments_at_risk,0)
10593                     + NVL(l_cum_uninv_order_total,0)
10594                     - NVL(l_cum_total_commitment,0)
10595                     + NVL(l_cum_external_exposure,0);
10596 
10597       --
10598       -- Set the detail output variables only when detail is selected.
10599       --
10600       IF l_need_exposure_details = 'Y'
10601       THEN
10602         -- Add hold amount to order amount if hold flag is not set
10603         -- because the uninvoiced order amount is not available.
10604         IF l_orders_on_hold_flag = 'Y'
10605         THEN
10606           l_cum_order_amount := l_cum_uninv_order_total -
10607                                 NVL(l_cum_total_commitment,0);
10608         ELSE
10609           l_cum_order_amount :=  l_cum_uninv_order_total
10610                                - NVL(l_cum_total_commitment,0)
10611                                + l_cum_total_on_hold;
10612         END IF;
10613         l_cum_order_hold_amount := l_cum_total_on_hold;
10614         l_cum_ar_amount         := NVL(l_cum_total_from_ar,0) +
10615                                    NVL(l_cum_payments_at_risk,0) ;
10616       END IF;
10617 
10618       IF G_debug_flag = 'Y'
10619       THEN
10620 
10621         OE_DEBUG_PUB.ADD(' l_usage_total_exposure    = '
10622                    || l_usage_total_exposure );
10623         OE_DEBUG_PUB.ADD(' l_cum_total_from_ar       = '
10624                    || l_cum_total_from_ar );
10625         OE_DEBUG_PUB.ADD(' l_total_from_ar           = '
10626                    || l_total_from_ar);
10627         OE_DEBUG_PUB.ADD(' l_total_from_br           = '
10628                    || l_total_from_br);
10629         OE_DEBUG_PUB.ADD(' l_cum_payments_at_risk    = '
10630                    || l_cum_payments_at_risk );
10631         OE_DEBUG_PUB.ADD(' l_payments_at_risk        = '
10632                    || l_payments_at_risk);
10633         OE_DEBUG_PUB.ADD(' l_payments_at_risk_br     = '
10634                    || l_payments_at_risk_br);
10635         OE_DEBUG_PUB.ADD(' l_cum_total_on_order      = '
10636                     || l_cum_total_on_order );
10637         OE_DEBUG_PUB.ADD(' l_total_on_order          = '
10638                     || l_total_on_order );
10639         OE_DEBUG_PUB.ADD(' l_uninvoiced_hdr_freight1 = '
10640                       || l_uninvoiced_hdr_freight1 );
10641         OE_DEBUG_PUB.ADD(' l_uninvoiced_hdr_freight2 = '
10642                     || l_uninvoiced_hdr_freight2 );
10643         OE_DEBUG_PUB.ADD(' l_cum_total_commitment    = '
10644                     || l_cum_total_commitment );
10645         OE_DEBUG_PUB.ADD(' l_total_commitment        = '
10646                     || l_total_commitment );
10647         OE_DEBUG_PUB.ADD(' l_usage_total_exposure    = '
10648                     || l_usage_total_exposure );
10649 
10650         -- details
10651         OE_DEBUG_PUB.ADD(' l_cum_total_on_hold       = '
10652                     || l_cum_total_on_hold );
10653         OE_DEBUG_PUB.ADD(' l_total_on_hold           = '
10654                     || l_total_on_hold );
10655         OE_DEBUG_PUB.ADD(' l_hold_hdr_freight1       = '
10656                     || l_hold_hdr_freight1 );
10657         OE_DEBUG_PUB.ADD(' l_hold_hdr_freight2       = '
10658                     || l_hold_hdr_freight2);
10659         OE_DEBUG_PUB.ADD(' l_cum_order_amount        = '
10660                     || l_cum_order_amount );
10661         OE_DEBUG_PUB.ADD(' l_cum_order_hold_amount   = '
10662                     || l_cum_order_hold_amount );
10663         OE_DEBUG_PUB.ADD(' l_cum_ar_amount           = '
10664                     || l_cum_ar_amount);
10665 
10666         -- external
10667         OE_DEBUG_PUB.ADD(' l_external_exposure       = '
10668                     || l_external_exposure );
10669         OE_DEBUG_PUB.ADD(' l_cum_external_exposure   = '
10670                     || l_cum_external_exposure );
10671 
10672         -- no holds
10673         OE_DEBUG_PUB.ADD(' l_cum_total_no_hold       = '
10674                     || l_cum_total_no_hold );
10675         OE_DEBUG_PUB.ADD(' l_total_no_hold           = '
10676                     || l_total_no_hold );
10677         OE_DEBUG_PUB.ADD(' l_no_hold_hdr_freight1    = '
10678                     || l_no_hold_hdr_freight1 );
10679         OE_DEBUG_PUB.ADD(' l_no_hold_hdr_freight2    = '
10680                     || l_no_hold_hdr_freight2);
10681 
10682         OE_DEBUG_PUB.ADD(' Call currency conversion for exposure ' );
10683 
10684         OE_DEBUG_PUB.Add(' GL_CURRENCY = '||
10685           OE_Credit_Engine_GRP.GL_currency );
10686       END IF;
10687 
10688       l_limit_total_exposure :=
10689         OE_CREDIT_CHECK_UTIL.CONVERT_CURRENCY_AMOUNT
10690         ( p_amount	            => l_usage_total_exposure
10691         , p_transactional_currency  => p_usage_curr(i).usage_curr_code
10692         , p_limit_currency          => p_limit_curr_code
10693         , p_functional_currency     => OE_Credit_Engine_GRP.GL_currency
10694         , p_conversion_date         => SYSDATE
10695         , p_conversion_type	    => p_credit_check_rule_rec.conversion_type
10696         );
10697 
10698 
10699       l_total_exposure := l_total_exposure +  NVL(l_limit_total_exposure,0) ;
10700 
10701       IF l_need_exposure_details = 'Y' THEN
10702         IF G_debug_flag = 'Y' THEN
10703           oe_debug_pub.add( ' Into p_need_exposure_details ');
10704         END IF;
10705 
10706         l_limit_cum_order_amount :=
10707         OE_CREDIT_CHECK_UTIL.CONVERT_CURRENCY_AMOUNT
10708           ( p_amount                  => l_cum_order_amount
10709           , p_transactional_currency  => p_usage_curr(i).usage_curr_code
10710           , p_limit_currency          => p_limit_curr_code
10711           , p_functional_currency     => OE_Credit_Engine_GRP.GL_currency
10712           , p_conversion_date         => SYSDATE
10713           , p_conversion_type         =>
10714                                     p_credit_check_rule_rec.conversion_type
10715           );
10716 
10717         l_limit_cum_order_hold_amount :=
10718         OE_CREDIT_CHECK_UTIL.CONVERT_CURRENCY_AMOUNT
10719            ( p_amount                  => l_cum_order_hold_amount
10720            , p_transactional_currency  => p_usage_curr(i).usage_curr_code
10721            , p_limit_currency          => p_limit_curr_code
10722            , p_functional_currency     => OE_Credit_Engine_GRP.GL_currency
10723            , p_conversion_date         => SYSDATE
10724            , p_conversion_type         =>
10725                                        p_credit_check_rule_rec.conversion_type
10726            );
10727         l_limit_cum_ar_amount :=
10728         OE_CREDIT_CHECK_UTIL.CONVERT_CURRENCY_AMOUNT
10729            ( p_amount                  => l_cum_ar_amount
10730            , p_transactional_currency  => p_usage_curr(i).usage_curr_code
10731            , p_limit_currency          => p_limit_curr_code
10732            , p_functional_currency     => OE_Credit_Engine_GRP.GL_currency
10733            , p_conversion_date         => SYSDATE
10734            , p_conversion_type         =>
10735                                        p_credit_check_rule_rec.conversion_type
10736            );
10737 
10738         l_order_amount := l_order_amount +
10739                NVL(l_limit_cum_order_amount,0) ;
10740 
10741         l_order_hold_amount := l_order_hold_amount +
10742                 NVL(l_limit_cum_order_hold_amount,0) ;
10743 
10744         l_ar_amount := l_ar_amount +
10745                 NVL(l_limit_cum_ar_amount,0) ;
10746 
10747       END IF; -- details
10748 
10749       IF G_debug_flag = 'Y'
10750       THEN
10751         OE_DEBUG_PUB.ADD(' l_limit_total_exposure = '
10752                    || l_limit_total_exposure );
10753         OE_DEBUG_PUB.ADD(' l_total_exposure       = '|| l_total_exposure );
10754       END IF;
10755 
10756 
10757       l_limit_total_exposure     := 0 ;
10758       l_usage_total_exposure     := 0 ;
10759       l_cum_total_on_order       := 0;
10760       l_cum_total_commitment     := 0;
10761       l_total_on_order           := 0;
10762       l_uninvoiced_hdr_freight1  := 0;
10763       l_uninvoiced_hdr_freight2  := 0;
10764       l_total_commitment         := 0;
10765 
10766       l_cum_payments_at_risk     := 0;
10767       l_payments_at_risk         := 0;
10768       l_payments_at_risk_br      := 0;
10769 
10770       l_cum_total_from_ar        := 0;
10771       l_total_from_ar            := 0;
10772       l_total_from_br            := 0;
10773 
10774       l_external_exposure        := 0;
10775       l_cum_external_exposure    := 0;
10776 
10777       l_hold_hdr_freight1        := 0;
10778       l_hold_hdr_freight2        := 0;
10779       l_total_on_hold            := 0;
10780       l_cum_total_on_hold        := 0;
10781 
10782       l_no_hold_hdr_freight1     := 0;
10783       l_no_hold_hdr_freight2     := 0;
10784       l_total_no_hold            := 0;
10785       l_cum_total_no_hold        := 0;
10786 
10787       l_cum_order_amount           := 0;
10788       l_cum_order_hold_amount      := 0 ;
10789       l_cum_ar_amount              := 0 ;
10790 
10791       l_limit_cum_order_amount           := 0;
10792       l_limit_cum_order_hold_amount      := 0 ;
10793       l_limit_cum_ar_amount              := 0 ;
10794 
10795       IF G_debug_flag = 'Y'
10796       THEN
10797         OE_DEBUG_PUB.Add(' ');
10798         OE_DEBUG_PUB.Add('=====================================');
10799         OE_DEBUG_PUB.Add(' ');
10800       END IF;
10801 
10802     END LOOP; -- currency loop
10803 
10804     OE_DEBUG_PUB.ADD('** Out NOCOPY of usage currency loop ' );
10805 
10806   END IF;
10807 
10808   l_current_usage_cur := NULL;
10809 
10810   -- Header ID can be passed as NULL to get the
10811   -- customer exposure
10812 
10813   IF p_header_id is NOT NULL
10814   THEN
10815     BEGIN
10816       -- Check the global. Get the current order value fromt the global
10817       -- this global would be set when calculating the transaction amount.
10818 
10819       l_limit_current_order  :=
10820               NVL(OE_CREDIT_CHECK_UTIL.g_current_order_value,0);
10821 
10822       IF G_debug_flag = 'Y'
10823       THEN
10824         OE_DEBUG_PUB.Add(' Current order value is available already = '
10825              || OE_CREDIT_CHECK_UTIL.g_current_order_value );
10826         OE_DEBUG_PUB.Add(' l_limit_current_order = '||
10827                  l_limit_current_order );
10828       END IF;
10829     END ; -- p_header_id
10830 
10831   ELSE
10832     l_limit_current_order := 0 ;
10833 
10834     OE_DEBUG_PUB.Add(' P_header_id is NULL, No current order check ',1);
10835 
10836   END IF ; -- p_header_id is NULL
10837 
10838   IF G_debug_flag = 'Y'
10839   THEN
10840     OE_DEBUG_PUB.Add(' l_limit_current_order = '|| l_limit_current_order );
10841     OE_DEBUG_PUB.Add(' l_order_amount        = '|| l_order_amount);
10842     OE_DEBUG_PUB.Add(' l_order_hold_amount   = '|| l_order_hold_amount);
10843     OE_DEBUG_PUB.Add(' l_ar_amount           = '|| l_ar_amount);
10844   END IF;
10845 
10846   x_total_exposure := NVL(l_total_exposure,0) + NVL(l_limit_current_order,0) ;
10847 
10848   IF l_need_exposure_details = 'Y'
10849   THEN
10850     x_order_amount      := l_order_amount;
10851     x_order_hold_amount := l_order_hold_amount;
10852     x_ar_amount         := l_ar_amount;
10853   END IF;
10854 
10855   OE_CREDIT_CHECK_UTIL.g_current_order_value := NULL ;
10856 
10857   --bug# 2714553
10858   OE_CREDIT_INTERFACE_UTIL.Get_exposure_amount
10859           ( p_header_id              => p_header_id
10860           , p_customer_id            => p_customer_id
10861           , p_site_use_id            => p_site_use_id
10862           , p_credit_check_rule_rec  => p_credit_check_rule_rec
10863           , p_system_parameter_rec   => p_system_parameter_rec
10864           , p_credit_level           => p_credit_level
10865           , p_limit_curr_code        => p_limit_curr_code
10866           , p_usage_curr             => p_usage_curr
10867           , p_global_exposure_flag   => p_global_exposure_flag
10868           , x_exposure_amount        => l_exposure_amount
10869           , x_conversion_status      => x_conversion_status
10870           , x_return_status          => x_return_status
10871          );
10872 
10873   IF G_debug_flag = 'Y'
10874   THEN
10875      OE_DEBUG_PUB.Add('after get_exposure_amount ');
10876      OE_DEBUG_PUB.Add(' x_return_status       = '|| x_return_status );
10877      OE_DEBUG_PUB.Add(' l_exposure_amount     = '|| l_exposure_amount );
10878      OE_DEBUG_PUB.Add(' err cur tbl count     = '|| x_conversion_status.COUNT );
10879      OE_DEBUG_PUB.Add(' l_limit_current_order = '|| l_limit_current_order );
10880      OE_DEBUG_PUB.Add(' l_total_exposure      = '|| l_total_exposure );
10881      OE_DEBUG_PUB.Add(' x_total_exposure      = '|| x_total_exposure );
10882   END IF;
10883 
10884   x_total_exposure := NVL(x_total_exposure,0) + NVL(l_exposure_amount,0) ;
10885 
10886   IF x_conversion_status.COUNT <> 0
10887   THEN
10888      FOR f IN 1..x_conversion_status.COUNT
10889      LOOP
10890          IF G_debug_flag = 'Y'
10891          THEN
10892             OE_DEBUG_PUB.ADD('!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!');
10893             OE_DEBUG_PUB.ADD('!!!!! Exchange rate between '||x_conversion_status(f).usage_curr_code
10894                    ||' and credit limit currency '
10895                    ||p_limit_curr_code
10896                    ||' is missing for conversion type '
10897              || NVL(p_credit_check_rule_rec.user_conversion_type,'Corporate'),1);
10898             OE_DEBUG_PUB.ADD('!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!');
10899          END IF;
10900      END LOOP;
10901   ELSIF x_return_status = FND_API.G_RET_STS_ERROR
10902   THEN
10903      RAISE FND_API.G_EXC_ERROR;
10904   ELSIF x_return_status = FND_API.G_RET_STS_UNEXP_ERROR
10905   THEN
10906      RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
10907   END IF;
10908   --bug# 2714553
10909 
10910   IF G_debug_flag = 'Y'
10911   THEN
10912     OE_DEBUG_PUB.Add(' ');
10913     OE_DEBUG_PUB.Add('XX*****-------------##########-------------------XX' );
10914     OE_DEBUG_PUB.Add(' ');
10915     OE_DEBUG_PUB.Add('Final Total Exposure amount  = '|| x_total_exposure,1);
10916     OE_DEBUG_PUB.Add(' ');
10917     OE_DEBUG_PUB.Add('XX-------------- ##########------------------------XX' );
10918     OE_DEBUG_PUB.Add(' ');
10919     OE_DEBUG_PUB.ADD('OEXUCRCB: OUT NOCOPY Get_order_exposure',1);
10920   END IF;
10921 
10922 EXCEPTION
10923   WHEN  GL_CURRENCY_API.NO_RATE THEN
10924     OE_DEBUG_PUB.ADD('EXCEPTION: GL_CURRENCY_API.NO_RATE in get_order_exp',1);
10925     OE_DEBUG_PUB.ADD('l_current_usage_cur = '||
10926               l_current_usage_cur );
10927     x_conversion_status(1).usage_curr_code := l_current_usage_cur ;
10928 
10929     fnd_message.set_name('ONT', 'OE_CONVERSION_ERROR');
10930     OE_DEBUG_PUB.ADD('Exception table added ');
10931     IF cust_external_exposure_csr%ISOPEN THEN
10932       CLOSE cust_external_exposure_csr;
10933     END IF;
10934     IF site_external_exposure_csr%ISOPEN THEN
10935       CLOSE site_external_exposure_csr;
10936     END IF;
10937   WHEN OTHERS THEN
10938      x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
10939      IF OE_MSG_PUB.Check_Msg_Level(OE_MSG_PUB.G_MSG_LVL_UNEXP_ERROR) THEN
10940         OE_MSG_PUB.Add_Exc_Msg (G_PKG_NAME, '
10941                                 Get_order_exposure');
10942      END IF;
10943      IF cust_external_exposure_csr%ISOPEN THEN
10944        CLOSE cust_external_exposure_csr;
10945      END IF;
10946      IF site_external_exposure_csr%ISOPEN THEN
10947        CLOSE site_external_exposure_csr;
10948      END IF;
10949      RAISE;
10950 
10951 END Get_order_exposure ;
10952 
10953 
10954 --========================================================================
10955 -- PROCEDURE : Currency_List
10956 -- Comments  : This procedure is used by the credit snapshot report to derive
10957 --             a comma delimited string of currencies defined in credit usage
10958 -- Parameters: c_entity_type       IN    'CUSTOMER' or 'SITE'
10959 --	       c_entity_id         IN    Customer_Id or Site_Id
10960 --             c_trx_curr_code     IN    Transaction Currency
10961 --             l_limit_curr_code   OUT NOCOPY   Currency Limit used for credit checking
10962 --             Curr_list           OUT NOCOPY   Comma delimited string of currencies
10963 --                                       covered by limit currency code
10964 --========================================================================
10965 Procedure currency_list (
10966    c_entity_type          IN  VARCHAR2
10967  , c_entity_id            IN  NUMBER
10968  , c_trx_curr_code        IN  VARCHAR2
10969  , l_limit_curr_code      OUT NOCOPY VARCHAR2
10970  , l_default_limit_flag   OUT NOCOPY VARCHAR2
10971  , Curr_list              OUT NOCOPY VARCHAR2) IS
10972 
10973   i                       NUMBER;
10974   l_return_status         NUMBER;
10975   l_CREDIT_CHECK_FLAG     VARCHAR2(1);
10976   l_OVERALL_CREDIT_LIMIT  NUMBER;
10977   l_TRX_CREDIT_LIMIT      NUMBER;
10978   l_include_all_flag      VARCHAR2(1);
10979   l_curr_tbl     OE_CREDIT_CHECK_UTIL.curr_tbl_type;
10980   l_global_exposure_flag  VARCHAR2(1);
10981   l_credit_limit_party_id  NUMBER ;
10982   l_use_credit_hierarchy   varchar2(1);
10983 
10984 
10985 Begin
10986 
10987  l_limit_curr_code := NULL ;
10988 
10989   for i in 1 .. l_curr_tbl.COUNT
10990   LOOP
10991     if i = 1 then null;
10992     else
10993       curr_list := concat(curr_list,',');
10994     end if;
10995     curr_list := concat(curr_list, l_curr_tbl(i).usage_curr_code);
10996   END LOOP;
10997 
10998 END Currency_List;
10999 
11000 
11001 
11002 ---========================================================================
11003 -- PROCEDURE : CONVERT_CURRENCY_AMOUNT
11004 -- Comments  :
11005 -- 21-Jun-2001 - rajkrish updated with standard dbg messages
11006 ---========================================================================
11007 
11008 FUNCTION CONVERT_CURRENCY_AMOUNT
11009 ( p_amount	                IN NUMBER := 0
11010 , p_transactional_currency 	IN VARCHAR2
11011 , p_limit_currency	        IN VARCHAR2
11012 , p_functional_currency	        IN VARCHAR2
11013 , p_conversion_date	        IN DATE := SYSDATE
11014 , p_conversion_type	        IN VARCHAR2 := 'Corporate'
11015 ) RETURN NUMBER
11016 IS
11017 
11018   l_converted_amount NUMBER;
11019   l_denominator NUMBER;
11020   l_numerator   NUMBER;
11021   l_rate        NUMBER;
11022 
11023 BEGIN
11024   BEGIN
11025     IF G_debug_flag = 'Y'
11026     THEN
11027       OE_DEBUG_PUB.ADD('OEXUCRCB: IN CONVERT_CURRENCY_AMOUNT ');
11028       OE_DEBUG_PUB.ADD('  ');
11029       OE_DEBUG_PUB.ADD('------------------------------------');
11030       OE_DEBUG_PUB.ADD('p_amount = '|| p_amount );
11031       OE_DEBUG_PUB.ADD('p_transactional_currency = '
11032                     || p_transactional_currency );
11033       OE_DEBUG_PUB.ADD('p_limit_currency = '|| p_limit_currency );
11034       OE_DEBUG_PUB.ADD('p_functional_currency = '|| p_functional_currency );
11035       OE_DEBUG_PUB.ADD('p_conversion_date = '|| p_conversion_date );
11036       OE_DEBUG_PUB.ADD('p_conversion_type = '|| p_conversion_type );
11037       OE_DEBUG_PUB.ADD('  ');
11038       OE_DEBUG_PUB.ADD('------------------------------------');
11039      END IF;
11040 
11041     -- The conversion amount can be les than or greater than
11042     -- 0. For maounts equal to 0, there is not need for
11043     -- conversion to proceed and call GL API's
11044 
11045     IF NVL(p_amount,0) <> 0
11046     THEN
11047       gl_currency_api.convert_closest_amount
11048       (  x_from_currency    =>  p_transactional_currency
11049       ,  x_to_currency      =>  p_limit_currency
11050       ,  x_conversion_date  =>  p_conversion_date
11051       ,  x_conversion_type  =>  p_conversion_type
11052       ,  x_amount           =>  p_amount
11053       ,  x_user_rate        =>  NULL
11054       ,  x_max_roll_days    =>  -1
11055       ,  x_converted_amount =>  l_converted_amount
11056       ,  x_denominator      =>  l_denominator
11057       ,  x_numerator        =>  l_numerator
11058       ,  x_rate             =>  l_rate
11059       );
11060 
11061     ELSE
11062       l_converted_amount := 0 ;
11063       IF G_debug_flag = 'Y'
11064       THEN
11065         OE_DEBUG_PUB.ADD(' No conversion, amount 0 ');
11066       END IF;
11067     END IF;
11068 
11069     IF G_debug_flag = 'Y'
11070     THEN
11071       OE_DEBUG_PUB.ADD('Convert amt using trx curr = '|| l_converted_amount );
11072     END IF;
11073 
11074     return l_converted_amount;
11075 
11076     EXCEPTION
11077     WHEN  GL_CURRENCY_API.NO_RATE  THEN
11078 
11079     DECLARE
11080       l_functional_amount  NUMBER;
11081     BEGIN
11082       IF G_debug_flag = 'Y'
11083       THEN
11084         OE_DEBUG_PUB.ADD(' Convert using functional curr traingulate');
11085       END IF;
11086 
11087       gl_currency_api.convert_closest_amount
11088         (  x_from_currency    =>  p_transactional_currency
11089         ,  x_to_currency      =>  p_functional_currency
11090         ,  x_conversion_date  =>  p_conversion_date
11091         ,  x_conversion_type  =>  p_conversion_type
11092         ,  x_amount           =>  p_amount
11093         ,  x_user_rate        =>  NULL
11094         ,  x_max_roll_days    =>  -1
11095         ,  x_converted_amount =>  l_functional_amount
11096         ,  x_denominator      =>  l_denominator
11097         ,  x_numerator        =>  l_numerator
11098         ,  x_rate             =>  l_rate
11099         );
11100 
11101       gl_currency_api.convert_closest_amount
11102         (  x_from_currency    =>  p_functional_currency
11103         ,  x_to_currency      =>  p_limit_currency
11104         ,  x_conversion_date  =>  p_conversion_date
11105         ,  x_conversion_type  =>  p_conversion_type
11106         ,  x_amount           =>  l_functional_amount
11107         ,  x_user_rate        =>  NULL
11108         ,  x_max_roll_days    =>  -1
11109         ,  x_converted_amount =>  l_converted_amount
11110         ,  x_denominator      =>  l_denominator
11111         ,  x_numerator        =>  l_numerator
11112         ,  x_rate             =>  l_rate
11113         );
11114 
11115       IF G_debug_flag = 'Y'
11116       THEN
11117         OE_DEBUG_PUB.ADD('Convert amt using functional curr = '
11118             || l_converted_amount );
11119       END IF;
11120       return l_converted_amount;
11121 
11122     END;
11123   END;
11124   IF G_debug_flag = 'Y'
11125   THEN
11126     OE_DEBUG_PUB.ADD('OEXUCRCB: OUT NOCOPY CONVERT_CURRENCY_AMOUNT ');
11127   END IF;
11128 END CONVERT_CURRENCY_AMOUNT;
11129 
11130 --
11131 --
11132 ------------------------------------------------------------
11133 -- PROCEDURE: SEND_CREDIT_HOLD_NTF
11134 -- COMMENTS:
11135 ------------------------------------------------------------
11136 PROCEDURE SEND_CREDIT_HOLD_NTF
11137   (p_header_rec        IN  OE_ORDER_PUB.header_rec_type
11138   ,p_credit_hold_level IN  OE_CREDIT_CHECK_RULES.credit_hold_level_code%TYPE
11139   ,p_cc_hold_comment   IN  OE_HOLD_SOURCES.hold_comment%TYPE
11140   ,x_return_status     OUT NOCOPY VARCHAR2
11141   )
11142 IS
11143 
11144   -- Cursor to get workflow user
11145   CURSOR wfn_to IS
11146   SELECT user_name
11147   FROM   fnd_user
11148   WHERE  user_id = p_header_rec.created_by ;
11149 
11150   -- Cursor to get the order type
11151   CURSOR c_order_type IS
11152   SELECT name
11153   FROM   oe_transaction_types_vl
11154   WHERE  transaction_type_id = p_header_rec.order_type_id;
11155 
11156   l_order_hold_comment VARCHAR2(2000);
11157   l_line_hold_count    NUMBER := 0;
11158   l_notification_id    NUMBER;
11159   l_wfn_to             VARCHAR2(100);
11160   l_order_type         VARCHAR2(30) := NULL;
11161   l_msg_count          NUMBER;
11162   l_msg_data           VARCHAR2(3000) ;
11163 
11164 BEGIN
11165   IF G_debug_flag = 'Y'
11166   THEN
11167     oe_debug_pub.ADD('In  OE_CREDIT_CHECK_UTIL.Send_Credit_Hold_NTF', 1);
11168   END IF;
11169 
11170   -- Initialize return status to success
11171   x_return_status := FND_API.G_RET_STS_SUCCESS;
11172 
11173   -- Get notification approver -- Created by
11174 
11175   BEGIN
11176     IF G_debug_flag = 'Y'
11177     THEN
11178       oe_debug_pub.ADD('Get the Notification approver ', 2);
11179     END IF;
11180 
11181     OPEN wfn_to;
11182     FETCH wfn_to INTO l_wfn_to;
11183     IF wfn_to%NOTFOUND
11184     THEN
11185      l_wfn_to := NUll ;
11186     END IF;
11187     CLOSE wfn_to;
11188   END ;
11189 
11190   IF G_debug_flag = 'Y'
11191   THEN
11192     oe_debug_pub.ADD(' l_wfn_to = '|| l_wfn_to, 2 );
11193   END IF;
11194 
11195   -- Set message attributes and send notification
11196   IF l_wfn_to is not NULL
11197   THEN
11198     BEGIN
11199       IF G_debug_flag = 'Y'
11200       THEN
11201         oe_debug_pub.ADD('Set the order type ', 2);
11202       END IF;
11203 
11204       OPEN c_order_type;
11205       FETCH c_order_type INTO l_order_type;
11206       IF c_order_type%NOTFOUND
11207       THEN
11208         l_wfn_to := NUll ;
11209       END IF;
11210       CLOSE c_order_type;
11211     END ;
11212 
11213     IF NVL(p_credit_hold_level, 'ORDER') = 'ORDER'
11214     THEN
11215       l_order_hold_comment := p_cc_hold_comment;
11216       l_line_hold_count := NULL;
11217     ELSIF p_credit_hold_level = 'LINE'
11218     THEN
11219       FND_MESSAGE.Set_Name('ONT','OE_CC_HLD_GENERAL_MSG');
11220       l_order_hold_comment := SUBSTR(FND_MESSAGE.GET,1,2000);
11221       l_line_hold_count := OE_CREDIT_CHECK_LINES_PVT.G_line_hold_count;
11222     END IF;
11223 
11224     IF G_debug_flag = 'Y'
11225     THEN
11226       oe_debug_pub.ADD(' Before send notification ', 2);
11227     END IF;
11228 
11229     l_notification_id := wf_notification.send
11230     (   role         => l_wfn_to
11231     ,   msg_type     => OE_GLOBALS.g_wfi_hdr
11232     ,   msg_name     => 'ORDER_CREDIT_HOLDS'
11233     );
11234 
11235     IF G_debug_flag = 'Y'
11236     THEN
11237       oe_debug_pub.ADD(' After send notification with ID = '||
11238            l_notification_id, 2 );
11239     END IF;
11240 
11241     wf_notification.setattrtext
11242     (   nid          => l_notification_id
11243     ,   aname        => 'ORDER_HOLD_COMMENT'
11244     ,   avalue       => l_order_hold_comment
11245     );
11246 
11247     wf_notification.setattrtext
11248     (   nid          => l_notification_id
11249     ,   aname        => 'ORDER_TYPE'
11250     ,   avalue       => l_order_type
11251     );
11252 
11253     wf_notification.setattrnumber
11254     (   nid          => l_notification_id
11255     ,   aname        => 'ORDER_NUMBER'
11256     ,   avalue       => p_header_rec.order_number
11257     );
11258 
11259     wf_notification.setattrnumber
11260     (   nid          => l_notification_id
11261     ,   aname        => 'LINE_HOLD_COUNT'
11262     ,   avalue       => l_line_hold_count
11263     );
11264 
11265     --
11266     -- Start: Bug 7476530 Fix (R12.1.1 and R12.2)
11267     --
11268     -- Ensure that the notification subject will be properly constructed.
11269     --
11270 
11271     Wf_Notification.Denormalize_Notification(nid => l_notification_id);
11272 
11273     -- End  : Bug 7476530 Fix
11274 
11275 
11276     IF G_debug_flag = 'Y'
11277     THEN
11278       oe_debug_pub.ADD('-------Message Attribute Values-------',2);
11279       oe_debug_pub.ADD('l_order_type:         '||l_order_type,2);
11280       oe_debug_pub.ADD('l_order_number:       '||p_header_rec.order_number,2);
11281       oe_debug_pub.ADD('l_order_hold_comment: '||l_order_hold_comment,2);
11282       oe_debug_pub.ADD('l_line_hold_count:    '||l_line_hold_count,2);
11283       oe_debug_pub.ADD('--------------------------------------',2);
11284     END IF;
11285 
11286   ELSE
11287     IF G_debug_flag = 'Y'
11288     THEN
11289       oe_debug_pub.ADD('No send notification l_wfn_to = '|| l_wfn_to, 2);
11290     END IF;
11291   END IF;
11292 
11293   IF G_debug_flag = 'Y'
11294   THEN
11295     oe_debug_pub.ADD('OEXUCRCB: OUT NOCOPY Send_Credit_Hold_NTF');
11296   END IF;
11297 
11298 -- No exception raised as notification send is not considered
11299 -- as a stop for credit checking
11300 
11301 EXCEPTION
11302   WHEN OTHERS THEN
11303   BEGIN
11304     x_return_status := FND_API.G_RET_STS_ERROR ;
11305     IF G_debug_flag = 'Y'
11306     THEN
11307       oe_debug_pub.ADD(' EXCEPTION OTHERS IN SEND_NOTIFICATION');
11308       oe_debug_pub.ADD( ' Errm  = '|| SUBSTR(sqlerrm,1,200) );
11309     END IF;
11310     OE_MSG_PUB.Count_And_Get
11311            ( p_count => l_msg_count,
11312              p_data  => l_msg_data
11313            );
11314     IF G_debug_flag = 'Y'
11315     THEN
11316       oe_debug_pub.ADD(' l_msg_data = ' || l_msg_data );
11317     END IF;
11318     l_msg_data := NULL ;
11319     l_msg_count  := NULL ;
11320   END ;
11321 END SEND_CREDIT_HOLD_NTF;
11322 
11323 ----------------------------------------------------------------------------
11324 --  PROCEDURE: GET_external_trx_amount           PUBLIC
11325 --  COMMENT  : Returns the transaction amount in the limit currency given the
11326 --             amount in the transaction currency. If the
11327 --             p_site_use_id IS null, the entire order is considered
11328 --             x_conversion_status provides any currency conversion
11329 --             error.
11330 --             Used for external credit checking API.
11331 -- BUG 4320650 Rounded the External transaction amount
11332 ----------------------------------------------------------------------------
11333 PROCEDURE GET_external_trx_amount
11334 ( p_transaction_curr_code IN  VARCHAR2
11335 , p_transaction_amount    IN  NUMBER
11336 , p_credit_check_rule_rec IN
11337              OE_CREDIT_CHECK_UTIL.OE_credit_rules_rec_type
11338 , p_system_parameter_rec  IN
11339              OE_CREDIT_CHECK_UTIL.OE_systems_param_rec_type
11340 , p_limit_curr_code       IN  VARCHAR2
11341 , x_amount                OUT NOCOPY NUMBER
11342 , x_conversion_status     OUT NOCOPY OE_CREDIT_CHECK_UTIL.CURR_TBL_TYPE
11343 , x_return_status         OUT NOCOPY VARCHAR2
11344 )
11345 IS
11346   l_limit_order_value NUMBER := 0;
11347 BEGIN
11348 
11349   IF G_debug_flag = 'Y'
11350   THEN
11351     OE_DEBUG_PUB.ADD('OEXUCRCB: IN GET_external_trx_amount');
11352   END IF;
11353 
11354   x_return_status := FND_API.G_RET_STS_SUCCESS;
11355   OE_CREDIT_CHECK_UTIL.g_current_order_value := NULL ;
11356 
11357   IF G_debug_flag = 'Y'
11358   THEN
11359     OE_DEBUG_PUB.ADD('Order Level Credit Check only');
11360   END IF ;
11361   -- convert amount
11362   BEGIN
11363   IF G_debug_flag = 'Y'
11364   THEN
11365     OE_DEBUG_PUB.Add(' GL_CURRENCY = '|| OE_Credit_Engine_GRP.GL_currency);
11366     OE_DEBUG_PUB.ADD(' Total order amount = '|| p_transaction_amount);
11367   END IF;
11368 
11369 
11370     l_limit_order_value :=
11371       OE_CREDIT_CHECK_UTIL.CONVERT_CURRENCY_AMOUNT
11372         ( p_amount                 => p_transaction_amount
11373         , p_transactional_currency => p_transaction_curr_code
11374         , p_limit_currency         => p_limit_curr_code
11375         , p_functional_currency    => OE_Credit_Engine_GRP.GL_currency
11376         , p_conversion_date        => SYSDATE
11377         , p_conversion_type        => p_credit_check_rule_rec.conversion_type
11378       );
11379   END ;
11380 --  x_amount := NVL(l_limit_order_value,0);
11381 
11382   OE_CREDIT_CHECK_UTIL.Rounded_Amount(p_currency_code => p_limit_curr_code
11383 			,p_unrounded_amount =>  NVL(l_limit_order_value,0)
11384 			,x_rounded_amount => x_amount);
11385 
11386   OE_CREDIT_CHECK_UTIL.g_current_order_value := x_amount ;
11387 
11388   IF G_debug_flag = 'Y'
11389   THEN
11390     OE_DEBUG_PUB.Add(' g_current_order_value = '||
11391        OE_CREDIT_CHECK_UTIL.g_current_order_value);
11392     OE_DEBUG_PUB.Add(' Final trx check order amount = '|| x_amount,1 );
11393     OE_DEBUG_PUB.Add(' ====================================');
11394     OE_DEBUG_PUB.ADD('OEXUCRCB: OUT NOCOPY Get_external_trx_amount ');
11395   END IF;
11396 
11397 EXCEPTION
11398   WHEN  GL_CURRENCY_API.NO_RATE THEN
11399     OE_DEBUG_PUB.ADD('EXCEPTION: GL_CURRENCY_API.NO_RATE ');
11400     x_conversion_status(1).usage_curr_code := p_transaction_curr_code;
11401     fnd_message.set_name('ONT', 'OE_CONVERSION_ERROR');
11402     OE_DEBUG_PUB.ADD('Exception table added ');
11403   WHEN NO_DATA_FOUND THEN
11404     x_amount := 0 ;
11405     OE_DEBUG_PUB.ADD('EXCEPTION: NO_DATA_FOUND ');
11406   WHEN TOO_MANY_ROWS THEN
11407     x_amount := 0 ;
11408     OE_DEBUG_PUB.ADD('EXCEPTION: TOO_MANY_ROWS ');
11409   WHEN OTHERS THEN
11410     G_DBG_MSG := SUBSTRB(sqlerrm,1,200);
11411     OE_DEBUG_PUB.ADD('EXCEPTION = '|| SUBSTRB(sqlerrm,1,200));
11412     x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
11413     IF OE_MSG_PUB.Check_Msg_Level(OE_MSG_PUB.G_MSG_LVL_UNEXP_ERROR) THEN
11414      OE_MSG_PUB.Add_Exc_Msg
11415       ( G_PKG_NAME
11416       , 'GET_external_trx_amount'
11417       );
11418     END IF;
11419     RAISE;
11420 END Get_external_trx_amount;
11421 
11422 
11423 -----------------------------------------------------------------------------
11424 --  PROCEDURE  : GET_default_Limit
11425 --------------------------------------------------------------------------------
11426 PROCEDURE GET_default_Limit
11427 (  p_entity_id                   IN  NUMBER
11428  , p_trx_curr_code               IN  VARCHAR2
11429  , x_limit_curr_code             OUT NOCOPY VARCHAR2
11430  , x_trx_limit                   OUT NOCOPY NUMBER
11431  , x_overall_limit               OUT NOCOPY NUMBER
11432  , x_default_limit_flag          OUT NOCOPY VARCHAR2
11433  , x_global_exposure_flag        OUT NOCOPY VARCHAR2
11434 )
11435 IS
11436 
11437 l_credit_usage_rule_set_id  NUMBER;
11438 BEGIN
11439   IF G_debug_flag = 'Y'
11440   THEN
11441    OE_DEBUG_PUB.ADD('OEXUCRCB: IN GET_default_Limit ');
11442   END IF;
11443 
11444  x_default_limit_flag    := 'N' ;
11445  x_limit_curr_code       := NULL ;
11446  x_global_exposure_flag  := 'N' ;
11447 
11448  OE_DEBUG_PUB.ADD(' calling GET_multi_default_Limit ');
11449 
11450  GET_multi_default_Limit
11451           ( p_entity_id       => p_entity_id
11452           , p_trx_curr_code   => p_trx_curr_code
11453           , x_limit_curr_code => x_limit_curr_code
11454           , x_trx_limit       => x_trx_limit
11455           , x_overall_limit   => x_overall_limit
11456           , x_return_status   => x_default_limit_flag
11457           , x_credit_usage_rule_set_id
11458                        => l_credit_usage_rule_set_id
11459           , x_global_exposure_flag => x_global_exposure_flag
11460           );
11461 
11462   IF G_debug_flag = 'Y'
11463   THEN
11464     OE_DEBUG_PUB.ADD(' Out NOCOPY GET_multi_default_Limit '
11465              || x_default_limit_flag );
11466     OE_DEBUG_PUB.ADD(' x_limit_curr_code = '|| x_limit_curr_code );
11467   END IF;
11468 
11469   IF     x_default_limit_flag = 'Y'
11470      AND x_trx_limit is NULL
11471      AND x_overall_limit is NULL
11472   THEN
11473      x_default_limit_flag := 'N' ;
11474      x_limit_curr_code    := NULL ;
11475      OE_DEBUG_PUB.ADD(' Limits NULL ');
11476 
11477   END IF;
11478 
11479   IF x_limit_curr_code IS NULL
11480   THEN
11481      x_default_limit_flag := 'N' ;
11482     OE_DEBUG_PUB.ADD(' calling GET_single_default_Limit ');
11483     GET_single_default_Limit
11484     (         p_entity_id       => p_entity_id
11485             , p_trx_curr_code   => p_trx_curr_code
11486             , x_limit_curr_code => x_limit_curr_code
11487             , x_trx_limit       => x_trx_limit
11488             , x_overall_limit   => x_overall_limit
11489             , x_return_status   => x_default_limit_flag
11490     );
11491 
11492    IF G_debug_flag = 'Y'
11493    THEN
11494      OE_DEBUG_PUB.ADD(' Out NOCOPY GET_single_default_Limit '
11495                              || x_default_limit_flag );
11496      OE_DEBUG_PUB.ADD(' x_limit_curr_code = '|| x_limit_curr_code );
11497    END IF;
11498 
11499   END IF;
11500 
11501 
11502   IF G_debug_flag = 'Y'
11503   THEN
11504     OE_DEBUG_PUB.ADD('OEXUCRCB: OUT NOCOPY GET_default_Limit ' ||
11505          x_default_limit_flag );
11506   END IF;
11507 
11508  EXCEPTION
11509   WHEN OTHERS THEN
11510    G_DBG_MSG := SUBSTR(sqlerrm,1,200);
11511     IF FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
11512     THEN
11513       FND_MSG_PUB.Add_Exc_Msg
11514       ( G_PKG_NAME
11515       , ' GET_default_Limit '
11516       );
11517     END IF;
11518     RAISE;
11519 
11520 END GET_default_Limit ;
11521 
11522 
11523 ------------------------------------------------------------------------------
11524 --  PROCEDURE  : Get_Limit_Info        PUBLIC
11525 --  COMMENT    : Returns credit profiles for the
11526 --               a) Customer
11527 --               b) Site
11528 --               c) party level
11529 ------------------------------------------------------------------------------
11530 PROCEDURE get_limit_info (
11531    p_header_id                   IN NUMBER := NULL
11532  , p_entity_type                 IN  VARCHAR2
11533  , p_entity_id                   IN  NUMBER
11534  , p_cust_account_id             IN  NUMBER
11535  , p_party_id                    IN  NUMBER
11536  , p_trx_curr_code               IN
11537                            HZ_CREDIT_PROFILE_AMTS.currency_code%TYPE
11538  , p_suppress_unused_usages_flag IN  VARCHAR2 := 'N'
11539  , p_navigate_to_next_level      IN  VARCHAR2 := 'Y'
11540  , p_precalc_exposure_used       IN  VARCHAR2 := 'N'
11541  , x_limit_curr_code             OUT NOCOPY
11542                            HZ_CREDIT_PROFILE_AMTS.currency_code%TYPE
11543  , x_trx_limit                   OUT NOCOPY NUMBER
11544  , x_overall_limit               OUT NOCOPY NUMBER
11545  , x_include_all_flag            OUT NOCOPY VARCHAR2
11546  , x_usage_curr_tbl              OUT NOCOPY
11547                    OE_CREDIT_CHECK_UTIL.curr_tbl_type
11548  , x_default_limit_flag          OUT NOCOPY VARCHAR2
11549  , x_global_exposure_flag        OUT NOCOPY VARCHAR2
11550  , x_credit_limit_entity_id      OUT NOCOPY NUMBER
11551  , x_credit_check_level          OUT NOCOPY VARCHAR2
11552 )
11553 IS
11554 
11555 
11556 l_Return_status          VARCHAR2(1) := NULL ;  --bug 4967828
11557 l_suppress_unused_usages_flag VARCHAR2(1) ;
11558 --bug 4212981
11559 l_site_cc_flag           VARCHAR2(1);
11560 l_cust_cc_flag           VARCHAR2(1);
11561 l_dummy                  VARCHAR2(1);
11562 
11563 BEGIN
11564 
11565   x_credit_limit_entity_id       := NULL ;
11566   x_credit_check_level           := NULL ;
11567   x_limit_curr_code              := NULL ;
11568   x_trx_limit                    := NULL ;
11569   x_overall_limit                := NULL ;
11570   x_include_all_flag             := 'N' ;
11571   x_default_limit_flag           := 'N' ;
11572   x_global_exposure_flag         := 'N' ;
11573   l_suppress_unused_usages_flag  := p_suppress_unused_usages_flag ;
11574   x_default_limit_flag           := 'N' ;
11575 
11576   OE_CREDIT_CHECK_UTIL.G_excl_curr_list := NULL ;
11577 
11578   IF G_debug_flag = 'Y'
11579   THEN
11580 
11581    OE_DEBUG_PUB.ADD('OEXUCRCB: IN get_limit_info', 1);
11582    OE_DEBUG_PUB.ADD(' ---------------------------------------------' );
11583    OE_DEBUG_PUB.ADD('G_ORG_ID           ==> '|| G_ORG_ID );
11584    OE_DEBUG_PUB.ADD('P_entity_Type      ==> '|| P_entity_Type );
11585    OE_DEBUG_PUB.ADD('P_entity_id        ==> '|| P_entity_id );
11586    OE_DEBUG_PUB.ADD('P_party_id         ==> '|| P_party_id );
11587    OE_DEBUG_PUB.ADD('p_trx_curr_code    ==> '|| p_trx_curr_code );
11588    OE_DEBUG_PUB.ADD('p_navigate_to_next_level ==> '||
11589            p_navigate_to_next_level );
11590 
11591    OE_DEBUG_PUB.ADD('p_suppress_unused_usages_flag ==> '||
11592               p_suppress_unused_usages_flag );
11593 
11594    OE_DEBUG_PUB.ADD(' ---------------------------------------------' );
11595 
11596    OE_DEBUG_PUB.ADD(' Call Get_Multi_Limit ');
11597   END IF;
11598 
11599   IF p_entity_type in ('SITE','CUSTOMER')
11600   THEN
11601         Get_Multi_Limit
11602         ( p_entity_type                    => p_entity_type
11603         , p_entity_id                      => p_entity_id
11604         , p_trx_curr_code                  => p_trx_curr_code
11605         , x_limit_curr_code                => x_limit_curr_code
11606         , x_trx_limit                      => x_trx_limit
11607         , x_overall_limit                  => x_overall_limit
11608         , x_global_exposure_flag           => x_global_exposure_flag
11609         --bug 4212981
11610         , x_site_cc_flag                   => l_site_cc_flag
11611         , x_cust_cc_flag                   => l_dummy
11612        );
11613 
11614     IF G_debug_flag = 'Y'
11615     THEN
11616       OE_DEBUG_PUB.ADD(' Out NOCOPY of Get_Multi_Limit ');
11617       OE_DEBUG_PUB.ADD('x_limit_curr_code ==> '|| x_limit_curr_code );
11618     END IF;
11619 
11620     IF x_limit_curr_code IS NOT NULL
11621     THEN
11622 
11623        x_credit_limit_entity_id := p_entity_id ;
11624        x_credit_check_level     := p_entity_type ;
11625 
11626     ELSIF    x_limit_curr_code IS NULL
11627           AND p_entity_type = 'SITE'
11628           AND NVL(l_site_cc_flag, 'Y') = 'Y'  --bug 4212981 , bug 4582292
11629     THEN
11630       IF G_debug_flag = 'Y'
11631       THEN
11632          OE_DEBUG_PUB.ADD('calling Get_Multi_Limit for CUSTOMER ');
11633       END IF;
11634       Get_Multi_Limit
11635         ( p_entity_type                    => 'CUSTOMER'
11636          , p_entity_id                      => p_cust_account_id
11637          , p_trx_curr_code                  => p_trx_curr_code
11638          , x_limit_curr_code                => x_limit_curr_code
11639          , x_trx_limit                      => x_trx_limit
11640          , x_overall_limit                  => x_overall_limit
11641          , x_global_exposure_flag           => x_global_exposure_flag
11642          --bug 4582292
11643          , x_site_cc_flag                   => l_dummy
11644          , x_cust_cc_flag                   => l_cust_cc_flag
11645         );
11646 
11647       IF x_limit_curr_code IS NOT NULL
11648       THEN
11649         x_credit_limit_entity_id := p_cust_account_id ;
11650         x_credit_check_level     := 'CUSTOMER' ;
11651       END IF;
11652     END IF;
11653   END IF;
11654 
11655   OE_DEBUG_PUB.ADD('p_navigate_to_next_level ==> '|| p_navigate_to_next_level );
11656   OE_DEBUG_PUB.ADD('l_site_cc_flag           ==> '|| l_site_cc_flag );
11657   OE_DEBUG_PUB.ADD('l_cust_cc_flag           ==> '|| l_cust_cc_flag );
11658   OE_DEBUG_PUB.ADD('x_limit_curr_code        ==> '|| x_limit_curr_code );
11659   OE_DEBUG_PUB.ADD('l_return_status          ==> '|| l_return_status );
11660 
11661   IF p_navigate_to_next_level = 'Y' THEN --bug 5071518
11662      IF NVL(l_site_cc_flag, 'Y') = 'Y' AND NVL(l_cust_cc_flag, 'Y') = 'Y'  --bug 4212981 , bug4582292, bug 5071518
11663   THEN
11664     -----------------------------------------------------
11665     ------- Party level changes
11666     -----------------------------------------------------
11667     IF  p_precalc_exposure_used = 'Y'
11668     THEN
11669       IF OE_CREDIT_CHECK_UTIL.G_crmgmt_installed is NULL
11670       THEN
11671         OE_CREDIT_CHECK_UTIL.G_crmgmt_installed :=
11672           AR_CMGT_CREDIT_REQUEST_API.is_Credit_Management_Installed ;
11673       END IF;
11674 
11675       -- Get party limit only if credit management is installed
11676       IF OE_CREDIT_CHECK_UTIL.G_crmgmt_installed
11677       THEN
11678         IF  x_limit_curr_code IS NULL
11679         THEN
11680           IF G_debug_flag = 'Y'
11681           THEN
11682             OE_DEBUG_PUB.ADD( 'OEXUCRCB:  GET_party_limit ');
11683           END IF;
11684 
11685           GET_party_limit
11686           (  p_party_id             => p_party_id
11687            , p_trx_curr_code         => p_trx_curr_code
11688            , x_limit_curr_code       => x_limit_curr_code
11689            , x_trx_limit             => x_trx_limit
11690            , x_overall_limit         => x_overall_limit
11691            , x_return_status         => l_return_status
11692            , x_credit_limit_entity_id => x_credit_limit_entity_id
11693           );
11694 
11695           IF G_debug_flag = 'Y'
11696           THEN
11697             OE_DEBUG_PUB.ADD( ' out NOCOPY  GET_party_limit ');
11698             OE_DEBUG_PUB.ADD( ' l_return_status ==> '|| l_return_status );
11699           END IF;
11700 
11701           IF x_limit_curr_code IS NOT NULL
11702           THEN
11703             x_credit_limit_entity_id := x_credit_limit_entity_id ;
11704             x_credit_check_level     := 'PARTY' ;
11705             x_global_exposure_flag   := 'Y' ;
11706           END IF;
11707         END IF;
11708       END IF ; -- support party
11709     END IF;
11710     END IF; --bug 5071518
11711 
11712     IF x_limit_curr_code IS NULL
11713        AND NVL(l_return_status,'Y') = 'Y' -- bug 4958142
11714     THEN
11715       OE_DEBUG_PUB.ADD( ' calling GET_default_Limit ');
11716       GET_default_Limit
11717        (  p_entity_id                  => p_entity_id
11718         , p_trx_curr_code              => p_trx_curr_code
11719         , x_limit_curr_code            => x_limit_curr_code
11720         , x_trx_limit                  => x_trx_limit
11721         , x_overall_limit              => x_overall_limit
11722         , x_default_limit_flag         => x_default_limit_flag
11723         , x_global_exposure_flag       => x_global_exposure_flag
11724         );
11725 
11726       IF x_limit_curr_code IS NOT NULL
11727       THEN
11728         x_credit_limit_entity_id := p_cust_account_id ;
11729         x_credit_check_level     := 'CUSTOMER' ;
11730       END IF;
11731     END IF;
11732 
11733     -- Start bug 5071518
11734     OE_DEBUG_PUB.ADD(' x_limit_curr_code    => '|| x_limit_curr_code );
11735     OE_DEBUG_PUB.ADD(' x_trx_limit          => '|| x_trx_limit );
11736     OE_DEBUG_PUB.ADD(' x_overall_limit      => '|| x_overall_limit );
11737     OE_DEBUG_PUB.ADD(' x_default_limit_flag => '|| x_default_limit_flag );
11738 
11739   END IF; -- navigate
11740 
11741   IF x_limit_curr_code IS NULL
11742   THEN
11743      OE_DEBUG_PUB.ADD(' No limits for any level ');
11744 
11745      x_trx_limit            := NULL ;
11746      x_overall_limit        := NULL ;
11747      x_include_all_flag     := 'N' ;
11748      x_default_limit_flag   := 'N' ;
11749      x_global_exposure_flag := 'N' ;
11750      x_credit_limit_entity_id := NULL ;
11751      x_credit_check_level     := NULL ;
11752 
11753   ELSE
11754     IF G_debug_flag = 'Y'
11755     THEN
11756       OE_DEBUG_PUB.ADD( ' Calling Get_Usages' );
11757       OE_DEBUG_PUB.ADD('x_limit_curr_code ==> '|| x_limit_curr_code );
11758       OE_DEBUG_PUB.ADD('x_default_limit_flag ==> '|| x_default_limit_flag );
11759       OE_DEBUG_PUB.ADD('x_global_exposure_flag ==> '|| x_global_exposure_flag );
11760       OE_DEBUG_PUB.ADD('x_include_all_flag ==> '|| x_include_all_flag );
11761       OE_DEBUG_PUB.ADD('x_credit_limit_entity_id ==> '||
11762          x_credit_limit_entity_id );
11763       OE_DEBUG_PUB.ADD('x_credit_check_level ==> '||
11764          x_credit_check_level );
11765     END IF;
11766 
11767     IF x_credit_check_level = 'PARTY'
11768     THEN
11769       l_suppress_unused_usages_flag := 'N' ;
11770     END IF;
11771 
11772     Get_Usages
11773     (   p_entity_type                 => x_credit_check_level
11774       , p_entity_id                   => x_credit_limit_entity_id
11775       , p_limit_curr_code             => x_limit_curr_code
11776       , p_suppress_unused_usages_flag => l_suppress_unused_usages_flag
11777       , p_default_limit_flag          => x_default_limit_flag
11778       , p_global_exposure_flag        => x_global_exposure_flag
11779       , x_include_all_flag            => x_include_all_flag
11780       , x_usage_curr_tbl              => x_usage_curr_tbl
11781     );
11782 
11783     IF G_debug_flag = 'Y'
11784     THEN
11785       OE_DEBUG_PUB.ADD( ' Out NOCOPY of Get_Usages ');
11786     END IF;
11787   END IF;
11788 
11789   IF G_debug_flag = 'Y'
11790   THEN
11791     OE_DEBUG_PUB.ADD('OEXUCRCB: OUT NOCOPY get_limit_info  ',1);
11792   END IF;
11793 
11794   EXCEPTION
11795   WHEN OTHERS THEN
11796    G_DBG_MSG := SUBSTR(sqlerrm,1,200);
11797 
11798     IF FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
11799     THEN
11800       FND_MSG_PUB.Add_Exc_Msg
11801       ( G_PKG_NAME
11802       , ' get_limit_info '
11803       );
11804     END IF;
11805     RAISE;
11806 
11807 END get_limit_info ;
11808 
11809 -- Linda
11810 -----------------------------------------------------
11811 -- to get the lookup meaning
11812 ------------------------------------------------------
11813 
11814 FUNCTION Get_CC_Lookup_Meaning
11815         (p_lookup_type	IN VARCHAR2,
11816          p_lookup_code	IN VARCHAR2
11817         )
11818 RETURN VARCHAR2
11819 IS
11820 
11821 l_meaning	VARCHAR2(80);
11822 
11823 BEGIN
11824   SELECT meaning
11825   INTO   l_meaning
11826   FROM   oe_lookups
11827   WHERE  lookup_type = p_lookup_type
11828   AND    lookup_code = p_lookup_code;
11829 
11830   RETURN (l_meaning);
11831 
11832 EXCEPTION
11833     When Others Then
11834        IF OE_MSG_PUB.Check_Msg_Level(OE_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
11835         THEN
11836             OE_MSG_PUB.Add_Exc_Msg
11837             (   G_PKG_NAME
11838             ,   'Get_CC_Lookup_Meaning'
11839             );
11840         END IF;
11841         RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
11842 END Get_CC_Lookup_Meaning;
11843 
11844 
11845 END OE_CREDIT_CHECK_UTIL;