[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;